bloqade-circuit 0.6.4__py3-none-any.whl → 0.9.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. bloqade/analysis/address/__init__.py +8 -4
  2. bloqade/analysis/address/analysis.py +123 -33
  3. bloqade/analysis/address/impls.py +293 -90
  4. bloqade/analysis/address/lattice.py +209 -24
  5. bloqade/analysis/fidelity/analysis.py +11 -23
  6. bloqade/analysis/measure_id/analysis.py +18 -20
  7. bloqade/analysis/measure_id/impls.py +31 -29
  8. bloqade/annotate/__init__.py +6 -0
  9. bloqade/annotate/_dialect.py +3 -0
  10. bloqade/annotate/_interface.py +22 -0
  11. bloqade/annotate/stmts.py +29 -0
  12. bloqade/annotate/types.py +13 -0
  13. bloqade/cirq_utils/__init__.py +4 -2
  14. bloqade/cirq_utils/emit/__init__.py +3 -0
  15. bloqade/cirq_utils/emit/base.py +246 -0
  16. bloqade/cirq_utils/emit/gate.py +104 -0
  17. bloqade/cirq_utils/emit/noise.py +90 -0
  18. bloqade/cirq_utils/emit/qubit.py +35 -0
  19. bloqade/cirq_utils/lowering.py +660 -0
  20. bloqade/cirq_utils/noise/__init__.py +0 -2
  21. bloqade/cirq_utils/noise/_two_zone_utils.py +7 -15
  22. bloqade/cirq_utils/noise/model.py +151 -191
  23. bloqade/cirq_utils/noise/transform.py +2 -2
  24. bloqade/cirq_utils/parallelize.py +9 -6
  25. bloqade/gemini/__init__.py +1 -0
  26. bloqade/gemini/analysis/__init__.py +3 -0
  27. bloqade/gemini/analysis/logical_validation/__init__.py +1 -0
  28. bloqade/gemini/analysis/logical_validation/analysis.py +17 -0
  29. bloqade/gemini/analysis/logical_validation/impls.py +101 -0
  30. bloqade/gemini/groups.py +67 -0
  31. bloqade/native/__init__.py +23 -0
  32. bloqade/native/_prelude.py +45 -0
  33. bloqade/native/dialects/__init__.py +0 -0
  34. bloqade/native/dialects/gate/__init__.py +2 -0
  35. bloqade/native/dialects/gate/_dialect.py +3 -0
  36. bloqade/native/dialects/gate/_interface.py +32 -0
  37. bloqade/native/dialects/gate/stmts.py +31 -0
  38. bloqade/native/stdlib/__init__.py +0 -0
  39. bloqade/native/stdlib/broadcast.py +246 -0
  40. bloqade/native/stdlib/simple.py +220 -0
  41. bloqade/native/upstream/__init__.py +4 -0
  42. bloqade/native/upstream/squin2native.py +79 -0
  43. bloqade/pyqrack/__init__.py +2 -2
  44. bloqade/pyqrack/base.py +7 -1
  45. bloqade/pyqrack/device.py +192 -18
  46. bloqade/pyqrack/native.py +49 -0
  47. bloqade/pyqrack/reg.py +6 -6
  48. bloqade/pyqrack/squin/gate/__init__.py +1 -0
  49. bloqade/pyqrack/squin/gate/gate.py +136 -0
  50. bloqade/pyqrack/squin/noise/native.py +120 -54
  51. bloqade/pyqrack/squin/qubit.py +39 -36
  52. bloqade/pyqrack/target.py +5 -4
  53. bloqade/pyqrack/task.py +114 -7
  54. bloqade/qasm2/_qasm_loading.py +3 -3
  55. bloqade/qasm2/dialects/core/address.py +21 -12
  56. bloqade/qasm2/dialects/expr/_emit.py +19 -8
  57. bloqade/qasm2/dialects/expr/stmts.py +7 -7
  58. bloqade/qasm2/dialects/noise/fidelity.py +4 -8
  59. bloqade/qasm2/dialects/noise/model.py +2 -1
  60. bloqade/qasm2/emit/base.py +16 -11
  61. bloqade/qasm2/emit/gate.py +11 -8
  62. bloqade/qasm2/emit/main.py +103 -3
  63. bloqade/qasm2/emit/target.py +9 -5
  64. bloqade/qasm2/groups.py +3 -2
  65. bloqade/qasm2/parse/lowering.py +0 -1
  66. bloqade/qasm2/passes/fold.py +14 -73
  67. bloqade/qasm2/passes/glob.py +2 -2
  68. bloqade/qasm2/passes/noise.py +1 -1
  69. bloqade/qasm2/passes/parallel.py +7 -5
  70. bloqade/qasm2/rewrite/__init__.py +0 -1
  71. bloqade/qasm2/rewrite/noise/heuristic_noise.py +7 -17
  72. bloqade/qasm2/rewrite/parallel_to_glob.py +28 -15
  73. bloqade/qasm2/rewrite/parallel_to_uop.py +2 -8
  74. bloqade/qasm2/rewrite/register.py +2 -2
  75. bloqade/qasm2/rewrite/uop_to_parallel.py +4 -2
  76. bloqade/qbraid/lowering.py +1 -0
  77. bloqade/qbraid/schema.py +2 -2
  78. bloqade/qubit/__init__.py +12 -0
  79. bloqade/qubit/_dialect.py +3 -0
  80. bloqade/qubit/_interface.py +49 -0
  81. bloqade/qubit/_prelude.py +45 -0
  82. bloqade/qubit/analysis/__init__.py +1 -0
  83. bloqade/qubit/analysis/address_impl.py +40 -0
  84. bloqade/qubit/stdlib/__init__.py +2 -0
  85. bloqade/qubit/stdlib/_new.py +34 -0
  86. bloqade/qubit/stdlib/broadcast.py +62 -0
  87. bloqade/qubit/stdlib/simple.py +59 -0
  88. bloqade/qubit/stmts.py +60 -0
  89. bloqade/rewrite/passes/__init__.py +6 -0
  90. bloqade/rewrite/passes/aggressive_unroll.py +103 -0
  91. bloqade/rewrite/passes/callgraph.py +116 -0
  92. bloqade/rewrite/passes/canonicalize_ilist.py +20 -14
  93. bloqade/rewrite/rules/split_ifs.py +18 -1
  94. bloqade/squin/__init__.py +47 -14
  95. bloqade/squin/analysis/__init__.py +0 -1
  96. bloqade/squin/analysis/schedule.py +10 -11
  97. bloqade/squin/gate/__init__.py +2 -0
  98. bloqade/squin/gate/_dialect.py +3 -0
  99. bloqade/squin/gate/_interface.py +98 -0
  100. bloqade/squin/gate/stmts.py +125 -0
  101. bloqade/squin/groups.py +5 -22
  102. bloqade/squin/noise/__init__.py +1 -10
  103. bloqade/squin/noise/_dialect.py +1 -1
  104. bloqade/squin/noise/_interface.py +45 -0
  105. bloqade/squin/noise/stmts.py +66 -28
  106. bloqade/squin/rewrite/U3_to_clifford.py +70 -51
  107. bloqade/squin/rewrite/__init__.py +0 -2
  108. bloqade/squin/rewrite/remove_dangling_qubits.py +2 -2
  109. bloqade/squin/rewrite/wrap_analysis.py +4 -35
  110. bloqade/squin/stdlib/__init__.py +0 -0
  111. bloqade/squin/stdlib/broadcast/__init__.py +34 -0
  112. bloqade/squin/stdlib/broadcast/_qubit.py +4 -0
  113. bloqade/squin/stdlib/broadcast/gate.py +260 -0
  114. bloqade/squin/stdlib/broadcast/noise.py +144 -0
  115. bloqade/squin/stdlib/simple/__init__.py +33 -0
  116. bloqade/squin/stdlib/simple/gate.py +242 -0
  117. bloqade/squin/stdlib/simple/noise.py +126 -0
  118. bloqade/stim/__init__.py +1 -0
  119. bloqade/stim/_wrappers.py +6 -0
  120. bloqade/stim/dialects/auxiliary/emit.py +19 -18
  121. bloqade/stim/dialects/collapse/emit_str.py +7 -8
  122. bloqade/stim/dialects/gate/emit.py +9 -10
  123. bloqade/stim/dialects/noise/emit.py +17 -13
  124. bloqade/stim/dialects/noise/stmts.py +5 -3
  125. bloqade/stim/emit/__init__.py +1 -0
  126. bloqade/stim/emit/impls.py +16 -0
  127. bloqade/stim/emit/stim_str.py +48 -31
  128. bloqade/stim/groups.py +12 -2
  129. bloqade/stim/parse/lowering.py +14 -17
  130. bloqade/stim/passes/__init__.py +0 -2
  131. bloqade/stim/passes/flatten.py +26 -0
  132. bloqade/stim/passes/simplify_ifs.py +6 -1
  133. bloqade/stim/passes/squin_to_stim.py +9 -84
  134. bloqade/stim/rewrite/__init__.py +2 -4
  135. bloqade/stim/rewrite/get_record_util.py +24 -0
  136. bloqade/stim/rewrite/ifs_to_stim.py +24 -25
  137. bloqade/stim/rewrite/qubit_to_stim.py +90 -41
  138. bloqade/stim/rewrite/set_detector_to_stim.py +68 -0
  139. bloqade/stim/rewrite/set_observable_to_stim.py +52 -0
  140. bloqade/stim/rewrite/squin_measure.py +9 -18
  141. bloqade/stim/rewrite/squin_noise.py +134 -108
  142. bloqade/stim/rewrite/util.py +5 -192
  143. bloqade/test_utils.py +1 -1
  144. bloqade/types.py +10 -0
  145. bloqade/validation/__init__.py +2 -0
  146. bloqade/validation/analysis/__init__.py +5 -0
  147. bloqade/validation/analysis/analysis.py +41 -0
  148. bloqade/validation/analysis/lattice.py +58 -0
  149. bloqade/validation/kernel_validation.py +77 -0
  150. {bloqade_circuit-0.6.4.dist-info → bloqade_circuit-0.9.1.dist-info}/METADATA +5 -6
  151. bloqade_circuit-0.9.1.dist-info/RECORD +265 -0
  152. bloqade/pyqrack/squin/op.py +0 -180
  153. bloqade/pyqrack/squin/runtime.py +0 -535
  154. bloqade/pyqrack/squin/wire.py +0 -51
  155. bloqade/rewrite/rules/flatten_ilist.py +0 -51
  156. bloqade/rewrite/rules/inline_getitem_ilist.py +0 -31
  157. bloqade/squin/_typeinfer.py +0 -20
  158. bloqade/squin/analysis/address_impl.py +0 -71
  159. bloqade/squin/analysis/nsites/__init__.py +0 -9
  160. bloqade/squin/analysis/nsites/analysis.py +0 -50
  161. bloqade/squin/analysis/nsites/impls.py +0 -92
  162. bloqade/squin/analysis/nsites/lattice.py +0 -49
  163. bloqade/squin/cirq/__init__.py +0 -280
  164. bloqade/squin/cirq/emit/emit_circuit.py +0 -109
  165. bloqade/squin/cirq/emit/noise.py +0 -49
  166. bloqade/squin/cirq/emit/op.py +0 -125
  167. bloqade/squin/cirq/emit/qubit.py +0 -60
  168. bloqade/squin/cirq/emit/runtime.py +0 -242
  169. bloqade/squin/cirq/lowering.py +0 -440
  170. bloqade/squin/lowering.py +0 -54
  171. bloqade/squin/noise/_wrapper.py +0 -40
  172. bloqade/squin/noise/rewrite.py +0 -111
  173. bloqade/squin/op/__init__.py +0 -41
  174. bloqade/squin/op/_dialect.py +0 -3
  175. bloqade/squin/op/_wrapper.py +0 -121
  176. bloqade/squin/op/number.py +0 -5
  177. bloqade/squin/op/rewrite.py +0 -46
  178. bloqade/squin/op/stdlib.py +0 -62
  179. bloqade/squin/op/stmts.py +0 -276
  180. bloqade/squin/op/traits.py +0 -43
  181. bloqade/squin/op/types.py +0 -26
  182. bloqade/squin/qubit.py +0 -184
  183. bloqade/squin/rewrite/canonicalize.py +0 -60
  184. bloqade/squin/rewrite/desugar.py +0 -124
  185. bloqade/squin/types.py +0 -8
  186. bloqade/squin/wire.py +0 -201
  187. bloqade/stim/rewrite/wire_identity_elimination.py +0 -24
  188. bloqade/stim/rewrite/wire_to_stim.py +0 -57
  189. bloqade_circuit-0.6.4.dist-info/RECORD +0 -234
  190. {bloqade_circuit-0.6.4.dist-info → bloqade_circuit-0.9.1.dist-info}/WHEEL +0 -0
  191. {bloqade_circuit-0.6.4.dist-info → bloqade_circuit-0.9.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,41 @@
1
+ from abc import ABC
2
+ from dataclasses import field, dataclass
3
+
4
+ from kirin import ir
5
+ from kirin.analysis import ForwardExtra, ForwardFrame
6
+
7
+ from .lattice import ErrorType
8
+
9
+
10
+ @dataclass
11
+ class ValidationFrame(ForwardFrame[ErrorType]):
12
+ # NOTE: cannot be set[Error] since that's not hashable
13
+ errors: list[ir.ValidationError] = field(default_factory=list)
14
+ """List of all ecnountered errors.
15
+
16
+ Append a `kirin.ir.ValidationError` to this list in the method implementation
17
+ in order for it to get picked up by the `KernelValidation` run.
18
+ """
19
+
20
+
21
+ @dataclass
22
+ class ValidationAnalysis(ForwardExtra[ValidationFrame, ErrorType], ABC):
23
+ """Analysis pass that indicates errors in the IR according to the respective method tables.
24
+
25
+ If you need to implement validation for a dialect shared by many groups (for example, if you need to ascertain if statements have a specific form)
26
+ you'll need to inherit from this class.
27
+ """
28
+
29
+ lattice = ErrorType
30
+
31
+ def eval_fallback(self, frame: ValidationFrame, node: ir.Statement):
32
+ # NOTE: default to no errors
33
+ return tuple(self.lattice.top() for _ in node.results)
34
+
35
+ def initialize_frame(
36
+ self, node: ir.Statement, *, has_parent_access: bool = False
37
+ ) -> ValidationFrame:
38
+ return ValidationFrame(node, has_parent_access=has_parent_access)
39
+
40
+ def method_self(self, method: ir.Method) -> ErrorType:
41
+ return self.lattice.top()
@@ -0,0 +1,58 @@
1
+ from typing import final
2
+ from dataclasses import dataclass
3
+
4
+ from kirin.lattice import (
5
+ SingletonMeta,
6
+ BoundedLattice,
7
+ IsSubsetEqMixin,
8
+ SimpleJoinMixin,
9
+ SimpleMeetMixin,
10
+ )
11
+
12
+
13
+ @dataclass
14
+ class ErrorType(
15
+ SimpleJoinMixin["ErrorType"],
16
+ SimpleMeetMixin["ErrorType"],
17
+ IsSubsetEqMixin["ErrorType"],
18
+ BoundedLattice["ErrorType"],
19
+ ):
20
+
21
+ @classmethod
22
+ def bottom(cls) -> "ErrorType":
23
+ return InvalidErrorType()
24
+
25
+ @classmethod
26
+ def top(cls) -> "ErrorType":
27
+ return NoError()
28
+
29
+
30
+ @final
31
+ @dataclass
32
+ class InvalidErrorType(ErrorType, metaclass=SingletonMeta):
33
+ """Bottom to represent when we encounter an error running the analysis.
34
+
35
+ When this is encountered, it means there might be an error, but we were unable to tell.
36
+ """
37
+
38
+ pass
39
+
40
+
41
+ @final
42
+ @dataclass
43
+ class Error(ErrorType):
44
+ """Indicates an error in the IR."""
45
+
46
+ message: str = ""
47
+ """Optional error message to show in the IR.
48
+
49
+ NOTE: this is just to show a message when printing the IR. Actual errors
50
+ are collected by appending ir.ValidationError to the frame in the method
51
+ implementation.
52
+ """
53
+
54
+
55
+ @final
56
+ @dataclass
57
+ class NoError(ErrorType, metaclass=SingletonMeta):
58
+ pass
@@ -0,0 +1,77 @@
1
+ import sys
2
+ from dataclasses import dataclass
3
+
4
+ from kirin import ir, exception
5
+ from rich.console import Console
6
+
7
+ from .analysis import ValidationAnalysis
8
+
9
+
10
+ class ValidationErrorGroup(BaseException):
11
+ def __init__(self, *args: object, errors=[]) -> None:
12
+ super().__init__(*args)
13
+ self.errors = errors
14
+
15
+
16
+ # TODO: this overrides kirin's exception handler and should be upstreamed
17
+ def exception_handler(exc_type, exc_value, exc_tb):
18
+ if issubclass(exc_type, ValidationErrorGroup):
19
+ console = Console(force_terminal=True)
20
+ for i, err in enumerate(exc_value.errors):
21
+ with console.capture() as capture:
22
+ console.print(f"==== Error {i} ====")
23
+ console.print(f"[bold red]{type(err).__name__}:[/bold red]", end="")
24
+ print(capture.get(), *err.args, file=sys.stderr)
25
+ if err.source:
26
+ print("Source Traceback:", file=sys.stderr)
27
+ print(err.hint(), file=sys.stderr, end="")
28
+ console.print("=" * 40)
29
+ console.print(
30
+ "[bold red]Kernel validation failed:[/bold red] There were multiple errors encountered during validation, see above"
31
+ )
32
+ return
33
+
34
+ return exception.exception_handler(exc_type, exc_value, exc_tb)
35
+
36
+
37
+ sys.excepthook = exception_handler
38
+
39
+
40
+ @dataclass
41
+ class KernelValidation:
42
+ """Validate a kernel according to a `ValidationAnalysis`.
43
+
44
+ This is a simple wrapper around the analysis that runs the analysis, checks
45
+ the `ValidationFrame` for errors and throws them if there are any.
46
+ """
47
+
48
+ validation_analysis_cls: type[ValidationAnalysis]
49
+ """The analysis that you want to run in order to validate the kernel."""
50
+
51
+ def run(self, mt: ir.Method, no_raise: bool = True) -> None:
52
+ """Run the kernel validation analysis and raise any errors found.
53
+
54
+ Args:
55
+ mt (ir.Method): The method to validate
56
+ no_raise (bool): Whether or not to raise errors when running the analysis.
57
+ This is only to make sure the analysis works. Errors found during
58
+ the analysis will be raised regardless of this setting. Defaults to `True`.
59
+
60
+ """
61
+
62
+ validation_analysis = self.validation_analysis_cls(mt.dialects)
63
+
64
+ if no_raise:
65
+ validation_frame, _ = validation_analysis.run_no_raise(mt)
66
+ else:
67
+ validation_frame, _ = validation_analysis.run(mt)
68
+
69
+ errors = validation_frame.errors
70
+
71
+ if len(errors) == 0:
72
+ # Valid program
73
+ return
74
+ elif len(errors) == 1:
75
+ raise errors[0]
76
+ else:
77
+ raise ValidationErrorGroup(errors=errors)
@@ -1,16 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bloqade-circuit
3
- Version: 0.6.4
3
+ Version: 0.9.1
4
4
  Summary: The software development toolkit for neutral atom arrays.
5
5
  Author-email: Roger-luo <rluo@quera.com>, kaihsin <khwu@quera.com>, weinbe58 <pweinberg@quera.com>, johnzl-777 <jlong@quera.com>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.10
8
- Requires-Dist: kirin-toolchain~=0.17.0
8
+ Requires-Dist: kirin-toolchain~=0.21.0
9
9
  Requires-Dist: numpy>=1.22.0
10
10
  Requires-Dist: pandas>=2.2.3
11
11
  Requires-Dist: pydantic<2.11.0,>=1.3.0
12
- Requires-Dist: pyqrack-cpu<1.41,>=1.38.2; sys_platform != 'darwin'
13
- Requires-Dist: pyqrack<1.41,>=1.38.2; sys_platform == 'darwin'
12
+ Requires-Dist: pyqrack-cpu~=1.69.1
14
13
  Requires-Dist: rich>=13.9.4
15
14
  Requires-Dist: scipy>=1.13.1
16
15
  Provides-Extra: cirq
@@ -18,9 +17,9 @@ Requires-Dist: cirq-core>=1.4.1; extra == 'cirq'
18
17
  Requires-Dist: cirq-core[contrib]>=1.4.1; extra == 'cirq'
19
18
  Requires-Dist: qpsolvers[clarabel]>=4.7.0; extra == 'cirq'
20
19
  Provides-Extra: pyqrack-cuda
21
- Requires-Dist: pyqrack-cuda>=1.38.2; extra == 'pyqrack-cuda'
20
+ Requires-Dist: pyqrack-cuda~=1.69.1; extra == 'pyqrack-cuda'
22
21
  Provides-Extra: pyqrack-opencl
23
- Requires-Dist: pyqrack>=1.38.2; (sys_platform != 'darwin') and extra == 'pyqrack-opencl'
22
+ Requires-Dist: pyqrack~=1.69.1; extra == 'pyqrack-opencl'
24
23
  Provides-Extra: qasm2
25
24
  Requires-Dist: lark>=1.2.2; extra == 'qasm2'
26
25
  Provides-Extra: qbraid
@@ -0,0 +1,265 @@
1
+ bloqade/device.py,sha256=y54uCyD8lfgOaZshjxd1DXf4lrwjVvNEtrx6KeeDup0,3888
2
+ bloqade/task.py,sha256=L7l8TAc9e2kaOA24Qrh15pfUPY21xRkUQ86OtAR9Sog,2861
3
+ bloqade/test_utils.py,sha256=E_Ei1QQVmp4DXiixPjFWvUvb_Wmh1BeKXn9_N5eq8m4,887
4
+ bloqade/types.py,sha256=1bgvSmYdynIrOMAmTK7rsUB9TWD3__uoeeGbiKWTJU0,662
5
+ bloqade/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ bloqade/analysis/address/__init__.py,sha256=cWEtk7i6jfbPDICFAITxfwAIiJIQFAr9U3lYXpObwh8,445
7
+ bloqade/analysis/address/analysis.py,sha256=Cces40Bxrsvqsfgbhzl6RUVoTvLxfIPYHtRVIafb7iQ,5181
8
+ bloqade/analysis/address/impls.py,sha256=-mJ9P0VKWpJBUrhxXsWoX7Ae3QwHXdk2YNESkwsW6yA,11341
9
+ bloqade/analysis/address/lattice.py,sha256=qMv6ntYcMO0fK-ccBTONXKJ4a3nkRSwDiztV9DcNIYc,8102
10
+ bloqade/analysis/fidelity/__init__.py,sha256=iJkhoHvCMU9bKxQqgxIWKQWvpqNFRgNBI5DK8-4RAB8,59
11
+ bloqade/analysis/fidelity/analysis.py,sha256=1zGT-Pl-KpIogW1qnPwFJZLPxCZMGK8A8r1lNxRrMEI,2585
12
+ bloqade/analysis/measure_id/__init__.py,sha256=r_R_br1e3H7ZzwkeQw4TnDAP4M_bUaRlRb7ZRdowvNI,145
13
+ bloqade/analysis/measure_id/analysis.py,sha256=Xz8kH3VKG5pSaKF_QyQ4UbWT_s7hFeTJTij48Y5IMkw,1840
14
+ bloqade/analysis/measure_id/impls.py,sha256=d9HVzAtm4yAkbMYhY1wsbzW5eL4yzDqGO04XSM9OiEs,6676
15
+ bloqade/analysis/measure_id/lattice.py,sha256=WPrn0R79umCH909BFWsUJ64qx9n_3KYimIW5UaXNuGU,1891
16
+ bloqade/annotate/__init__.py,sha256=eygeVSLi8Ac0riQNvMEV0fPvGWjYa8Ie8xxUSjP5z20,170
17
+ bloqade/annotate/_dialect.py,sha256=AB4l0C3jeeG4TY24FpQXkYjWVBlyFzDNK_TTDcBjnJo,61
18
+ bloqade/annotate/_interface.py,sha256=J_g0H4aH2rFmirEir4VRd2Bk6DFDi4VJSPoVb5My46g,576
19
+ bloqade/annotate/stmts.py,sha256=Dhk5pj1RMtY_5wsc9d4wBpTwqP1KKnXx1Ehri8cLxlU,902
20
+ bloqade/annotate/types.py,sha256=dsHCWe2G96VWMHCizHfMhjI5rg__rovLEN1_aX6k9Mk,164
21
+ bloqade/cirq_utils/__init__.py,sha256=euOBePhGrYOZsUn_IJXHGUQCxA6y3GBR6G3o9JvX21k,410
22
+ bloqade/cirq_utils/lineprog.py,sha256=JosrhfeOHI9FycUT_sYFj8TBzLpo97TL8zK-Ap2U4eQ,11021
23
+ bloqade/cirq_utils/lowering.py,sha256=YdiQpKNCjlbBeR0Z9oSLcCRhqvn6PGN7Uao8QxVcM7c,23686
24
+ bloqade/cirq_utils/parallelize.py,sha256=u9AP6l7YwBatFfIvrcCjbcYMiavk7MU6HKSKPkqlxtY,13803
25
+ bloqade/cirq_utils/emit/__init__.py,sha256=_NnnLT47nPFFkXY8EF3wrLHhAaKTl-8_zKqkKZ8Kpes,139
26
+ bloqade/cirq_utils/emit/base.py,sha256=nz_zzDKue7NP3uQNIXCEdH4rg0Tp8Hzvilt_PQlrfi8,8136
27
+ bloqade/cirq_utils/emit/gate.py,sha256=K0QGTsTo-n4ShfLvWiM-hKs5ixH9lUe_TDfgsurbak0,2976
28
+ bloqade/cirq_utils/emit/noise.py,sha256=sujg9yPx63HH0YxDCyguv-wgs9yJB5NnjPzgUAViktc,2472
29
+ bloqade/cirq_utils/emit/qubit.py,sha256=5D2OIHnNvVcZ6jqbR2jJTWCJ3KMzArN0MkOIKsFVx_s,1045
30
+ bloqade/cirq_utils/noise/__init__.py,sha256=hUBi53U0wE4u3AqGh5cNdgdCspt3O-Vw-SR68cfBZYc,421
31
+ bloqade/cirq_utils/noise/_two_zone_utils.py,sha256=iq4nwdJQITFlGB61wfrV7vyPA2194p-i_nv36powZ90,17883
32
+ bloqade/cirq_utils/noise/conflict_graph.py,sha256=ZUwPWTknrb6SgtZUVPeICn3YA-nUeWQJDuKKX5jL9tE,7179
33
+ bloqade/cirq_utils/noise/model.py,sha256=fhznG0P_SUtl7LBNIANuNi5MGY9ks241UW7m0rg2iNs,18782
34
+ bloqade/cirq_utils/noise/transform.py,sha256=pauFnOKbk2QjxeyXEV_x2zyRGypr5wiQ6ySirU7C2zg,2278
35
+ bloqade/gemini/__init__.py,sha256=JPwmAtnejHCoRMmRNz98rQrnOzJVB_Aw6TktUarTQhM,39
36
+ bloqade/gemini/groups.py,sha256=zxYrpses0e-bSo-wXkc__U5WEz0vLCOeTuO0f6AhPgQ,2196
37
+ bloqade/gemini/analysis/__init__.py,sha256=UK9kgopW3dWSepUaZsyBi4joyJCcBsbqy2nM70QTO5A,117
38
+ bloqade/gemini/analysis/logical_validation/__init__.py,sha256=evpVcYh4mcPQaYgR0JXEm1s7yHTMrWX6bFssBZE1L_Q,77
39
+ bloqade/gemini/analysis/logical_validation/analysis.py,sha256=eId5rWTCq_-ciiKkegX0dJmT_DbdE_btox5tFOuNz-g,577
40
+ bloqade/gemini/analysis/logical_validation/impls.py,sha256=RKUa8-JqWWcZUCDdZkLRLkAQZ-v4oPg2oOnITBz3itE,2995
41
+ bloqade/native/__init__.py,sha256=ckZjzkPGV08CXmBKAHutlVU_AlLIwzBmlkNOTuJVBx0,427
42
+ bloqade/native/_prelude.py,sha256=ktF91AQrWVswjc48ZnSi0Uqrz5QEtkU0RWld8TqL4MQ,1250
43
+ bloqade/native/dialects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ bloqade/native/dialects/gate/__init__.py,sha256=w5o5Fa2br2q6VG2D1WJ4hofduBk-9QuDIvge8FSJ-oU,70
45
+ bloqade/native/dialects/gate/_dialect.py,sha256=oRBmg4jkT3hhwpYnv9uAGLb76legyteGT5UjmXuXaP0,58
46
+ bloqade/native/dialects/gate/_interface.py,sha256=R-91lFvarmlQXOF6YDDmgzLRHDeBCwcecFaR6NbFAOI,536
47
+ bloqade/native/dialects/gate/stmts.py,sha256=FjMO13pdAXa0Mp4gVf4h0yf787UWQdpqexB8LO8lUMY,1001
48
+ bloqade/native/stdlib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ bloqade/native/stdlib/broadcast.py,sha256=OHj1uDDER_80F734eIsBkGTkDEvk7eHS3YaKcUy-MNg,6050
50
+ bloqade/native/stdlib/simple.py,sha256=0ZHpJfqB6tbIaIxUmN52MDE9qPboo1H8w_u9L7Ff8sY,5352
51
+ bloqade/native/upstream/__init__.py,sha256=_6m8sEwMS2D78cyFHY_-x7TDaFx-ATzqxuwNUwdvrGU,92
52
+ bloqade/native/upstream/squin2native.py,sha256=U5TC2tetCAB6cfyAK9BG73QoxBGcB8fJcG-x66YMDE0,2986
53
+ bloqade/pyqrack/__init__.py,sha256=MHQ861MamWKQObIgJGCBd-oohRBvJTL8XdsRBw7Kq6w,833
54
+ bloqade/pyqrack/base.py,sha256=Q2GjAcqEZBo-Lhe2jpXuNCB0xXVIdwtdy6cUmDM_OZI,4623
55
+ bloqade/pyqrack/device.py,sha256=a3Pmay4yyYp0cvOAfuHTOxyvOBCvNjdx-IQHJXru0cM,14828
56
+ bloqade/pyqrack/native.py,sha256=FcdYb5H65Mgf8lafG-hcugx4Oa1cD8nEYNxGboAA7Lc,1877
57
+ bloqade/pyqrack/reg.py,sha256=x227OK2hYX8zAUwlDvoFWrJDFxxrXcS9DNNecWe1s7c,1797
58
+ bloqade/pyqrack/target.py,sha256=_GBotS21iKU7yhS7rd10rnuCqgmxPqsvZ5pL8dYse9w,3680
59
+ bloqade/pyqrack/task.py,sha256=USHsiSoxeT9HtGMWyffKSJJCtLIL6dm-GUmJViWGkrQ,5227
60
+ bloqade/pyqrack/noise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ bloqade/pyqrack/noise/native.py,sha256=BmRlRzqCzvSgfSsDlIjuB8L0gx4uaPqmPyfJ5-Ole6M,2751
62
+ bloqade/pyqrack/qasm2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ bloqade/pyqrack/qasm2/core.py,sha256=bHtHc8VTB0OUPoCRIQuPDug5UMOqZHY0FJZEHd77eBo,3245
64
+ bloqade/pyqrack/qasm2/glob.py,sha256=EGe7sh9SuvpRW4V4rFcX6Gf7ot8iyThYbsdPeEBKzYM,865
65
+ bloqade/pyqrack/qasm2/parallel.py,sha256=ITetuXOH2KUDpDOBuFnJoz2DhduvyBC72cOAOOixTaM,1606
66
+ bloqade/pyqrack/qasm2/uop.py,sha256=bLZONsEK15ymFGIQwy7muQv-TX0mvLrECuMp1Y3XTfA,8612
67
+ bloqade/pyqrack/squin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ bloqade/pyqrack/squin/qubit.py,sha256=rXshs86krKZpBjrkCLkbcvhKtbTQVxcwnru9qyg-c_c,2303
69
+ bloqade/pyqrack/squin/gate/__init__.py,sha256=pxvjsKnmIpR47mzs1zrZLYHcmjRvErieMOl1G4KcGeY,27
70
+ bloqade/pyqrack/squin/gate/gate.py,sha256=k0qROtw0ouSujod-Z9K1v_X9BNXAVIp7f08cMw2Hk9E,3901
71
+ bloqade/pyqrack/squin/noise/__init__.py,sha256=uXgRQPOrHNRp3k2ff2HD8mheUEaqxZPKEnwV-s4BiV4,31
72
+ bloqade/pyqrack/squin/noise/native.py,sha256=d4gdMqJJqOPPGOaIpualenKx6UYXDDqAQxA_6wMy9pc,4158
73
+ bloqade/qasm2/__init__.py,sha256=W9dR4Qnvigc7e7Ay7puSJHAIuiQk8vWqY-W64SMu5oU,515
74
+ bloqade/qasm2/_qasm_loading.py,sha256=SoyzZ8eLd2_qKOWbWbo3HbxgiSXMVTd-B2wtrmuZo00,4798
75
+ bloqade/qasm2/_wrappers.py,sha256=4x3fldC4sV2K_XZ0FPZOorQKAbs_7pualListXtak4A,11148
76
+ bloqade/qasm2/glob.py,sha256=dDZW2KYXi9e0JmEbpVJIJvQytVEr86G7eism9ghlABM,579
77
+ bloqade/qasm2/groups.py,sha256=fC02APrn4tt8kOiNsdter2upGNjSwUZ7qR7BhbucNp8,2563
78
+ bloqade/qasm2/noise.py,sha256=YXx-23eFHfGdae9C41dptUvlnu2pK7odT3_eaw3EvBc,2034
79
+ bloqade/qasm2/parallel.py,sha256=pBRCdhivu9CBADhKP46QMtnomOsFMA79J8OyMvqEu74,1169
80
+ bloqade/qasm2/types.py,sha256=bL_Hmo3ut9Cc6--ufyGu8pEZb3j9ZN_RnYuTY1UGSVc,837
81
+ bloqade/qasm2/dialects/__init__.py,sha256=wX99UBwncm0K0Q6yxbAtubXsj2RvAynJYH_5RAt_d54,182
82
+ bloqade/qasm2/dialects/glob.py,sha256=l1up9Hgw_1Ust4VPDoTh85WaasB4Y7_sAEpJLsva0GE,1615
83
+ bloqade/qasm2/dialects/indexing.py,sha256=yp5xNbfad_MSJmpQGqC_5cNak9PPeoTLckiL9NsIF9k,2350
84
+ bloqade/qasm2/dialects/inline.py,sha256=tJPhG0gVy8wxR2K4fBeSNuQtaeS1ORB81gGauogQAf0,2527
85
+ bloqade/qasm2/dialects/parallel.py,sha256=5Fi15i05iLb-S0_74Aj4yWDhUolLIWFb-3iOho8x7cE,3681
86
+ bloqade/qasm2/dialects/core/__init__.py,sha256=rzYkYvHd-z0CU_Kabac2T9B0TI1-ZxdyS8WVT6JXP7E,301
87
+ bloqade/qasm2/dialects/core/_dialect.py,sha256=KYguYHVdyIjPjAyM4GApBUk4slMXmRTMPNfE0lEE7rc,57
88
+ bloqade/qasm2/dialects/core/_emit.py,sha256=HhMKhfl9pL3cb4gr6TCGP2GJ0PchyyJ-ZcvE7MVeqwQ,2540
89
+ bloqade/qasm2/dialects/core/_typeinfer.py,sha256=27qciyhU4TNJ2NPBvDc7mjkOK-x8AzMjq20OXqsRtYQ,671
90
+ bloqade/qasm2/dialects/core/address.py,sha256=F_jnTXs977LKD5azRii3s-gdWf0TNslIkHpGIgf0GAE,1310
91
+ bloqade/qasm2/dialects/core/stmts.py,sha256=MOzll2u4mPdqtUI_aHkYxx3U-SsveEM8W85OU34FqHk,3826
92
+ bloqade/qasm2/dialects/expr/__init__.py,sha256=8A7VX0ox0jIcDL_ufHlC9wZMraZw81f5GkcZKA-7nRY,451
93
+ bloqade/qasm2/dialects/expr/_dialect.py,sha256=yu46u8FX8tTWAlMHv_YIOXZYiAuWYzB7-dbgGIhQayU,57
94
+ bloqade/qasm2/dialects/expr/_emit.py,sha256=97xg69gskV5ezfKCFXdb60PRMni_YmNxI2_PLnV_7TY,3749
95
+ bloqade/qasm2/dialects/expr/_from_python.py,sha256=4wB9J0gMRZq1HnMzAjn6sk6qVpS2gWTlIrTZKKGOMQ8,3432
96
+ bloqade/qasm2/dialects/expr/_interp.py,sha256=dQLDcWABpo107BtC6d18L5NmXYlRPPedGtGqlezRWJw,2395
97
+ bloqade/qasm2/dialects/expr/stmts.py,sha256=UtmLr5-PF28fDnQOSaqEX4ZCNvw7fSfq6nCVSDJHL1g,8119
98
+ bloqade/qasm2/dialects/noise/__init__.py,sha256=4YSXTFjt7TiQd0jqMZy2k6pfKbLyTamQlQ--jPTziLQ,512
99
+ bloqade/qasm2/dialects/noise/_dialect.py,sha256=onK6l3wbM0IHwf3WMiWy7pDRQG0DyLTOzplBuj56psA,58
100
+ bloqade/qasm2/dialects/noise/fidelity.py,sha256=afoY2-LVnJ82g8nvukFiJyJ5llhHJW7kUfgSGsX9Na8,1432
101
+ bloqade/qasm2/dialects/noise/model.py,sha256=0EaNmGJosRp8s-8ENxqWs56Y0xxwstaY-uT2_w5eDfQ,12907
102
+ bloqade/qasm2/dialects/noise/stmts.py,sha256=G2zHBIBxpJigh9IMy7_Cj3rJRB1m0Hqf9h3i7h-8X_4,2351
103
+ bloqade/qasm2/dialects/uop/__init__.py,sha256=M2jpSIExxlgKX0l08-KzvRKeVBUuFPlyLmmWosHWIdk,735
104
+ bloqade/qasm2/dialects/uop/_dialect.py,sha256=mns7toJRMnx38Q5IpScFMUZyA3MwSuEJkV003zudsJA,56
105
+ bloqade/qasm2/dialects/uop/_emit.py,sha256=Bknauu187WkoHNOMePYQm3WckKBFigmufsv0eWqGahk,7992
106
+ bloqade/qasm2/dialects/uop/schedule.py,sha256=gkHXvLACOZlh_pa5wlol3C5L-0D0c7Ttqjrr6VqgVCw,2258
107
+ bloqade/qasm2/dialects/uop/stmts.py,sha256=T22mDA9TgPpHnxh9E3lKv5MGihgyAQ6ontDQ1XdWmtU,7460
108
+ bloqade/qasm2/emit/__init__.py,sha256=Fl9WWMoSyAt3UGAsvCPwnbelhPiPdWDjTpkr8XAJTHc,35
109
+ bloqade/qasm2/emit/base.py,sha256=dDlUmwHFfh140JfnfKgQTWRYbNXj7_SzfYF5allaFkg,2488
110
+ bloqade/qasm2/emit/gate.py,sha256=nk8pwvhcb3MFSm1lOFCzqvBecV3tPpGgG3lPcAIZypk,2785
111
+ bloqade/qasm2/emit/main.py,sha256=5z_-A4iW8mpTg3Zx6FW3mKpaHIESuIwsiePBNFu-Sp8,8367
112
+ bloqade/qasm2/emit/target.py,sha256=M69lLWxT3nHqNx4yrFSkzykDt_iYsL4C3XP9W2FVAN0,6175
113
+ bloqade/qasm2/emit/impls/__init__.py,sha256=ynptLB_449irP9_9u2h3KXmOqF8YvH_NH08NnVoc7zQ,46
114
+ bloqade/qasm2/emit/impls/noise.py,sha256=-N9PmCbz8MwC6xtd55GOpjDoWMyJPJBMVDWT3G83Ads,2779
115
+ bloqade/qasm2/parse/__init__.py,sha256=01tlLfrR015nAAPWw3i_Cs9IXsShpXMnJMagcJ_Vuik,986
116
+ bloqade/qasm2/parse/ast.py,sha256=a48ssf0D_xaE-27PsyeBD5lBvwN2Dojj-RWIBhy7jJE,2904
117
+ bloqade/qasm2/parse/build.py,sha256=2CibD1ZRX3_aknmhb5XvFQcI2sBOn97DlQHomb9CMEw,10621
118
+ bloqade/qasm2/parse/lowering.py,sha256=SkKdcdsvK95Bn7H4hr6XxjZctd25RW_pUPqLXMe9MUY,21065
119
+ bloqade/qasm2/parse/parser.py,sha256=fxqp65dv8NnXE-Ie7ryLESfSH3Xr0unx1EBQysctiHM,121
120
+ bloqade/qasm2/parse/print.py,sha256=PaigQ5RbcfhOteWvDdQHoKsTE3tcNefpVfh1sp5eZEI,8973
121
+ bloqade/qasm2/parse/qasm2.lark,sha256=IYrBydUoVLn1VCNDPP5uNN5BHDET3fQ2yG11cOy900k,2238
122
+ bloqade/qasm2/parse/visitor.py,sha256=W4NUkBw97e3Z4Y1ek6jVNn-5lLVd3A5HXxc-FYTGYbY,427
123
+ bloqade/qasm2/parse/visitor.pyi,sha256=JafCo1QztL6fvmWtJXu4dlqwbTJ6iLVrSa8L-Zd72t4,1851
124
+ bloqade/qasm2/passes/__init__.py,sha256=9vz9F9Mgb5OFgnPWqw8pOJ-7r-tShoa7XevJ41ZmPXM,262
125
+ bloqade/qasm2/passes/fold.py,sha256=OA4mVarUYRAfZSODOA9wgoW7HNNmpQWfPG5qGVEbA6I,1117
126
+ bloqade/qasm2/passes/glob.py,sha256=oAsCibor9DaYFMdTDFBT5QVgi-V0qsl_I4rhgH4AgFI,3545
127
+ bloqade/qasm2/passes/lift_qubits.py,sha256=VgIuqaZecozA3cwGAq8Nzqdv8IqQlzyQv2XlaqY4H4g,759
128
+ bloqade/qasm2/passes/noise.py,sha256=s-KhBZs-3oGxcXh5P1LRVQauUK3NO1scovsBLIG8dUw,2676
129
+ bloqade/qasm2/passes/parallel.py,sha256=q6KWpkgnvxvOO-bCHoLP96ZV33z2XSf03qVYI6qpCq8,5820
130
+ bloqade/qasm2/passes/py2qasm.py,sha256=PmdIrViQ_4PEYBKE5XEk4oqFO2sLF2s_2Etz6R9CBoQ,2167
131
+ bloqade/qasm2/passes/qasm2py.py,sha256=beocXUoO2iM6sX85ML1eK8hp9_s5oupw8tqHWV1cDCo,2138
132
+ bloqade/qasm2/passes/unroll_if.py,sha256=CpE0IRiTU5p2nuFtw0pziNzmkuPvD_EM4Q5IcW4hxm0,1095
133
+ bloqade/qasm2/rewrite/__init__.py,sha256=peWypAlrxyMwuqZT9CmRuVZVPxkbrHZ0tke5ngP_qow,684
134
+ bloqade/qasm2/rewrite/desugar.py,sha256=ABri2ubImrgYUWtuFj0EEh5FcICqjtKUSS2Ue4WlMdA,1007
135
+ bloqade/qasm2/rewrite/glob.py,sha256=JzGDIY8ME9ZhNQ0g4d0FTpJuJlPu6G19myzo4zb6f_M,3119
136
+ bloqade/qasm2/rewrite/insert_qubits.py,sha256=PpYNlJAl-TVtC1MJxIzOQWDetgW8OPXe6cLN1SMg2w0,1187
137
+ bloqade/qasm2/rewrite/native_gates.py,sha256=GVutT1jf_gv9qaR5fLqjcmxcqCfMZTiQyg4Fq-TlmFM,18684
138
+ bloqade/qasm2/rewrite/parallel_to_glob.py,sha256=FVNDBwjiL3-tJN-IT7kjKiaO7I3guDLqRN6rdmLdZvw,3001
139
+ bloqade/qasm2/rewrite/parallel_to_uop.py,sha256=SPOcMq51NHk30GQs1U1oMS0AdNa1Xzg3_0XKJuEid-s,2205
140
+ bloqade/qasm2/rewrite/register.py,sha256=0q-zkSdZih3BbRUDGnig8fFVQA9y2fhn3wdsu4Kbdm4,1563
141
+ bloqade/qasm2/rewrite/uop_to_parallel.py,sha256=y5_OV9H0kgdJP8H6FXPnvHwpfKJ1V8vLkmP7TzQkDQg,13144
142
+ bloqade/qasm2/rewrite/noise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
+ bloqade/qasm2/rewrite/noise/heuristic_noise.py,sha256=RtXWFBbVfBhAul6eWDfh7D4TduUmALLMM2I71RyafPM,7356
144
+ bloqade/qasm2/rewrite/noise/remove_noise.py,sha256=rnalZ1igiTpCFJ9Z3PRdzcx-qnkkALv6iQO-_yz39kM,1097
145
+ bloqade/qbraid/__init__.py,sha256=V-Co_nhH03UCV4c5MGkBnhHcVwJ2Ngrl6KZnSwo91b8,80
146
+ bloqade/qbraid/lowering.py,sha256=54sMIurWZKYTX_R8tOYa3M422dGX5um6XpPfRf2ycr8,12023
147
+ bloqade/qbraid/schema.py,sha256=FBwMOrwsJ9q98a_8XW6BrJfeJ-cssnTd0tmor6R7Dl0,7880
148
+ bloqade/qbraid/simulation_result.py,sha256=zdCJcAdbQkEDzFFuC2q3gqOFTOLAXHk4wh8RRDB6cgc,3956
149
+ bloqade/qbraid/target.py,sha256=LcFHHyLe74yBmrHI9251xHgLN_nUz35lN8RPNwrT6mI,3149
150
+ bloqade/qubit/__init__.py,sha256=Op0IkrZINFqk9CAaadTz1zAEX_kvQA0jAeDp7azeMCk,425
151
+ bloqade/qubit/_dialect.py,sha256=9rjrq21U6FSwDkMILDplE6zPCjdB-U2mLfpFGdsUeeY,52
152
+ bloqade/qubit/_interface.py,sha256=ihRgJ9x9kYboTJ8zyXj9N4P0idYGFQQJAWuX6Xu0pb0,1079
153
+ bloqade/qubit/_prelude.py,sha256=svWslf7sdyYExCqi1Ki1oXECZezE3xdcDtjNOvWPcMI,1269
154
+ bloqade/qubit/stmts.py,sha256=FP1H7TiRwsPP5GaDZCeE4TiJzJMebKunY0qMTiUGnFU,1959
155
+ bloqade/qubit/analysis/__init__.py,sha256=DvnFHmEqMxRG92jVT3ZWwAQDTb6DC4fZDTV8ZSLZgP0,43
156
+ bloqade/qubit/analysis/address_impl.py,sha256=x1pV6bol2BSrE-_ITSnCkQjq3OK053ja0uHhAwyFdpA,1080
157
+ bloqade/qubit/stdlib/__init__.py,sha256=b1CgWSNBcIWh1yKeFS_keFo0CnXkeTEDk6LEu0kpEiE,102
158
+ bloqade/qubit/stdlib/_new.py,sha256=YDooaU5oXScFaKEHEkNQvnlpma2nwvK4nqX7Z9xAJDo,775
159
+ bloqade/qubit/stdlib/broadcast.py,sha256=oTnxrknCaW1caYEDESwnbWXI_2zjyTG1uXrxEJwKlgs,1729
160
+ bloqade/qubit/stdlib/simple.py,sha256=0aiOgorWQguNDatl3WbnFW98Sy4LDyODlW6h9j426g8,1503
161
+ bloqade/rewrite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
+ bloqade/rewrite/passes/__init__.py,sha256=xziLrWJboRd3ADrAVPOTWI405b32othkVm3jC77Jy54,300
163
+ bloqade/rewrite/passes/aggressive_unroll.py,sha256=r7OCO4KGyr5ux2XEBFE0fQ6JPfkDxo1fnIk7VAX6gbQ,3424
164
+ bloqade/rewrite/passes/callgraph.py,sha256=3izzczPxcBmB7L-q1eorWW399NI86CrIIvnatkfSbb4,3360
165
+ bloqade/rewrite/passes/canonicalize_ilist.py,sha256=qysBpk39XwP5UUp72x31d-j0TnCyiuyH8kxKyJ5jtEk,817
166
+ bloqade/rewrite/rules/__init__.py,sha256=3e1Z5T3INqNtP6OU0Vivu_SdMOR_2KDixeA0Yjoddgg,82
167
+ bloqade/rewrite/rules/split_ifs.py,sha256=KhwvUx-oBrBO2F1j-J5kwNbdnrnEZcZtJflzyQm-UOI,2613
168
+ bloqade/squin/__init__.py,sha256=0QGtsCYQaix6azEpUnuK5rCJLg_CPOVR-JOhYDKrEEM,1302
169
+ bloqade/squin/groups.py,sha256=xNrtc3PbimQyPfJw0pAgBzGKhUSBeEvd-pu3N967n4g,818
170
+ bloqade/squin/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
+ bloqade/squin/analysis/schedule.py,sha256=WLJ40jCoEfjHktw6KMPjjX45-biszaERRd4iDINmqMw,7710
172
+ bloqade/squin/gate/__init__.py,sha256=w5o5Fa2br2q6VG2D1WJ4hofduBk-9QuDIvge8FSJ-oU,70
173
+ bloqade/squin/gate/_dialect.py,sha256=1l9W5g38f9dIOvCU2iR783tuBBc3TjfwESvXE3SiWFg,57
174
+ bloqade/squin/gate/_interface.py,sha256=Nb4XvV84UwQZnOnnw7b84TOBIFfamyxZLIPvdxRVWNI,1601
175
+ bloqade/squin/gate/stmts.py,sha256=XTqVsXpC6tAABdxsnAkMK0tUQe-zzk2RT3WEbbDZarI,2644
176
+ bloqade/squin/noise/__init__.py,sha256=B8QCV0Db9bbBDmqjQPsiRphGLu89-tre-TSlStFYmxM,96
177
+ bloqade/squin/noise/_dialect.py,sha256=Wyc9lXmmfHkZfURlDoIHYCX6HDsLzfPkqwE4REUmMsg,58
178
+ bloqade/squin/noise/_interface.py,sha256=5P5cwt6lwDFLdtR1sZMVnFS8v8KWMAKnfN45AAJ0Iks,1027
179
+ bloqade/squin/noise/stmts.py,sha256=G6B4-FVmHAVE5COV-7mAhoBjxq3ZVtzLYhZJxl_RmQQ,3180
180
+ bloqade/squin/rewrite/U3_to_clifford.py,sha256=hkxjoo3sXbHG9XChdVb11BuU_rOIpw8ZikN0nbg5YlE,5539
181
+ bloqade/squin/rewrite/__init__.py,sha256=9SOU2dpNM52hdlgqvSyPQG2LFvhIA-Z1kAp4ljnDeL0,265
182
+ bloqade/squin/rewrite/remove_dangling_qubits.py,sha256=Q5XmRqZWdlq2-v82W6NCHcdwtgK4cfpqn4MkWohUqHA,469
183
+ bloqade/squin/rewrite/wrap_analysis.py,sha256=cbGY0lnPV3g2ZgVep6AA6w9UmA7mO3waX7tuotIgdqU,1557
184
+ bloqade/squin/stdlib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
185
+ bloqade/squin/stdlib/broadcast/__init__.py,sha256=kiJmcrd1Q44oR7X0KfkOLxoMaPhiFkAxfHYwUrqOaYk,774
186
+ bloqade/squin/stdlib/broadcast/_qubit.py,sha256=s25nKv4ezRu1O-6w_o-f570TD50K_oFqWWP253hli2o,91
187
+ bloqade/squin/stdlib/broadcast/gate.py,sha256=orBbexaTTkPsEDTXpldLDuL0IuVUMzKqW-3J9ZcJeYo,6393
188
+ bloqade/squin/stdlib/broadcast/noise.py,sha256=_RtbJX-CCO3QMYiOYOJH83rnhn8o-UaSZ296rtrLxm8,4928
189
+ bloqade/squin/stdlib/simple/__init__.py,sha256=y7yq0Ff2ljBgOkC7SFMvrIeSnGjVH55TQ-ynq10DnkQ,719
190
+ bloqade/squin/stdlib/simple/gate.py,sha256=FUOKlvdvbkoNaXrkUnpjyd5o-iM2GsWbptTLNexyZII,5130
191
+ bloqade/squin/stdlib/simple/noise.py,sha256=DWNyHzBjbZz0Af_ufwRKcduHVXlJDJ0SE3Eut9Ohx7Y,3958
192
+ bloqade/stim/__init__.py,sha256=jCkbQig8t7kT_aGBVJ8e_Hj8UHKeyT8QRqmf5QGJPoc,987
193
+ bloqade/stim/_wrappers.py,sha256=PNuo1jcMvNsLAVNvHv_O6hJEmRCj1XRVP97C5mtjtEw,4178
194
+ bloqade/stim/groups.py,sha256=zHPId9X8vDTPgayrdpI_D_KVIg2Wdc5KJ7VbAnAdTOc,694
195
+ bloqade/stim/dialects/__init__.py,sha256=A1Sq0jg8wi6MjRkzmuSBnHmO3EraD0pDFWz-dO6c6v8,89
196
+ bloqade/stim/dialects/auxiliary/__init__.py,sha256=6f57a8k2-QBtqaB0GN8FxxTBlG82oZQbVIOxxq975g4,692
197
+ bloqade/stim/dialects/auxiliary/_dialect.py,sha256=GExjMgzF9HV7IA25Kbl1K2i5g7aJAhdifIdrIDrvBVY,55
198
+ bloqade/stim/dialects/auxiliary/emit.py,sha256=Q9S4BGIGek9MAf0PlMZeuoUPqcSgoaqejd1fIzXY6yo,3294
199
+ bloqade/stim/dialects/auxiliary/interp.py,sha256=pd0KvrHc0x3TYHm7zu24FuN-auLiP2p1Krbz4ik2-7A,694
200
+ bloqade/stim/dialects/auxiliary/lowering.py,sha256=4dxRZHGp_18EMVlYuZQFSzg4MIOBriF5HjexT9Px2xc,1443
201
+ bloqade/stim/dialects/auxiliary/types.py,sha256=1l2YdJ-u9y0wpBfxh4OAlvmRAUnrmcDjDagoW2GyVaQ,314
202
+ bloqade/stim/dialects/auxiliary/stmts/__init__.py,sha256=VxLBnqlZngabs5vn3PiRNRXBBDueTCTmJ2wgWEertrA,371
203
+ bloqade/stim/dialects/auxiliary/stmts/annotate.py,sha256=B1qQ1zgkDCIjeMYqaBycDfRJpI6dKSPzHDtA7JGGG9g,1770
204
+ bloqade/stim/dialects/auxiliary/stmts/const.py,sha256=nxcpVylgjfKt8pDkcMzVBMGLjON2bQb99WSLv7frvkI,3298
205
+ bloqade/stim/dialects/collapse/__init__.py,sha256=MhlEWJR_mJI3teoip1N8MlHk2C68seJELXwmyjyx_ns,305
206
+ bloqade/stim/dialects/collapse/_dialect.py,sha256=F5uplH7WL9ZQatEp0ZMvgLWX1k9moAWW879LTNwnHH0,60
207
+ bloqade/stim/dialects/collapse/emit_str.py,sha256=xZssp37HnQVhGO638_I_vb8ahfG_sHHrxWvaadNDvXw,1852
208
+ bloqade/stim/dialects/collapse/stmts/__init__.py,sha256=6wf-1HIdajz_hiYXh5j0QftsAtyaBtpp826d0UdYysI,189
209
+ bloqade/stim/dialects/collapse/stmts/measure.py,sha256=hr7jGgA4AoaCy62tmVWqKUnbXol2X1jAxm_jkEjKdXs,918
210
+ bloqade/stim/dialects/collapse/stmts/pp_measure.py,sha256=AneDEeWb0mXJRYN5LuKDqwxstkGTIW_-vhadQRIaZ4c,524
211
+ bloqade/stim/dialects/collapse/stmts/reset.py,sha256=4fPSdM_ZiivuUn4uiZGiZQ9swolDir7Dl9lhMkZbspo,473
212
+ bloqade/stim/dialects/gate/__init__.py,sha256=5Y0BTlLOuW-Ud4LwAC_CUuMwxa04LKj4CTKgQbiL8yg,347
213
+ bloqade/stim/dialects/gate/_dialect.py,sha256=78_dThliFZG9xSwYhTdibxP3vefHpEDUawtZqb9X3uA,56
214
+ bloqade/stim/dialects/gate/emit.py,sha256=8WtNdQoA9JeqH72sJzuljQOv111cSnl1iVmeIh3dwYE,2840
215
+ bloqade/stim/dialects/gate/stmts/__init__.py,sha256=TbXjWYfCbZNuGEehvtF75LELLJJo_GzoXWRnuVZphv8,461
216
+ bloqade/stim/dialects/gate/stmts/base.py,sha256=MK7Zu-Kys_64O0nXAkPzlHEnWYevBGm3FRHhJw33rrE,748
217
+ bloqade/stim/dialects/gate/stmts/clifford_1q.py,sha256=Sj1Nf9AA_WWazGTg5kzFRTaLRIj3Edj657j0B8dybdI,896
218
+ bloqade/stim/dialects/gate/stmts/clifford_2q.py,sha256=cb3BVSkOt5SiRq4D4WkbuUbEouK3MwDxQIhAF0cvZbo,239
219
+ bloqade/stim/dialects/gate/stmts/control_2q.py,sha256=gZRtkpgAkiUFqx5Led2t1YjYblEeBMdSQU3DPMGveoM,415
220
+ bloqade/stim/dialects/gate/stmts/pp.py,sha256=yUNCrkYBM7wUCvtRqwP9_HYX0HsHVt6JZR4efM05838,487
221
+ bloqade/stim/dialects/noise/__init__.py,sha256=WoDdIZnxelk8REiIWDKcrEW79xwISdTZlqlTjURb71Q,138
222
+ bloqade/stim/dialects/noise/_dialect.py,sha256=SVUjAqBoGnxo13JlAlsxulIMo1QzfJb4SMSrFaCnfP4,57
223
+ bloqade/stim/dialects/noise/emit.py,sha256=ysbaimqcP51RbE_aKWJd_aeiIyBoN1BHHpWjSY4u4CI,3036
224
+ bloqade/stim/dialects/noise/stmts.py,sha256=1jB43gshxCOqX9vX_EBwYEy9swag8lOjDLwAi-m2xSo,3620
225
+ bloqade/stim/emit/__init__.py,sha256=GZst8q95tnaCf789z-Ha2t6WMiOZ429X7h8mzX5rFM0,102
226
+ bloqade/stim/emit/impls.py,sha256=wYFPqaFH3HjG94Uv_jF7oIY_nCanINX43bCjjhFxk_k,423
227
+ bloqade/stim/emit/stim_str.py,sha256=-XsoyIhVmRgnGQ-rQGJ6zpPROPN2WoUp7aTblCczzfY,2267
228
+ bloqade/stim/parse/__init__.py,sha256=l2DjReB2KkgrDjP_4nP6RnoziiOewoSeZfTno1sVYTw,59
229
+ bloqade/stim/parse/lowering.py,sha256=rrIMiWyM176c5oKebAhC0pisxAx9dKjLB5ORTtCSvsU,23698
230
+ bloqade/stim/passes/__init__.py,sha256=Mznmsy9ABZPCV9YGxoyqSPSTsg_nZByO6_3MxBxw1n0,71
231
+ bloqade/stim/passes/flatten.py,sha256=zxxsCxwaxozYDLT_hbZilfbs1zaTqRpSfFe2hfHVH2c,900
232
+ bloqade/stim/passes/simplify_ifs.py,sha256=TpzInFhUhZ0qrBvAEKBMufr7OHKSqxanZOnhkYge3hc,1304
233
+ bloqade/stim/passes/squin_to_stim.py,sha256=FpC7lBFwB9pODcsrShzwXkm7UXhiDwZNN-UhD5dllCE,3637
234
+ bloqade/stim/rewrite/__init__.py,sha256=Q4KZS3qaOWFo0Dik-_18QmtfYxEdOsCxk7-VwprJIAU,462
235
+ bloqade/stim/rewrite/get_record_util.py,sha256=tZJdjcqUzggbPES-4UzLZQzSVSCaXzECV71SKjtJYd4,843
236
+ bloqade/stim/rewrite/ifs_to_stim.py,sha256=3GgG4PRYduX2np_eTUcH-WF2sLFY8mAbsJdHM8eVdtE,6471
237
+ bloqade/stim/rewrite/py_constant_to_stim.py,sha256=PV8bHvn759-d_0JW4akaGSORW_oxigrlUBhAC51PJAU,1354
238
+ bloqade/stim/rewrite/qubit_to_stim.py,sha256=-ccFmmNgVvbzc3HjGWFRJhmS1AcpelbumlEhY0DAAwQ,4790
239
+ bloqade/stim/rewrite/set_detector_to_stim.py,sha256=UcDk72Ov9h7wseQm-A4lm6OpOoQByJgqG7HUnn4L5gQ,2237
240
+ bloqade/stim/rewrite/set_observable_to_stim.py,sha256=rirtof0P3epJYq6j82igLY-atANSCkueX7brhlZ62J8,1685
241
+ bloqade/stim/rewrite/squin_measure.py,sha256=F6zyq3UnJH3Bu7hL9fYItwJdV0R0IKp22Phxk5Cg-vw,2150
242
+ bloqade/stim/rewrite/squin_noise.py,sha256=2VkRv0u5PmjShFeQtA9vM1AxYCy8ktgNHNrlVXdhHAo,7012
243
+ bloqade/stim/rewrite/util.py,sha256=G8Uddu5E0CDgdxzgf2MGGIBHFB0uNRqyP4IANgNehYM,1166
244
+ bloqade/stim/upstream/__init__.py,sha256=Skev79lMyfz2bFoih-Fn_9iXbMArqlKxHSd1agHAtlA,55
245
+ bloqade/stim/upstream/from_squin.py,sha256=08I_BE7gK2a8ngZ2ElCLw879B5KGaKCFRf26NJVdU70,272
246
+ bloqade/validation/__init__.py,sha256=Me6OviZ0_Vx2ek5RqFy6k_OI56NlH9dEuhOSakh_D7c,103
247
+ bloqade/validation/kernel_validation.py,sha256=B05noOhr_zFZiOs7OyI-ZakzCdDAefQN-A3K44e92OA,2661
248
+ bloqade/validation/analysis/__init__.py,sha256=hLJqnZrNUA64uMeaad4mESTjUf7GiysYTfm-dwvZfek,145
249
+ bloqade/validation/analysis/analysis.py,sha256=puV0pIYifWaTCQ6O9Eta8KA7SteAbNmDj38UPK7o3zQ,1429
250
+ bloqade/validation/analysis/lattice.py,sha256=SJjzt_oz-Bm3-dgtiUpFxyNa2i7gQDXSH2LZ0uioyCs,1210
251
+ bloqade/visual/__init__.py,sha256=Y7d0YgovKhUFzjMeDvt0wGRUZ3re3SY6iO3e8xHXrr4,37
252
+ bloqade/visual/animation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
+ bloqade/visual/animation/animate.py,sha256=NSKs3YDWgTZH2-Tpx3cP1bBcIEWTEPqK5UFkY_IF_3k,8927
254
+ bloqade/visual/animation/base.py,sha256=JVa7ad_S3JsGxNAhsUwTHNR0ESG2mlGcZ8sNjsUQcH4,11061
255
+ bloqade/visual/animation/gate_event.py,sha256=3OsJ9OK5UHO7-KFUDqRJITEMSZqn-ELkl1N5pimYPbc,567
256
+ bloqade/visual/animation/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
+ bloqade/visual/animation/runtime/aod.py,sha256=E_oiIAKjNqPlqvTEc2ImFXBN2ZyFb7z7-518y8jBCcY,973
258
+ bloqade/visual/animation/runtime/atoms.py,sha256=EmjxhujLiHHPS_HtH_B-7TiqeHgvW5uSAgag9hYtJ1U,1581
259
+ bloqade/visual/animation/runtime/ppoly.py,sha256=JB9IP53N1w6adBJEue6J5Nmj818Id9JvrlgrmiQTU1I,1385
260
+ bloqade/visual/animation/runtime/qpustate.py,sha256=rlmxQeJSvaohXrTpXQL5y-NJcpvfW33xPaYM1slv7cc,4270
261
+ bloqade/visual/animation/runtime/utils.py,sha256=ju9IzOWX-vKwfpqUjlUKu3Ssr_UFPFFq-tzH_Nqyo_c,1212
262
+ bloqade_circuit-0.9.1.dist-info/METADATA,sha256=oKjEzI9qU7-Cv6538jO_laL1UeGUO17Mwfx2Gib01xQ,3723
263
+ bloqade_circuit-0.9.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
264
+ bloqade_circuit-0.9.1.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
265
+ bloqade_circuit-0.9.1.dist-info/RECORD,,
@@ -1,180 +0,0 @@
1
- import math
2
-
3
- from kirin import interp
4
-
5
- from bloqade.squin import op
6
- from bloqade.pyqrack.base import PyQrackInterpreter
7
-
8
- from .runtime import (
9
- SnRuntime,
10
- SpRuntime,
11
- U3Runtime,
12
- RotRuntime,
13
- KronRuntime,
14
- MultRuntime,
15
- ResetRuntime,
16
- ScaleRuntime,
17
- AdjointRuntime,
18
- ControlRuntime,
19
- PhaseOpRuntime,
20
- IdentityRuntime,
21
- OperatorRuntime,
22
- ProjectorRuntime,
23
- OperatorRuntimeABC,
24
- PauliStringRuntime,
25
- )
26
-
27
-
28
- @op.dialect.register(key="pyqrack")
29
- class PyQrackMethods(interp.MethodTable):
30
-
31
- @interp.impl(op.stmts.Kron)
32
- def kron(
33
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Kron
34
- ) -> tuple[OperatorRuntimeABC]:
35
- lhs = frame.get(stmt.lhs)
36
- rhs = frame.get(stmt.rhs)
37
- return (KronRuntime(lhs, rhs),)
38
-
39
- @interp.impl(op.stmts.Mult)
40
- def mult(
41
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Mult
42
- ) -> tuple[OperatorRuntimeABC]:
43
- lhs = frame.get(stmt.lhs)
44
- rhs = frame.get(stmt.rhs)
45
- return (MultRuntime(lhs, rhs),)
46
-
47
- @interp.impl(op.stmts.Adjoint)
48
- def adjoint(
49
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Adjoint
50
- ) -> tuple[OperatorRuntimeABC]:
51
- op = frame.get(stmt.op)
52
- return (AdjointRuntime(op),)
53
-
54
- @interp.impl(op.stmts.Scale)
55
- def scale(
56
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Scale
57
- ) -> tuple[OperatorRuntimeABC]:
58
- op = frame.get(stmt.op)
59
- factor = frame.get(stmt.factor)
60
- return (ScaleRuntime(op, factor),)
61
-
62
- @interp.impl(op.stmts.Control)
63
- def control(
64
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Control
65
- ) -> tuple[OperatorRuntimeABC]:
66
- op = frame.get(stmt.op)
67
- n_controls = stmt.n_controls
68
- rt = ControlRuntime(
69
- op=op,
70
- n_controls=n_controls,
71
- )
72
- return (rt,)
73
-
74
- @interp.impl(op.stmts.Rot)
75
- def rot(
76
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Rot
77
- ) -> tuple[OperatorRuntimeABC]:
78
- axis = frame.get(stmt.axis)
79
- angle = frame.get(stmt.angle)
80
- return (RotRuntime(axis, angle),)
81
-
82
- @interp.impl(op.stmts.Identity)
83
- def identity(
84
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Identity
85
- ) -> tuple[OperatorRuntimeABC]:
86
- return (IdentityRuntime(sites=stmt.sites),)
87
-
88
- @interp.impl(op.stmts.PhaseOp)
89
- @interp.impl(op.stmts.ShiftOp)
90
- def phaseop(
91
- self,
92
- interp: PyQrackInterpreter,
93
- frame: interp.Frame,
94
- stmt: op.stmts.PhaseOp | op.stmts.ShiftOp,
95
- ) -> tuple[OperatorRuntimeABC]:
96
- theta = frame.get(stmt.theta)
97
- global_ = isinstance(stmt, op.stmts.PhaseOp)
98
- return (PhaseOpRuntime(theta, global_=global_),)
99
-
100
- @interp.impl(op.stmts.Reset)
101
- @interp.impl(op.stmts.ResetToOne)
102
- def reset(
103
- self,
104
- interp: PyQrackInterpreter,
105
- frame: interp.Frame,
106
- stmt: op.stmts.Reset | op.stmts.ResetToOne,
107
- ) -> tuple[OperatorRuntimeABC]:
108
- target_state = isinstance(stmt, op.stmts.ResetToOne)
109
- return (ResetRuntime(target_state=target_state),)
110
-
111
- @interp.impl(op.stmts.X)
112
- @interp.impl(op.stmts.Y)
113
- @interp.impl(op.stmts.Z)
114
- @interp.impl(op.stmts.H)
115
- @interp.impl(op.stmts.S)
116
- @interp.impl(op.stmts.T)
117
- def operator(
118
- self,
119
- interp: PyQrackInterpreter,
120
- frame: interp.Frame,
121
- stmt: (
122
- op.stmts.X | op.stmts.Y | op.stmts.Z | op.stmts.H | op.stmts.S | op.stmts.T
123
- ),
124
- ) -> tuple[OperatorRuntimeABC]:
125
- return (OperatorRuntime(method_name=stmt.name.lower()),)
126
-
127
- @interp.impl(op.stmts.SqrtX)
128
- @interp.impl(op.stmts.SqrtY)
129
- def sqrt(
130
- self,
131
- interp: PyQrackInterpreter,
132
- frame: interp.Frame,
133
- stmt: op.stmts.SqrtX | op.stmts.SqrtY,
134
- ):
135
- axis_name = "x" if isinstance(stmt, op.stmts.SqrtX) else "y"
136
- axis = OperatorRuntime(method_name=axis_name)
137
- return (RotRuntime(axis=axis, angle=-0.5 * math.pi),)
138
-
139
- @interp.impl(op.stmts.P0)
140
- @interp.impl(op.stmts.P1)
141
- def projector(
142
- self,
143
- interp: PyQrackInterpreter,
144
- frame: interp.Frame,
145
- stmt: op.stmts.P0 | op.stmts.P1,
146
- ) -> tuple[OperatorRuntimeABC]:
147
- state = isinstance(stmt, op.stmts.P1)
148
- return (ProjectorRuntime(to_state=state),)
149
-
150
- @interp.impl(op.stmts.Sp)
151
- def sp(
152
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Sp
153
- ) -> tuple[OperatorRuntimeABC]:
154
- return (SpRuntime(),)
155
-
156
- @interp.impl(op.stmts.Sn)
157
- def sn(
158
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.Sn
159
- ) -> tuple[OperatorRuntimeABC]:
160
- return (SnRuntime(),)
161
-
162
- @interp.impl(op.stmts.U3)
163
- def u3(
164
- self, interp: PyQrackInterpreter, frame: interp.Frame, stmt: op.stmts.U3
165
- ) -> tuple[OperatorRuntimeABC]:
166
- theta = frame.get(stmt.theta)
167
- phi = frame.get(stmt.phi)
168
- lam = frame.get(stmt.lam)
169
- return (U3Runtime(theta, phi, lam),)
170
-
171
- @interp.impl(op.stmts.PauliString)
172
- def clifford_string(
173
- self,
174
- interp: PyQrackInterpreter,
175
- frame: interp.Frame,
176
- stmt: op.stmts.PauliString,
177
- ) -> tuple[OperatorRuntimeABC]:
178
- string = stmt.string
179
- ops = [OperatorRuntime(method_name=name.lower()) for name in stmt.string]
180
- return (PauliStringRuntime(string, ops),)