diff --git a/QGL/Cliffords.py b/QGL/Cliffords.py index 5bc8683f..838c6ae3 100644 --- a/QGL/Cliffords.py +++ b/QGL/Cliffords.py @@ -351,12 +351,7 @@ def XYXClifford(qubit, cliff_num): pulse object """ α, β, γ = xyx_angles(C1[cliff_num]) - - p1 = Id(qubit) if np.isclose(γ, 0.0) else Xtheta(qubit, angle=γ) - p2 = Id(qubit) if np.isclose(β, 0.0) else Ytheta(qubit, angle=β) - p3 = Id(qubit) if np.isclose(α, 0.0) else Xtheta(qubit, angle=α) - - return p1 + p2 + p3 + return XYXPulse(qubit, α, β, γ) ### ### Two qubit Cliffords diff --git a/QGL/PulsePrimitives.py b/QGL/PulsePrimitives.py index 22adee16..d4fe03b7 100644 --- a/QGL/PulsePrimitives.py +++ b/QGL/PulsePrimitives.py @@ -337,6 +337,22 @@ def arb_axis_drag(qubit, return Pulse(kwargs["label"] if "label" in kwargs else "ArbAxis", qubit, params, 1.0, aziAngle, frameChange) + +def DiatomicPulse(qubit, a, b, c): + return (Ztheta(qubit, angle=c) + X90(qubit) + + Ztheta(qubit, angle=b) + X90(qubit) + + Ztheta(qubit, angle=a)) + +def ZYZPulse(qubit, a, b, c): + Ypulse = Id(qubit) if np.isclose(b, 0.0) else Ytheta(qubit, angle=b) + return Ztheta(qubit, angle=c)+Ypulse+Ztheta(qubit, angle=a) + +def XYXPulse(qubit, α, β, γ): + p1 = Id(qubit) if np.isclose(γ, 0.0) else Xtheta(qubit, angle=γ) + p2 = Id(qubit) if np.isclose(β, 0.0) else Ytheta(qubit, angle=β) + p3 = Id(qubit) if np.isclose(α, 0.0) else Xtheta(qubit, angle=α) + return p1+p2+p3 + ## two-qubit primitivies # helper used by echoCR