TranspileLayout
class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)
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")
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")
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")
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:
initial_layout- Este atributo se utiliza para modelar la permutación provocada por la etapa de diseño. Es unLayoutobjeto que asigna los objetosQubitde laQuantumCircuitlista de entrada a la posición correspondiente en la lista deQuantumCircuit.qubitssalida.input_qubit_mapping- Este atributo se utiliza para mantener el orden de entrada del objeto originalQuantumCircuitoriginal. Mapea el objeto virtualQubitdel circuito original (yinitial_layout) a su posición correspondiente enQuantumCircuit.qubitsen el circuito original. Esto es necesario al calcular la permutación de laOperatordel circuito (y utilizado porOperator.from_circuit()).final_layout- Este atributo se utiliza para modelar la permutación provocada por la etapa de enrutamiento. Es unLayoutobjeto que asigna los qubits del circuito de salida deQuantumCircuit.qubitsen el circuito de salida a sus posiciones finales tras el enrutamiento. Es importante destacar que esto solo representa la permutación provocada por la inserciónSwapGatede «s» en elQuantumCircuitdurante la fase de enrutamiento. No se trata de una correspondencia entre la posición del circuito de entrada original y la posición final al final del circuito transpilado. Si lo necesitas, puedes utilizar elfinal_index_layout()para generarlo. Sifinal_layoutse establece enNone, esto indica que no se ha ejecutado el enrutamiento, y puede considerarse equivalente a una disposición trivial con los qubits de la listaqubitsdel circuito de salida.
Atributos
Parámetros
- initial_layout (Layout)
- input_qubit_mapping (dict[Qubit, int])
- final_layout (Layout | None)
- _input_qubit_count (int | None)
- _output_qubit_list (list[Qubit] | None)
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)
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
final_virtual_layout
final_virtual_layout(filter_ancillas=True)
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
from_property_set
classmethod from_property_set(dag, property_set)
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.
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.
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)
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
initial_virtual_layout
initial_virtual_layout(filter_ancillas=False)
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
routing_permutation
routing_permutation()
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
write_into_property_set
write_into_property_set(property_set)
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.