|
5 | 5 | from bloqade import qubit |
6 | 6 |
|
7 | 7 | from .lattice import ( |
| 8 | + Predicate, |
8 | 9 | AnyMeasureId, |
9 | 10 | NotMeasureId, |
| 11 | + RawMeasureId, |
10 | 12 | MeasureIdBool, |
11 | 13 | MeasureIdTuple, |
12 | 14 | InvalidMeasureId, |
@@ -41,10 +43,45 @@ def measure_qubit_list( |
41 | 43 | measure_id_bools = [] |
42 | 44 | for _ in range(num_qubits.data): |
43 | 45 | interp.measure_count += 1 |
44 | | - measure_id_bools.append(MeasureIdBool(interp.measure_count)) |
| 46 | + measure_id_bools.append(RawMeasureId(interp.measure_count)) |
45 | 47 |
|
46 | 48 | return (MeasureIdTuple(data=tuple(measure_id_bools)),) |
47 | 49 |
|
| 50 | + @interp.impl(qubit.stmts.IsLost) |
| 51 | + @interp.impl(qubit.stmts.IsOne) |
| 52 | + @interp.impl(qubit.stmts.IsZero) |
| 53 | + def measurement_predicate( |
| 54 | + self, |
| 55 | + interp: MeasurementIDAnalysis, |
| 56 | + frame: interp.Frame, |
| 57 | + stmt: qubit.stmts.IsLost | qubit.stmts.IsOne | qubit.stmts.IsZero, |
| 58 | + ): |
| 59 | + original_measure_id_tuple = frame.get(stmt.measurements) |
| 60 | + # all members should be RawMeasureId, if it's anything else |
| 61 | + # it's Invalid. |
| 62 | + if not all( |
| 63 | + isinstance(measure_id, RawMeasureId) |
| 64 | + for measure_id in original_measure_id_tuple.data |
| 65 | + ): |
| 66 | + return (InvalidMeasureId(),) |
| 67 | + |
| 68 | + # get the proper predicate type |
| 69 | + if isinstance(stmt, qubit.stmts.IsLost): |
| 70 | + predicate = Predicate.IS_LOST |
| 71 | + elif isinstance(stmt, qubit.stmts.IsOne): |
| 72 | + predicate = Predicate.IS_ONE |
| 73 | + elif isinstance(stmt, qubit.stmts.IsZero): |
| 74 | + predicate = Predicate.IS_ZERO |
| 75 | + else: |
| 76 | + return (InvalidMeasureId(),) |
| 77 | + |
| 78 | + # Create new MeasureIdBools with proper predicate type |
| 79 | + predicate_measure_ids = [ |
| 80 | + MeasureIdBool(measure_id.idx, predicate) |
| 81 | + for measure_id in original_measure_id_tuple.data |
| 82 | + ] |
| 83 | + return (MeasureIdTuple(data=tuple(predicate_measure_ids)),) |
| 84 | + |
48 | 85 |
|
49 | 86 | @ilist.dialect.register(key="measure_id") |
50 | 87 | class IList(interp.MethodTable): |
|
0 commit comments