Skip to main content
IBM Quantum Platform

TranspileLayout

class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)

GitHub

Basi: object

Attributi di layout per il circuito di uscita dal transpiler.

L'operazione transpiler conserva l'unitarità, a parte le permutazioni relative alla “disposizione iniziale” e alla “disposizione finale”. La permutazione iniziale del layout è determinata dall'impostazione e dall'applicazione del layout iniziale durante la fase di layout. La permutazione finale del layout è causata dall'inserimento SwapGate effettuato durante la fase di instradamento. Questa classe fornisce un'interfaccia che consente di analizzare tali permutazioni utilizzando una serie di metodi di supporto.

Durante la fase di layout, il transpiler può potenzialmente ridisporre l'ordine dei qubit nel circuito per adattarlo al backend di destinazione. Ad esempio, si consideri il circuito di ingresso:

from qiskit.circuit import QuantumCircuit, QuantumRegister

qr = QuantumRegister(3, name="MyReg")
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.draw("mpl")
Schema del circuito prodotto dal codice precedente.

Supponiamo che durante la fase di layout il transpiler riordini i qubit in modo che siano:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
Schema del circuito prodotto dal codice precedente.

Allora l'output del metodo initial_virtual_layout() è equivalente a:

Layout({
    qr[0]: 2,
    qr[1]: 1,
    qr[2]: 0,
})

(è proprio questo attributo nei file QuantumCircuit.draw() e circuit_drawer() che viene utilizzato per visualizzare la mappatura dei qubit alle posizioni nelle rappresentazioni grafiche dei circuiti dopo la transpilazione).

Sulla base dell'esempio precedente, supponiamo che durante la fase di instradamento il transpiler debba inserire delle porte di scambio e che il circuito di uscita diventi:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.swap(0, 1)
qc.cx(2, 1)
qc.draw("mpl")
Schema del circuito prodotto dal codice precedente.

L'output del metodo routing_permutation() è:

[1, 0, 2]

che mappa le posizioni dei qubit prima dell'instradamento e le loro posizioni finali dopo l'instradamento.

Ci sono tre attributi pubblici associati alla classe, ma sono forniti principalmente per la compatibilità all'indietro e rappresentano lo stato interno del transpiler. Sono definiti come:

  • initial_layout - Questo attributo viene utilizzato per modellare la permutazione causata dalla fase di layout. QuantumCircuitSi tratta di un Layout oggetto che associa gli oggetti s Qubit in ingresso alla posizione nella lista di uscita QuantumCircuit.qubits .
  • input_qubit_mapping - Questo attributo serve a mantenere l'ordine di inserimento dell'oggetto originale QuantumCircuit . Mappa l'oggetto virtuale Qubit del circuito originale (e initial_layout) alla sua posizione corrispondente nel QuantumCircuit.qubits circuito originale. Ciò è necessario per calcolare la permutazione del Operator circuito (e viene utilizzato da Operator.from_circuit()).
  • final_layout - Questo attributo viene utilizzato per modellare la permutazione causata dalla fase di instradamento. Si tratta di un Layout oggetto che mappa i qubit del circuito di uscita da QuantumCircuit.qubits nel circuito di uscita alle loro posizioni finali dopo l'instradamento. È importante sottolineare che ciò rappresenta solo la permutazione causata dall'inserimento SwapGatedi s nel QuantumCircuit durante la fase di instradamento. Non si tratta di una corrispondenza tra la posizione del circuito di input originale e la posizione finale alla fine del circuito transpilato. Se ti serve, puoi usare il final_index_layout() per generarlo. Se final_layout è impostato su None, ciò indica che il routing non è stato eseguito e può essere considerato equivalente a un layout banale con i qubit presenti nell'elenco del qubits circuito di uscita.

Attributi

Parametri

final_layout

Tipo: Layout | None

Valore predefinito: None

initial_layout

Tipo: Layout

input_qubit_mapping

Tipo: dict[Qubit, int]


Metodi

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

Genera il layout finale come array di numeri interi.

