BasisTranslator
class qiskit.transpiler.passes.BasisTranslator(*args, **kwargs)
Bases: TransformationPass
Traduce las puertas a una base de destino buscando un conjunto de traducciones a partir de un EquivalenceLibrary dado.
Este pase funciona en varios pasos:
- Determinar la base de la fuente del circuito de entrada.
- Realiza una búsqueda de Dijkstra sobre conjuntos de bases, comenzando desde la base de destino del dispositivo, se generan nuevas puertas utilizando las reglas de EquivalenceLibrary y la búsqueda se detiene si se han generado todas las puertas de la base de origen.
- La ruta encontrada, como conjunto de reglas de EquivalenceLibrary,, se compone en un conjunto de reglas de sustitución de puertas.
- Las reglas de sustitución compuestas se aplican in situ a cada nodo op que no esté ya en la target_basis.
Si se especifica el argumento de palabra clave de destino y ese Target objeto contiene operaciones que no son globales (es decir, que están definidas solo para un subconjunto de qubits), según lo calculado por get_non_global_operation_names(), esta pasada intentará ajustar la traducción de salida a esas restricciones. En el caso de las operaciones con un solo qubit, el proceso es sencillo: la función «pass» realizará una búsqueda utilizando la unión del conjunto de operaciones globales con el conjunto de operaciones definidas exclusivamente para ese qubit. En el caso de las puertas de múltiples qubits, la cuestión es un poco más compleja: aunque el comportamiento es inicialmente similar al del caso de un solo qubit, no basta con utilizar todos los qubits sobre los que se ejecuta la operación (donde el orden no es relevante). También debemos tener en cuenta cualquier posible qubit local definido en subconjuntos de los argumentos cuánticos de la operación de múltiples qubits. Esto significa que el conjunto objetivo utilizado para la búsqueda de una puerta multiqubit no global es la unión de las operaciones globales, las puertas multiqubit no globales que comparten los mismos qubits y cualquier puerta no global definida sobre cualquier subconjunto de los qubits utilizados.
En el caso de operaciones no globales, es posible que una sola ejecución de este paso produzca una traducción incompleta si alguna puerta no global está definida en qubits que son un subconjunto de una puerta multi-qubit mayor. Por ejemplo, si se tiene una puerta u definida sólo en el qubit 0 y una puerta x sólo en el qubit 1 es posible que al traducir una operación de 2 qubit en el qubit 0 y 1 la salida tenga u en el qubit 1 y x en el qubit 0. Por lo general, la segunda pasada corrige estos problemas.
Errores de traducción
Esta pasada dará error si no hay camino para traducir una puerta de entrada a la base especificada. Sin embargo, en un gestor de pases típico/por defecto, este pase se ejecuta varias veces en diferentes etapas del proceso de compilación. Esto significa que potencialmente las puertas de entrada que se están traduciendo no estaban en el circuito de entrada a transpile() ya que fueron generadas por una transformación intermedia en el circuito.
Cuando se produce este error, suele significar que o bien la base de destino no es universal o bien se necesitan reglas de equivalencia adicionales en la EquivalenceLibrary que utiliza el BasisTranslator pasar. Puede consultar Puertas de base personalizadas para obtener más información sobre cómo añadir reglas de equivalencia personalizadas.
Inicializa una instancia de BasisTranslator.
param equivalencia_biblioteca
La biblioteca de equivalencias que utilizará el pase BasisTranslator. (Las instrucciones de esta biblioteca no se desenrollarán con esta pasada)
tipo equivalencia_biblioteca
EquivalenceLibrary
param target_basis
Nombres de bases de destino a las que desenrollar, por ejemplo ['u3', 'cx'].
tipo target_basis
[liststr]
param objetivo
El objetivo de compilación del backend
tipo objetivo
Destino
param min_qubits
El número mínimo de qubits para las operaciones en el dag de entrada a traducir.
tipo min_qubits
int
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)
Traduce un DAGCircuit de entrada a la base de destino.
Parámetros
dag (DAGCircuit) – entrada dag
Eleva
TranspilerError - si no se puede alcanzar la base objetivo
Devuelve
circuito traducido.
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