Skip to main content
IBM Quantum Platform

map_edge_vertex_generators

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

Ordne a einem anderen Operatortyp zu EdgeVertexOperator .

Dies ist eine generische Funktion, die bei der Implementierung neuer Mapper für Instanzen EdgeVertexOperator helfen soll. Im Grunde durchläuft es einfach die Terme des Operators und wendet auf EdgeAction jeden gefundenen Term die vom Benutzer angegebene Funktion map_action an. In Kombination mit dem vom Benutzer bereitgestellten Generator identity ermöglicht dies die Zuordnung zu beliebigen Ausgabetypen.

Anmerkung

Der Ausgabetyp T muss die Multiplikation mit einem Skalar über unterstützen __mul__. Wenn es compose=None außerdem die Zusammensetzung zweier Instanzen über unterstützen muss __and__. SparseObservable ist dies nicht der Fall, weshalb im folgenden Beispiel explizit compose() genannt wird; ein Typ mit einem __and__ (wie z. B. SparsePauliOp) kann sich auf den Standardwert verlassen.

Anmerkung

Die unten aufgeführte Zuordnung ist eine bewusst minimalistische Darstellung dieser Funktion und kein Ersatz für edge_vertex_jordan_wigner(): Sie berücksichtigt lediglich Wechselwirkungen mit den nächsten Nachbarn und ist weder parallelisiert noch speichergebunden. Verwenden Sie lieber die Bibliotheksfunktion, anstatt diese hier zu kopieren.

>>> from qiskit_fermions.mappers import map_edge_vertex_generators
>>> from qiskit_fermions.operators import EdgeAction, EdgeVertexOperator
>>> from qiskit.quantum_info import SparseObservable
>>>
>>> def jordan_wigner_nearest_neighbor(mode: EdgeAction) -> SparseObservable:
...     left, right = mode
...     if left == right:
...         return SparseObservable.from_sparse_list(
...             [("Z", [left], 1.0)], num_qubits=num_qubits
...         )
...     if abs(left - right) != 1:
...         raise NotImplementedError(
...             "This mapping only handles nearest neighbor interactions"
...         )
...     # The orientation must be compared rather than differenced: an edge operator is
...     # antisymmetric, so the sign depends on the index order while the string does not.
...     lo, hi = min(left, right), max(left, right)
...     coeff = -1.0 if left < right else 1.0
...     return SparseObservable.from_sparse_list(
...         [("YX", [lo, hi], coeff)], num_qubits=num_qubits
...     )
>>>
>>> num_qubits = 4
>>> def identity() -> SparseObservable:
...     return SparseObservable.identity(num_qubits)
>>>
>>> op = EdgeVertexOperator.from_dict({
...     ((0, 0),): 2.0,
...     ((0, 1),): 0.5,
...     ((1, 1), (1, 2)): 1.0,
... })
>>> qop = map_edge_vertex_generators(
...     op, jordan_wigner_nearest_neighbor, identity, compose=SparseObservable.compose
... )
>>> print(sorted(qop.simplify().to_sparse_list()))
[('XX', [1, 2], 1j), ('YX', [0, 1], (-0.5+0j)), ('Z', [0], (2+0j))]

Parameter

  • operator (EdgeVertexOperator) – der zuzuordnende Operator.
  • map_action (Callable[[tuple[int, int]], T]) – die Funktion, die einen einzelnen Wert auf EdgeAction den gewünschten Ausgabetyp abbildet.
  • identity (Callable[[], T]) – die Funktion zur Erzeugung der multiplikativen Identität vom Ausgabetyp.
  • compose (Callable[[T, T], T] | None) – eine optionale Funktion zur Implementierung der Kompositionslogik zweier Instanzen des Ausgabetyps. Wird dies nicht angegeben, wird standardmäßig verwendet operator.and_().

Rückgabe

Der abgebildete Operator.

Rückgabetyp

T

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.