|
| 1 | +from typing import Any |
| 2 | + |
| 3 | +from kirin.dialects import ilist |
| 4 | + |
| 5 | +from bloqade import squin, types |
| 6 | + |
| 7 | +from ..group import kernel |
| 8 | +from ..dialects import operations |
| 9 | + |
| 10 | + |
| 11 | +@kernel(aggressive_unroll=True, verify=False) |
| 12 | +def set_detector(meas: ilist.IList[types.MeasurementResult, Any]): |
| 13 | + return ilist.IList( |
| 14 | + [ |
| 15 | + squin.set_detector( |
| 16 | + [meas[0], meas[1], meas[2], meas[3]], coordinates=[0, 0] |
| 17 | + ), |
| 18 | + squin.set_detector( |
| 19 | + [meas[1], meas[2], meas[4], meas[5]], coordinates=[0, 1] |
| 20 | + ), |
| 21 | + squin.set_detector( |
| 22 | + [meas[2], meas[3], meas[4], meas[6]], coordinates=[0, 2] |
| 23 | + ), |
| 24 | + ] |
| 25 | + ) |
| 26 | + |
| 27 | + |
| 28 | +@kernel(aggressive_unroll=True, verify=False) |
| 29 | +def set_observable(meas: ilist.IList[types.MeasurementResult, Any], index: int): |
| 30 | + return squin.set_observable([meas[0], meas[1], meas[5]], index) |
| 31 | + |
| 32 | + |
| 33 | +@kernel(aggressive_unroll=True, verify=False) |
| 34 | +def default_post_processing(register: ilist.IList[types.Qubit, Any]): |
| 35 | + measurements = operations.terminal_measure(register) |
| 36 | + |
| 37 | + detectors = set_detector(measurements[0]) |
| 38 | + observables = ilist.IList([set_observable(measurements[0], 0)]) |
| 39 | + for i in range(1, len(register)): |
| 40 | + detectors = detectors + set_detector(measurements[i]) |
| 41 | + observables = observables + [set_observable(measurements[i], i)] |
| 42 | + |
| 43 | + return detectors, observables |
0 commit comments