From 350234cf7afc49825efcb07aaf7b736629efb3eb Mon Sep 17 00:00:00 2001 From: Guilhem Ribeill Date: Fri, 17 Apr 2020 17:14:20 -0400 Subject: [PATCH 1/2] Add pulse primitives for Euler decompositions --- QGL/Cliffords.py | 7 +------ QGL/PulsePrimitives.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) 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..8e7e7787 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=a) + X90(qubit) + + Ztheta(qubit, angle=b) + X90(qubit) + + Ztheta(qubit, angle=c)) + +def ZYZPulse(qubit, a, b, c): + Ypulse = Id(qubit) if np.isclose(b, 0.0) else Ytheta(qubit, angle=b) + return Ztheta(qubit, angle=a)+Ypulse+Ztheta(qubit, angle=c) + +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 From 25bd9c929241b35ceae939be25218df9a5deba65 Mon Sep 17 00:00:00 2001 From: Guilhem Ribeill Date: Mon, 20 Apr 2020 18:24:49 -0400 Subject: [PATCH 2/2] Make angle sequence definitions consistent. --- QGL/PulsePrimitives.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/QGL/PulsePrimitives.py b/QGL/PulsePrimitives.py index 8e7e7787..d4fe03b7 100644 --- a/QGL/PulsePrimitives.py +++ b/QGL/PulsePrimitives.py @@ -339,13 +339,13 @@ def arb_axis_drag(qubit, def DiatomicPulse(qubit, a, b, c): - return (Ztheta(qubit, angle=a) + X90(qubit) + + return (Ztheta(qubit, angle=c) + X90(qubit) + Ztheta(qubit, angle=b) + X90(qubit) + - Ztheta(qubit, angle=c)) + 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=a)+Ypulse+Ztheta(qubit, angle=c) + 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=γ)