Skip to main content
IBM Quantum Platform

FermionicGate

class FermionicGate(name, num_modes, /, params=None, *, label=None)

Bases : Gate

La classe de base de toutes les portes fermioniques.

Afin de garantir la cohérence, seules les sous-classes de cette classe de porte peuvent être ajoutées aux instances de FermionicCircuit. À ce titre, cette classe fait (principalement) office de type (pour l'instant).

Attention

Comme il s'agit d'une sous-classe de, la Gate documentation relative à ses méthodes peut faire référence aux qubits. Ces références doivent être interprétées comme faisant référence aux fermions dans le contexte des instances de cette sous-classe.

Il peut également arriver que certaines des méthodes héritées n'aient pas toujours de sens en raison de cette réinterprétation. Vous êtes prévenus.

Paramètres

  • name (str) – Le nom de la porte.
  • num_qubits – Le nombre de qubits sur lesquels agit la porte.
  • params (list | None) – Une liste de paramètres.
  • label (str | None) – Une étiquette facultative pour la barrière.
  • num_modes (int)

Attributs

num_modes

Le nombre de modes fermioniques sur lesquels agit cette porte.

Attributs hérités

base_class

Récupérer la classe de base de cette instruction. On peut être sûr que cela figure dans l'arbre généalogique de self.

La « classe de base » d’une instruction est la classe la plus basse de son arbre d’héritage avec laquelle l’objet doit être considéré comme entièrement compatible pour _toutes_ les applications de circuit. Cela signifie généralement que la sous-classe est définie uniquement pour offrir une certaine facilité d'utilisation au programmeur par rapport à la classe de base, et que cette dernière est la « véritable » classe d'un point de vue comportemental. En particulier, vous ne devez pas redéfinir base_class si vous définissez une version personnalisée d'une instruction qui sera mise en œuvre différemment par le matériel, comme une stratégie de mesure alternative, ou une version d'une porte paramétrée avec un ensemble particulier de paramètres afin de la distinguer dans un Target de la porte entièrement paramétrée.

Cela revient souvent exactement à type(obj), sauf dans le cas des instances singleton des instructions de la bibliothèque standard. Ces instances singleton sont des sous-classes spéciales de leur classe de base, et cette propriété renverra cette classe de base. Par exemple :

>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True

D'une manière générale, il ne faut pas se fier à la classe précise d'une instruction; au sein d'un circuit donné, on considère que Instruction.name devrait constituer un critère de distinction plus approprié dans la plupart des situations.

decompositions

Récupérez les décompositions de l'instruction à partir de l' SessionEquivalenceLibrary.

definition

Définir la fonction de retour à l'aide d'autres portes logiques de base.

label

Étiquette d'instructions de retour

mutable

Cette instance est-elle une instance unique modifiable ou non?

Si cet attribut est défini, False l'instance de la porte est un singleton partagé et n'est pas modifiable.

name

Renvoie le nom.

num_clbits

Renvoie le nombre de clbits.

num_qubits

Renvoie le nombre de qubits.

params

Les paramètres de ce Instruction. Dans l'idéal, il s'agira d'angles de porte.

Méthodes protocolaires

_apply_unitary_

_apply_unitary_(vec, norb, nelec, copy)

Applique cette porte à un vecteur d'état ffsim, mettant ainsi en œuvre le protocole ffsim.

Il s'agit du point d'entrée pour le placement d'identité du protocole ffsim.SupportsApplyUnitary de ffsim (reflété localement sous la forme SupportsApplyUnitary) : il part du principe que la porte agit sur les modes 0..num_modes du vecteur d'état et délègue la tâche à la fonction tenant compte du placement ( _apply_unitary_placed_() voir SupportsApplyUnitaryPlaced), que chaque porte fermionique concrète implémente. Reportez-vous à cette méthode pour connaître la sémantique de ( vec notamment pour savoir si un vecteur None est accepté), norb, nelec, et copy.

Augmentations

NotImplementedError – si cette porte n'implémente pas _apply_unitary_placed_ (un nu FermionicGate utilisé uniquement comme marqueur de type) et ne peut donc pas être appliquée à un vecteur d'état.

Paramètres

Type de retour

np.ndarray

Méthodes héritées

add_decomposition

add_decomposition(decomposition)

Ajoutez une décomposition de l'instruction à l' SessionEquivalenceLibrary e.

broadcast_arguments

broadcast_arguments(qargs, cargs)

Validation et traitement des arguments et de leurs relations.

Par exemple, signifie cx([q[0],q[1]], q[2]) cx(q[0], q[2]); cx(q[1], q[2]). Cette méthode permet d'obtenir les arguments dans le regroupement de droite. Dans l'exemple donné :

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

Les règles générales en matière de diffusion sont les suivantes :

  • Si len(qargs) == 1 :

    [q[0], q[1]] -> [q[0]],[q[1]]
  • Si len(qargs) == 2 :

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • Si len(qargs) >= 3 :

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Paramètres

  • qargs (list) – Liste des arguments relatifs aux bits quantiques.
  • cargs (list) – Liste des arguments de bits classiques.

Retours

Un tuple comportant un seul argument.

Augmentations

CircuitError – Si la saisie n'est pas valide. Par exemple, le nombre d'arguments ne correspond pas à ce qu'on attend de la porte logique.

Type de retour

Iterable [ tuple [ liste, liste ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

Renvoie la version contrôlée d'elle-même.

La porte contrôlée est mise en œuvre sous la forme ControlledGate lorsque annotated est égal à False, et sous la forme AnnotatedOperation lorsque annotated est égal à True.

Obsolète depuis la version 2.3

qiskit.circuit.gate.Gate.control()L'argument annotated est obsolète depuis la version 2.3 de Qiskit. Elle sera supprimée dans la version 3.0 de Qiskit. La méthode Gate.control () n'accepte plus la valeur annotated=None. La nouvelle valeur par défaut est annotated=True, ce qui représente la porte contrôlée comme une AnnotatedOperation (à moins qu'une classe dédiée aux portes contrôlées n'existe déjà). Vous pouvez définir explicitement annotated=False pour conserver le comportement précédent. Il est toutefois recommandé d'utiliser annotated=True, car cela reporte la construction du circuit contrôlé au niveau du transpileur et permet en outre des optimisations supplémentaires au niveau des portes contrôlées (ce qui se traduit généralement par des circuits de meilleure qualité).

Paramètres

  • num_ctrl_qubits (int) – Nombre de contrôles à ajouter. Prend par défaut la valeur 1.
  • label (str | None) – Étiquette de portail (en option). Prend par défaut la valeur None. Ignoré si la porte contrôlée est implémentée sous la forme d'une opération annotée.
  • ctrl_state (int |str | None) – L'état de commande de la porte, spécifié soit sous forme d'entier, soit sous forme de chaîne de bits (par exemple "110"). Si None, la valeur par défaut est l'état « tout à un 2**num_ctrl_qubits - 1».
  • annotated (bool | None) – Indique si la porte contrôlée doit être implémentée en tant que porte contrôlée ou en tant qu'opération annotée. Si None, on considère que False.

Retours

Une version contrôlée de cette porte.

Augmentations

QiskitError – non valide num_ctrl_qubits ou ctrl_state.

copy

copy(name=None)

Copie de la notice.

Paramètres

name (str) – nom à attribuer au circuit copié; si alors None le nom reste le même.

Retours

une copie de l'instruction actuelle, avec le nom mis à jour s'il a été fourni

Type de retour

qiskit.circuit.Instruction

inverse

inverse(annotated=False)

Inversez cette instruction.

Si la valeur de « annotated » est « False », l'instruction inverse est implémentée sous la forme d'une nouvelle instruction dont la définition est inversée de manière récursive.

Si la valeur de annotated est True, l'instruction inverse est implémentée sous la forme AnnotatedOperation, et correspond à l'instruction donnée annotée du « modificateur inverse ».

Les instructions spéciales héritant de la classe Instruction peuvent implémenter leur propre inverse (par exemple : T et Tdg, Barrier, etc.) Ils peuvent notamment choisir la manière de traiter cet argument, ce qui annotated peut notamment consister à l'ignorer et à toujours renvoyer une classe de porte concrète si l'inverse est défini comme une porte standard.

Paramètres

annotated (bool) – Si cette option est définie sur « True », la porte inverse de sortie sera renvoyée sous la forme AnnotatedOperation.

Retours

L'opération inverse.

Augmentations

CircuitError – si l'instruction n'est pas composite et qu'aucune inverse n'a été implémentée pour celle-ci.

is_parameterized

is_parameterized()

Indique si la fonction contient Instruction des paramètres définis à la compilation.

power

power(exponent, annotated=False)

Élevez cette porte à la puissance de exponent.

Mis en œuvre soit sous la forme d'une porte unitaire (réf. UnitaryGate) ou sous la forme d'une opération annotée (cf. AnnotatedOperation). Dans le cas de plusieurs portes standard, telles que RXGate, lorsque la puissance d'une porte peut être exprimée en fonction d'une autre porte standard qui est renvoyée directement.

Paramètres

  • exponent (float) – le pouvoir de lever la barrière pour
  • annotated (bool) – indique si la porte de puissance peut être implémentée sous la forme d'une opération annotée. Dans le cas de plusieurs portes standard, telles que RXGate, cet argument est ignoré lorsque la puissance d'une porte peut être exprimée en termes d'une autre porte standard.

Retours

Une opération mettant en œuvre gate^exponent

Augmentations

CircuitError – Si la porte n’est pas unitaire

repeat

repeat(n)

Crée une instruction dont l' nn est répétée self un certain nombre de fois.

Paramètres

n (int) – Nombre de fois où l'instruction doit être répétée

Retours

Contenant la définition.

Type de retour

qiskit.circuit.Instruction

Augmentations

CircuitError – Si n < 1.

reverse_ops

reverse_ops()

Pour une instruction composite, inversez l'ordre des sous-instructions.

Pour ce faire, on inverse de manière récursive toutes les sous-instructions. Elle n'inverse aucune porte logique.

Retours

une nouvelle instruction avec

les sous-instructions ont été inversées.

Type de retour

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

Comparaison souple entre les portes logiques. Leurs noms, leur nombre de qubits et leur nombre de bits classiques doivent correspondre. Le nombre de paramètres doit correspondre. Chaque paramètre est comparé. Si l'on est un « ParameterExpression », cela n'est pas pris en compte.

Paramètres

other (instruction) – autre instruction.

Retours

« self » et « other » sont équivalents, sauf au niveau des expressions de paramètres.

Type de retour

booléen

to_matrix

to_matrix()

Renvoie une matrice de type « Numpy.array » correspondant à la matrice unitaire de la porte.

Retours

si la sous-classe « Gate » comporte une définition de matrice.

Type de retour

np.ndarray

Augmentations

CircuitError – Si une sous-classe de Gate n'implémente pas cette méthode, une exception sera levée lors de l'appel de cette méthode de la classe de base.

to_mutable

to_mutable()

Renvoie une copie modifiable de cette porte.

Cette méthode renvoie une nouvelle copie modifiable de cette instance de porte. Si une instance singleton est utilisée, il s'agira d'une nouvelle instance unique pouvant être modifiée. Si l'instance est déjà modifiable, il s'agira d'une copie en profondeur de cette instance.

validate_parameter

validate_parameter(parameter)

Les paramètres de la porte doivent être de type int, float ou ParameterExpression

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