HighLevelSynthesis
class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)
Basi: TransformationPass
Sintetizzare oggetti di livello superiore e srotolare definizioni personalizzate.
L'input di questo passaggio è un DAG che può contenere oggetti di livello superiore, compresi oggetti matematici astratti (ad esempio, oggetti di tipo LinearFunction), operazioni annotate (oggetti di tipo AnnotatedOperation) e porte personalizzate.
Nel caso d'uso più comune, quando viene specificato basis_gates o target , tutti gli oggetti di livello superiore vengono sintetizzati, quindi l'output è un file DAGCircuit senza tali oggetti. Più precisamente, ogni gate del DAG di uscita è direttamente supportato dal target oppure si trova in equivalence_library.
Gli oggetti matematici astratti vengono sintetizzati con i plugin di sintesi, applicando i metodi di sintesi specificati nella configurazione di sintesi di alto livello (fare riferimento alla documentazione di HLSConfig).
A titolo di esempio, assumiamo che op_a e op_b siano nomi di due oggetti di livello superiore, che gli oggetti op_a abbiano due metodi di sintesi default che non richiede parametri aggiuntivi e other con due parametri interi opzionali option_1 e option_2, che gli oggetti op_b abbiano un unico metodo di sintesi default e che qc sia un circuito quantistico contenente gli oggetti op_a e op_b . Il seguente frammento di codice:
hls_config = HLSConfig(op_b=[("other", {"option_1": 7, "option_2": 4})])
pm = PassManager([HighLevelSynthesis(hls_config=hls_config)])
transpiled_qc = pm.run(qc)mostra come eseguire il metodo di sintesi alternativo other per gli oggetti op_b, mentre si utilizzano i metodi default per tutti gli altri oggetti di alto livello, compresi gli oggetti op_a.
Le operazioni annotate (costituite da un'operazione di base e da un elenco di modificatori inversi, di controllo e di potenza) vengono sintetizzate in modo ricorsivo, sintetizzando prima l'operazione di base e applicando poi i metodi di sintesi per creare versioni invertite, controllate o alimentate di tale operazione.)
I gate personalizzati vengono sintetizzati srotolando ricorsivamente le loro definizioni, fino a quando ogni gate è supportato dal target o è presente nella libreria di equivalenza.
Quando non vengono specificati né basis_gates né target , il passaggio sintetizza solo gli oggetti matematici astratti di primo livello e le operazioni annotate, senza scendere nella porta definitions. Questo è coerente con il vecchio comportamento del passaggio, che consente di sintetizzare alcuni oggetti di livello superiore utilizzando i plugin e lasciando inalterati gli altri gate.
La sintesi di alto livello passa alla routine di sintesi le informazioni sui qubit ausiliari disponibili e se il loro stato è pulito (definito come ) o sporco (stato sconosciuto) tramite i rispettivi argomenti "num_clean_ancillas" e "num_dirty_ancillas". Se qubits_initially_zero è True (valore predefinito), si presume che i qubit siano nello stato . Quando si aggiunge al circuito un blocco sintetizzato che utilizza qubit ausiliari, si utilizzano prima i qubit ausiliari puliti.
Si presume che i metodi di sintesi mantengano lo stato dei qubit ausiliari. Concretamente questo significa che i qubit ausiliari puliti devono essere ancora nello stato dopo il blocco sintetizzato, mentre i qubit ausiliari sporchi vengono riutilizzati solo come qubit sporchi.
HighLevelSynthesis inizializzatore.
Parametri
- hls_config – il file di configurazione della sintesi di alto livello che specifica i metodi e i parametri di sintesi per i vari oggetti di alto livello presenti nel circuito. Se non diversamente specificato, verranno utilizzati i metodi e i parametri di sintesi predefiniti.
- coupling_map – grafico orientato rappresentato come mappa di accoppiamento.
- destinazione – la destinazione del backend da utilizzare per questo passaggio. Se specificato, verrà utilizzato al posto della mappa di accoppiamento.
- use_qubit_indices - un flag che indica se questo passaggio di sintesi viene eseguito prima o dopo l'impostazione del layout, cioè se gli indici di qubit degli oggetti di livello superiore corrispondono agli indici di qubit sul backend di destinazione.
- equivalence_library - La libreria di equivalenza utilizzata (le istruzioni in questa libreria non saranno srotolate da questo passaggio).
- basis_gates – nomi delle basi di destinazione in cui eseguire l'unrolling, ad es. [‘u3’, ‘cx’]. Viene ignorato se
targetè specificato anche. - min_qubits - Il numero minimo di qubit da tradurre per le operazioni nel dag di ingresso.
- qubits_initially_zero - Indica se i qubit sono inizialmente nello stato . Ciò consente alla sintesi ad alto livello di utilizzare qubit ausiliari puliti (cioè nello stato zero) per sintetizzare un'operazione.
- optimization_metric - Specifica il criterio di ottimizzazione utilizzato dai metodi di sintesi predefiniti per gli oggetti di alto livello (quando disponibili).
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 (DAGCircuit) – Qiskit IR da ottimizzare.
- state (DAGCircuit) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
- callback (Callable[[Task, DAGCircuit, 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
name
run
run(dag)
Eseguire il passaggio HighLevelSynthesis su dag.
Parametri
dag (DAGCircuit) – ingresso dag.
Risultati
Output dag con operazioni di livello superiore sintetizzate.
Aumenti
- TranspilerError – quando il transpiler non è in grado di sintetizzare il DAG specificato
- (** ad esempio****, quando il metodo di sintesi specificato non è disponibile ).** -
Tipo di restituzione
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