FermionicTrotterization
class FermionicTrotterization(synthesis, *, apply=True, filter=None)
Basiszeichen: GenericPass[DAGCircuit, DAGCircuit]
Ein Transpilierungsdurchlauf, bei dem Gatter Evolution im fermionischen Raum „trottiert“ werden.
Ein Gatter Evolution enthält die Synthese-Methode, mit der es im fermionischen Raum zerlegt wird (siehe Evolution.synthesis). Die Einstellung pro Gate bedeutet, dass die Auswahl durch alle Elemente geleitet wird, aus denen ein Gate besteht – einschließlich und UCC UCJ, die intern ihre eigenen Gates aufbauen. Dieser Durchlauf wendet stattdessen eine Methode auf jedes Element in Evolution einem Schaltkreis an, sodass die Auswahl einmalig für die gesamte Transpilations-Pipeline getroffen werden kann:
pm.optimization = FermionicPassManager(
[FermionicTrotterization(FermionicSuzukiTrotter(order=2, reps=4))]
)Jedes ausgewählte Gatter wird durch die Faktoren ersetzt, die seine Methode ausgibt, sodass der Durchlauf sowohl die Formel auswählt als auch ausführt. Knoten, die keine Evolution Gates sind, bleiben unberührt, ebenso wie diejenigen, die von einer optionalen Funktion abgelehnt werden filter.
Ein erneuter Durchlauf ist unbedenklich: Die Faktoren, die eine Synthese-Methode ausgibt, sind Evolution.atomic, und ein atomares Gatter ist ein Endfaktor, den dieser Durchlauf unverändert belässt, anstatt ihn weiter aufzuteilen. Durch dieselbe Ausnahme wird der Pass zu einem festen Punkt über der Ausgabe von QDriftTrotterization, dessen abgetastete Gatter atomar sind, da die Zufallsauswahl die von ihm durchgeführte Trotterisierung darstellt.
Stellen Sie apply auf ein, False um nur die Methode auszuwählen und die Erweiterung einer anderen Komponente zu überlassen, beispielsweise Qiskits oder Decompose einem Aufruf decompose() . Beachten Sie, dass ein Gate, das nie erweitert wird, das Fermion-zu-Qubit-Stadium vollständig erreicht, wo es abgebildet wird, ohne jemals Evolution.synthesis ausgelesen zu werden – und jede Synthesemethode liefert dann identische Ergebnisse.
Nicht jedes Syntheseverfahren ist für jeden Anwender geeignet. Ein, dessen Evolution Operatoren alle miteinander kommutieren (beispielsweise die Diagonal-Coulomb-Operatoren eines ) UCJ, lässt sich in jeder Ordnung exakt synthetisieren, sodass eine höhere Ordnung lediglich die Tiefe vergrößert. Verwenden Sie, filter um den Zugang auf die Tore zu beschränken, die davon profitieren.
Die Erweiterung eines Operators, der keine enthält, groups erfolgt Term für Term, und ein einzelnes ist nicht hermitesch, daher ist seine Exponentialfunktion nicht unitär. Es wird nichts gemeldet, bis der abgebildete Operator erreicht wird PauliEvolutionGate, wodurch eine Ausnahme ausgelöst wird ValueError: Operator contains complex coefficients, which are not supported. Die Zuordnung von Gruppen mit konjugierten Paaren ist es, die jeden Faktor hermitisch macht.
Die Initialisierung dieses Transpiler-Durchlaufs kann mit den unten aufgeführten Argumenten erfolgen.
Parameter
- synthesis (FermionicEvolutionSynthesis) – die Fermion-zu-Fermion-Synthese-Methode, die auf die Gatter
Evolutionder Schaltung angewendet werden soll. - apply (bool) – ob jedes ausgewählte Gatter in seine Faktoren zerlegt werden soll, ergibt
synthesis. WennFalse…, wird das Gate lediglich mit … markiert, undsynthesisetwas anderes muss es später erweitern. Sieheapply. - filter (Callable[[DAGOpNode], bool] | None) – ein optionales Prädikat, das entscheidet,
synthesisauf welcheEvolutionKnoten es angewendet werden soll. Es wird mit dem aufgerufen, undDAGOpNodeder Knoten bleibt unverändert, sofern nicht zurückgegeben wirdTrue. WennNone(Standardeinstellung), wird jeder KnotenEvolutionausgewählt.
Attribute
synthesis
Das auf die ausgewählten Gatter angewandte Verfahren der Fermion-zu-Fermion-Synthese.
apply
Ob jedes ausgewählte Gatter in seine Faktoren zerlegt werden soll, ergibt synthesis .
In diesem Fall wählt der Durchlauf lediglich die Methode aus False: Er kennzeichnet jedes ausgewählte Gate mit synthesis und überlässt die Erweiterung demjenigen, der die Definition des Gates später erstellt, beispielsweise Qiskits oder Decompose einem decompose() Aufruf. Beachten Sie, dass ein Gate, das nie erweitert wird, vollständig in die Fermion-zu-Qubit-Phase gelangt, wo es abgebildet wird, ohne jemals Evolution.synthesis ausgelesen zu werden, und dass jede Synthesemethode dann identische Ergebnisse liefert.
filter
Methoden
run
run(dag)
Führt diesen Transpilation-Durchlauf aus.
Jeder von akzeptierte Evolution Knoten filter wird durch die von erzeugten synthesis Faktoren ersetzt oder (wenn apply ist False) durch ein äquivalentes Gatter, das lediglich überträgt synthesis. Alle anderen Knoten bleiben unverändert. Der Eingabe-DAG wird an Ort und Stelle geändert.
Parameter
dag (DAGCircuit) – die Eingangsschaltung mit auf Fermionen basierenden Befehlen. Es DAGOpNode op werden nur Instanzen FermionicGate wie diese unterstützt.
Rückgabe
Die Ausgangsschaltung, die weiterhin auf ein fermionisches Register einwirkt.
Rückgabetyp
Vererbte Methoden
execute
execute(passmanager_ir, state, callback=None)
Optimierungsaufgabe für die Qiskit-IR-Eingabe ausführen.
Parameter
- passmanager_ir (IR) – Qiskit IR zur Optimierung.
- state (PassManagerState) – Zustand, der mit der Ausführung des Workflows durch den Pass-Manager selbst verbunden ist.
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Eine Callback-Funktion, die bei jeder Ausführung einer Optimierungsaufgabe aufgerufen wird.
Rückgabe
Optimiertes Qiskit-IR und aktueller Stand des Workflows.
Rückgabetyp
Tupel [ IR_OUT, PassManagerState ]
name
update_status
update_status(state, run_state)
Status des Workflows aktualisieren.
Parameter
- state (PassManagerState) – Übergeben Sie den Status des Managers zur Aktualisierung.
- run_state (RunState) – Fertigstellungsstatus der aktuellen Aufgabe.
Rückgabe
Status des Pass-Managers aktualisiert.
Rückgabetyp