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

Bases: object

Atributos de diseño para el circuito de salida del transpilador.

La dirección transpiler es unitario hasta las permutaciones "disposición inicial" y "disposición final". La permutación de la disposición inicial se produce al establecer y aplicar la disposición inicial durante la etapa de Disposición. La permutación final del trazado se produce por SwapGate inserción durante la etapa de Enrutamiento. Esta clase proporciona una interfaz para razonar sobre estas permutaciones utilizando una variedad de métodos de ayuda.

Durante la fase de diseño, el transpilador puede reasignar el orden de los qubits en el circuito para adaptarlo al backend de destino. Por ejemplo, que el circuito de entrada sea:

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")
Diagrama del circuito generado por el código anterior.

Supongamos que durante la etapa de disposición el transpilador reordena los qubits para que sean:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
Diagrama del circuito generado por el código anterior.

Entonces la salida del método initial_virtual_layout() es equivalente a:

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

(también es este atributo en el QuantumCircuit.draw() y circuit_drawer() que se utiliza para mostrar la asignación de qubits a posiciones en las visualizaciones de circuitos tras la transpilación).

Siguiendo con el ejemplo anterior, supongamos que durante la etapa de enrutamiento el transpilador necesita insertar puertas de intercambio, y el circuito de salida se convierte en:

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")
Diagrama del circuito generado por el código anterior.

Entonces la salida del método routing_permutation() método es:

[1, 0, 2]

que asigna las posiciones de los qubits antes del encaminamiento a sus posiciones finales después del encaminamiento.

Hay tres atributos públicos asociados con la clase, sin embargo, estos se proporcionan principalmente para la compatibilidad con versiones anteriores y representan el estado interno del transpilador. Se definen como:


Atributos

Parámetros

final_layout

Tipo: Layout | None

Valor predeterminado: None

initial_layout

Tipo: Layout

input_qubit_mapping

Tipo: dict[Qubit, int]


Métodos

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

Genera el diseño final como una matriz de enteros.

Este método generará una matriz de posiciones finales para cada qubit en el circuito de entrada. Por ejemplo, si tuvieras un circuito de entrada como:

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

y la salida del transpilador era:

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

entonces el método final_index_layout() devuelve el método:

[2, 0, 1]

Esto puede verse de la siguiente manera. El qubit 0 del circuito original se asigna al qubit 2 del circuito de salida durante la etapa de diseño, que se asigna al qubit 2 durante la etapa de enrutamiento. El qubit 1 del circuito original se asigna al qubit 1 del circuito de salida durante la etapa de diseño, que se asigna al qubit 0 durante la etapa de enrutamiento. El qubit 2 del circuito original se asigna al qubit 0 del circuito de salida durante la etapa de diseño, que se asigna al qubit 1 durante la etapa de enrutamiento. La longitud de la lista de salida será tan amplia como el número de qubits del circuito de entrada, ya que la lista de salida de este método es para rastrear la permutación de qubits en el circuito original causada por el transpilador.

Parámetros

filter_ancillas (bool) – Si se establece en False cualquier ancillas asignada en el circuito de salida se incluirá en el diseño.

Devuelve

Una lista de posiciones finales para cada qubit del circuito de entrada.

Tipo de retorno

