Skip to content

Commit a6626eb

Browse files
johnzl-777cduck
andauthored
Backport cleaner squin gate generation (#598)
Co-authored-by: Casey Duckering <[email protected]>
1 parent 09d99f2 commit a6626eb

File tree

5 files changed

+200
-227
lines changed

5 files changed

+200
-227
lines changed

src/bloqade/squin/rewrite/U3_to_clifford.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ def sdag() -> list[ir.Statement]:
1414
return [_op := op.stmts.S(), op.stmts.Adjoint(op=_op.result, is_unitary=True)]
1515

1616

17+
def sqrt_x_dag() -> list[ir.Statement]:
18+
return [
19+
_op := op.stmts.SqrtX(),
20+
op.stmts.Adjoint(op=_op.result, is_unitary=True),
21+
]
22+
23+
24+
def sqrt_y_dag() -> list[ir.Statement]:
25+
return [
26+
_op := op.stmts.SqrtY(),
27+
op.stmts.Adjoint(op=_op.result, is_unitary=True),
28+
]
29+
30+
1731
# (theta, phi, lam)
1832
U3_HALF_PI_ANGLE_TO_GATES: dict[
1933
tuple[int, int, int], Callable[[], Tuple[List[ir.Statement], ...]]
@@ -26,21 +40,21 @@ def sdag() -> list[ir.Statement]:
2640
(1, 0, 1): lambda: ([op.stmts.S()], [op.stmts.SqrtY()]),
2741
(1, 0, 2): lambda: ([op.stmts.H()],),
2842
(1, 0, 3): lambda: (sdag(), [op.stmts.SqrtY()]),
29-
(1, 1, 0): lambda: ([op.stmts.SqrtY()], [op.stmts.S()]),
30-
(1, 1, 1): lambda: ([op.stmts.S()], [op.stmts.SqrtY()], [op.stmts.S()]),
31-
(1, 1, 2): lambda: ([op.stmts.Z()], [op.stmts.SqrtY()], [op.stmts.S()]),
32-
(1, 1, 3): lambda: (sdag(), [op.stmts.SqrtY()], [op.stmts.S()]),
33-
(1, 2, 0): lambda: ([op.stmts.SqrtY()], [op.stmts.Z()]),
34-
(1, 2, 1): lambda: ([op.stmts.S()], [op.stmts.SqrtY()], [op.stmts.Z()]),
35-
(1, 2, 2): lambda: ([op.stmts.Z()], [op.stmts.SqrtY()], [op.stmts.Z()]),
36-
(1, 2, 3): lambda: (sdag(), [op.stmts.SqrtY()], [op.stmts.Z()]),
37-
(1, 3, 0): lambda: ([op.stmts.SqrtY()], sdag()),
38-
(1, 3, 1): lambda: ([op.stmts.S()], [op.stmts.SqrtY()], sdag()),
39-
(1, 3, 2): lambda: ([op.stmts.Z()], [op.stmts.SqrtY()], sdag()),
40-
(1, 3, 3): lambda: (sdag(), [op.stmts.SqrtY()], sdag()),
43+
(1, 1, 0): lambda: ([op.stmts.S()], sqrt_x_dag()),
44+
(1, 1, 1): lambda: ([op.stmts.Z()], sqrt_x_dag()),
45+
(1, 1, 2): lambda: (sdag(), sqrt_x_dag()),
46+
(1, 1, 3): lambda: (sqrt_x_dag(),),
47+
(1, 2, 0): lambda: ([op.stmts.Z()], sqrt_y_dag()),
48+
(1, 2, 1): lambda: (sdag(), sqrt_y_dag()),
49+
(1, 2, 2): lambda: (sqrt_y_dag(),),
50+
(1, 2, 3): lambda: ([op.stmts.S()], sqrt_y_dag()),
51+
(1, 3, 0): lambda: (sdag(), [op.stmts.SqrtX()]),
52+
(1, 3, 1): lambda: ([op.stmts.SqrtX()],),
53+
(1, 3, 2): lambda: ([op.stmts.S()], [op.stmts.SqrtX()]),
54+
(1, 3, 3): lambda: ([op.stmts.Z()], [op.stmts.SqrtX()]),
4155
(2, 0, 0): lambda: ([op.stmts.Y()],),
4256
(2, 0, 1): lambda: ([op.stmts.S()], [op.stmts.Y()]),
43-
(2, 0, 2): lambda: ([op.stmts.Z()], [op.stmts.Y()]),
57+
(2, 0, 2): lambda: ([op.stmts.X()],),
4458
(2, 0, 3): lambda: (sdag(), [op.stmts.Y()]),
4559
}
4660

0 commit comments

Comments
 (0)