Skip to main content
IBM Quantum Platform

map_transfer_vertex_generators

map_transfer_vertex_generators(operator, map_action, identity, compose=None)

Associer un opérateur TransferVertexOperator à un autre type d'opérateur.

Il s'agit d'une fonction générique destinée à faciliter la mise en œuvre de nouveaux mappeurs pour les instances TransferVertexOperator . En substance, il se contente de parcourir les termes de l'opérateur, en appliquant à TransferAction chacun d'entre eux la fonction map_action fournie par l'utilisateur. Associé au générateur identity fourni par l'utilisateur, cela permet d'effectuer une mise en correspondance avec des types de sortie arbitraires.

Remarque

Le type de sortie doit T prendre en charge la multiplication par un scalaire via __mul__. Si compose=None elle doit également prendre en charge la composition de deux instances via __and__.

>>> from qiskit_fermions.mappers import map_transfer_vertex_generators
>>> from qiskit_fermions.operators import TransferAction, TransferVertexOperator
>>> from qiskit.quantum_info import SparsePauliOp
>>>
>>> def jordan_wigner_nearest_neighbor(mode: TransferAction) -> SparsePauliOp:
...     match abs(mode[0] - mode[1]):
...         case 0:
...             pauli = "Z"
...             qubits = [mode[0]]
...             coeff = 1.0
...         case 1:
...             pauli = "YY"
...             qubits = [mode[0], mode[1]]
...             coeff = -0.5
...         case _:
...             raise NotImplementedError(
...                 "This mapping only handles nearest neighbor interactions"
...             )
...
...     return SparsePauliOp.from_sparse_list([(pauli, qubits, coeff)], num_qubits=num_qubits)
>>>
>>> num_qubits = 4
>>> def identity() -> SparsePauliOp:
...     return SparsePauliOp.from_sparse_list([("", [], 1)], num_qubits)
>>>
>>> op = TransferVertexOperator.from_dict({
...     ((0, 0),): 2.0,
...     ((0, 1),): 0.5,
...     ((1, 1), (1, 2)): 1.0,
... })
>>> qop = map_transfer_vertex_generators(op, jordan_wigner_nearest_neighbor, identity)
>>> print([(label, complex(coeff)) for label, coeff in sorted(qop.label_iter())])
[('IIII', 0j), ('IIIZ', (2+0j)), ('IIYY', (-0.25+0j)), ('IYXI', 0.5j)]

Paramètres

  • operator (TransferVertexOperator) – l'opérateur à mapper.
  • map_action (Callable[[tuple[int, int]], T]) – la fonction permettant de mapper un élément unique vers TransferAction le type de sortie souhaité.
  • identity (Callable[[], T]) – la fonction permettant de générer l'instance de l'identité multiplicative du type de sortie.
  • compose (Callable[[T, T], T] | None) – une fonction facultative permettant de mettre en œuvre la logique de composition de deux instances de type de sortie. Si cette valeur n'est pas fournie, le système utilisera par défaut operator.and_().

Retours

L'opérateur mappé.

Type de retour

T

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.