Skip to main content
IBM Quantum Platform

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)

GitHub

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_gatesdestinobasis_gates
mapa_de_acoplamientodestinomapa_de_acoplamiento
dtdestinodt
Nota

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 instancia Target como argumento posicional; en ese caso, se trata como si se hubiera pasado como argumento de palabra clave target . Esto refleja el comportamiento de generate_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']). Si None, 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:

    1. CouplingMap Instancia
    2. 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:

    1. Layout Instancia

    2. 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]}
    3. 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 utilizando list_stage_plugins() con "layout" como argumento stage_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 utilizando list_stage_plugins() con "routing" como argumento stage_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 etapa translation . Puedes ver una lista de los plugins instalados utilizando list_stage_plugins() con "translation" como argumento stage_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') Si None, no se realizará ninguna programación. También puede ser el nombre del complemento externo que se va a utilizar para la etapa scheduling . Puedes ver una lista de los plugins instalados utilizando list_stage_plugins() con "scheduling" como argumento stage_name .

  • dt (float | None) – Tiempo de muestreo (resolución) del backend en segundos. Si ( None por defecto), backend.dt se utiliza.

  • approximation_degree (float | None) – Dial heurístico utilizado para la aproximación de circuitos, donde 1.0 significa que no hay aproximación (dentro de la tolerancia numérica) y 0.0 significa la aproximación máxima. Si target está disponible, un valor de None indica 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_SEED y la configuración transpiler_seed 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 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 con unitary_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 backend argumento, pero si has creado manualmente un Target objeto, puedes especificarlo aquí manualmente. Esto anulará el destino de backend.

  • hls_config (HLSConfig | None) – Una clase HLSConfig de configuración opcional que se pasará directamente a HighLevelSynthesis la 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 utilizando list_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 utilizando list_stage_plugins() con "optimization" como argumento stage_name .

  • ignore_backend_supplied_default_methods (bool) – Si se establece en se ignorarán todos True los 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_processes sobre el archivo de configuración del usuario y sobre la variable de entorno QISKIT_NUM_PROCS . Si se establece en se utilizará None la 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 Target se pasa un como argumento posicional backend y también target se especifica como argumento de palabra clave.

Tipo de retorno

_CircuitT

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