Skip to content

Commit 87f9877

Browse files
authored
fix(squin): implement IsOne measurement predicate (#254)
Implement `IsOne` in the Squin simulator, with integration coverage for zero, one, loss, and conditional correction.
1 parent 5fd713b commit 87f9877

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

‎ppvm-python/src/ppvm/squin_interpreter/qubit.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ def measure(
5151
results_converted = ilist.IList(list(map(_measurement_result_conversion, results)))
5252
return (results_converted,)
5353

54+
@interp.impl(qubit.stmts.IsOne)
55+
def is_one(
56+
self,
57+
interp_: GeneralizedTableauInterpreter,
58+
frame: interp.Frame,
59+
stmt: qubit.stmts.IsOne,
60+
):
61+
measurements = frame.get(stmt.measurements)
62+
return (ilist.IList([result == MeasurementResultValue.One for result in measurements]),)
63+
5464
@interp.impl(qubit.stmts.Reset)
5565
def reset(
5666
self,

‎ppvm-python/test/generalized_tableau/test_simulator_device.py‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ def main():
7171
assert _run_kernel(main, 6) == [ZERO, ONE, ONE, ONE, ONE, ONE]
7272

7373

74+
def test_is_one_distinguishes_zero_one_and_loss():
75+
@squin.kernel
76+
def main():
77+
q = squin.qalloc(3)
78+
squin.x(q[1])
79+
squin.qubit_loss(1.0, q[2])
80+
return squin.broadcast.is_one(squin.broadcast.measure(q))
81+
82+
assert _run_kernel(main, 3) == [False, True, False]
83+
84+
7485
def test_bell_pair_measurements_are_correlated_after_collapse():
7586
@squin.kernel
7687
def main():
@@ -82,10 +93,10 @@ def main():
8293
first = squin.measure(q[0])
8394
second = squin.measure(q[1])
8495

85-
if first == MeasurementResultValue.One:
96+
if squin.is_one(first):
8697
squin.x(q[2])
8798

88-
if second == MeasurementResultValue.One:
99+
if squin.is_one(second):
89100
squin.x(q[3])
90101

91102
return squin.broadcast.measure(q)

0 commit comments

Comments
 (0)