|
1 | 1 | from kirin import ir, types |
| 2 | +from kirin.passes import Fold |
2 | 3 | from kirin.dialects import py, func, ilist |
3 | 4 |
|
4 | 5 | import bloqade.squin.passes as squin_passes |
5 | 6 | from bloqade import qasm2, squin |
| 7 | +from bloqade.analysis import address |
6 | 8 |
|
7 | 9 |
|
8 | 10 | def as_int(value: int): |
@@ -150,7 +152,33 @@ def test_qubit_reset(): |
150 | 152 | # qubit.reset only accepts ilist of qubits |
151 | 153 | (qlist := ilist.New(values=[q0.result])), |
152 | 154 | (squin.qubit.Reset(qubits=qlist.result)), |
153 | | - (squin.qubit.Measure(qubits=qlist.result)), |
| 155 | + # (squin.qubit.Measure(qubits=qlist.result)), |
| 156 | + (ret_none := func.ConstantNone()), |
| 157 | + (func.Return(ret_none)), |
| 158 | + ] |
| 159 | + |
| 160 | + constructed_method = gen_func_from_stmts(stmts) |
| 161 | + constructed_method.print() |
| 162 | + |
| 163 | + squin_to_stim = squin_passes.SquinToStim(constructed_method.dialects) |
| 164 | + rewrite_result = squin_to_stim(constructed_method) |
| 165 | + print(rewrite_result) |
| 166 | + constructed_method.print() |
| 167 | + |
| 168 | + |
| 169 | +def test_wire_reset(): |
| 170 | + |
| 171 | + stmts: list[ir.Statement] = [ |
| 172 | + # Create qubit register |
| 173 | + (n_qubits := as_int(1)), |
| 174 | + (qreg := qasm2.core.QRegNew(n_qubits=n_qubits.result)), |
| 175 | + # Get qubits out |
| 176 | + (idx0 := as_int(0)), |
| 177 | + (q0 := qasm2.core.QRegGet(reg=qreg.result, idx=idx0.result)), |
| 178 | + # get wire |
| 179 | + (w0 := squin.wire.Unwrap(q0.result)), |
| 180 | + # reset the wire |
| 181 | + (squin.wire.Reset(w0.result)), |
154 | 182 | (ret_none := func.ConstantNone()), |
155 | 183 | (func.Return(ret_none)), |
156 | 184 | ] |
@@ -212,11 +240,22 @@ def test_wire_measure_and_reset(): |
212 | 240 | constructed_method = gen_func_from_stmts(stmts) |
213 | 241 | constructed_method.print() |
214 | 242 |
|
| 243 | + fold_pass = Fold(constructed_method.dialects) |
| 244 | + fold_pass(constructed_method) |
| 245 | + # need to make sure the origin qubit data is properly |
| 246 | + # propagated to the new wire that wire.MeasureAndReset spits out |
| 247 | + address_res, _ = address.AddressAnalysis(constructed_method.dialects).run_analysis( |
| 248 | + constructed_method |
| 249 | + ) |
| 250 | + constructed_method.print(analysis=address_res.entries) |
| 251 | + |
215 | 252 | squin_to_stim = squin_passes.SquinToStim(constructed_method.dialects) |
216 | 253 | rewrite_result = squin_to_stim(constructed_method) |
217 | 254 | print(rewrite_result) |
218 | 255 | constructed_method.print() |
219 | 256 |
|
220 | 257 |
|
221 | | -# test_wire_measure_and_reset() |
| 258 | +test_wire_measure_and_reset() |
222 | 259 | # test_qubit_measure_and_reset() |
| 260 | +# test_wire_reset() |
| 261 | +# test_qubit_reset() |
0 commit comments