FermionicTrotterization
class FermionicTrotterization(synthesis, *, apply=True, filter=None)
Basi: GenericPass[DAGCircuit, DAGCircuit]
Un passaggio di transpilazione che applica il metodo di Trotter alle porte Evolution nello spazio fermionico.
Un gate Evolution contiene il metodo di sintesi con cui viene scomposto nello spazio fermionico (vedi Evolution.synthesis). Impostarlo per ogni gate significa applicare la scelta a tutti gli elementi che lo compongono – compresi e UCC UCJ, che lo costruiscono internamente. Questo passaggio applica invece un unico metodo a ogni elemento di Evolution un circuito, quindi la scelta può essere effettuata una sola volta per l'intera pipeline di transpilazione:
pm.optimization = FermionicPassManager(
[FermionicTrotterization(FermionicSuzukiTrotter(order=2, reps=4))]
)Ogni gate selezionato viene sostituito dai fattori generati dal proprio metodo, quindi il pass non solo sceglie la formula, ma la esegue anche. I nodi che non sono Evolution gate vengono lasciati invariati, così come quelli scartati da un’opzione filter.
Ripetere il passaggio non comporta alcun rischio: i fattori emessi da un metodo di sintesi sono Evolution.atomic, e un gate atomico è un fattore terminale che questo passaggio lascia inalterato anziché suddividerlo ulteriormente. La stessa esenzione rende il passaggio un punto fisso rispetto all'output di QDriftTrotterization, i cui gate campionati sono atomici poiché l'estrazione casuale corrisponde alla trotterizzazione che esso esegue.
Impostare apply su False per selezionare solo il metodo e lasciare l'espansione a qualcos'altro, come di Qiskit o Decompose una decompose() chiamata. È importante tenere presente che un gate che non viene mai espanso raggiunge la fase di transizione da fermione a qubit nella sua interezza, dove viene mappato senza Evolution.synthesis mai essere letto – e ogni metodo di sintesi produce quindi un risultato identico.
Non tutti i metodi di sintesi sono adatti a ogni operatore. Un i cui Evolution operatori formano gruppi che commutano tra loro (ad esempio UCJ, gli operatori di Coulomb diagonali di un ), viene sintetizzato esattamente a qualsiasi ordine, per cui un ordine superiore aggiunge solo profondità. Utilizza filter per limitare il passaggio ai cancelli che ne beneficiano.
L'espansione di un operatore che non comporta alcuna groups scomposizione termine per termine, e un singolo non è ermitiano, quindi la sua esponenziale non è unitaria. Non viene generato alcun errore finché l'operatore mappato non raggiunge PauliEvolutionGate, il che genera un'eccezione ValueError: Operator contains complex coefficients, which are not supported. È proprio l'assegnazione di gruppi accoppiati per coniugati a rendere ogni fattore ermitiano.
L'inizializzazione di questo passaggio del transpiler può essere effettuata utilizzando gli argomenti elencati di seguito.
Parametri
- synthesis (FermionicEvolutionSynthesis) – il metodo di sintesi fermione-fermione da applicare alle
Evolutionporte del circuito. - apply (bool) – se espandere ogni porta selezionata nei fattori che essa produce
synthesis. Quando ciò accadeFalse, il gate viene contrassegnato solo consynthesise qualcos’altro dovrà espanderlo in seguito. Vediapply. - filter (Callable[[DAGOpNode], bool] | None) – un predicato facoltativo che determina a quali nodi
Evolutionapplicaresynthesisl'operazione. Viene chiamato con eDAGOpNodeil nodo rimane inalterato a meno che non restituiscaTrue. SeNone(impostazione predefinita), viene selezionato ogniEvolutionnodo.
Attributi
synthesis
Il metodo di sintesi da fermione a fermione applicato ai gate selezionati.
apply
Se espandere ciascun gate selezionato nei fattori produce synthesis .
In questo caso False, il passaggio si limita a selezionare il metodo: contrassegna ogni gate selezionato con e synthesis lascia l’espansione a chiunque si occupi in seguito di costruire la definizione del gate, come ad esempio di Qiskit o Decompose una chiamata decompose() a. Si noti che un gate che non viene mai espanso raggiunge integro la fase di conversione da fermione a qubit, dove viene mappato senza mai Evolution.synthesis essere letto, e ogni metodo di sintesi produce quindi un risultato identico.
filter
Metodi
run
run(dag)
Esegue questo ciclo di transpilazione.
Ogni Evolution nodo accettato da filter viene sostituito dai fattori generati synthesis da, oppure (quando apply è False) da un gate equivalente che si limita a trasmettere synthesis. Tutti gli altri nodi rimangono invariati. Il DAG di input viene modificato direttamente.
Parametri
dag (DAGCircuit) – il circuito di ingresso con istruzioni basate sui fermioni. Sono op supportate solo le FermionicGate istanze come quelle indicate DAGOpNode .
Risultati
Il circuito di uscita che agisce ancora su un registro fermionico.
Tipo di restituzione
Metodi ereditati
execute
execute(passmanager_ir, state, callback=None)
Esegui l'operazione di ottimizzazione per l'IR di Qiskit in ingresso.
Parametri
- passmanager_ir (IR) – Qiskit IR da ottimizzare.
- state (PassManagerState) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione dell'attività di ottimizzazione.
Risultati
IR ottimizzato di Qiskit e stato del flusso di lavoro.
Tipo di restituzione
tupla [ IR_OUT, PassManagerState ]
name
update_status
update_status(state, run_state)
Aggiornare lo stato del flusso di lavoro.
Parametri
- state (PassManagerState) – Passare lo stato del gestore per l'aggiornamento.
- run_state (RunState) – Stato di completamento dell'attività corrente.
Risultati
Stato del gestore dei pass aggiornato.
Tipo di restituzione