Skip to main content
IBM Quantum Platform

UnitarySynthesisPlugin

class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin

GitHub

Bases: ABC

Clase plugin de síntesis unitaria abstracta

Esta clase abstracta define la interfaz para los plugins de síntesis unitaria.


Atributos

max_qubits

Devuelve el número máximo de qubits que admite el plugin de síntesis unitaria.

Si el tamaño del unitario a sintetizar supera este valor se utilizará el plugin default . Si no hay límite superior devuelve None y todos los unitarios (>= min_qubits si está definido) se pasarán a este plugin cuando esté activado.

min_qubits

Devuelve el número mínimo de qubits que admite el plugin de síntesis unitaria.

Si el tamaño del unitario a sintetizar es inferior a este valor se utilizará el plugin default . Si no hay límite inferior devuelve None y todos los unitarios (<= max_qubits si está definido) se pasarán a este plugin cuando esté activado.

supported_bases

Devuelve un diccionario de bases admitidas para la síntesis

Se espera que devuelva un diccionario en el que la clave es una base de cadena y el valor es una lista de nombres de puertas en las que funciona la base. Si el método de síntesis no admite bases múltiples, debería devolver None. Por ejemplo:

{
    "XZX": ["rz", "rx"],
    "XYX": ["rx", "ry"],
}

Si este método devuelve un diccionario, a los kwargs de ejecución se les pasará un parámetro matched_basis que contiene una lista de las cadenas base (es decir, las claves del diccionario) que coinciden con la puerta base de destino establecida para la transpilación. Si ninguna entrada del diccionario coincide con el conjunto de puertas base de destino, el kwarg matched_basis se establecerá en una lista vacía, y un complemento puede elegir cómo tratar el conjunto de puertas base de destino que no coincida con las capacidades del complemento.

supports_basis_gates

Devuelve si el plugin permite tomar basis_gates

Si devuelve True , el método run() del complemento recibirá un kwarg basis_gates con una lista de nombres de puertas compatibles con el servidor de destino. Por ejemplo, ['sx', 'x', 'cx', 'id', 'rz'].

supports_coupling_map

Devuelve si el plugin permite tomar coupling_map

Si esto devuelve True el método run() del plugin recibirá un kwarg coupling_map. El kwarg coupling_map se establecerá en una tupla cuyo primer elemento será un objeto CouplingMap que representa la conectividad qubit del backend de destino, el segundo elemento será una lista de enteros que representan los índices qubit en el mapa de acoplamiento en el que está unitary. Tenga en cuenta que si el backend de destino no tiene un mapa de acoplamiento establecido, el valor de coupling_map kwarg será (None, qubit_indices).

supports_gate_errors

Devuelve si el plugin permite tomar gate_errors

gate_errors será un diccionario en forma de {gate_name: {(qubit_1, qubit_2): error}}. Por ejemplo:

{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}

Tenga en cuenta que este diccionario podría no estar completo o estar vacío, ya que depende de que el backend de destino informe de los errores de puerta en cada puerta para cada qubit. Las tasas de error de puerta indicadas en gate_errors son proporcionadas por el objeto Backend del dispositivo de destino y el significado exacto puede ser diferente dependiendo del backend.

supports_gate_errors_by_qubit

Devuelve si el plugin permite tomar gate_errors_by_qubit

Se diferencia de supports_gate_errors/gate_errors en que utiliza una visión diferente de los mismos datos. En lugar de estar codificado por nombre de puerta, está codificado por qubit y utiliza instancias para representar puertas (en lugar de nombres de puerta) Gate para representar las puertas (en lugar de sus nombres).

gate_errors_by_qubit será un diccionario en forma de {(qubits,): [Gate, error]}. Por ejemplo:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

Tenga en cuenta que este diccionario podría no estar completo o estar vacío, ya que depende de que el backend de destino informe de los errores de puerta en cada puerta para cada qubit. Las tasas de error de puerta indicadas en gate_errors son proporcionadas por el objeto Backend del dispositivo de destino y el significado exacto puede ser diferente dependiendo del backend.

El valor por defecto es Falso

supports_gate_lengths

Devuelve si el plugin permite tomar gate_lengths

gate_lengths será un diccionario en forma de {gate_name: {(qubit_1, qubit_2): length}}. Por ejemplo:

{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}

donde el valor length está en unidades de segundos.

Tenga en cuenta que este diccionario puede no estar completo o estar vacío, ya que depende de que el backend de destino informe de las longitudes de puerta en cada puerta para cada qubit.

supports_gate_lengths_by_qubit

Devuelve si el plugin permite tomar gate_lengths_by_qubit

Se diferencia de supports_gate_lengths/gate_lengths en que utiliza una visión diferente de los mismos datos. En lugar de estar codificado por nombre de puerta, está codificado por qubit y utiliza Gate para representar las puertas (en lugar de los nombres de las puertas)

gate_lengths_by_qubit será un diccionario en forma de {(qubits,): [Gate, length]}. Por ejemplo:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

donde el valor length está en unidades de segundos.

Tenga en cuenta que este diccionario puede no estar completo o estar vacío, ya que depende de que el backend de destino informe de las longitudes de puerta en cada puerta para cada qubit.

El valor por defecto es Falso

supports_natural_direction

Devuelve si el complemento admite un conmutador para considerar la direccionalidad de las puertas de 2 qubits como natural_direction.

Consulte la documentación de UnitarySynthesis para conocer los posibles valores y su significado.

supports_pulse_optimize

Devuelve si el plugin admite una opción para optimizar los pulsos durante la síntesis como pulse_optimize.

Consulte la documentación de UnitarySynthesis para conocer los posibles valores y su significado.

supports_target

Si el plugin permite tomar target como opción

target será un Target que representa el dispositivo de destino para la salida del pase de síntesis.

Por defecto será False ya que la interfaz del plugin es anterior a la clase Target de la clase Si un plugin devuelve True para este atributo, se espera que el plugin utilice el parámetro Target en lugar de los valores pasados si se establece alguno de supports_gate_lengths, supports_gate_errors, supports_coupling_map, y supports_basis_gates (aunque lo ideal sería que todos esos parámetros contuvieran información duplicada).


Métodos

run

abstractmethod run(unitary, **options)

GitHub

Ejecutar la síntesis para la matriz unitaria dada

Parámetros

  • unitary (numpy.ndarray) – La matriz unitaria a sintetizar a un DAGCircuit objeto
  • options - Los kwargs opcionales que se pasan en función de la salida de los métodos support_* de la clase. Consulte la documentación de estos métodos en UnitarySynthesisPlugin para ver cuáles son las claves y los valores.

Devuelve

La representación en circuito dag del unitario. Alternativamente, puede devolver una tupla de la forma (dag, wires) donde dag es la representación en circuito dag de la representación en circuito del unitario y wires son los cables de mapeo a utilizar para qiskit.dagcircuit.DAGCircuit.substitute_node_with_dag(). Si devuelve una tupla y wires es None se comportará igual que si sólo se devolviera un DAGCircuit . Además, si devuelve None , no se realizará ninguna sustitución.

Tipo de retorno

Circuito DAG

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