VF2PostLayout
class qiskit.transpiler.passes.VF2PostLayout(*args, **kwargs)
Basi: AnalysisPass
Un passaggio per migliorare un Layout esistente dopo la trasposizione di un circuito su un grafo di accoppiamento, come problema di isomorfismo del sottografo, risolto da VF2++.
A differenza del passaggio VF2Layout che è stato progettato per trovare un layout iniziale per un circuito all'inizio della pipeline di transpilazione, questo passaggio di transpiler è stato progettato per cercare di trovare un layout migliore al termine della transpilazione. La fase iniziale di layout del transpiler non ha a disposizione tutte le informazioni che abbiamo dopo la transpilazione. Questo passaggio è progettato per essere accoppiato in una pipeline simile a quella dei passaggi di layout. Questo passaggio elimina tutti i fili inattivi dal circuito, utilizza VF2 per trovare un sottografo nel grafo di accoppiamento su cui il circuito possa funzionare con una migliore fedeltà e quindi aggiorna il layout del circuito per utilizzare i nuovi qubit. L'algoritmo utilizzato in questo passaggio è descritto in arXiv:2209.15512.
Se viene trovata una soluzione, significa che è disponibile un layout di errore inferiore per il circuito. Se viene trovata una soluzione, il layout verrà impostato nel set di proprietà come property_set['post_layout']. Tuttavia, se non viene trovata una soluzione o una soluzione migliore, non viene impostato property_set['post_layout'] . Il motivo dell'arresto è impostato in property_set['VF2PostLayout_stop_reason'] in tutti i casi e sarà uno dei valori enumerati in VF2PostLayoutStopReason che ha i seguenti valori:
"solution found": Se è stata trovata una soluzione."no better solution found": Se il layout iniziale del circuito è la soluzione migliore."nonexistent solution": Se non è stata trovata alcuna soluzione.">2q gates in basis": Se VF2PostLayout non può lavorare con la base del circuito.
Per impostazione predefinita, questo passaggio costruisce una mappa di punteggio euristica basata sui tassi di errore nel sito target. Tuttavia, i passaggi di analisi possono essere eseguiti prima di questo passaggio e impostare vf2_avg_error_map nell'insieme di proprietà con un'istanza ErrorMap . Se un valore è NaN viene trattato come un bordo ideale Ad esempio, se una mappa degli errori viene creata come:
from qiskit.transpiler.passes.layout.vf2_utils import ErrorMap
error_map = ErrorMap(3)
error_map.add_error((0, 0), 0.0024)
error_map.add_error((0, 1), 0.01)
error_map.add_error((1, 1), 0.0032)che rappresenta la mappa degli errori per un obiettivo a 2 qubit, dove il tasso di errore avg 1q è 0.0024 sul qubit 0 e 0.0032 sul qubit 1. Quindi il tasso di errore avg 2q per i gate che operano su (0, 1) è 0.01 e (1, 0) non è supportato dall'obiettivo. Verrà utilizzato per l'attribuzione del punteggio se è impostato come chiave vf2_avg_error_map nell'insieme di proprietà al momento dell'esecuzione di VF2PostLayout viene eseguito.
Inizializzare un'istanza di VF2PostLayout pass
Parametri
- target (Target) – Una destinazione che rappresenta il dispositivo di backend su cui eseguire
VF2PostLayout. - seed (int) – Imposta il seme del PRNG. -1 Significa che non c'è rimescolamento dei nodi.
- call_limit (int) – Il numero di visite di stato da tentare in ogni esecuzione di VF2.
- time_limit (float) – Il tempo limite totale in secondi per l'esecuzione
VF2PostLayout - strict_direction (bool) – Se il passaggio è configurato per seguire la direzione rigorosa nel grafico di accoppiamento. Se questo valore è impostato su false, il passaggio tratterà qualsiasi bordo nel grafo di accoppiamento come un bordo debole e il grafo di interazione sarà indiretto. Ai fini della valutazione dei layout, verrà utilizzato il tasso di errore medio per ogni qubit e per il collegamento 2q. Ciò consente di eseguire il passaggio prima della traduzione della base e di lavorare con le operazioni 1q e 2q. Tuttavia, se
strict_direction=Trueil passaggio si aspetta che l'oggetto di inputDAGCircuitdi inputrun()sia presente nell'insieme di istruzioni di destinazione. - max_trials (int) – Il numero massimo di prove da eseguire VF2 per trovare un layout. Un valore di
0(il valore predefinito) significa "illimitato".
Aumenti
TypeError - In fase di esecuzione, se target non è fornito.
Attributi
is_analysis_pass
Controlla se il passaggio è un passaggio di analisi.
Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.
is_transformation_pass
Controlla se il passaggio è un passaggio di trasformazione.
Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).
Metodi
execute
execute(passmanager_ir, state, callback=None)
Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.
Parametri
- passmanager_ir (IR) – Qiskit IR da ottimizzare.
- state (PassManagerState) – Stato associato all'esecuzione del flusso di lavoro da parte del gestore del passaggio stesso.
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.
Risultati
Qiskit IR ottimizzato e stato del flusso di lavoro.
Tipo di restituzione
tupla [ IR_OUT, PassManagerState ]
name
run
update_status
update_status(state, run_state)
Aggiornare lo stato del flusso di lavoro.
Parametri
- state (PassManagerState) – Passare lo stato del gestore da aggiornare.
- run_state (RunState) – Stato di completamento dell'attività corrente.
Risultati
Stato aggiornato del gestore dei passaggi.
Tipo di restituzione