SabreLayout
class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)
Bases: TransformationPass
Elija un trazado mediante enrutamiento bidireccional iterativo del circuito de entrada.
Partiendo de un trazado inicial aleatorio, el algoritmo realiza un trazado completo del circuito (mediante el método routing_pass) para terminar con un trazado final. Este esquema final se utiliza como esquema inicial para el trazado del circuito inverso. El algoritmo itera varias veces hasta encontrar una distribución inicial que reduzca el coste total de enrutamiento.
Este método explota la reversibilidad de los circuitos cuánticos, y trata de incluir información global del circuito en la elección del trazado_inicial.
Por defecto, esta pasada ejecutará tanto el diseño como el enrutamiento y transformará el circuito de modo que el diseño se aplique al DAG de entrada (lo que significa que el circuito de salida contará con qubits auxiliares asignados a los qubits no utilizados en el mapa de acoplamiento y que los qubits se reordenarán para que coincidan con los qubits físicos mapeados); a continuación, se aplicará el enrutamiento (insertando SwapGate objetos para tener en cuenta la conectividad limitada). Esto difiere de la mayoría de las demás pasadas de diseño, que son AnalysisPass objetos y se limitan a buscar un diseño inicial y establecerlo en el conjunto de propiedades. Esto se hace porque, por defecto, el paso ejecuta pruebas paralelas con diferentes semillas aleatorias para seleccionar la disposición inicial aleatoria y, a continuación, elige la salida enrutada que requiere el menor número de puertas de intercambio.
Puede utilizar el argumento routing_pass para que esta pasada funcione como una pasada de maquetación típica. Si se especifica, sólo se utilizará la pasada de enrutamiento especificada para seleccionar un diseño inicial y no se ejecutarán múltiples pruebas de semillas.
Además de comenzar con una disposición inicial aleatoria, el pase también puede incluir una lista adicional de disposiciones iniciales que se utilizarán para pruebas adicionales. Si el sabre_starting_layouts está presente en el conjunto de propiedades cuando se ejecuta este pase, que se utilizará para ensayos adicionales. Seguirá habiendo layout_trials de diseños de inicio aleatorios completos y, además, se ejecutará el contenido de sabre_starting_layouts . Se utilizará la salida que dé como resultado la menor cantidad de puertas de intercambio (ya sea a partir de los ensayos aleatorios o del punto de partida del conjunto de propiedades). El valor de este campo debe ser una lista de objetos Layout que representan los diseños iniciales a utilizar. Si falta un qubit virtual en un Layout de la lista, se seleccionará un qubit aleatorio.
Campos de conjunto de propiedades leídos
sabre_starting_layouts (list[Layout])
Una lista opcional de Layout objetos a utilizar para pruebas de diseño adicionales. Esto se añade a las pruebas aleatorias completas especificadas con el argumento layout_trials .
Valores establecidos de la propiedad escritos
layout (Layout)
La asignación inicial elegida de qubits virtuales a físicos, incluida la asignación ancilla.
final_layout (Layout)
Una permutación de cómo se han aplicado los intercambios a los qubits de entrada al final del circuito.
Referencias:
[1] Henry Zou y Matthew Treinish y Kevin Hartman y Alexander Ivrii y Jake Lishman. “LightSABRE: Un algoritmo SABRE ligero y mejorado" arXiv:2409.08368 [2] Li, Gushu, Yufei Ding y Yuan Xie. "Abordar el problema del mapeo de qubits para dispositivos cuánticos de la era NISQ" ASPLOS 2019. arXiv:1809.02573
SabreLayout inicializador.
param acoplamiento_mapa
grafo dirigido que representa un mapa de acoplamiento.
tipo acoplamiento_mapa
UnionCouplingMap[, Objetivo]
param routing_pass
el paso de ruta a utilizar mientras se itera. Si se especifica este pass funciona como un AnalysisPass y sólo rellenará el campo layout en el conjunto de propiedades y el dag de entrada se devuelve sin modificar. Este argumento es mutuamente excluyente con los argumentos swap_trials y layout_trials y si se especifica al mismo tiempo que cualquiera de ellos se producirá un error.
tipo routing_pass
BasePass
param semilla
semilla para establecer una disposición aleatoria del primer ensayo.
tipo semilla
int
param max_iteraciones
número de iteraciones adelante-atrás.
tipo max_iteraciones
int
param swap_trials
El número de ensayos a ejecutar de SabreSwap para cada iteración. Esto es equivalente al argumento trials en SabreSwap. Si esto no se especifica (y routing_pass no está configurado) por defecto se utilizará el número de CPUs físicas de su sistema local. Para la reproducibilidad entre entornos, es mejor establecer un número explícito, ya que el resultado dependerá potencialmente del número de pruebas realizadas. Esta opción es mutuamente excluyente con el argumento routing_pass y se producirá un error si se utilizan ambos.
tipo swap_trials
int
param layout_trials
El número de pruebas de semillas aleatorias para ejecutar el diseño. Cuando > 1 se seleccionará el ensayo que dé como resultado la salida con menos puertas de intercambio. Si no se especifica (y routing_pass no está configurado), se utilizará el número de CPU físicas locales como valor predeterminado. Esta opción es mutuamente excluyente con el argumento routing_pass y se producirá un error si se utilizan ambos. Además del número de pruebas aleatorias especificado por este valor, se realizan 3 o 4 pruebas adicionales con diseños comunes, dependiendo del valor de coupling_map .
tipo layout_trials
int
param skip_routing
Si se configura True y no se utiliza routing_pass , el enrutamiento no se aplicará al circuito de salida. Sólo se establecerá el diseño en el conjunto de propiedades. Esta es una solución de compromiso para ejecutar el enrutamiento personalizado con múltiples pruebas de diseño, ya que el uso de esta opción hará que SabreLayout ejecute la etapa de enrutamiento internamente pero no utilice ese resultado.
tipo skip_routing
bool
sube TranspilerError
Si tanto routing_pass como swap_trials o
plantea tanto routing_pass como layout_trials se especifican
Atributos
coupling_map
is_analysis_pass
Comprueba si el pase es un pase de análisis.
Si el pase es un AnalysisPass, significa que el pase puede analizar el DAG y escribir los resultados de ese análisis en el conjunto de propiedades. Este tipo de paso no permite realizar modificaciones en el DAG.
is_transformation_pass
Comprueba si el pase es un pase de transformación.
Si el pase es un TransformationPass, significa que el pase puede manipular el DAG, pero no puede modificar el conjunto de propiedades (pero se puede leer).
Métodos
execute
execute(passmanager_ir, state, callback=None)
Ejecutar la tarea de optimización para la entrada Qiskit IR.
Parámetros
- passmanager_ir (Any) – Qiskit IR para optimizar.
- state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por el propio gestor de pases.
- callback (Callable | None) – Una función de devolución de llamada que se invoca cada vez que se ejecuta una tarea de optimización.
Devuelve
Qiskit IR optimizado y estado del flujo de trabajo.
Tipo de retorno
tupla [ Any, PassManagerState ]
name
run
run(dag)
Ejecuta el pase SabreLayout en dag.
Parámetros
dag (DAGCircuit) – DAG para encontrar el diseño.
Devuelve
El dag de salida si se ejecutó el mapeo de intercambio
(en caso contrario, el dag de entrada se devuelve sin modificar).
Tipo de retorno
Eleva
TranspilerError - si dag más ancho que el objetivo.
update_status
update_status(state, run_state)
Actualizar el estado del flujo de trabajo.
Parámetros
- state (PassManagerState) – Pasar estado de gestor a actualizar.
- run_state (RunState) – Estado de finalización de la tarea actual.
Devuelve
Estado del gestor de pases actualizado.
Tipo de retorno