Skip to main content
IBM Quantum Platform

map_fermion_action_generators

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

Ordne a einem anderen Operatortyp zu FermionOperator .

Dies ist eine generische Funktion, die bei der Implementierung neuer Mapper für Instanzen FermionOperator helfen soll. Im Kern durchläuft es einfach die Terme des Operators und wendet auf FermionAction 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 zudem 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 Abbildung ist eher eine vereinfachte Darstellung dieser Funktion als ein Ersatz für fermion_jordan_wigner(), die parallelisiert ist und den Speicherbedarf beim Zusammenstellen des Ergebnisses begrenzt.

>>> from qiskit_fermions.mappers import map_fermion_action_generators
>>> from qiskit_fermions.operators import FermionAction, FermionOperator, ann, cre
>>> from qiskit.quantum_info import SparseObservable
>>>
>>> def jordan_wigner(action: FermionAction) -> SparseObservable:
...     act, idx = action
...     qubits = list(range(idx + 1))
...     return SparseObservable.from_sparse_list(
...         [
...             ("Z" * idx + "X", qubits, 0.5),
...             ("Z" * idx + "Y", qubits, -0.5j if act else 0.5j),
...         ],
...         num_qubits=num_qubits,
...     )
>>>
>>> num_qubits = 2
>>> def identity() -> SparseObservable:
...     return SparseObservable.identity(num_qubits)
>>>
>>> op = FermionOperator.from_dict({(cre(0), ann(1)): 2.0})
>>> qop = map_fermion_action_generators(
...     op, jordan_wigner, identity, compose=SparseObservable.compose
... )
>>> print(sorted(qop.simplify().to_sparse_list()))
[('XX', [0, 1], (0.5+0j)), ('XY', [0, 1], 0.5j), ('YX', [0, 1], -0.5j), ('YY', [0, 1], (0.5+0j))]

Parameter

  • operator (FermionOperator) – der zuzuordnende Operator.
  • map_action (Callable[[tuple[bool, int]], T]) – die Funktion, die einen einzelnen Wert auf FermionAction 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.