HighLevelSynthesis
class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)
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 ) 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 . Cuando añadimos al circuito un bloque sintetizado que utiliza qubits auxiliares, primero utilizamos los qubits auxiliares limpios.
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 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
targetse 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 . 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)
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
run
run(dag)
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
update_status
update_status(state, run_state)
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