FermionicCircuit
class FermionicCircuit(num_modes)
Bases : object
Une couche d'encapsulation QuantumCircuit permettant d'exprimer des circuits fermioniques.
Cette classe propose une API réduite par rapport à l'API complète du. sous-jacent QuantumCircuit. Cette démarche vise à éviter de révéler (entre autres) la possibilité d'appliquer des portes basées sur des qubits à un circuit fermionique, ce qui ne constituerait pas une opération bien définie dans le cas général.
L'initialisation d'une instance de circuit peut s'effectuer à l'aide des arguments énumérés ci-dessous.
Paramètres
num_modes (int) – le nombre de modes fermioniques sur lesquels agit ce circuit.
Attributs
metadata
Réaffiche metadata.
modes
Le mode fermionique sur lequel bits agit ce circuit.
register
Type : FermionicRegister
Le circuit interne… FermionicRegister
Méthodes
append
append(gate, fargs, cargs=None, *, copy=True)
Ajoute un FermionicGate à ce circuit.
Paramètres
-
gate (FermionicGate) – la porte fermionique à utiliser.
-
fargs (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – les modes fermioniques sur lesquels agit cette porte.
-
cargs (None) –
les bits classiques sur lesquels agit cette porte.
AvertissementAucune porte de ce type n'est actuellement prise en charge.
Augmentations
ValueError – si l'élément fourni n'est gate pas une instance de FermionicGate.
Type de retour
Aucun
count_ops
decompose
decompose(gates_to_decompose=None, reps=1)
Réaffiche decompose().
Paramètres
- gates_to_decompose (str |type[Instruction] | Sequence[str |type[Instruction]] | None)
- reps (int)
Type de retour
draw
Méthodes protocolaires
_apply_unitary_
_apply_unitary_(vec, norb, nelec, copy)
Applique ce circuit à un vecteur d'état ffsim, en mettant en œuvre le protocole ffsim.
Cette méthode parcourt le circuit dans l'ordre topologique et applique l'effet unitaire de chaque instruction au vecteur d'état via le protocole ffsim.SupportsApplyUnitary de ffsim (reflété localement sous la forme SupportsApplyUnitary). Pour chaque instruction agissant sur un sous-ensemble du registre, les modes fermioniques sont renumérotés selon leurs indices absolus (globaux) avant l'application de l'instruction.
Voir _apply_unitary_placed_() pour plus de détails; cette méthode part du principe que les modes du circuit sont les modes du vecteur 0..num_modes (c'est-à-dire un placement de modes identitaire).
Paramètres
- vec (ndarray) – le vecteur d'état auquel ce circuit doit être appliqué. Un circuit vide le renvoie tel quel.
- norb (int) – le nombre d'orbitales spatiales.
- nelec (int |tuple[int, int]) – soit un seul entier représentant le nombre de fermions pour un système sans spin, soit une paire d'entiers indiquant respectivement le nombre de fermions de spin alpha et de fermions de spin bêta.
- copy (bool) – s'il faut copier le vecteur avant d'effectuer une opération dessus.
Retours
Le vecteur transformé.
Augmentations
- TypeError – si une instruction de circuit ne met pas en œuvre le protocole
ffsim.SupportsApplyUnitaryde ffsim. - ValueError – si une instruction de circuit refuse d'appliquer son protocole unitaire pour les valeurs données de et
norbnelec; ou si une instruction mettant en œuvre uniquement le protocole_apply_unitary_simple est placée sur un sous-ensemble en mode non identitaire.
Type de retour
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Applique ce circuit après avoir ajouté ses modes à ceux du vecteur.
Ce processus parcourt le circuit dans l'ordre topologique et applique l'effet unitaire de chaque instruction au vecteur d'état via le protocole ffsim.SupportsApplyUnitary de ffsim. Les modes propres à chaque instruction sont d'abord mis en correspondance via l'emplacement de ce circuit : un mode local au circuit m correspond au mode global freg_indices[m]; ainsi, une sous-instruction agissant sur les modes locaux au circuit [m0, m1, ...] s'applique aux modes globaux [freg_indices[m0], freg_indices[m1], ...]. Avec le placement d'identité, freg_indices == 0..num_modes c'est exactement le cas _apply_unitary_(); un placement sur un sous-ensemble permet à ce circuit de servir de définition à une porte placée sur un sous-ensemble d'un registre plus grand (par exemple UCJ). Cette extension tenant compte du placement est documentée comme SupportsApplyUnitaryPlaced – un protocole spécifique au paquet, sans équivalent dans ffsim.
Une instruction n’est placée sur ses modes absolus que si elle implémente l’extension _apply_unitary_placed_ tenant compte du placement (SupportsApplyUnitaryPlaced). Une instruction qui n’implémente que la fonction simple ( _apply_unitary_SupportsApplyUnitary ) de ffsim – qui ne prend pas d’argument de mode et agit donc sur les modes du 0..k vecteur – ne peut être prise en compte que lorsque son placement est l’identité [0, 1, ..., k-1]; sur tout autre sous-ensemble, le placement ne peut pas être exprimé et l’instruction est rejetée plutôt que d’être appliquée silencieusement sur les mauvais modes.
Paramètres
- vec (ndarray) – le vecteur d'état auquel ce circuit doit être appliqué. Un circuit vide le renvoie tel quel.
- norb (int) – le nombre d'orbitales spatiales du vecteur d'état global.
- nelec (int |tuple[int, int]) – soit un seul entier représentant le nombre de fermions pour un système sans spin, soit une paire d'entiers indiquant respectivement le nombre de fermions de spin alpha et de fermions de spin bêta.
- copy (bool) – s'il faut copier le vecteur avant d'effectuer une opération dessus.
- freg_indices (list[int]) – les indices des modes absolus (globaux) auxquels correspondent les modes de ce circuit.
Retours
Le vecteur transformé.
Augmentations
- TypeError – si une instruction de circuit ne met pas en œuvre le protocole
ffsim.SupportsApplyUnitaryde ffsim. - ValueError – si une instruction de circuit refuse d'appliquer son protocole unitaire pour les valeurs données de et
norbnelec; ou si une instruction mettant en œuvre uniquement le protocole_apply_unitary_simple est placée sur un sous-ensemble en mode non identitaire.
Type de retour