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.
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.
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.
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 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
Evolutiondu circuit. - apply (bool) – déterminer
synthesiss'il convient de décomposer chaque porte sélectionnée en facteurs. Dans ce casFalse, la porte est simplement marquée d'unsynthesiset un autre élément devra la développer ultérieurement. Voirapply. - filter (Callable[[DAGOpNode], bool] | None) – un prédicat facultatif permettant de déterminer
synthesisà quels nœudsEvolutionl'appliquer. Elle est appelée avec le etDAGOpNodele nœud reste inchangé à moins qu’elle ne renvoieTrue. Si (Nonepar défaut), tous les nœudsEvolutionsont 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
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
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