Portes
Aquest submòdul proporciona els components necessaris per definir i manipular portes quàntiques per usar-les en circuits quàntics digitals.
Portes simples
Utilitzeu aquests constructors per aplicar operacions estàndard d’un i dos qubits:
X(qubit: int)Pauli X (inversió de bit) sobre el qubit especificat.Y(qubit: int)Pauli Y (inversió de bit i fase).Z(qubit: int)Pauli Z (inversió de fase).H(qubit: int)Hadamard: crea superposició.I(qubit: int)Porta identitat: deixa el qubit sense canvis.S(qubit: int)Porta de fase (rotació de π/2 al voltant de Z).T(qubit: int)Porta T (rotació de π/4 al voltant de Z).RX(qubit: int, theta: float | Parameter | Term)Rotació per l’angle theta al voltant de X.RY(qubit: int, theta: float | Parameter | Term)Rotació per l’angle theta al voltant de Y.RZ(qubit: int, phi: float | Parameter | Term)Rotació per l’angle phi al voltant de Z.U1(qubit: int, *, phi: float | Parameter | Term)Desplaçament de fase equivalent a RZ més fase global.U2(qubit: int, *, phi: float | Parameter | Term, gamma: float | Parameter | Term)Rotació Y de π/2 envoltada per rotacions Z.U3(qubit: int, *, theta: float | Parameter | Term, phi: float | Parameter | Term, gamma: float | Parameter | Term)Unitari general d’un sol qubit: descomposició RZ-RY-RZ.SWAP(a: int, b: int)Intercanvia els estats dels qubitsaib.CNOT(control: int, target: int)X controlada: inverteix el target si el control és 1.CZ(control: int, target: int)Z controlada: aplica Z al target si el control és 1.M(*qubits: int)Mesura els qubits indicats en la base computacional.
Portes controlades
Qualsevol porta bàsica es pot convertir en una porta controlada utilitzant la classe 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 alternativament, podeu usar el mètode .controlled() sobre qualsevol instància de porta:
from qilisdk.digital.gates import Y
controlled_y = Y(1).controlled(0)
multiple_controlled_y = Y(2).controlled(0, 1)
Portes adjuntes
Podeu crear el conjugat hermític (dagger) d’una porta bé usant la classe Adjoint o bé usant el mètode .adjoint() sobre qualsevol instància de porta:
from qilisdk.digital.gates import Adjoint, Y
adjoint_y = Adjoint(basic_gate=Y(1))
adjoint_y = Y(1).adjoint()
Portes exponencials
Per aplicar una porta com a operador exponencial, useu bé la classe Exponential o bé el mètode .exponential() sobre qualsevol instància de porta:
from qilisdk.digital.gates import Exponential, Y
exp_y = Exponential(basic_gate=Y(1))
exp_y = Y(1).exponential()