lista [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

Genera el diseño final como un Layout objeto.

Este método generará una matriz de posiciones finales para cada qubit en el circuito de entrada. Por ejemplo, si tuvieras un circuito de entrada como:

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

y la salida del transpilador era:

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

entonces el retorno de esta función sería un objeto layout:

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

Esto puede verse de la siguiente manera. El qubit 0 del circuito original se asigna al qubit 2 del circuito de salida durante la etapa de diseño, que se asigna al qubit 2 durante la etapa de enrutamiento. El qubit 1 del circuito original se asigna al qubit 1 del circuito de salida durante la etapa de diseño, que se asigna al qubit 0 durante la etapa de enrutamiento. El qubit 2 del circuito original se asigna al qubit 0 del circuito de salida durante la etapa de diseño, que se asigna al qubit 1 durante la etapa de enrutamiento. La longitud de la lista de salida será tan amplia como el número de qubits del circuito de entrada, ya que la lista de salida de este método es para rastrear la permutación de qubits en el circuito original causada por el transpilador.

Parámetros

filter_ancillas (bool) – Si se establece en False cualquier ancillas asignada en el circuito de salida se incluirá en el diseño.

Devuelve

Un objeto de diseño que mapea las posiciones finales de cada qubit.

Tipo de retorno

Diseño

from_property_set

classmethod from_property_set(dag, property_set)

GitHub

Construye el TranspileLayout leyendo los campos del PropertySet. Devuelve None si no hay teclas de configuración presentes.

Esto incluye la combinación de las distintas claves del conjunto de propiedades en el conjunto completo de disposiciones iniciales y finales, incluidas las permutaciones virtuales.

Esto no invalida ni muta en modo alguno el conjunto de propiedades dado. Para "canonizar" posteriormente el conjunto de propiedades, llame a write_into_property_set().

Esto lee las siguientes claves de conjunto de propiedades:

layout

Obligatorio. El objeto Layout objeto que asigna qubits virtuales (potencialmente expandidos con ancillas) a índices de qubits físicos. Esto corresponde directamente a initial_layout.

Nota

En todos los usos estándar, este campo es obligatorio. Sin embargo, si se define virtual_permutation_layout , se deducirá un diseño "trivial", incluso si el circuito no está realmente diseñado para el hardware. Esta es una desafortunada limitación del modelo de datos de esta clase, donde no es posible especificar una permutación final sin tener también una disposición inicial. Esta deficiencia se corregirá en Qiskit 3.0.

original_qubit_indices

Obligatorio (pero establecido automáticamente por el PassManager). El mapeo {virtual: index} que indica qué índice relativo tenía cada qubit virtual entrante, en el circuito de entrada. Esto también se puede ampliar con ancillas (en cuyo caso los índices de ancilla no significan mucho, ya que no estaban en el circuito de entrada).

num_input_qubits

Obligatorio (pero establecido automáticamente por el PassManager). El número de qubits virtuales explícitos en el circuito de entrada (es decir, sin incluir las ancillas implícitas).

final_layout

Opcional. La permutación final efectiva, en términos de los qubits actuales del DAGCircuit. Esto corresponde directamente a final_layout.

virtual_permutation_layout

Opcional. Esto se establece mediante ciertos pases de optimización que se ejecutan antes de la selección del diseño, tales como ElidePermutations. Es similar en espíritu a final_layout, pero normalmente sólo se aplica a los qubits virtuales de entrada.

Aviso

Este objeto utiliza la convención de permutación opuesta a final_layout debido a un descuido en Qiskit durante su introducción. En otras palabras, virtual_permutation_layout asigna una Qubit al final del circuito a su índice entero al principio del circuito.

Parámetros

  • dag (DAGCircuit) – el estado actual del DAGCircuit.
  • property_set (PropertySet) – el conjunto de propiedades del transpilador actual. Esto debe tener al menos la clave layout .

Tipo de retorno

TranspileLayout | Ninguno

initial_index_layout

initial_index_layout(filter_ancillas=False)

GitHub

Generar un diseño inicial como una matriz de enteros.

Parámetros

filter_ancillas (bool) – Si se establece en True , los qubits ancilla añadidos al transpilador no se incluirán en la salida.

Devuelve

Una matriz de diseño que asigna una posición en la matriz a su nueva posición en el circuito de salida.

Tipo de retorno

lista [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

Devuelve un Layout para el diseño inicial.

Esto devuelve una asignación de objetos virtuales Qubit del circuito de entrada a las posiciones de los qubits físicos seleccionados durante el diseño. Es análogo al atributo initial_layout atributo.

Parámetros

filter_ancillas (bool) – Si se establece en True , sólo los qubits del circuito de entrada estarán en el diseño devuelto. Cualquier qubit ancilla añadido al circuito de salida será filtrado del objeto devuelto.

Devuelve

Un objeto de diseño que asigna los objetos del circuito de entrada a las posiciones de los qubits físicos seleccionados Qubit a las posiciones de los qubits físicos seleccionados.

Tipo de retorno

Diseño

routing_permutation

routing_permutation()

GitHub

Genera un diseño final como una matriz de enteros.

Si no hay ningún atributo final_layout indica que no se ha producido ninguna permutación de salida causada por el enrutamiento u otras transformaciones del transpilador. En este caso, la función devolverá una lista de [0, 1, 2, .., n].

Devuelve

Una matriz de diseño que asigna una posición en la matriz a su nueva posición en el circuito de salida.

Tipo de retorno

lista [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

descomprima este diseño en el formulario de restricciones sueltas de property_set.

Este es el método inverso de from_property_set().

Esto siempre escribe las siguientes claves de propiedades, sobrescribiéndolas si ya estaban establecidas:

layout

Corresponde directamente a initial_layout.

original_qubit_indices

Corresponde directamente a input_qubit_mapping.

final_layout

Corresponde directamente a final_layout. Tenga en cuenta que esto podría no ser idéntico a la final_layout de antes de una llamada a from_property_set()porque los efectos de virtual_permutation_layout se habrán combinado en él.

virtual_permutation_layout

Se elimina del conjunto de propiedades; TranspileLayout "finaliza" las múltiples permutaciones separadas en una sola permutación, para conservar la forma canónica.

Además, se actualizan las siguientes claves, si este TranspileLayout tiene un valor conocido para ellas. Se dejan como están si no, para manejar los casos en los que esta clase se construyó manualmente sin establecer ciertos campos opcionales.

num_input_qubits

El número de qubits virtuales no-ancilla en el circuito de entrada.

Parámetros

property_set (dict[str, object]) – el PropertySet (o general dict) en el que debe escribirse la salida. Esto muta la entrada en su lugar.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.