map_majorana_action_generators
map_majorana_action_generators(operator, map_action, identity, compose=None)
Associer un opérateur de type à MajoranaOperator 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 MajoranaOperator . En substance, il se contente de parcourir les termes de l'opérateur, en appliquant à MajoranaAction 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.
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__. SparseObservable ce n'est pas le cas, c'est pourquoi l'exemple ci-dessous le nomme explicitement compose() ; un type comportant un __and__ (tel que SparsePauliOp) peut s'appuyer sur la valeur par défaut.
La fonction décrite ci-dessous constitue une illustration simplifiée de cette fonctionnalité et ne vise pas à remplacer la version originale majorana_jordan_wigner(), qui est parallélisée et limite l'utilisation de la mémoire lors de la construction du résultat.
>>> 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))]
Paramètres
- operator (MajoranaOperator) – l'opérateur à mapper.
- map_action (Callable[[int], T]) – la fonction permettant de mapper un élément unique vers
MajoranaActionle 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 information n'est pas fournie, le système utilisera par défaut
operator.and_().
Retours
L'opérateur mappé.
Type de retour
T