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 configura, 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. -
basis_gates (list[str] | None) – Lista de nombres de puertas básicas a las que se debe realizar el desenrollado (p. ej., g.:
['u1', 'u2', 'u3', 'cx']). SiNone, no realizar 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 del pase de selección del diseño ("trivial", "denso", "sable"). También puede ser el nombre del plugin externo que se utilizará para la etapa
layout. Puede ver una lista de los plugins instalados utilizandolist_stage_plugins()con"layout"como argumentostage_name. -
routing_method (str | None) – Nombre del algoritmo de enrutamiento («básico», «lookahead», «estocástico», «sabre», «ninguno»). También puede ser el nombre del complemento externo que se utilizará para la
routingetapa. Puedes ver una lista de los plugins instalados utilizandolist_stage_plugins()con"routing"como argumentostage_name. -
translation_method (str | None) – Nombre del pase de traducción (
"default","translator"o"synthesis"). También puede ser el nombre del plugin externo que se utilizará para la etapatranslation. Puede ver una lista de los plugins instalados utilizandolist_stage_plugins()con"translation"como argumentostage_name. -
scheduling_method (str | None) – Nombre del pase de programación. *
'as_soon_as_possible': Programar instrucciones con avidez, tan pronto como sea posible en un recurso qubit. (alias:'asap') *'as_late_as_possible': Programar las instrucciones con retraso, es decir, mantener los qubits en el estado de tierra cuando sea posible. (alias:'alap') SiNone, no se realizará ninguna programación. También puede ser el nombre del plugin externo que se utilizará para la etapascheduling. Puede ver una lista de los plugins instalados utilizandolist_stage_plugins()con"scheduling"como argumentostage_name. -
dt (float | None) – Tiempo de muestreo del backend (resolución) en segundos. Si
None(por defecto), se utilizabackend.dt. -
approximation_degree (float | None) – Controlador heurístico utilizado para la aproximación de circuitos, donde
1.0significa que no hay aproximación (dentro de los límites 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 transpiler. Este parámetro tiene prioridad sobre la
QISKIT_TRANSPILER_SEEDvariable de entorno ytranspiler_seedla configuración del 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
circuitsparámetro. -
unitary_synthesis_method (str) – El nombre del método de síntesis unitario 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 plugin de síntesis unitaria. Por defecto esta configuración no tendrá ningún efecto ya que el método de síntesis unitaria por defecto no toma configuración personalizada. Esto sólo debería ser necesario cuando se especifica un complemento de síntesis unitaria con el argumento
unitary_synthesis_method. Como esto es personalizado para cada plugin de síntesis unitaria, consulte la documentación del plugin 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 plugin que se utilizará para la etapa
init. Por defecto no se utiliza un plugin externo. Puede ver una lista de los plugins instalados utilizandolist_stage_plugins()con"init"como argumento para el nombre del escenario. -
optimization_method (str | None) – El nombre del plugin que se utilizará para la etapa
optimization. Por defecto no se utiliza un plugin externo. Puede 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
Truese ignorará cualquier método por defecto especificado por un backend. Algunos backends especifican métodos alternativos por defecto para soportar pases/plugins específicos del objetivo de compilación que soportan técnicas de compilación específicas del backend. Si prefieres que no se utilicen estos valores predeterminados, esta opción se utiliza para desactivar los valores predeterminados específicos del backend. -
num_processes (int | None) – El número máximo de procesos paralelos a lanzar para esta llamada a transpile si la ejecución paralela está habilitada. Este argumento anula
num_processesen el archivo de configuración del usuario, y la variable de entornoQISKIT_NUM_PROCS. Si se establece enNonese utilizará la configuración por defecto del sistema o la configuración local del usuario. -
qubits_initially_zero (bool) – Indica si el circuito de entrada está inicializado 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
Tipo de retorno
_CircuitT