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 de transpilador Clifford+T especializada; consulta clifford_t_pass_manager() para obtener más información. En este flujo se ignoran los argumentos que se aplican a la transpilación a conjuntos de bases continuas.
Parámetros
-
circuits (_CircuitT) – Circuito(s) a transpilar
-
backend (Backend | None) – Si se establece, el transpilador compilará el circuito de entrada a este dispositivo de destino. Si se establece explícitamente cualquier otra opción (por ejemplo,
coupling_map), anulará 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) – dial heurístico utilizado para la aproximación de circuitos (aproximación de 1.0=no, aproximación de 0.0=maximal )
-
seed_transpiler (int | None) – Establece la semilla aleatoria para las partes estocásticas del transpilador
-
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 unitaria a utilizar. Por defecto se utiliza
'default'. Puede ver una lista de los plugins 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 objetivo de transpilador backend. Normalmente se especifica como parte del argumento
backend, pero si ha construido manualmente un objetoTargetpuede especificarlo manualmente aquí. Esto anulará el objetivo debackend. -
hls_config (HLSConfig | None) – Una clase de
HLSConfigconfiguración opcional que se pasará directamente a la fase de transformaciónHighLevelSynthesis. 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