Skip to content

Commit 51f27b5

Browse files
committed
adding unit tests
1 parent 5f2cead commit 51f27b5

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

src/bloqade/squin/qubit.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
- `kirin.dialects.ilist`: provides the `ilist.IListType` type for lists of qubits.
88
"""
99

10-
from typing import Any
10+
from typing import Any, overload
1111

1212
from kirin import ir, types, lowering
1313
from kirin.decl import info, statement
@@ -42,7 +42,27 @@ class Broadcast(ir.Statement):
4242

4343

4444
@statement(dialect=dialect)
45-
class Measure(ir.Statement):
45+
class MeasureAny(ir.Statement):
46+
name = "measure"
47+
48+
traits = frozenset({lowering.FromPythonCall()})
49+
inputs: ir.SSAValue = info.argument(types.Any)
50+
result: ir.ResultValue = info.result(types.Any)
51+
52+
53+
@statement(dialect=dialect)
54+
class MeasureQubit(ir.Statement):
55+
name = "measure.qubit"
56+
57+
traits = frozenset({lowering.FromPythonCall()})
58+
qubits: ir.SSAValue = info.argument(ilist.IListType[QubitType])
59+
result: ir.ResultValue = info.result(ilist.IListType[types.Bool])
60+
61+
62+
@statement(dialect=dialect)
63+
class MeasureReg(ir.Statement):
64+
name = "measure.reg"
65+
4666
traits = frozenset({lowering.FromPythonCall()})
4767
qubits: ir.SSAValue = info.argument(ilist.IListType[QubitType])
4868
result: ir.ResultValue = info.result(ilist.IListType[types.Bool])
@@ -89,9 +109,15 @@ def apply(operator: Op, qubits: ilist.IList[Qubit, Any] | list[Qubit]) -> None:
89109
...
90110

91111

92-
@wraps(Measure)
93-
def measure(qubits: ilist.IList[Qubit, Any]) -> int:
94-
"""Measure the qubits in the list."
112+
@overload
113+
def measure(qubit: Qubit) -> bool: ...
114+
@overload
115+
def measure(qubit: ilist.IList[Qubit, Any] | list[Qubit]) -> list[bool]: ...
116+
117+
118+
@wraps(MeasureAny)
119+
def measure(qubit: Any) -> Any:
120+
"""Measure a qubit or qubits in the list."
95121
96122
Args:
97123
qubits: The list of qubits to measure.

test/squin/test_measure_sugar.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from bloqade import squin
2+
3+
4+
def test_measure_register():
5+
@squin.kernel
6+
def test_measure_sugar():
7+
q = squin.qubit.new(2)
8+
9+
return squin.qubit.measure(q)
10+
11+
assert isinstance(
12+
test_measure_sugar.callable_region.blocks[-1].last_stmt, squin.qubit.MeasureReg
13+
)
14+
15+
16+
def test_measure_qubit():
17+
@squin.kernel
18+
def test_measure_sugar():
19+
q = squin.qubit.new(2)
20+
21+
return squin.qubit.measure(q[0])
22+
23+
assert isinstance(
24+
test_measure_sugar.callable_region.blocks[-1].last_stmt,
25+
squin.qubit.MeasureQubit,
26+
)

0 commit comments

Comments
 (0)