Skip to content

Commit 0bee82a

Browse files
Jason LudmirJason Ludmir
authored andcommitted
Fixed other issues with IZ->IS conversions...
1 parent 85ce41d commit 0bee82a

File tree

1 file changed

+24
-0
lines changed
  • src/bloqade/pyqrack/squin/gate

1 file changed

+24
-0
lines changed

src/bloqade/pyqrack/squin/gate/gate.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
Rz,
2525
SqrtX,
2626
SqrtY,
27+
PhasedXZ,
2728
)
2829

2930

@@ -134,3 +135,26 @@ def u3(self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: U3):
134135
continue
135136

136137
qbit.sim_reg.u(qbit.addr, theta, phi, lam)
138+
139+
@interp.impl(PhasedXZ)
140+
def phased_xz(
141+
self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: PhasedXZ
142+
):
143+
x_exponent = frame.get(stmt.x_exponent)
144+
z_exponent = frame.get(stmt.z_exponent)
145+
axis_phase_exponent = frame.get(stmt.axis_phase_exponent)
146+
qubits: ilist.IList[PyQrackQubit, Any] = frame.get(stmt.qubits)
147+
148+
# Match cirq.PhasedXZGate decomposition:
149+
# Rz(-axis_phase) * Rx(x_exponent) * Rz(axis_phase + z_exponent)
150+
angle_rz_pre = -axis_phase_exponent * math.pi
151+
angle_rx = x_exponent * math.pi
152+
angle_rz_post = (axis_phase_exponent + z_exponent) * math.pi
153+
154+
for qbit in qubits:
155+
if not qbit.is_active():
156+
continue
157+
158+
qbit.sim_reg.r(Pauli.PauliZ, angle_rz_pre, qbit.addr)
159+
qbit.sim_reg.r(Pauli.PauliX, angle_rx, qbit.addr)
160+
qbit.sim_reg.r(Pauli.PauliZ, angle_rz_post, qbit.addr)

0 commit comments

Comments
 (0)