map_majorana_action_generators
map_majorana_action_generators(operator, map_action, identity, compose=None)
Ordne a einem anderen Operatortyp zu MajoranaOperator .
Dies ist eine generische Funktion, die bei der Implementierung neuer Mapper für Instanzen MajoranaOperator helfen soll. Im Kern durchläuft es einfach die Terme des Operators und wendet auf MajoranaAction jeden gefundenen Term die vom Benutzer angegebene Funktion map_action an. In Kombination mit dem vom Benutzer bereitgestellten Generator identity ermöglicht dies eine 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 die eigentliche Funktion majorana_jordan_wigner(), die parallelisiert ist und den Speicherbedarf beim Zusammenstellen des Ergebnisses begrenzt.
>>> from qiskit_fermions.mappers import map_majorana_action_generators
>>> from qiskit_fermions.operators import MajoranaAction, MajoranaOperator, gamma
>>> from qiskit.quantum_info import SparseObservable
>>>
>>> def jordan_wigner(mode: MajoranaAction) -> SparseObservable:
... idx = mode // 2
... qubits = list(range(idx + 1))
... pauli = "Y" if mode % 2 else "X"
... return SparseObservable.from_sparse_list(
... [("Z" * idx + pauli, qubits, 1.0)],
... num_qubits=num_qubits,
... )
>>>
>>> num_qubits = 2
>>> def identity() -> SparseObservable:
... return SparseObservable.identity(num_qubits)
>>>
>>> op = MajoranaOperator.from_dict({
... (0, 2): 0.5,
... (1, 3): 0.5,
... (0, 3): 0.5j,
... (1, 2): -0.5j,
... })
>>> qop = map_majorana_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 (MajoranaOperator) – der zuzuordnende Operator.
- map_action (Callable[[int], T]) – die Funktion, die einen einzelnen Wert auf
MajoranaActionden 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