Skip to main content
IBM Quantum Platform

InitializeModes

class InitializeModes(occupation)

Bases : FermionicGate

Prépare (ou, dans le cadre d'une simulation, certifie) l'occupation d'un mode fermionique.

Cette porte indique l'état souhaité des modes sur lesquels elle est placée. Son comportement dépend de la manière dont le circuit est utilisé :

  • Transpilé (synthétisé en portes de qubits) : cela produit l'état – le plugin de synthèse émet les portes qui définissent l'occupation des modes nommés, comme on peut s'y attendre d'une porte d'initialisation.
  • Simulé (_apply_unitary_()): il fait office de validateur plutôt que de producteur. À partir d'un vecteur d'état, il vérifie que l'amplitude de ce vecteur reste confinée au sous-espace qu'il définit occupation , puis renvoie le vecteur tel quel, certifiant ainsi – sans le modifier – que l'état d'entrée correspond bien à la référence prévue, de sorte que les transformations suivantes s'appliquent correctement à celui-ci.

Dans les deux modes, la porte ne restreint que les orbitales dont les noms indiquent l'occupation (et, pour chaque secteur de spin, uniquement le long de l'axe de ce secteur); ainsi, plusieurs InitializeModes portes peuvent être placées en parallèle pour générer indépendamment des fragments disjoints d'un état – par exemple, une porte par secteur de spin, ou une par groupe d'orbitales. Une porte « spinful » peut couvrir un seul secteur (ou n'importe quelle partie de celui-ci) ou spécifier intégralement les deux secteurs, mais un chevauchement partiel des deux est rejeté (voir _apply_unitary_placed_()).

Utilisez from_hartree_fock() pour construire la distribution d'occupation d'une référence de Hartree-Fock.

Attention

Il s'agit d'un prototype de développement précoce. Attention aux modifications de l'interface pouvant survenir sans préavis pendant la phase de développement préliminaire de ce logiciel.

L'initialisation d'une instance de cette porte peut être effectuée à l'aide des arguments indiqués ci-dessous.

Paramètres

occupation (Sequence[bool]) – une séquence de valeurs booléennes indiquant l'état d'occupation de chaque mode dans le circuit FermionicRegister initialisé par cette porte.


Attributs

occupation

La séquence de valeurs booléennes indiquant l'état d'occupation de chaque mode dans le circuit FermionicRegister initialisé par cette porte.


Méthodes

from_hartree_fock

classmethod from_hartree_fock(norb, nelec)

Construit la porte pour l'occupation de référence de Hartree-Fock de (norb, nelec).

Le déterminant de Hartree-Fock occupe les orbitales d'indice le plus bas de chaque secteur de spin. Le fait que la référence soit « sans spin » ou « avec spin » est déduit de nelec (un int sélectionne l'interprétation « sans spin » des norb modes; une paire (n_alpha, n_beta) sélectionne l'interprétation « avec spin » (spin de bloc) des modes 2 * norb ). Placez la porte renvoyée sur le registre correspondant pour certifier un état de référence de Hartree-Fock.

Paramètres

  • norb (int) – le nombre d'orbitales spatiales.
  • nelec (int |tuple[int, int]) – soit un seul entier pour un système sans spin, soit une paire d'entiers indiquant le nombre de fermions de spin alpha et de fermions de spin bêta.

Retours

Une InitializeModes porte dont l'occupation correspond au déterminant de Hartree-Fock.

Augmentations

ValueError – si le nombre d'électrons dépasse le nombre d'orbitales norb disponibles dans un secteur.

Type de retour

Soi

Méthodes protocolaires

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

Affirme que vec est confiné au sous-espace d'occupation de cette porte, et le renvoie inchangé.

Contrairement à une porte de transformation, cette porte ne modifie pas l'état : elle vérifie que l'amplitude vecde se trouve entièrement dans le sous-espace défini occupation par et, si tel est le cas, renvoie vec tel quel. Le sous-espace est l'ensemble des déterminants dont l'occupation correspond à cette porte sur les orbitales qu'elle désigne, toutes les orbitales non désignées restant libres; ainsi, une occupation partielle (un fragment d'un secteur) admet toute une famille de déterminants et la vérification se combine avec d'autres InitializeModes portes parallèles.

Le mode local de la porte ( occupation un indicateur par mode local) est enregistré dans le registre global via freg_indices: le mode local i détermine le mode global freg_indices[i]. Les modes globaux sont ensuite interprétés selon la convention (norb, nelec) suivante :

  • Sans spin (nelec est un int) : les modes norb sont directement des orbitales; la vérification s'effectue sur l'espace de C(norb, nelec)dimension.
  • Spinful (nelec c'est une paire) : selon la convention « block-spin », les modes 0..norb sont des orbitales alpha et les modes norb..2*norb sont des orbitales bêta. Une porte touchant un seul secteur contraint l’axe d’état (dim_a, dim_b) de ce secteur (un ensemble de lignes complètes pour une porte alpha, ou de colonnes complètes pour une porte bêta) et laisse l’autre axe libre, ce qui permet de la combiner avec des portes parallèles situées sur l’autre secteur. Une porte peut également couvrir les deux secteurs, mais uniquement lorsqu’elle fixe un déterminant complet (toutes les orbitales des deux secteurs sont désignées, aucune n’est laissée libre); un chevauchement partiel – qui contraint certaines orbitales des deux secteurs tout en en laissant d’autres libres – est rejeté, car il ne s’agit pas d’un produit de sous-espaces par axe et ne peut donc pas être composé (il faut plutôt utiliser une porte par secteur).

La vérification porte sur le confinement, et non sur l'égalité : une amplitude entrante peut avoir n'importe quelle phase et n'importe quelle amplitude au sein du sous-espace (une phase globale ou une normalisation n'a aucune pertinence physique), ce qui valide ainsi la référence sans la lier à un vecteur déterminant spécifique.

Paramètres

  • vec (ndarray) – le vecteur d'état à valider. Sa longueur doit correspondre à la dimension du secteur (norb, nelec) .
  • norb (int) – le nombre d'orbitales spatiales du vecteur d'état global.
  • nelec (int |tuple[int, int]) – soit un seul nombre entier pour un système sans spin, soit une paire de nombres entiers représentant le nombre de fermions de spin alpha et de fermions de spin bêta. Un entier correspond à l’interprétation des modes sans spin (les norb modes sont des orbitales); une paire correspond à l’interprétation des modes 2 * norb avec spin, dite « block-spin (orb, spin) ».
  • copy (bool) – acceptée car conforme au protocole, mais sans effet : cette porte ne modifie pas l'état, qui vec est donc renvoyé tel quel dans tous les cas.
  • freg_indices (list[int]) – les indices des modes absolus (globaux) auxquels se mappent les modes locaux de cette porte.

Retours

L'entrée vec, inchangée, une fois que son confinement dans le sous-espace d'occupation est vérifié.

Augmentations

ValueError – si un mode occupé se situe en dehors de l'intervalle implicite défini par norb; si une porte à spin chevauche partiellement les deux secteurs de spin (sans fixer un déterminant complet); si la longueur vecde ne correspond pas à la dimension du secteur (norb, nelec) ; ou si vec a une amplitude en dehors du sous-espace défini par l'occupation.

Type de retour

ndarray

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