Routine di compilazione
qiskit.compiler
Funzioni di compilazione dei circuiti
transpile
qiskit.compiler.transpile(circuits, backend=None, basis_gates=None, coupling_map=None, initial_layout=None, layout_method=None, routing_method=None, translation_method=None, scheduling_method=None, dt=None, approximation_degree=1.0, seed_transpiler=None, optimization_level=None, callback=None, output_name=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, target=None, hls_config=None, init_method=None, optimization_method=None, ignore_backend_supplied_default_methods=False, num_processes=None, qubits_initially_zero=True)
Transpilare uno o più circuiti, secondo alcuni obiettivi di transpilatura desiderati.
La transpilazione è potenzialmente eseguita in parallelo utilizzando il multiprocesso quando circuits è un elenco con > 1 oggetto, a seconda dell'ambiente locale e della configurazione QuantumCircuit a seconda dell'ambiente e della configurazione locale.
La priorità dei vincoli di transpilazione funziona come segue: se viene fornito un input target , esso avrà la priorità su qualsiasi input backend o sui vincoli non vincolati (basis_gates, coupling_map, o dt). Se un backend è fornito insieme a un qualsiasi vincolo non vincolante dell'elenco precedente, il vincolo non vincolante avrà la priorità sul vincolo corrispondente del backend. Questo comportamento è riassunto nella tabella seguente. La prima colonna della tabella riassume i potenziali vincoli forniti dall'utente e ogni cella indica se la priorità è assegnata a quello specifico input di vincolo o a un altro input (target/backend( V2 )).
Fornito dall'utente | Destinazione | backend( V2 ) |
|---|---|---|
| cancelli base | Destinazione | cancelli base |
| accoppiamento_mappa | Destinazione | accoppiamento_mappa |
| DT | Destinazione | DT |
Quando la base di riferimento è costituita da porte Clifford+T, questa funzione costruisce una pipeline specializzata di transpiler Clifford+T; per una documentazione più dettagliata, si veda generate_preset_clifford_t_pass_manager() [...]. In questo flusso vengono ignorati gli argomenti che si applicano esclusivamente alla transpilazione in insiemi di base continui. Ad esempio, il "unitary_synthesis_method" non viene preso in considerazione quando si sintetizzano operatori unitari a singolo qubit in una sequenza Clifford+T.
Parametri
-
circuits (_CircuitT) – Circuito/i da trasporre
-
backend (Backend | None) – Se impostato, il transpiler compilerà il circuito di input per questo dispositivo di destinazione. Se viene impostata esplicitamente un'altra opzione (ad esempio,
coupling_map), questa avrà la precedenza su quella del backend. -
basis_gates (list[str] | None) – Elenco dei nomi dei gate di base su cui eseguire l'unrolling (ad es. g.:
['u1', 'u2', 'u3', 'cx']). SeNone, non eseguire l'unrolling. -
coupling_map (CouplingMap |list[list[int]] | None) –
Mappa di accoppiamento diretta (forse personalizzata) con l'obiettivo nella mappatura. Se la mappa di accoppiamento è simmetrica, è necessario specificare entrambe le direzioni.
Sono supportati diversi formati:
CouplingMapistanza- L'elenco deve essere fornito sotto forma di matrice di adiacenza, in cui ogni voce specifica tutte le interazioni dirette a due qubit supportate dal backend, ad es. g.:
[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
-
initial_layout (Layout |dict |list | None) –
Posizione iniziale dei qubit virtuali sui qubit fisici. Se questo layout rende il circuito compatibile con i vincoli della mappa di accoppiamento, verrà utilizzato. Non è garantito che la disposizione finale sia la stessa, poiché il transpiler può permutare i qubit attraverso scambi o altri mezzi. Sono supportati diversi formati:
-
Layoutistanza -
Dict * virtuale a fisico:
{qr[0]: 0, qr[1]: 3, qr[2]: 5}-
fisica a quella virtuale:
{0: qr[0], 3: qr[1], 5: qr[2]}
-
-
Elenco
-
da virtuale a fisico:
[0, 3, 5] # virtual qubits are ordered (in addition to named) -
fisica a quella virtuale:
[qr[0], None, None, qr[1], None, qr[2]]
-
-
-
layout_method (str | None) – Nome del passaggio di selezione del layout ('trivial', 'dense', 'sabre'). Questo può anche essere il nome del plugin esterno da usare per lo stadio
layout. È possibile visualizzare l'elenco dei plugin installati utilizzando il comandolist_stage_plugins()con"layout"come argomentostage_name. -
routing_method (str | None) – Nome dell'algoritmo di instradamento («basic», «lookahead», «stochastic», «sabre», «none»). Questo può anche essere il nome del plugin esterno da utilizzare per lo
routingstage. È possibile visualizzare un elenco dei plugin installati utilizzandolist_stage_plugins()con"routing"come argomentostage_name. -
translation_method (str | None) – Nome del passaggio di traduzione (
"default","translator"o"synthesis"). Questo può anche essere il nome del plugin esterno da usare per lo stadiotranslation. È possibile visualizzare l'elenco dei plugin installati utilizzando il comandolist_stage_plugins()con"translation"come argomentostage_name. -
scheduling_method (str | None) – Nome del passo di programmazione. *
'as_soon_as_possible': Pianifica le istruzioni in modo avido, il più presto possibile su una risorsa di qubit. (alias:'asap') *'as_late_as_possible': Programmare le istruzioni in ritardo, cioè mantenendo i qubit nello stato ground quando possibile. (alias:'alap') SeNone, non verrà eseguita alcuna programmazione. Questo può anche essere il nome del plugin esterno da usare per lo stadioscheduling. È possibile visualizzare l'elenco dei plugin installati utilizzando il comandolist_stage_plugins()con"scheduling"come argomentostage_name. -
dt (float | None) – Tempo di campionamento del backend (risoluzione) in secondi. Se
None(valore predefinito), viene utilizzatobackend.dt. -
approximation_degree (float | None) – Manopola euristica utilizzata per l'approssimazione del circuito, dove
1.0indica l'assenza di approssimazione (entro i limiti della tolleranza numerica) e0.0indica l'approssimazione massima. Setargetè disponibile, un valore pari aNoneindica che è consentita un'approssimazione fino al tasso di errore riportato per un'operazione nell'obiettivo. -
seed_transpiler (int | None) – Imposta un seme per il generatore di numeri casuali pseudo-casuali (PRNG) utilizzato dalle parti stocastiche del transpiler. Questo parametro ha la precedenza sulla variabile
QISKIT_TRANSPILER_SEEDd'ambiente etranspiler_seedsull'impostazione nel file di configurazione dell'utente. -
optimization_level (int | None) –
Quanta ottimizzazione eseguire sui circuiti. Livelli più alti generano circuiti più ottimizzati, a scapito di un tempo di trasposizione più lungo.
- 0: nessuna ottimizzazione
- 1: ottimizzazione della luce
- 2: ottimizzazione pesante
- 3: ottimizzazione ancora più pesante
Se
None, il livello 2 verrà scelto come predefinito. -
callback (Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any] | None) –
Una funzione di callback che verrà richiamata dopo l'esecuzione di ogni passaggio. La funzione viene chiamata con 5 argomenti chiave, |
pass_: il passaggio da eseguire. |dag: l'output del passaggio. |time: il tempo di esecuzione del passaggio. |property_set: il set di proprietà. |count: l'indice per l'esecuzione del passaggio. Gli argomenti esatti passati espongono gli interni del gestore di passaggi e sono soggetti a modifiche quando gli interni del gestore di passaggi cambiano. Se si intende riutilizzare una funzione di callback in più release, assicurarsi che gli argomenti passati siano gli stessi. Per utilizzare la funzione di callback, si deve definire una funzione che accetti i dettati kwargs e acceda alle variabili. Ad esempio:def callback_func(**kwargs): pass_ = kwargs['pass_'] dag = kwargs['dag'] time = kwargs['time'] property_set = kwargs['property_set'] count = kwargs['count'] ... transpile(circ, callback=callback_func) -
output_name (str |list[str] | None) – Un elenco di stringhe che identificano i circuiti di uscita. La lunghezza dell'elenco deve corrispondere esattamente alla lunghezza del
circuitsparametro. -
unitary_synthesis_method (str) – Il nome del metodo di sintesi unitario da utilizzare. Per impostazione predefinita
'default'viene utilizzato. È possibile visualizzare l'elenco dei plugin installati conunitary_synthesis_plugin_names(). -
unitary_synthesis_plugin_config (dict | None) – Un dizionario di configurazione opzionale che verrà passato direttamente al plugin di sintesi unitaria. Per impostazione predefinita, questa impostazione non ha alcun effetto, poiché il metodo di sintesi unitario predefinito non richiede una configurazione personalizzata. Questo dovrebbe essere necessario solo quando viene specificato un plugin di sintesi unitaria con l'argomento
unitary_synthesis_method. Poiché questa opzione è personalizzata per ogni plugin di sintesi unitaria, si rimanda alla documentazione del plugin per l'utilizzo di questa opzione. -
target (Target | None) – Una destinazione di transpilazione del backend. Normalmente questo viene specificato come parte dell'argomento
backend, ma se hai creato manualmente unTargetoggetto, puoi specificarlo manualmente qui. Questo sovrascriverà la destinazione dabackend. -
hls_config (HLSConfig | None) – Una classe
HLSConfigdi configurazione opzionale che verrà passata direttamente allaHighLevelSynthesisfase di trasformazione. Questa classe di configurazione consente di specificare gli elenchi degli algoritmi di sintesi e dei relativi parametri per vari oggetti di alto livello. -
init_method (str | None) – Il nome del plugin da utilizzare per lo stadio
init. Per impostazione predefinita, non viene utilizzato un plugin esterno. È possibile visualizzare l'elenco dei plugin installati utilizzando il comandolist_stage_plugins()con"init"come argomento del nome dello stage. -
optimization_method (str | None) – Il nome del plugin da utilizzare per lo stadio
optimization. Per impostazione predefinita, non viene utilizzato un plugin esterno. È possibile visualizzare l'elenco dei plugin installati utilizzando il comandolist_stage_plugins()con"optimization"come argomentostage_name. -
ignore_backend_supplied_default_methods (bool) – Se impostato su
True, qualsiasi metodo predefinito specificato da un backend sarà ignorato. Alcuni backend specificano metodi predefiniti alternativi per supportare passaggi/plugin specifici per i target di compilazione che supportano tecniche di compilazione specifiche del backend. Se si preferisce che queste impostazioni predefinite non vengano utilizzate, questa opzione serve a disabilitare le impostazioni predefinite specifiche del backend. -
num_processes (int | None) – Il numero massimo di processi paralleli da avviare per questa chiamata a transpile, se l'esecuzione parallela è abilitata. Questo argomento sostituisce
num_processesnel file di configurazione dell'utente e la variabile d'ambienteQISKIT_NUM_PROCS. Se impostato suNone, verrà utilizzata la configurazione predefinita del sistema o dell'utente locale. -
qubits_initially_zero (bool) – Indica se il circuito di ingresso è inizializzato a zero.
Risultati
Il circuito (o i circuiti) traspirato.
Aumenti
TranspilerError - in caso di input errati al transpiler (come parametri in conflitto) o di errori nei passaggi
Tipo di restituzione
_CircuitT