Questo metodo genera una serie di posizioni finali per ogni qubit nel circuito di ingresso. Ad esempio, se si dispone di un circuito di ingresso come:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

e l'output del transpiler era:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

allora il metodo final_index_layout() restituisce il metodo:

[2, 0, 1]

Questo può essere visto come segue. Il qubit 0 del circuito originale viene mappato sul qubit 2 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 2 durante la fase di instradamento. Il qubit 1 del circuito originale viene mappato sul qubit 1 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 0 durante la fase di instradamento. Il qubit 2 del circuito originale viene mappato sul qubit 0 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 1 durante la fase di instradamento. La lunghezza della lista di uscita sarà pari al numero di qubit del circuito di ingresso, poiché la lista di uscita di questo metodo serve a tracciare la permutazione dei qubit nel circuito originale causata dal transpiler.

Parametri

filter_ancillas (bool) – Se è impostato su False , tutti gli accessori allocati nel circuito di uscita saranno inclusi nel layout.

Risultati

Un elenco di posizioni finali per ogni qubit del circuito di ingresso.

Tipo di restituzione

lista [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

Genera il layout finale come un Layout oggetto.

Questo metodo genera una serie di posizioni finali per ogni qubit nel circuito di ingresso. Ad esempio, se si dispone di un circuito di ingresso come:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

e l'output del transpiler era:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

allora il ritorno di questa funzione sarà un oggetto di layout:

Layout({
    qc.qubits[0]: 2,
    qc.qubits[1]: 0,
    qc.qubits[2]: 1,
})

Questo può essere visto come segue. Il qubit 0 del circuito originale viene mappato sul qubit 2 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 2 durante la fase di instradamento. Il qubit 1 del circuito originale viene mappato sul qubit 1 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 0 durante la fase di instradamento. Il qubit 2 del circuito originale viene mappato sul qubit 0 del circuito di uscita durante la fase di layout, che viene mappato sul qubit 1 durante la fase di instradamento. La lunghezza della lista di uscita sarà pari al numero di qubit del circuito di ingresso, poiché la lista di uscita di questo metodo serve a tracciare la permutazione dei qubit nel circuito originale causata dal transpiler.

Parametri

filter_ancillas (bool) – Se è impostato su False , tutti gli accessori allocati nel circuito di uscita saranno inclusi nel layout.

Risultati

Un oggetto di layout che mappa le posizioni finali di ciascun qubit.

Tipo di restituzione

Layout

from_property_set

classmethod from_property_set(dag, property_set)

GitHub

Costruire il file TranspileLayout leggendo i campi del file PropertySet. Restituisce None se non sono presenti tasti di impostazione del layout.

Questo include la combinazione delle diverse chiavi dell'insieme di proprietà nell'insieme completo di layout iniziali e finali, comprese le permutazioni virtuali.

Questo non invalida né muta in alcun modo l'insieme di proprietà dato. Per "canonicalizzare" l'insieme di proprietà in seguito, si chiami write_into_property_set().

Legge le seguenti chiavi di set di proprietà:

layout

Richiesto. L'oggetto Layout è l'oggetto che mappa i qubit virtuali (potenzialmente espansi con gli ancillas) con gli indici dei qubit fisici. Questo corrisponde direttamente a initial_layout.

Nota

In tutti gli usi standard, questo è un campo obbligatorio. Tuttavia, se virtual_permutation_layout è impostato, si dedurrà un layout "banale", anche se il circuito non è stato effettivamente realizzato in hardware. Si tratta di una sfortunata limitazione del modello di dati di questa classe, dove non è possibile specificare una permutazione finale senza avere anche una disposizione iniziale. Questa mancanza sarà corretta in Qiskit 3.0.

original_qubit_indices

Richiesto (ma impostato automaticamente dall'opzione PassManager). La mappatura {virtual: index} che indica l'indice relativo di ogni qubit virtuale in entrata, nel circuito di ingresso. Questo può essere ampliato anche con le ancille (in questo caso gli indici delle ancille non hanno molto significato, poiché non erano presenti nel circuito in entrata).

num_input_qubits

Richiesto (ma impostato automaticamente dall'opzione PassManager). Il numero di qubit virtuali espliciti nel circuito di ingresso (esclusi gli ancillas impliciti).

final_layout

Opzionale. La permutazione finale effettiva, in termini di qubit attuali del sistema DAGCircuit. Questo corrisponde direttamente a final_layout.

virtual_permutation_layout

Opzionale. Questo valore viene impostato da alcuni passaggi di ottimizzazione che vengono eseguiti prima della selezione del layout, come ad esempio ElidePermutations. È simile nello spirito a final_layout, ma in genere si applica solo ai qubit virtuali in ingresso.

Avvertenza

Questo oggetto utilizza la convenzione di permutazione opposta rispetto final_layout a quella standard, a causa di una svista commessa da Qiskit al momento della sua introduzione. In altre parole, virtual_permutation_layout associa un’istanza Qubit presente alla fine del circuito al suo indice intero all’inizio del circuito.

Parametri

  • dag (DAGCircuit) – lo stato attuale del DAGCircuit.
  • property_set (PropertySet) – l'insieme di proprietà del transpiler corrente. Deve essere impostata almeno la chiave layout .

Tipo di restituzione

TranspileLayout | Nessuno

initial_index_layout

initial_index_layout(filter_ancillas=False)

GitHub

Genera un layout iniziale come array di numeri interi.

Parametri

filter_ancillas (bool) – Se impostato su True , qualsiasi qubit ancilla aggiunto al transpiler non sarà incluso nell'output.

Risultati

Una matrice di layout che mappa una posizione nella matrice alla sua nuova posizione nel circuito di uscita.

Tipo di restituzione

lista [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

Restituisce un Layout per il layout iniziale.

Questo restituisce una corrispondenza tra gli oggetti virtuali Qubit nel circuito di input e le posizioni dei qubit fisici selezionati durante la progettazione. initial_layout È analogo all'attributo.

Parametri

filter_ancillas (bool) – Se impostato su True , solo i qubit del circuito di ingresso saranno presenti nel layout restituito. Qualsiasi qubit ancilla aggiunto al circuito di uscita sarà filtrato dall'oggetto restituito.

Risultati

Un oggetto di layout che associa gli oggetti del Qubit circuito di ingresso alle posizioni dei qubit fisici selezionati.

Tipo di restituzione

Layout

routing_permutation

routing_permutation()

GitHub

Genera un layout finale come array di numeri interi.

Se non è presente alcun attributo final_layout indica che non c'è stata alcuna permutazione dell'uscita causata dall'instradamento o da altre trasformazioni del transpiler. In questo caso la funzione restituirà un elenco di [0, 1, 2, .., n].

Risultati

Una matrice di layout che mappa una posizione nella matrice alla sua nuova posizione nel circuito di uscita.

Tipo di restituzione

lista [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

disimballare questo layout nella forma a vincoli liberi di property_set.

Questo è il metodo inverso di from_property_set().

Scrive sempre le chiavi di impostazione delle proprietà seguenti, sovrascrivendole se erano già impostate:

layout

Corrisponde direttamente a initial_layout.

original_qubit_indices

Corrisponde direttamente a input_qubit_mapping.

final_layout

Corrisponde direttamente a final_layout. Si noti che questo potrebbe non essere identico a final_layout prima di una chiamata a from_property_set()perché gli effetti di virtual_permutation_layout saranno stati combinati in esso.

virtual_permutation_layout

Eliminato dal set di proprietà; TranspileLayout "finalizza" le molteplici permutazioni separate in un'unica permutazione, per mantenere la forma canonica.

Inoltre, vengono aggiornate le seguenti chiavi, se questa TranspileLayout ha un valore noto per esse. In caso contrario, vengono lasciati così come sono, per gestire i casi in cui questa classe è stata costruita manualmente senza impostare alcuni campi opzionali.

num_input_qubits

Il numero di qubit virtuali nonancilla nel circuito di ingresso.

Parametri

property_set (dict[str, object]) – il PropertySet (o generale dict) in cui scrivere l'output. In questo modo l'input viene mutato sul posto.

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