Skip to main content
IBM Quantum Platform

FermionicTrotterization

class FermionicTrotterization(synthesis, *, apply=True, filter=None)

Bases : GenericPass[DAGCircuit, DAGCircuit]

Une passe de transpilation effectuant la « trotterisation » des portes Evolution dans l’espace fermionique.

Une porte Evolution contient la méthode de synthèse grâce à laquelle elle est décomposée dans l'espace fermionique (voir Evolution.synthesis). Définir cela pour chaque porte implique d'appliquer ce choix à tous les éléments qui la composent – y compris et UCC UCJ, qui construisent la leur en interne. Ce passage applique en revanche une seule méthode à chaque Evolution élément d'un circuit; le choix peut donc être effectué une seule fois pour l'ensemble du pipeline de transpilation :

pm.optimization = FermionicPassManager(
    [FermionicTrotterization(FermionicSuzukiTrotter(order=2, reps=4))]
)

Chaque porte sélectionnée est remplacée par les facteurs générés par sa méthode; ainsi, la passe choisit à la fois la formule et l'exécute. Les nœuds qui ne sont pas des portes Evolution ne sont pas modifiés, tout comme ceux qui sont rejetés par une option filter.

Remarque

Répéter cette étape ne présente aucun risque : les facteurs générés par une méthode de synthèse sont Evolution.atomic, et une porte atomique est un facteur terminal que cette étape laisse en place au lieu de le décomposer davantage. Cette même exemption fait de ce passage un point fixe sur la sortie de QDriftTrotterization, dont les portes échantillonnées sont atomiques, car le tirage aléatoire correspond à la « trotterisation » qu'il effectue.

Remarque

Définissez apply sur False pour ne sélectionner que la méthode et laisser le soin à un autre élément, tel que Qiskit ou Decompose un appel decompose() , de se charger de l'expansion. Il faut savoir qu’une porte qui n’est jamais étendue atteint intacte le stade de conversion des fermions en qubits, où elle est mappée sans jamais Evolution.synthesis être lue – et toutes les méthodes de synthèse produisent alors un résultat identique.

Attention

Toutes les méthodes de synthèse ne conviennent pas à tous les opérateurs. Un Evolution dont tous les opérateurs commutent entre eux (les opérateurs diagonaux de Coulomb d’un UCJ, par exemple) est synthétisé exactement à n’importe quel ordre; un ordre supérieur n’apporte donc qu’une profondeur supplémentaire. Utilisez filter pour limiter l'accès aux portails concernés.

Le développement d'un opérateur qui ne comporte aucun se groups fait terme par terme, et un ai†aja^\dagger_i a_j e isolé n'est pas hermitien; par conséquent, son exponentielle n'est pas unitaire. Tout se passe normalement jusqu’à ce que l’opérateur mappé atteigne PauliEvolutionGate, ce qui déclenche une exception ValueError: Operator contains complex coefficients, which are not supported. C'est l'affectation de groupes formant des paires conjuguées qui confère à chaque facteur son caractère hermitien.

L'initialisation de ce passage du transcompilateur peut s'effectuer à l'aide des arguments indiqués ci-dessous.

Paramètres

  • synthesis (FermionicEvolutionSynthesis) – la méthode de synthèse fermion-fermion à appliquer aux portes Evolution du circuit.
  • apply (bool) – déterminer synthesis s'il convient de décomposer chaque porte sélectionnée en facteurs. Dans ce cas False, la porte est simplement marquée d'un synthesis et un autre élément devra la développer ultérieurement. Voir apply.
  • filter (Callable[[DAGOpNode], bool] | None) – un prédicat facultatif permettant de déterminer synthesis à quels nœuds Evolution l'appliquer. Elle est appelée avec le et DAGOpNode le nœud reste inchangé à moins qu’elle ne renvoie True. Si ( None par défaut), tous les nœuds Evolution sont sélectionnés.

Attributs

synthesis

La méthode de synthèse « fermion-à-fermion » appliquée aux portes sélectionnées.

apply

Déterminer synthesis s'il convient de développer chaque porte sélectionnée en ses facteurs.

Dans ce cas False, le passage se contente de sélectionner la méthode : il marque chaque porte sélectionnée avec synthesis et laisse le soin de l’expansion à ce qui construira ultérieurement la définition de la porte, comme le de Qiskit Decompose ou un appel decompose() à. Il convient de noter qu’une porte qui n’est jamais développée atteint intacte le stade de conversion des fermions en qubits, où elle est mappée sans jamais Evolution.synthesis être lue, et que toutes les méthodes de synthèse produisent alors un résultat identique.

filter

Le prédicat permettant de sélectionner les Evolution nœuds synthesis auxquels l'opération doit s'appliquer.


Méthodes

run

run(dag)

Exécute cette passe de transpilation.

Chaque Evolution nœud accepté par filter est remplacé par les facteurs que synthesis produit, ou (lorsque apply est False) par une porte équivalente se contentant de transmettre synthesis. Tous les autres nœuds ne sont pas modifiés. Le DAG d'entrée est modifié directement.

Paramètres

dag (DAGCircuit) – le circuit d'entrée avec des instructions basées sur les fermions. Seules les instances FermionicGate de DAGOpNode ce type op sont prises en charge.

Retours

Le circuit de sortie, qui agit toujours sur un registre fermionique.

Type de retour

DAGCircuit

Méthodes héritées

execute

execute(passmanager_ir, state, callback=None)

Exécuter la tâche d'optimisation pour l'IR Qiskit fourni.

Paramètres

  • passmanager_ir (IR) – IR de Qiskit à optimiser.
  • state (PassManagerState) – État lié à l'exécution du flux de travail par le gestionnaire de passes lui-même.
  • callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.

Retours

Optimisation de l'IR de Qiskit et état d'avancement du flux de travail.

Type de retour

tuple [ IR_OUT, PassManagerState ]

name

name()

Nom du col.

Type de retour

str

update_status

update_status(state, run_state)

Mettre à jour le statut du workflow.

Paramètres

  • state (PassManagerState) – Transmettre l'état du gestionnaire pour la mise à jour.
  • run_state (RunState) – État d'avancement de la tâche en cours.

Retours

Mise à jour de l'état du gestionnaire de pass.

Type de retour

PassManagerState

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