Skip to main content
IBM Quantum Platform

HighLevelSynthesis

class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)

GitHub

Bases: TransformationPass

Sintetizar objetos de nivel superior y desenrollar definiciones personalizadas.

La entrada de este paso es un DAG que puede contener objetos de nivel superior, incluidos objetos matemáticos abstractos (por ejemplo, objetos de tipo LinearFunction), operaciones anotadas (objetos de tipo AnnotatedOperation) y puertas personalizadas.

En el caso de uso más común, cuando se especifica basis_gates o target , se sintetizan todos los objetos de nivel superior, por lo que la salida es un archivo DAGCircuit sin dichos objetos. Para ser más precisos, cada puerta del DAG de salida está soportada directamente por el objetivo o se encuentra en equivalence_library.

Los objetos matemáticos abstractos se sintetizan utilizando plugins de síntesis, aplicando métodos de síntesis especificados en la configuración de síntesis de alto nivel (consulte la documentación de HLSConfig).

Como ejemplo, supongamos que op_a y op_b son nombres de dos objetos de nivel superior, que op_a-objetos tienen dos métodos de síntesis default que no requiere ningún parámetro adicional y other con dos parámetros enteros opcionales option_1 y option_2, que op_b-objetos tienen un único método de síntesis default, y qc es un circuito cuántico que contiene op_a y op_b objetos. El siguiente fragmento de código:

hls_config = HLSConfig(op_b=[("other", {"option_1": 7, "option_2": 4})])
pm = PassManager([HighLevelSynthesis(hls_config=hls_config)])
transpiled_qc = pm.run(qc)

muestra cómo ejecutar el método de síntesis alternativo other para los objetos op_b, mientras se utilizan los métodos default para todos los demás objetos de alto nivel, incluidos los objetos op_a.

Las operaciones anotadas (consistentes en una operación base y una lista de modificadores inversos, de control y de potencia) se sintetizan recursivamente, sintetizando primero la operación base y aplicando después métodos de síntesis para crear versiones invertidas, controladas o potenciadas de la misma).

Las puertas personalizadas se sintetizan desenrollando recursivamente sus definiciones, hasta que todas las puertas sean compatibles con el objetivo o estén en la biblioteca de equivalencias.

Cuando no se especifica ni basis_gates ni target , el pase sintetiza sólo los objetos matemáticos abstractos de nivel superior y las operaciones anotadas, sin descender a la puerta definitions. Esto es coherente con el comportamiento anterior del paso, que permitía sintetizar algunos objetos de nivel superior utilizando plugins y dejando las demás puertas intactas.

La síntesis de alto nivel pasa información sobre los qubits auxiliares disponibles y si su estado es limpio (definido como 0|0\rangle ) o sucio (estado desconocido) a la rutina de síntesis a través de los argumentos respectivos "num_clean_ancillas" y "num_dirty_ancillas". Si qubits_initially_zero es True (por defecto), se supone que los qubits están en el estado 0|0\rangle. Cuando añadimos al circuito un bloque sintetizado que utiliza qubits auxiliares, primero utilizamos los qubits auxiliares limpios.

Nota

Se supone que los métodos de síntesis mantienen el estado de los qubits auxiliares. Concretamente, esto significa que los qubits auxiliares limpios deben seguir en el estado 0|0\rangle después del bloque sintetizado, mientras que los qubits auxiliares sucios se reutilizan sólo como qubits sucios.

HighLevelSynthesis inicializador.

Parámetros

  • hls_config : el archivo de configuración de síntesis de alto nivel que especifica los métodos y parámetros de síntesis para diversos objetos de alto nivel del circuito. Si no se especifica, se utilizarán los métodos y parámetros de síntesis predeterminados.
  • coupling_map – grafo dirigido representado como un mapa de acoplamiento.
  • destino : el destino del backend que se utilizará para esta pasada. Si se especifica, se utilizará en lugar del mapa de acoplamiento.
  • use_qubit\indices - una bandera que indica si este pase de síntesis se está ejecutando antes o después de que se establezca el diseño, es decir, si los índices qubit de los objetos de nivel superior corresponden a los índices qubit en el backend de destino.
  • equivalence_library - La biblioteca de equivalencia utilizada (las instrucciones de esta biblioteca no serán desenrolladas por esta pasada).
  • basis_gates : nombres de las bases de destino a las que se va a desarrollar, p. ej.[,] ‘u3’, «cx». Se ignorará si también target se especifica.
  • min_qubits - El número mínimo de qubits para las operaciones en el dag de entrada a traducir.
  • qubits_initially_zero - Indica si los qubits están inicialmente en el estado 0|0\rangle. Esto permite a la síntesis de alto nivel utilizar qubits auxiliares limpios (es decir, en estado cero) para sintetizar una operación.
  • optimization_metric - Especifica el criterio de optimización utilizado por los métodos de síntesis por defecto para objetos de alto nivel (cuando está disponible).

Atributos

is_analysis_pass

Comprueba si el pase es un pase de análisis.

Si el pase es un AnalysisPass, significa que el pase puede analizar el DAG y escribir los resultados de ese análisis en el conjunto de propiedades. Este tipo de paso no permite realizar modificaciones en el DAG.

is_transformation_pass

Comprueba si el pase es un pase de transformación.

Si el pase es un TransformationPass, significa que el pase puede manipular el DAG, pero no puede modificar el conjunto de propiedades (pero se puede leer).


Métodos

execute

execute(passmanager_ir, state, callback=None)

GitHub

Ejecutar la tarea de optimización para la entrada Qiskit IR.

Parámetros

  • passmanager_ir (Any) – Qiskit IR para optimizar.
  • state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por el propio gestor de pases.
  • callback (Callable | None) – Una función de devolución de llamada que se invoca cada vez que se ejecuta una tarea de optimización.

Devuelve

Qiskit IR optimizado y estado del flujo de trabajo.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nombre del pase.

Tipo de retorno

str

run

run(dag)

GitHub

Ejecuta el pase HighLevelSynthesis en dag.

Parámetros

dag (DAGCircuit) – input dag.

Devuelve

Dag de salida con operaciones de nivel superior sintetizadas.

Eleva

  • TranspilerError - cuando el transpilador no puede sintetizar el DAG dado
  • (** por ejemplo****, cuando el método de síntesis especificado no está disponible ).** -

Tipo de retorno

Circuito DAG

update_status

update_status(state, run_state)

GitHub

Actualizar el estado del flujo de trabajo.

Parámetros

  • state (PassManagerState) – Pasar estado de gestor a actualizar.
  • run_state (RunState) – Estado de finalización de la tarea actual.

Devuelve

Estado del gestor de pases actualizado.

Tipo de retorno

PassManagerState

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