Skip to main content
IBM Quantum Platform

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)

GitHub

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 baseDestinazionecancelli base
accoppiamento_mappaDestinazioneaccoppiamento_mappa
DTDestinazioneDT
Nota

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']). Se None, 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:

    1. CouplingMap istanza
    2. 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:

    1. Layout istanza

    2. 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]}
    3. 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 comando list_stage_plugins() con "layout" come argomento stage_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 routing stage. È possibile visualizzare un elenco dei plugin installati utilizzando list_stage_plugins() con "routing" come argomento stage_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 stadio translation . È possibile visualizzare l'elenco dei plugin installati utilizzando il comando list_stage_plugins() con "translation" come argomento stage_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') Se None, non verrà eseguita alcuna programmazione. Questo può anche essere il nome del plugin esterno da usare per lo stadio scheduling . È possibile visualizzare l'elenco dei plugin installati utilizzando il comando list_stage_plugins() con "scheduling" come argomento stage_name .

  • dt (float | None) – Tempo di campionamento del backend (risoluzione) in secondi. Se None (valore predefinito), viene utilizzato backend.dt .

  • approximation_degree (float | None) – Manopola euristica utilizzata per l'approssimazione del circuito, dove 1.0 indica l'assenza di approssimazione (entro i limiti della tolleranza numerica) e 0.0 indica l'approssimazione massima. Se target è disponibile, un valore pari a None indica 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_SEED d'ambiente e transpiler_seed sull'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 circuits parametro.

  • 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 con unitary_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 un Target oggetto, puoi specificarlo manualmente qui. Questo sovrascriverà la destinazione da backend.

  • hls_config (HLSConfig | None) – Una classe HLSConfig di configurazione opzionale che verrà passata direttamente alla HighLevelSynthesis fase 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 comando list_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 comando list_stage_plugins() con "optimization" come argomento stage_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_processes nel file di configurazione dell'utente e la variabile d'ambiente QISKIT_NUM_PROCS . Se impostato su None , 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

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