Gestores de contraseñas preconfigurados
qiskit.transpiler.preset_passmanagers
Este módulo contiene funciones para generar los gestores de pasadas predefinidas para el transpilador. Los gestores de pasadas predefinidos son instancias de StagedPassManager que se utilizan para ejecutar las transformaciones de circuitos como parte del compilador de Qiskit dentro de la transpile() función en los distintos niveles de optimización, aunque también pueden utilizarse de forma independiente. La funcionalidad se divide aquí en dos partes. El primero incluye las funciones utilizadas para generar el gestor de pasadas completo, que se utiliza en transpile() ( Generación de gestores de pasadas predefinidas de bajo nivel ), y el segundo incluye funciones que se utilizan para construir (ya sea en su totalidad o en parte) las etapas que componen los gestores de pasadas predefinidas ( Funciones del generador de etapas ).
Generación de administrador de pases preestablecidos de bajo nivel
Conjuntos de bases continuas
level_0_pass_manager
qiskit.transpiler.preset_passmanagers.level_0_pass_manager(pass_manager_config)
Gestor de pases de nivel 0: sin optimización explícita aparte de la asignación al backend.
Este gestor de pases aplica la disposición inicial dada por el usuario. Si no se indica ninguno, se utiliza una disposición trivial que consiste en asignar el qubit virtual i-ésimo al qubit físico i-ésimo. Cualquier qubit físico no utilizado se asigna como espacio ancilla.
A continuación, el gestor de pases desenrolla el circuito hasta la base deseada y lo transforma para que coincida con el mapa de acoplamiento.
Parámetros
pass_manager_config (PassManagerConfig) – Configuración del gestor de contraseñas.
Devuelve
un gestor de pases de nivel 0.
Eleva
TranspilerError - si la configuración del passmanager no es válida.
Tipo de retorno
level_1_pass_manager
qiskit.transpiler.preset_passmanagers.level_1_pass_manager(pass_manager_config)
Gestor de pases de nivel 1: optimización de la luz mediante el simple colapso de puertas adyacentes.
Este gestor de pases aplica la disposición inicial dada por el usuario. Si no se da ninguno, y un diseño trivial (i-ésimo virtual -> i-ésimo físico) hace que el circuito se ajuste al mapa de acoplamiento, se utiliza ese. De lo contrario, el circuito se mapea en el subgrafo de acoplamiento más densamente conectado, y se insertan intercambios para mapear. Cualquier qubit físico no utilizado se asigna como espacio ancilla. A continuación, el gestor de pases desenrolla el circuito hasta la base deseada y lo transforma para que coincida con el mapa de acoplamiento. Por último, se realizan optimizaciones en forma de colapso de puertas adyacentes y eliminación de reinicios redundantes.
Parámetros
pass_manager_config (PassManagerConfig) – Configuración del gestor de contraseñas.
Devuelve
un gestor de aprobados de nivel 1.
Eleva
TranspilerError - si la configuración del passmanager no es válida.
Tipo de retorno
level_2_pass_manager
qiskit.transpiler.preset_passmanagers.level_2_pass_manager(pass_manager_config)
Gestor de pases de nivel 2: optimización media mediante la selección del trazado inicial y la cancelación de puertas utilizando reglas de conmutatividad.
Este gestor de pases aplica la disposición inicial dada por el usuario. Si no se da ninguna, se busca una disposición perfecta (es decir, que satisfaga todas las interacciones de 2 qubits). Si no se encuentra tal disposición, los qubits se colocan en el subconjunto más densamente conectado que también presente las mejores fidelidades de puerta.
A continuación, el gestor de pases transforma el circuito para adaptarlo a las restricciones de acoplamiento. A continuación, se desenrolla a la base y se fijan las direcciones cx invertidas. Por último, se realizan optimizaciones en forma de cancelación de puertas conmutativas y eliminación de reinicios redundantes.
Parámetros
pass_manager_config (PassManagerConfig) – Configuración del gestor de contraseñas.
Devuelve
un gestor de aprobados de nivel 2.
Eleva
TranspilerError - si la configuración del passmanager no es válida.
Tipo de retorno
level_3_pass_manager
qiskit.transpiler.preset_passmanagers.level_3_pass_manager(pass_manager_config)
Gestor de pases de nivel 3: optimización pesada mediante mapeo de qubits adaptable al ruido y cancelación de compuertas mediante reglas de conmutatividad y síntesis unitaria.
Este gestor de pases aplica la disposición inicial dada por el usuario. Si no se da ninguna, se busca una disposición perfecta (es decir, que satisfaga todas las interacciones de 2 qubits). Si no se encuentra tal disposición, y se dispone de información sobre la calibración del dispositivo, el circuito se asigna a los qubits con mejores lecturas y a las compuertas CX con mayor fidelidad.
A continuación, el gestor de pases transforma el circuito para adaptarlo a las restricciones de acoplamiento. A continuación, se desenrolla a la base y se fijan las direcciones cx invertidas. Por último, se llevan a cabo optimizaciones en forma de cancelación de compuertas conmutativas, resíntesis de bloques unitarios de dos qubits, eliminación de reinicios redundantes y mejoras finales del diseño.
Parámetros
pass_manager_config (PassManagerConfig) – Configuración del gestor de contraseñas.
Devuelve
un gestor de aprobados de nivel 3.
Eleva
TranspilerError - si la configuración del passmanager no es válida.
Tipo de retorno
Conjuntos de bases Clifford+T
clifford_t_pass_manager
qiskit.transpiler.preset_passmanagers.clifford_t_pass_manager(pass_manager_config, optimization_level)
Generar un gestor de pasos por etapas para la transpilación a la base Clifford+T.
Esta función se invoca cuando generate_preset_pass_manager() la base de destino está formada por puertas Clifford+T. Genera un proceso de transpilación especializado que consta de las siguientes etapas:
- Inicialización: Descomponer las puertas más grandes en puertas de 1 y 2 qubits y realizar optimizaciones lógicas.
- Diseño: Aplica la estrategia de diseño predeterminada utilizada para conjuntos de bases continuos.
- Enrutamiento: aplica la estrategia de enrutamiento predeterminada utilizada para los conjuntos de bases continuas.
- Traducción RZ: Traduce el circuito a la base Clifford+RZ.
- Optimización RZ: Optimiza el circuito en la base Clifford+RZ.
- Traducción de T: Traduce el circuito a la base de Clifford+T.
- Optimización T: optimiza el circuito en la base Clifford+T.
- Programación: aplica la estrategia de programación predeterminada que se utiliza para los conjuntos de bases continuos.
Para obtener los mejores resultados, te recomendamos que incluyas tanto como en la base Clifford+T especificada, así como tantas puertas de Clifford como sea posible. Por ejemplo:
basis_gates = get_clifford_gate_names() + ["t", "tdg"]Estas fases aún se encuentran en fase experimental y están sujetas a cambios. En concreto, aún no están disponibles como complementos de la etapa del transpilador (a diferencia de las etapas para los conjuntos de bases continuas).
Parámetros
- pass_manager_config (PassManagerCliffordTConfig) – Configuración del gestor de pases.
- optimization_level (int) – El nivel de optimización. Si no se especifica, se utiliza por defecto el nivel de optimización 2. Puede ser 0, 1, 2 o 3. Los niveles más altos generan circuitos potencialmente más optimizados, a costa de un tiempo de transpilación más largo.
Devuelve
Gestor de pases por etapas.
Eleva
TranspilerError - si la configuración del passmanager no es válida.
Tipo de retorno
Funciones del generador de etapas
generate_control_flow_options_check
qiskit.transpiler.preset_passmanagers.generate_control_flow_options_check(layout_method=None, routing_method=None, translation_method=None, optimization_method=None, scheduling_method=None, basis_gates=(), target=None)
Generar un gestor de pases que, cuando se ejecuta en un DAG que contiene flujo de control, falla con un mensaje de error que explica las opciones no válidas, y lo que se podría utilizar en su lugar.
Devuelve
un gestor de pasadas que rellena las propiedades de contains_x para cada una de las operaciones de flujo de control, y genera un error si alguna de las opciones dadas no soporta flujo de control, pero se da un circuito con flujo de control.
Tipo de retorno
generate_error_on_control_flow
qiskit.transpiler.preset_passmanagers.generate_error_on_control_flow(message)
Obtener un gestor de pasadas que siempre genere un error si hay flujo de control en un circuito dado.
generate_unroll_3q
qiskit.transpiler.preset_passmanagers.generate_unroll_3q(target, basis_gates=None, approximation_degree=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, hls_config=None, qubits_initially_zero=True, optimization_metric=OptimizationMetric.COUNT_2Q)
Generar un «unroll» >3q PassManager
Parámetros
- target (Target | None) – el
Targetobjeto que representa el backend - basis_gates (list[str] | None) – Una lista de nombres de puertas «str» que representan las puertas básicas en el destino del backend.
- approximation_degree (float | None) – Controlador heurístico utilizado para la aproximación de circuitos, donde
1.0significa que no hay aproximación (dentro de la tolerancia numérica) y0.0significa la aproximación máxima. Sitargetestá disponible, un valor deNoneindica que se permite la aproximación hasta la tasa de error indicada para una operación en el destino. - unitary_synthesis_method (str) – El método de síntesis unitario que se debe utilizar. Puedes ver una lista de los complementos instalados con
unitary_synthesis_plugin_names(). - unitary_synthesis_plugin_config (dict | None) – La configuración opcional del complemento de diccionario depende del complemento en cuestión; consulta la documentación del complemento correspondiente para saber cómo utilizarlo.
- hls_config (HLSConfig | None) – Una clase de configuración opcional que se puede utilizar para
HighLevelSynthesis«pass». Especifica cómo sintetizar diversos objetos de alto nivel. - qubits_initially_zero (bool) – Indica si el circuito de entrada está inicializado a cero.
- optimization_metric (OptimizationMetric) – el
OptimizationMetricobjeto que define la métrica utilizada al optimizar el despliegue.
Devuelve
El gestor de pases unroll 3q o más
Tipo de retorno
generate_embed_passmanager
qiskit.transpiler.preset_passmanagers.generate_embed_passmanager(coupling_map)
Generar una incrustación de diseño PassManager
Esto se utiliza para generar un PassManager objeto que permite ampliar y aplicar una disposición inicial a un circuito
Parámetros
coupling_map (Union[CouplingMap, Target]) – El mapa de acoplamiento del backend en el que se va a integrar el circuito.
Devuelve
La incrustación passmanager que asume la propiedad de diseño
se ha fijado en etapas anteriores
Tipo de retorno
generate_routing_passmanager
qiskit.transpiler.preset_passmanagers.generate_routing_passmanager(routing_pass, target, coupling_map=None, vf2_call_limit=None, seed_transpiler=-1, check_trivial=False, use_barrier_before_measurement=True, vf2_max_trials=None)
Generar una ruta PassManager
Parámetros
- routing_pass (TransformationPass) – El paso que se encargará del enrutamiento
- target (Target) – el
Targetobjeto que representa el backend - coupling_map (CouplingMap) – El mapa de enlace del backend para la ruta hacia
- vf2_call_limit (int) – El límite de llamadas internas para el pase de diseño posterior a vf2. Si es
Noneo0no se ejecutará la maquetación del puesto vf2. - seed_transpiler (int) – Establece una semilla aleatoria para las partes estocásticas del transpilador. Actualmente, esto solo se utiliza para
VF2PostLayouty se recomienda encarecidamente utilizar el valor por defecto de-1(es decir, sin aleatorización). Si se proporciona un valor deNone, este se generará a partir de la entropía del sistema. - check_trivial (bool) – Si se establece en «true», esto condicionará la ejecución de
VF2PostLayoutla pasada tras el enrutamiento en función de si se ha probado una disposición trivial y se ha comprobado que no es perfecta. Esto solo es necesario si el gestor de pasadas creado se ejecutaTrivialLayoutcomo primer intento de diseño y lo utiliza si se trata de un diseño perfecto (como ocurre con el gestor de pasadas predefinido de nivel 1). - use_barrier_before_measurement (bool) – Si es verdadero (valor por defecto), la
BarrierBeforeFinalMeasurementspasada del transpilador se ejecutará antes de la pasada especificada en elrouting_passargumento. - vf2_max_trials (int) – El número máximo de pruebas a ejecutar VF2 cuando se evalúa la pasada de maquetación posterior a vf2. Si es
Noneo0no se ejecutará la maquetación del puesto vf2.
Devuelve
El gestor de pases de ruta
Tipo de retorno
generate_pre_op_passmanager
qiskit.transpiler.preset_passmanagers.generate_pre_op_passmanager(target=None, coupling_map=None, remove_reset_in_zero=False)
Generar un bucle de preoptimización PassManager
Este gestor de pases comprobará que se respeta la direccionalidad del mapa de acoplamiento.
La función qiskit.transpiler.preset_passmanagers.common.generate_pre_op_passmanager() está obsoleta a partir de Qiskit 2.0. Se eliminará en Qiskit 3.0. Ahora los plugins de traducción deben respetar la direccionalidad ISA, por lo que normalmente no es necesario sustituirlos.
Parámetros
- target (Target) – el
Targetobjeto que representa el backend - coupling_map (CouplingMap) – El mapa de acoplamiento que se debe utilizar
- remove_reset_in_zero (bool) – Si
Trueincluir la eliminación de reinicio en cero pase en el generado PassManager
Devuelve
El gestor de pases
Tipo de retorno
generate_translation_passmanager
qiskit.transpiler.preset_passmanagers.generate_translation_passmanager(target, basis_gates=None, method='translator', approximation_degree=None, coupling_map=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, hls_config=None, qubits_initially_zero=True)
Generar una traducción de referencia PassManager
Parámetros
- target (Target | None) – el
Targetobjeto que representa el backend - basis_gates (list[str] | None) – Una lista de nombres de puertas «str» que representan las puertas básicas en el destino del backend
- method (str) – El método de traducción base que debe utilizarse
- approximation_degree (float | None) – Controlador heurístico utilizado para la aproximación de circuitos, donde
1.0significa que no hay aproximación (dentro de la tolerancia numérica) y0.0significa la aproximación máxima. Sitargetestá disponible, un valor deNoneindica que se permite la aproximación hasta la tasa de error indicada para una operación en el destino. - coupling_map (CouplingMap | None) – el mapa de acoplamiento del backend en caso de que la síntesis se realice en un circuito físico. Se tendrá en cuenta la direccionalidad de «coupling_map» si «pulse_optimize» es True/None y «natural_direction» es True/None.
- unitary_synthesis_method (str) – El método de síntesis unitario que se debe utilizar. Puedes ver una lista de los complementos instalados con
unitary_synthesis_plugin_names(). - unitary_synthesis_plugin_config (dict | None) – La configuración opcional del complemento de diccionario depende del complemento en cuestión; consulta la documentación del complemento correspondiente para saber cómo utilizarlo.
- hls_config (HLSConfig | None) – Una clase de configuración opcional que se puede utilizar para
HighLevelSynthesis«pass». Especifica cómo sintetizar diversos objetos de alto nivel. - qubits_initially_zero (bool) – Indica si el circuito de entrada está inicializado a cero.
Devuelve
El gestor de pases de traducción base
Tipo de retorno
Eleva
TranspilerError - Si el kwarg de method no es un valor válido
generate_scheduling
qiskit.transpiler.preset_passmanagers.generate_scheduling(instruction_durations, scheduling_method, timing_constraints, target=None)
Generar una programación de optimización posterior PassManager
Parámetros
- instruction_durations (dict) – El diccionario de duraciones de instrucción
- scheduling_method (str) – El método de programación a utilizar puede ser
'asap'/'as_soon_as_possible'o'alap'/'as_late_as_possible' - timing_constraints (TimingConstraints) – Restricciones de alineación temporal del hardware.
- target (Target) – El
Targetobjeto que representa el backend
Devuelve
El gestor de pases de programación
Tipo de retorno
Eleva
TranspilerError - Si el kwarg de scheduling_method no es un valor válido