Skip to main content
IBM Quantum Platform

SynthesizeRZRotations

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

GitHub

Bases: TransformationPass

Sustituye las puertas RZ por descomposiciones de Clifford+T.

Este paso sustituye todas las puertas de rotación RZ de un solo qubit con ángulos en coma flotante por secuencias Clifford+T equivalentes.

Internamente, la etapa sintetiza RZ(theta) para un valor general de theta reduciendo el ángulo módulo pi/2: el circuito para RZ(theta) puede construirse a partir de un circuito para RZ(theta mod pi/2 ) añadiendo las puertas de Clifford adecuadas. Es importante destacar que la pasada también almacena en caché los resultados de la síntesis y los reutiliza para ángulos que se encuentran dentro de un margen de tolerancia determinado entre sí.

Por ejemplo:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import SynthesizeRZRotations
from qiskit.quantum_info import Operator
from numpy import pi

# The following quantum circuit consists of 5 Clifford gates
# and three single-qubit RZ rotations gates

qc = QuantumCircuit(4)
qc.cx(0, 1)
qc.rz(9*pi/4, 0)
qc.cz(0, 1)
qc.rz(3*pi/8, 1)
qc.h(1)
qc.s(2)
qc.rz(13*pi/2, 2)
qc.cz(2, 0)
qc.rz(5*pi/3, 3)

qct = SynthesizeRZRotations()(qc)

# The transformed circuit consists of Clifford, T and Tdg gates
clifford_t_names = get_clifford_gate_names() + ["t"] + ["tdg"]
assert(set(qct.count_ops().keys()).issubset(set(clifford_t_names)))

# The circuits before and after the transformation are equivalent
# (with the default value of approximation_degree used by SynthesizeRZRotations)
assert Operator(qc) == Operator(qct)

Si se especifican cache_error tanto synthesis_error como, estos valores determinan el margen de error para la síntesis aproximada y para el almacenamiento en caché, respectivamente. Si no se especifica ninguno de los dos valores, el error total permitido se calcula a partir de approximation_degree, y los valores adecuados para synthesis_error y cache_error se calculan automáticamente.

Parámetros

  • approximation_degree – Controla el grado general de aproximación. El valor predeterminado es 1 - 1e-10.
  • synthesis_error – Error máximo permitido para la síntesis aproximada de RZ(θ)RZ(\theta).
  • cache_error – Error máximo permitido al reutilizar un resultado de síntesis almacenado en caché para ángulos cercanos a θ\theta.

Atributos

is_analysis_pass

Comprueba si la pasada es una pasada de análisis.

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

is_transformation_pass

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

Si el acceso es de tipo « TransformationPass, », esto significa que dicho acceso puede manipular el DAG, pero no puede modificar el conjunto de propiedades (aunque sí puede leerlo).


Métodos

execute

execute(passmanager_ir, state, callback=None)

GitHub

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

Parámetros

  • passmanager_ir (Any) – Qiskit IR para optimizar.
  • state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por parte del 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

IR de Qiskit optimizado y estado del flujo de trabajo.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nombre del paso.

Tipo de retorno

str

run

run(dag)

GitHub

Ejecuta la tarea « SynthesizeRZRotations » en dag.

Parámetros

dag (DAGCircuit)

Tipo de retorno

DAGCircuit

update_status

update_status(state, run_state)

GitHub

Actualizar el estado del flujo de trabajo.

Parámetros

  • state (PassManagerState) – Pasa el estado del gestor para actualizarlo.
  • run_state (RunState) – Estado de finalización de la tarea actual.

Devuelve

Se ha actualizado el estado del gestor de pases.

Tipo de retorno

PassManagerState

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