Skip to content

Commit 70023bc

Browse files
committed
Implement pyqrack methods for sqrtx and sqrty (#416)
Closes #352
1 parent c0ef7f4 commit 70023bc

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/bloqade/pyqrack/squin/op.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import math
2+
13
from kirin import interp
24

35
from bloqade.squin import op
@@ -122,6 +124,18 @@ def operator(
122124
) -> tuple[OperatorRuntimeABC]:
123125
return (OperatorRuntime(method_name=stmt.name.lower()),)
124126

127+
@interp.impl(op.stmts.SqrtX)
128+
@interp.impl(op.stmts.SqrtY)
129+
def sqrt(
130+
self,
131+
interp: PyQrackInterpreter,
132+
frame: interp.Frame,
133+
stmt: op.stmts.SqrtX | op.stmts.SqrtY,
134+
):
135+
axis_name = "x" if isinstance(stmt, op.stmts.SqrtX) else "y"
136+
axis = OperatorRuntime(method_name=axis_name)
137+
return (RotRuntime(axis=axis, angle=-0.5 * math.pi),)
138+
125139
@interp.impl(op.stmts.P0)
126140
@interp.impl(op.stmts.P1)
127141
def projector(

test/pyqrack/squin/test_kernel.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,17 @@ def main():
5959
"h",
6060
"s",
6161
"t",
62+
"sqrt_x",
63+
"sqrt_y",
64+
"sqrt_z",
6265
],
6366
)
6467
def test_basic_ops(op_name: str):
6568
@squin.kernel
6669
def main():
6770
q = squin.qubit.new(1)
6871
op = getattr(squin.op, op_name)()
69-
squin.qubit.apply(op, q)
72+
squin.qubit.apply(op, q[0])
7073
return q
7174

7275
target = PyQrack(1)

0 commit comments

Comments
 (0)