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 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']). Si None, 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:

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

  • dt (float | None) – Tiempo de muestreo del backend (resolución) en segundos. Si None (por defecto), se utiliza backend.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 circuits pará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 con unitary_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 objeto Target puede especificarlo manualmente aquí. Esto anulará el objetivo de backend.

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

  • ignore_backend_supplied_default_methods (bool) – Si se establece en True se 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_processes en el archivo de configuración del usuario, y la variable de entorno QISKIT_NUM_PROCS . Si se establece en None se 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

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