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 transpiler preserva la unidad salvo por las permutaciones de la «disposición inicial» y la «disposición final». La permutación inicial de la maquetación se debe a la configuración y aplicación de la maquetación inicial durante la fase de maquetación. La permutación final del diseño se debe a SwapGate una inserción realizada durante la fase de trazado. Esta clase proporciona una interfaz que permite analizar estas permutaciones mediante diversos métodos auxiliares.
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,
})(Es también este atributo en y circuit_drawer() el QuantumCircuit.draw() que se utiliza para mostrar la correspondencia entre los qubits y las 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 maquetación. Es unLayoutobjeto que asigna los objetos deQubitlaQuantumCircuitlista de entrada a la posición correspondiente en la lista de salidaQuantumCircuit.qubits.input_qubit_mapping- Este atributo se utiliza para mantener el orden de entrada del objeto originalQuantumCircuit. Asigna el objeto virtualQubitdel circuito original (yinitial_layout) a su posición correspondiente enQuantumCircuit.qubitsel circuito original.Operator.from_circuit()Esto es necesario a la hora de calcular la permutación del circuitoOperator(y lo utiliza ).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 desdeQuantumCircuit.qubitssu posición inicial en dicho circuito 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 término 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 lista delqubitscircuito 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
initial_layout
Tipo: Layout
input_qubit_mapping
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 la habitual final_layout debido a un descuido de Qiskit durante su introducción. En otras palabras, virtual_permutation_layout asocia una Qubit instancia situada al final del circuito con 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 correspondencia entre los objetos virtuales Qubit del circuito de entrada y las posiciones de los qubits físicos seleccionados durante el diseño. Esto es análogo al atributo initial_layout .
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 Qubit circuito de entrada 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.