Skip to main content
IBM Quantum Platform

HighLevelSynthesis

class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)

GitHub

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_gatestarget , 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 0|0\rangle ) 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 0|0\rangle. Quando si aggiunge al circuito un blocco sintetizzato che utilizza qubit ausiliari, si utilizzano prima i qubit ausiliari puliti.

Nota

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 0|0\rangle 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 0|0\rangle. 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)

GitHub

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

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

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

DAGCircuito

update_status

update_status(state, run_state)

GitHub

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

PassManagerState

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