Puertas
Este submódulo proporciona los componentes necesarios para definir y manipular puertas cuánticas para su uso en circuitos cuánticos digitales.
Puertas simples
Use estos constructores para aplicar operaciones estándar de uno y dos qubits:
X(qubit: int)Pauli X (inversión de bit) sobre el qubit especificado.Y(qubit: int)Pauli Y (inversión de bit y fase).Z(qubit: int)Pauli Z (inversión de fase).H(qubit: int)Hadamard: crea superposición.I(qubit: int)Puerta identidad: deja el qubit sin cambios.S(qubit: int)Puerta de fase (rotación π/2 alrededor de Z).T(qubit: int)Puerta T (rotación π/4 alrededor de Z).RX(qubit: int, theta: float | Parameter | Term)Rotación por el ángulo theta alrededor de X.RY(qubit: int, theta: float | Parameter | Term)Rotación por el ángulo theta alrededor de Y.RZ(qubit: int, phi: float | Parameter | Term)Rotación por el ángulo phi alrededor de Z.U1(qubit: int, *, phi: float | Parameter | Term)Desplazamiento de fase equivalente a RZ más fase global.U2(qubit: int, *, phi: float | Parameter | Term, gamma: float | Parameter | Term)Rotación Y de π/2 entre rotaciones Z.U3(qubit: int, *, theta: float | Parameter | Term, phi: float | Parameter | Term, gamma: float | Parameter | Term)Unitaria general de un qubit: descomposición RZ-RY-RZ.SWAP(a: int, b: int)Intercambia los estados de los qubitsayb.CNOT(control: int, target: int)X controlada: invierte el objetivo si el control es 1.CZ(control: int, target: int)Z controlada: aplica Z sobre el objetivo si el control es 1.M(*qubits: int)Mide los qubits listados en la base computacional.
Puertas controladas
Cualquier puerta básica puede convertirse en una puerta controlada usando la clase Controlled:
from qilisdk.digital.gates import Controlled, Y
controlled_y = Controlled(0, basic_gate=Y(1))
multiple_controlled_y = Controlled(0, 1, basic_gate=Y(2))
O alternativamente, se puede usar el método .controlled() sobre cualquier instancia de puerta:
from qilisdk.digital.gates import Y
controlled_y = Y(1).controlled(0)
multiple_controlled_y = Y(2).controlled(0, 1)
Puertas adjuntas
Se puede crear el conjugado hermítico (dagger) de una puerta usando la clase Adjoint o usando el método .adjoint() sobre cualquier instancia de puerta:
from qilisdk.digital.gates import Adjoint, Y
adjoint_y = Adjoint(basic_gate=Y(1))
adjoint_y = Y(1).adjoint()
Puertas exponenciales
Para aplicar una puerta como operador exponencial, use la clase Exponential o el método .exponential() sobre cualquier instancia de puerta:
from qilisdk.digital.gates import Exponential, Y
exp_y = Exponential(basic_gate=Y(1))
exp_y = Y(1).exponential()