Skip to main content
IBM Quantum Platform

SabreLayout

class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)

GitHub

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)

GitHub

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

name()

GitHub

Nombre del pase.

Tipo de retorno

str

run

run(dag)

GitHub

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

Circuito DAG

Eleva

TranspilerError - si dag más ancho que el objetivo.

update_status

update_status(state, run_state)

GitHub

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

PassManagerState

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