Skip to main content
IBM Quantum Platform

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.

Nota

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.

Nota

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.

Attenzione

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 ai†aja^\dagger_i a_j 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 Evolution porte del circuito.
  • apply (bool) – se espandere ogni porta selezionata nei fattori che essa produce synthesis . Quando ciò accade False, il gate viene contrassegnato solo con synthesis e qualcos’altro dovrà espanderlo in seguito. Vedi apply.
  • filter (Callable[[DAGOpNode], bool] | None) – un predicato facoltativo che determina a quali nodi Evolution applicare synthesis l'operazione. Viene chiamato con e DAGOpNode il nodo rimane inalterato a meno che non restituisca True. Se None (impostazione predefinita), viene selezionato ogni Evolution nodo.

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

Il predicato che seleziona i nodi Evolution synthesis a cui applicare l'operazione.


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

DAGCircuit

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

name()

Nome del passo.

Tipo di restituzione

STR

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

PassManagerState

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.