Skip to main content
IBM Quantum Platform

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.

    Avertissement

    Aucune porte de ce type n'est actuellement prise en charge.

  • copy (bool) – transmis à append().

Augmentations

ValueError – si l'élément fourni n'est gate pas une instance de FermionicGate.

Type de retour

Aucun

count_ops

count_ops()

Réaffiche count_ops().

Type de retour

OrderedDict [ chaîne, entier ]

decompose

decompose(gates_to_decompose=None, reps=1)

Réaffiche decompose().

Paramètres

Type de retour

FermionicCircuit

draw

draw(*args, **kwargs)

Expose directement la méthode draw() du circuit interne.

Type de retour

N'importe quel

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.SupportsApplyUnitary de ffsim.
  • ValueError – si une instruction de circuit refuse d'appliquer son protocole unitaire pour les valeurs données de et norb nelec; 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

ndarray

_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.SupportsApplyUnitary de ffsim.
  • ValueError – si une instruction de circuit refuse d'appliquer son protocole unitaire pour les valeurs données de et norb nelec; 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

ndarray

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.