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.
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.
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
FermionActionden 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