Rutinas de compilación
qiskit.compiler
Funciones de compilación de circuitos
transpile
qiskit.compiler.transpile(circuits, backend=None, basis_gates=None, coupling_map=None, initial_layout=None, layout_method=None, routing_method=None, translation_method=None, scheduling_method=None, dt=None, approximation_degree=1.0, seed_transpiler=None, optimization_level=None, callback=None, output_name=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, target=None, hls_config=None, init_method=None, optimization_method=None, ignore_backend_supplied_default_methods=False, num_processes=None, qubits_initially_zero=True)
Transpilar uno o varios circuitos, según unos objetivos de transpilación deseados.
La transpilación se realiza potencialmente en paralelo utilizando multiprocesamiento cuando circuits es una lista con > 1 QuantumCircuit dependiendo del entorno local y de la configuración.
La priorización de las restricciones de objetivo de transpilación funciona de la siguiente manera: si se proporciona una entrada target , tendrá prioridad sobre cualquier entrada backend o restricciones sueltas (basis_gates, coupling_map, o dt). Si se proporciona un backend junto con cualquier restricción no vinculante de la lista anterior, la restricción no vinculante tendrá prioridad sobre la restricción backend correspondiente. Este comportamiento se resume en la tabla siguiente. La primera columna de la tabla resume las posibles restricciones proporcionadas por el usuario, y cada celda muestra si la prioridad se asigna a esa entrada de restricción específica o a otra entrada (objetivo/backend( V2 )).
Proporcionado por el usuario | destino | backend( V2 ) |
|---|---|---|
| basis_gates | destino | basis_gates |
| mapa_de_acoplamiento | destino | mapa_de_acoplamiento |
| dt | destino | dt |
Cuando la base de destino está formada por puertas Clifford+T, esta función construye una cadena de procesamiento especializada de transpilador Clifford+T; consulta generate_preset_clifford_t_pass_manager() para obtener documentación más detallada. En este flujo se ignoran los argumentos que solo se aplican a la transpilación a conjuntos de bases continuas. Por ejemplo, el "unitary_synthesis_method" no se tiene en cuenta al sintetizar operadores unitarios de un solo qubit en una secuencia Clifford+T.
Parámetros
-
circuits (_CircuitT) – Circuito(s) a transpilar
-
backend (Backend | None) – Si se establece, el transpilador compilará el circuito de entrada para este dispositivo de destino. Si se configura explícitamente cualquier otra opción (por ejemplo,
coupling_map), esta prevalecerá sobre la del backend. Aquí también se puede pasar una instanciaTargetcomo argumento posicional; en ese caso, se trata como si se hubiera pasado como argumento de palabra clavetarget. Esto refleja el comportamiento degenerate_preset_pass_manager(). -
basis_gates (list[str] | None) – Lista de nombres de puertas básicas a las que se debe realizar el desenrollado (p. g.:
['u1', 'u2', 'u3', 'cx']). SiNone, no se realiza el desenrollado. -
coupling_map (CouplingMap |list[list[int]] | None) –
Mapa de acoplamiento dirigido (quizás personalizado) al objetivo en el mapeo. Si el mapa de acoplamiento es simétrico, es necesario especificar ambas direcciones.
Se admiten varios formatos:
CouplingMapInstancia- La lista debe proporcionarse en forma de matriz de adyacencia, en la que cada entrada especifica todas las interacciones dirigidas de dos qubits compatibles con el backend, p. ej. g.:
[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
-
initial_layout (Layout |dict |list | None) –
Posición inicial de los qubits virtuales en los qubits físicos. Si este diseño hace que el circuito sea compatible con las restricciones de coupling_map, se utilizará. No se garantiza que la disposición final sea la misma, ya que el transpilador puede permutar qubits mediante intercambios u otros medios. Se admiten varios formatos:
-
LayoutInstancia -
Dict * virtual a físico:
{qr[0]: 0, qr[1]: 3, qr[2]: 5}-
físico a virtual:
{0: qr[0], 3: qr[1], 5: qr[2]}
-
-
Lista
-
virtual a físico:
[0, 3, 5] # virtual qubits are ordered (in addition to named) -
físico a virtual:
[qr[0], None, None, qr[1], None, qr[2]]
-
-
-
layout_method (str | None) – Nombre de la pasada de selección de diseño («trivial», «dense», «sabre»). También puede ser el nombre del complemento externo que se va a utilizar para la etapa
layout. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"layout"como argumentostage_name. -
routing_method (str | None) – Nombre del paso de enrutamiento («basic», «lookahead», «stochastic», «sabre», «none»). También puede ser el nombre del complemento externo que se va a utilizar para la etapa
routing. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"routing"como argumentostage_name. -
translation_method (str | None) – Nombre de la pasada de traducción (
"default", o"translator""synthesis"). También puede ser el nombre del complemento externo que se va a utilizar para la etapatranslation. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"translation"como argumentostage_name. -
scheduling_method (str | None) – Nombre de la pasada de programación. *
'as_soon_as_possible': Programar las instrucciones de forma «glotona», lo antes posible en un recurso de qubit. (alias:'asap') *'as_late_as_possible': Programar las instrucciones más tarde, es decir, mantener los qubits en el estado fundamental siempre que sea posible. (alias:'alap') SiNone, no se realizará ninguna programación. También puede ser el nombre del complemento externo que se va a utilizar para la etapascheduling. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"scheduling"como argumentostage_name. -
dt (float | None) – Tiempo de muestreo (resolución) del backend en segundos. Si (
Nonepor defecto),backend.dtse utiliza. -
approximation_degree (float | None) – Dial heurístico utilizado para la aproximación de circuitos, donde
1.0significa que no hay aproximación (dentro de la tolerancia numérica) y0.0significa la aproximación máxima. Sitargetestá disponible, un valor deNoneindica que se permite la aproximación hasta la tasa de error indicada para una operación en el destino. -
seed_transpiler (int | None) – Establece una semilla para el generador de números pseudoaleatorios (PRNG) utilizado por las partes estocásticas del transpilador. Este parámetro tiene prioridad sobre la variable de entorno
QISKIT_TRANSPILER_SEEDy la configuracióntranspiler_seeddel archivo de configuración del usuario. -
optimization_level (int | None) –
Cuánta optimización hay que realizar en los circuitos. Los niveles más altos generan circuitos más optimizados, a costa de un mayor tiempo de transpilación.
- 0: sin optimización
- 1: optimización de la luz
- 2: optimización pesada
- 3: optimización aún mayor
Si
None, se elegirá el nivel 2 por defecto. -
callback (Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any] | None) –
Una función callback que será llamada después de la ejecución de cada pase. La función se llamará con 5 argumentos de palabra clave, |
pass_: el pase que se está ejecutando. |dag: la salida dag del pase. |time: el tiempo de ejecución del pase. |property_set: el conjunto de propiedades. |count: el índice para la ejecución del pase. Los argumentos exactos que se pasan exponen las interioridades del gestor de pases, y están sujetos a cambios a medida que cambien las interioridades del gestor de pases. Si pretende reutilizar una función de devolución de llamada en varias versiones, asegúrese de comprobar que los argumentos que se pasan son los mismos. Para utilizar la función de devolución de llamada, definir una función que tendrá en kwargs dict y acceder a las variables. Por ejemplo:def callback_func(**kwargs): pass_ = kwargs['pass_'] dag = kwargs['dag'] time = kwargs['time'] property_set = kwargs['property_set'] count = kwargs['count'] ... transpile(circ, callback=callback_func) -
output_name (str |list[str] | None) – Una lista con cadenas de caracteres para identificar los circuitos de salida. La longitud de la lista debe ser exactamente igual a la del parámetro
circuits. -
unitary_synthesis_method (str) – El nombre del método de síntesis unitaria que se va a utilizar. Por defecto,
'default'se utiliza. Puedes ver una lista de los complementos instalados conunitary_synthesis_plugin_names(). -
unitary_synthesis_plugin_config (dict | None) – Un diccionario de configuración opcional que se pasará directamente al complemento de síntesis unitaria. Por defecto, este ajuste no tendrá ningún efecto, ya que el método de síntesis unitario predeterminado no admite configuraciones personalizadas. Esto solo debería ser necesario cuando se especifica un complemento de síntesis unitaria con el argumento
unitary_synthesis_method. Dado que esto varía según cada complemento de síntesis unitaria, consulta la documentación del complemento para saber cómo utilizar esta opción. -
target (Target | None) – Un destino de transpilador de backend. Normalmente esto se especifica como parte del
backendargumento, pero si has creado manualmente unTargetobjeto, puedes especificarlo aquí manualmente. Esto anulará el destino debackend. -
hls_config (HLSConfig | None) – Una clase
HLSConfigde configuración opcional que se pasará directamente aHighLevelSynthesisla fase de transformación. Esta clase de configuración permite especificar las listas de algoritmos de síntesis y sus parámetros para diversos objetos de alto nivel. -
init_method (str | None) – El nombre del complemento que se va a utilizar para la etapa
init. Por defecto, no se utiliza ningún complemento externo. Puedes ver una lista de los complementos instalados utilizandolist_stage_plugins()con"init"como argumento del nombre de la etapa. -
optimization_method (str | None) – El nombre del complemento que se va a utilizar para la etapa
optimization. Por defecto, no se utiliza ningún complemento externo. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"optimization"como argumentostage_name. -
ignore_backend_supplied_default_methods (bool) – Si se establece en se ignorarán todos
Truelos métodos predeterminados especificados por un backend. Algunos backends especifican métodos predeterminados alternativos para admitir pasadas o complementos de compilación personalizados específicos de cada destino, que admiten técnicas de compilación propias de cada backend. Si prefieres que no se utilicen estos valores predeterminados, esta opción sirve para desactivar dichos valores predeterminados específicos del backend. -
num_processes (int | None) – El número máximo de procesos paralelos que se pueden iniciar para esta llamada a «transpile» si la ejecución paralela está habilitada. Este argumento tiene prioridad
num_processessobre el archivo de configuración del usuario y sobre la variable de entornoQISKIT_NUM_PROCS. Si se establece en se utilizaráNonela configuración predeterminada del sistema o la configuración local del usuario. -
qubits_initially_zero (bool) – Indica si el circuito de entrada se inicializa a cero.
Devuelve
El circuito o circuitos transpilados.
Eleva
- TranspilerError - en caso de entradas erróneas al transpilador (como parámetros conflictivos) o errores en los pases
- TypeError : si
Targetse pasa un como argumento posicionalbackendy tambiéntargetse especifica como argumento de palabra clave.
Tipo de retorno
_CircuitT