bloqade-circuit 0.6.3__tar.gz → 0.6.5__tar.gz

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.

Potentially problematic release.


This version of bloqade-circuit might be problematic. Click here for more details.

Files changed (406) hide show
  1. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/PKG-INFO +1 -1
  2. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/pyproject.toml +1 -1
  3. bloqade_circuit-0.6.5/src/bloqade/analysis/measure_id/__init__.py +5 -0
  4. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/measure_id/analysis.py +13 -2
  5. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/measure_id/impls.py +41 -2
  6. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/base.py +1 -1
  7. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/__init__.py +4 -0
  8. bloqade_circuit-0.6.5/src/bloqade/squin/gate.py +193 -0
  9. bloqade_circuit-0.6.5/src/bloqade/squin/parallel.py +200 -0
  10. bloqade_circuit-0.6.5/src/bloqade/stim/passes/__init__.py +5 -0
  11. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/passes/simplify_ifs.py +10 -1
  12. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/passes/squin_to_stim.py +54 -21
  13. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/__init__.py +1 -0
  14. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/ifs_to_stim.py +5 -6
  15. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/squin_measure.py +2 -61
  16. bloqade_circuit-0.6.5/test/analysis/measure_id/test_measure_id.py +141 -0
  17. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/squin/test_kernel.py +32 -0
  18. bloqade_circuit-0.6.5/test/squin/test_stdlib_shorthands.py +158 -0
  19. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/noise/apply_loss.stim +3 -0
  20. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/addition_assignment_measure.stim +2 -0
  21. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/alias_with_measure_list.stim +3 -0
  22. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/complex_storage_index_order.stim +8 -0
  23. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/nested_for_loop.stim +4 -0
  24. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/nested_list.stim +3 -0
  25. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/record_index_order.stim +7 -0
  26. bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/simple_if_rewrite.stim +8 -0
  27. bloqade_circuit-0.6.5/test/stim/passes/test_squin_meas_to_stim.py +162 -0
  28. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/test_squin_noise_to_stim.py +23 -5
  29. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/test_squin_qubit_to_stim.py +45 -3
  30. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/uv.lock +1 -1
  31. bloqade_circuit-0.6.3/src/bloqade/analysis/measure_id/__init__.py +0 -2
  32. bloqade_circuit-0.6.3/src/bloqade/stim/passes/__init__.py +0 -1
  33. bloqade_circuit-0.6.3/test/analysis/measure_id/test_measure_id.py +0 -31
  34. bloqade_circuit-0.6.3/test/stim/passes/stim_reference_programs/simple_if_rewrite.txt +0 -8
  35. bloqade_circuit-0.6.3/test/stim/passes/test_squin_meas_to_stim.py +0 -49
  36. bloqade_circuit-0.6.3/test/stim/passes/test_squin_to_stim_cases.py +0 -22
  37. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.github/dependabot.yml +0 -0
  38. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.github/workflows/ci.yml +0 -0
  39. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.github/workflows/isort.yml +0 -0
  40. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.github/workflows/lint.yml +0 -0
  41. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.github/workflows/release.yml +0 -0
  42. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.gitignore +0 -0
  43. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/.pre-commit-config.yaml +0 -0
  44. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/LICENSE +0 -0
  45. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/README.md +0 -0
  46. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/_typos.toml +0 -0
  47. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/justfile +0 -0
  48. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/__init__.py +0 -0
  49. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/address/__init__.py +0 -0
  50. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/address/analysis.py +0 -0
  51. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/address/impls.py +0 -0
  52. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/address/lattice.py +0 -0
  53. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/fidelity/__init__.py +0 -0
  54. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/fidelity/analysis.py +0 -0
  55. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/analysis/measure_id/lattice.py +0 -0
  56. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/__init__.py +0 -0
  57. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/lineprog.py +0 -0
  58. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/noise/__init__.py +0 -0
  59. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/noise/_two_zone_utils.py +0 -0
  60. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/noise/conflict_graph.py +0 -0
  61. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/noise/model.py +0 -0
  62. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/noise/transform.py +0 -0
  63. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/cirq_utils/parallelize.py +0 -0
  64. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/device.py +0 -0
  65. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/__init__.py +0 -0
  66. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/device.py +0 -0
  67. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/noise/__init__.py +0 -0
  68. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/noise/native.py +0 -0
  69. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/qasm2/__init__.py +0 -0
  70. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/qasm2/core.py +0 -0
  71. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/qasm2/glob.py +0 -0
  72. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/qasm2/parallel.py +0 -0
  73. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/qasm2/uop.py +0 -0
  74. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/reg.py +0 -0
  75. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/__init__.py +0 -0
  76. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/noise/__init__.py +0 -0
  77. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/noise/native.py +0 -0
  78. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/op.py +0 -0
  79. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/qubit.py +0 -0
  80. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/runtime.py +0 -0
  81. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/squin/wire.py +0 -0
  82. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/target.py +0 -0
  83. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/pyqrack/task.py +0 -0
  84. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/__init__.py +0 -0
  85. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/_qasm_loading.py +0 -0
  86. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/_wrappers.py +0 -0
  87. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/__init__.py +0 -0
  88. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/__init__.py +0 -0
  89. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/_dialect.py +0 -0
  90. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/_emit.py +0 -0
  91. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/_typeinfer.py +0 -0
  92. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/address.py +0 -0
  93. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/core/stmts.py +0 -0
  94. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/__init__.py +0 -0
  95. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/_dialect.py +0 -0
  96. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/_emit.py +0 -0
  97. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/_from_python.py +0 -0
  98. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/_interp.py +0 -0
  99. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/expr/stmts.py +0 -0
  100. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/glob.py +0 -0
  101. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/indexing.py +0 -0
  102. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/inline.py +0 -0
  103. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/noise/__init__.py +0 -0
  104. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/noise/_dialect.py +0 -0
  105. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/noise/fidelity.py +0 -0
  106. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/noise/model.py +0 -0
  107. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/noise/stmts.py +0 -0
  108. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/parallel.py +0 -0
  109. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/uop/__init__.py +0 -0
  110. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/uop/_dialect.py +0 -0
  111. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/uop/_emit.py +0 -0
  112. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/uop/schedule.py +0 -0
  113. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/dialects/uop/stmts.py +0 -0
  114. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/__init__.py +0 -0
  115. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/base.py +0 -0
  116. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/gate.py +0 -0
  117. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/impls/__init__.py +0 -0
  118. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/impls/noise.py +0 -0
  119. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/main.py +0 -0
  120. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/emit/target.py +0 -0
  121. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/glob.py +0 -0
  122. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/groups.py +0 -0
  123. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/noise.py +0 -0
  124. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parallel.py +0 -0
  125. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/__init__.py +0 -0
  126. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/ast.py +0 -0
  127. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/build.py +0 -0
  128. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/lowering.py +0 -0
  129. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/parser.py +0 -0
  130. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/print.py +0 -0
  131. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/qasm2.lark +0 -0
  132. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/visitor.py +0 -0
  133. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/parse/visitor.pyi +0 -0
  134. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/__init__.py +0 -0
  135. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/fold.py +0 -0
  136. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/glob.py +0 -0
  137. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/lift_qubits.py +0 -0
  138. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/noise.py +0 -0
  139. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/parallel.py +0 -0
  140. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/py2qasm.py +0 -0
  141. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/qasm2py.py +0 -0
  142. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/passes/unroll_if.py +0 -0
  143. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/__init__.py +0 -0
  144. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/desugar.py +0 -0
  145. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/glob.py +0 -0
  146. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/insert_qubits.py +0 -0
  147. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/native_gates.py +0 -0
  148. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/noise/__init__.py +0 -0
  149. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/noise/heuristic_noise.py +0 -0
  150. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/noise/remove_noise.py +0 -0
  151. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/parallel_to_glob.py +0 -0
  152. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/parallel_to_uop.py +0 -0
  153. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/register.py +0 -0
  154. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/rewrite/uop_to_parallel.py +0 -0
  155. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qasm2/types.py +0 -0
  156. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qbraid/__init__.py +0 -0
  157. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qbraid/lowering.py +0 -0
  158. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qbraid/schema.py +0 -0
  159. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qbraid/simulation_result.py +0 -0
  160. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/qbraid/target.py +0 -0
  161. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/__init__.py +0 -0
  162. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/passes/__init__.py +0 -0
  163. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/passes/canonicalize_ilist.py +0 -0
  164. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/rules/__init__.py +0 -0
  165. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/rules/flatten_ilist.py +0 -0
  166. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/rules/inline_getitem_ilist.py +0 -0
  167. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/rewrite/rules/split_ifs.py +0 -0
  168. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/_typeinfer.py +0 -0
  169. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/__init__.py +0 -0
  170. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/address_impl.py +0 -0
  171. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/nsites/__init__.py +0 -0
  172. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/nsites/analysis.py +0 -0
  173. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/nsites/impls.py +0 -0
  174. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/nsites/lattice.py +0 -0
  175. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/analysis/schedule.py +0 -0
  176. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/__init__.py +0 -0
  177. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/emit/emit_circuit.py +0 -0
  178. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/emit/noise.py +0 -0
  179. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/emit/op.py +0 -0
  180. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/emit/qubit.py +0 -0
  181. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/emit/runtime.py +0 -0
  182. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/cirq/lowering.py +0 -0
  183. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/groups.py +0 -0
  184. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/lowering.py +0 -0
  185. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/noise/__init__.py +0 -0
  186. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/noise/_dialect.py +0 -0
  187. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/noise/_wrapper.py +0 -0
  188. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/noise/rewrite.py +0 -0
  189. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/noise/stmts.py +0 -0
  190. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/__init__.py +0 -0
  191. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/_dialect.py +0 -0
  192. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/_wrapper.py +0 -0
  193. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/number.py +0 -0
  194. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/rewrite.py +0 -0
  195. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/stdlib.py +0 -0
  196. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/stmts.py +0 -0
  197. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/traits.py +0 -0
  198. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/op/types.py +0 -0
  199. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/qubit.py +0 -0
  200. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/U3_to_clifford.py +0 -0
  201. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/__init__.py +0 -0
  202. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/canonicalize.py +0 -0
  203. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/desugar.py +0 -0
  204. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/remove_dangling_qubits.py +0 -0
  205. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/rewrite/wrap_analysis.py +0 -0
  206. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/types.py +0 -0
  207. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/squin/wire.py +0 -0
  208. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/__init__.py +0 -0
  209. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/_wrappers.py +0 -0
  210. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/__init__.py +0 -0
  211. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/__init__.py +0 -0
  212. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/_dialect.py +0 -0
  213. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/emit.py +0 -0
  214. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/interp.py +0 -0
  215. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/lowering.py +0 -0
  216. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/stmts/__init__.py +0 -0
  217. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/stmts/annotate.py +0 -0
  218. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/stmts/const.py +0 -0
  219. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/auxiliary/types.py +0 -0
  220. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/__init__.py +0 -0
  221. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/_dialect.py +0 -0
  222. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/emit_str.py +0 -0
  223. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/stmts/__init__.py +0 -0
  224. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/stmts/measure.py +0 -0
  225. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/stmts/pp_measure.py +0 -0
  226. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/collapse/stmts/reset.py +0 -0
  227. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/__init__.py +0 -0
  228. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/_dialect.py +0 -0
  229. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/emit.py +0 -0
  230. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/__init__.py +0 -0
  231. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/base.py +0 -0
  232. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/clifford_1q.py +0 -0
  233. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/clifford_2q.py +0 -0
  234. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/control_2q.py +0 -0
  235. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/gate/stmts/pp.py +0 -0
  236. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/noise/__init__.py +0 -0
  237. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/noise/_dialect.py +0 -0
  238. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/noise/emit.py +0 -0
  239. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/dialects/noise/stmts.py +0 -0
  240. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/emit/__init__.py +0 -0
  241. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/emit/stim_str.py +0 -0
  242. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/groups.py +0 -0
  243. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/parse/__init__.py +0 -0
  244. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/parse/lowering.py +0 -0
  245. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/py_constant_to_stim.py +0 -0
  246. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/qubit_to_stim.py +0 -0
  247. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/squin_noise.py +0 -0
  248. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/util.py +0 -0
  249. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/wire_identity_elimination.py +0 -0
  250. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/rewrite/wire_to_stim.py +0 -0
  251. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/upstream/__init__.py +0 -0
  252. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/stim/upstream/from_squin.py +0 -0
  253. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/task.py +0 -0
  254. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/test_utils.py +0 -0
  255. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/types.py +0 -0
  256. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/__init__.py +0 -0
  257. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/__init__.py +0 -0
  258. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/animate.py +0 -0
  259. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/base.py +0 -0
  260. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/gate_event.py +0 -0
  261. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/__init__.py +0 -0
  262. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/aod.py +0 -0
  263. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/atoms.py +0 -0
  264. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/ppoly.py +0 -0
  265. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/qpustate.py +0 -0
  266. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/src/bloqade/visual/animation/runtime/utils.py +0 -0
  267. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/__init__.py +0 -0
  268. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/analysis/address/test_qubit_analysis.py +0 -0
  269. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/analysis/address/test_wire_analysis.py +0 -0
  270. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/analysis/address/util.py +0 -0
  271. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/analysis/fidelity/test_fidelity.py +0 -0
  272. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/noise/test_noise_models.py +0 -0
  273. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/noise/test_noisy_ghz.py +0 -0
  274. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/noise/test_one_zone_correlated_noise.py +0 -0
  275. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/test_lpsolvers.py +0 -0
  276. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/test_parallelize.py +0 -0
  277. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/cirq_utils/test_transpile.py +0 -0
  278. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/__init__.py +0 -0
  279. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/__init__.py +0 -0
  280. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/noise/__init__.py +0 -0
  281. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/noise/qasm2/test_loss.py +0 -0
  282. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/noise/qasm2/test_pauli.py +0 -0
  283. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/test_dyn_memory.py +0 -0
  284. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/runtime/test_qrack.py +0 -0
  285. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/squin/test_noise.py +0 -0
  286. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/pyqrack/test_target.py +0 -0
  287. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/__init__.py +0 -0
  288. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/analysis/test_dag.py +0 -0
  289. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/emit/test_extended.py +0 -0
  290. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/emit/test_extended_noise.py +0 -0
  291. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/emit/test_qasm2.py +0 -0
  292. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/emit/test_qasm2_emit.py +0 -0
  293. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/__init__.py +0 -0
  294. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/invalid_programs/invalid_if.qasm +0 -0
  295. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/README.md +0 -0
  296. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/global.qasm +0 -0
  297. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/iqft1.qasm +0 -0
  298. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/main.qasm +0 -0
  299. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/noise.qasm +0 -0
  300. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/para.qasm +0 -0
  301. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/process_tomo.qasm +0 -0
  302. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/qelib1.inc +0 -0
  303. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/qft.qasm +0 -0
  304. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/qft2.qasm +0 -0
  305. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/rb.qasm +0 -0
  306. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/rep_code.qasm +0 -0
  307. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/ripple_carry_adder.qasm +0 -0
  308. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/tele.qasm +0 -0
  309. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/programs/valid_if.qasm +0 -0
  310. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/test_ast.py +0 -0
  311. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/parse/test_roundtrip.py +0 -0
  312. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/__init__.py +0 -0
  313. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_global_to_parallel.py +0 -0
  314. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_global_to_uop.py +0 -0
  315. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_heuristic_noise.py +0 -0
  316. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_parallel_to_global.py +0 -0
  317. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_parallel_to_uop.py +0 -0
  318. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_qasm2py.py +0 -0
  319. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_unroll_if.py +0 -0
  320. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/passes/test_uop_to_parallel.py +0 -0
  321. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/test_count.py +0 -0
  322. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/test_inline.py +0 -0
  323. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/test_lowering.py +0 -0
  324. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/test_native.py +0 -0
  325. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qasm2/test_two2one.py +0 -0
  326. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qbraid/__init__.py +0 -0
  327. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qbraid/test_clean_circuit.py +0 -0
  328. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qbraid/test_lowering.py +0 -0
  329. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/qbraid/test_target.py +0 -0
  330. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/sample/__init__.py +0 -0
  331. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/sample/test_noise_model.py +0 -0
  332. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/analysis/test_nsites_analysis.py +0 -0
  333. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/cirq/test_cirq_to_squin.py +0 -0
  334. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/cirq/test_squin_noise_to_cirq.py +0 -0
  335. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/cirq/test_squin_to_cirq.py +0 -0
  336. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/op/test_reset.py +0 -0
  337. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/rewrite/test_U3_to_clifford.py +0 -0
  338. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/rewrite/test_canonicalize.py +0 -0
  339. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/rewrite/test_desugar.py +0 -0
  340. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/rewrite/test_mult_rewrite.py +0 -0
  341. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/test_constprop.py +0 -0
  342. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/test_sugar.py +0 -0
  343. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/test_typeinfer.py +0 -0
  344. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/wire/__init__.py +0 -0
  345. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/squin/wire/test_check.py +0 -0
  346. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/__init__.py +0 -0
  347. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/__init__.py +0 -0
  348. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/__init__.py +0 -0
  349. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/__init__.py +0 -0
  350. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/base.py +0 -0
  351. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_1q.py +0 -0
  352. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_ctrl.py +0 -0
  353. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_detector.py +0 -0
  354. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_meas.py +0 -0
  355. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_noise.py +0 -0
  356. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_obs_inc.py +0 -0
  357. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_ppmeas.py +0 -0
  358. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_qubit_coords.py +0 -0
  359. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/emit/test_stim_spp.py +0 -0
  360. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/test_stim_circuits.py +0 -0
  361. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/dialects/stim/test_stim_const.py +0 -0
  362. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/__init__.py +0 -0
  363. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/base.py +0 -0
  364. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse.py +0 -0
  365. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse_clifford.py +0 -0
  366. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse_control.py +0 -0
  367. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse_custom.py +0 -0
  368. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse_noise.py +0 -0
  369. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/parse/test_parse_spp.py +0 -0
  370. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/__init__.py +0 -0
  371. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/apply_depolarize1.stim +0 -0
  372. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/apply_pauli_channel_1.stim +0 -0
  373. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize1.stim +0 -0
  374. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize2.stim +0 -0
  375. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_bit_flip_channel.stim +0 -0
  376. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_phase_flip_channel.stim +0 -0
  377. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_y_flip_channel.stim +0 -0
  378. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1.stim +0 -0
  379. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_many_qubits.stim +0 -0
  380. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_reuse.stim +0 -0
  381. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2.stim +0 -0
  382. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2_reuse_on_4_qubits.stim +0 -0
  383. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/pure_squin_rewrite.txt +0 -0
  384. /bloqade_circuit-0.6.3/test/stim/passes/stim_reference_programs/qubit/for_loop.stim → /bloqade_circuit-0.6.5/test/stim/passes/stim_reference_programs/qubit/for_loop_nontrivial_index.stim +0 -0
  385. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/qubit/qubit.stim +0 -0
  386. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.stim +0 -0
  387. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/qubit/qubit_loss.stim +0 -0
  388. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/qubit/qubit_reset.stim +0 -0
  389. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/qubit/u3_to_clifford.stim +0 -0
  390. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire.stim +0 -0
  391. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_apply.stim +0 -0
  392. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_apply_control.stim +0 -0
  393. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_broadcast.stim +0 -0
  394. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.stim +0 -0
  395. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_measure.stim +0 -0
  396. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.stim +0 -0
  397. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_qubit_loss.stim +0 -0
  398. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/stim_reference_programs/wire/wire_reset.stim +0 -0
  399. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/passes/test_squin_wire_to_stim.py +0 -0
  400. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/test_measure_id_analysis.py +0 -0
  401. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/wrapper/__init__.py +0 -0
  402. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/stim/wrapper/test_wrapper.py +0 -0
  403. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/test_serialization.py +0 -0
  404. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/test_zone_model.py +0 -0
  405. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/visual/__init__.py +0 -0
  406. {bloqade_circuit-0.6.3 → bloqade_circuit-0.6.5}/test/visual/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bloqade-circuit
3
- Version: 0.6.3
3
+ Version: 0.6.5
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bloqade-circuit"
3
- version = "0.6.3"
3
+ version = "0.6.5"
4
4
  description = "The software development toolkit for neutral atom arrays."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -0,0 +1,5 @@
1
+ from . import impls as impls
2
+ from .analysis import (
3
+ MeasureIDFrame as MeasureIDFrame,
4
+ MeasurementIDAnalysis as MeasurementIDAnalysis,
5
+ )
@@ -1,13 +1,19 @@
1
1
  from typing import TypeVar
2
+ from dataclasses import field, dataclass
2
3
 
3
4
  from kirin import ir, interp
4
- from kirin.analysis import Forward, const
5
+ from kirin.analysis import ForwardExtra, const
5
6
  from kirin.analysis.forward import ForwardFrame
6
7
 
7
8
  from .lattice import MeasureId, NotMeasureId
8
9
 
9
10
 
10
- class MeasurementIDAnalysis(Forward[MeasureId]):
11
+ @dataclass
12
+ class MeasureIDFrame(ForwardFrame[MeasureId]):
13
+ num_measures_at_stmt: dict[ir.Statement, int] = field(default_factory=dict)
14
+
15
+
16
+ class MeasurementIDAnalysis(ForwardExtra[MeasureIDFrame, MeasureId]):
11
17
 
12
18
  keys = ["measure_id"]
13
19
  lattice = MeasureId
@@ -15,6 +21,11 @@ class MeasurementIDAnalysis(Forward[MeasureId]):
15
21
  # then use this to generate the negative values for target rec indices
16
22
  measure_count = 0
17
23
 
24
+ def initialize_frame(
25
+ self, code: ir.Statement, *, has_parent_access: bool = False
26
+ ) -> MeasureIDFrame:
27
+ return MeasureIDFrame(code, has_parent_access=has_parent_access)
28
+
18
29
  # Still default to bottom,
19
30
  # but let constants return the softer "NoMeasureId" type from impl
20
31
  def eval_stmt_fallback(
@@ -1,4 +1,5 @@
1
1
  from kirin import types as kirin_types, interp
2
+ from kirin.analysis import const
2
3
  from kirin.dialects import py, scf, func, ilist
3
4
 
4
5
  from bloqade.squin import wire, qubit
@@ -10,7 +11,7 @@ from .lattice import (
10
11
  MeasureIdTuple,
11
12
  InvalidMeasureId,
12
13
  )
13
- from .analysis import MeasurementIDAnalysis
14
+ from .analysis import MeasureIDFrame, MeasurementIDAnalysis
14
15
 
15
16
  ## Can't do wire right now because of
16
17
  ## unresolved RFC on return type
@@ -113,6 +114,15 @@ class PyIndexing(interp.MethodTable):
113
114
  return (InvalidMeasureId(),)
114
115
 
115
116
 
117
+ @py.assign.dialect.register(key="measure_id")
118
+ class PyAssign(interp.MethodTable):
119
+ @interp.impl(py.Alias)
120
+ def alias(
121
+ self, interp: MeasurementIDAnalysis, frame: interp.Frame, stmt: py.assign.Alias
122
+ ):
123
+ return (frame.get(stmt.value),)
124
+
125
+
116
126
  @py.binop.dialect.register(key="measure_id")
117
127
  class PyBinOp(interp.MethodTable):
118
128
  @interp.impl(py.Add)
@@ -152,4 +162,33 @@ class Func(interp.MethodTable):
152
162
  # scf, particularly IfElse
153
163
  @scf.dialect.register(key="measure_id")
154
164
  class Scf(scf.absint.Methods):
155
- pass
165
+
166
+ @interp.impl(scf.IfElse)
167
+ def if_else(
168
+ self,
169
+ interp_: MeasurementIDAnalysis,
170
+ frame: MeasureIDFrame,
171
+ stmt: scf.IfElse,
172
+ ):
173
+
174
+ frame.num_measures_at_stmt[stmt] = interp_.measure_count
175
+
176
+ # rest of the code taken directly from scf.absint.Methods base implementation
177
+
178
+ if isinstance(hint := stmt.cond.hints.get("const"), const.Value):
179
+ if hint.data:
180
+ return self._infer_if_else_cond(interp_, frame, stmt, stmt.then_body)
181
+ else:
182
+ return self._infer_if_else_cond(interp_, frame, stmt, stmt.else_body)
183
+ then_results = self._infer_if_else_cond(interp_, frame, stmt, stmt.then_body)
184
+ else_results = self._infer_if_else_cond(interp_, frame, stmt, stmt.else_body)
185
+
186
+ match (then_results, else_results):
187
+ case (interp.ReturnValue(then_value), interp.ReturnValue(else_value)):
188
+ return interp.ReturnValue(then_value.join(else_value))
189
+ case (interp.ReturnValue(then_value), _):
190
+ return then_results
191
+ case (_, interp.ReturnValue(else_value)):
192
+ return else_results
193
+ case _:
194
+ return interp_.join_results(then_results, else_results)
@@ -48,7 +48,7 @@ def _default_pyqrack_args() -> PyQrackOptions:
48
48
  isSchmidtDecomposeMulti=True,
49
49
  isSchmidtDecompose=True,
50
50
  isStabilizerHybrid=False,
51
- isBinaryDecisionTree=True,
51
+ isBinaryDecisionTree=False,
52
52
  isPaged=True,
53
53
  isCpuGpuHybrid=True,
54
54
  isOpenCL=True,
@@ -9,6 +9,10 @@ from . import (
9
9
  )
10
10
  from .groups import wired as wired, kernel as kernel
11
11
 
12
+ # NOTE: it's important to keep these imports here since they import squin.kernel
13
+ # we skip isort here
14
+ from . import gate as gate, parallel as parallel # isort: skip
15
+
12
16
  try:
13
17
  # NOTE: make sure optional cirq dependency is installed
14
18
  import cirq as cirq_package # noqa: F401
@@ -0,0 +1,193 @@
1
+ from bloqade.types import Qubit
2
+
3
+ from . import op as _op, qubit as _qubit
4
+ from .groups import kernel
5
+
6
+
7
+ @kernel
8
+ def x(qubit: Qubit) -> None:
9
+ """x gate applied to qubit."""
10
+ op = _op.x()
11
+ _qubit.apply(op, qubit)
12
+
13
+
14
+ @kernel
15
+ def y(qubit: Qubit) -> None:
16
+ """y gate applied to qubit."""
17
+ op = _op.y()
18
+ _qubit.apply(op, qubit)
19
+
20
+
21
+ @kernel
22
+ def z(qubit: Qubit) -> None:
23
+ """z gate applied to qubit."""
24
+ op = _op.z()
25
+ _qubit.apply(op, qubit)
26
+
27
+
28
+ @kernel
29
+ def sqrt_x(qubit: Qubit) -> None:
30
+ """Square root x gate applied to qubit."""
31
+ op = _op.sqrt_x()
32
+ _qubit.apply(op, qubit)
33
+
34
+
35
+ @kernel
36
+ def sqrt_x_adj(qubit: Qubit) -> None:
37
+ """Adjoint sqrt_x gate applied to qubit."""
38
+ op = _op.sqrt_x()
39
+ _qubit.apply(_op.adjoint(op), qubit)
40
+
41
+
42
+ @kernel
43
+ def sqrt_y(qubit: Qubit) -> None:
44
+ """Square root y gate applied to qubit."""
45
+ op = _op.sqrt_y()
46
+ _qubit.apply(op, qubit)
47
+
48
+
49
+ @kernel
50
+ def sqrt_y_adj(qubit: Qubit) -> None:
51
+ """Adjoint sqrt_y gate applied to qubit."""
52
+ op = _op.sqrt_y()
53
+ _qubit.apply(_op.adjoint(op), qubit)
54
+
55
+
56
+ @kernel
57
+ def sqrt_z(qubit: Qubit) -> None:
58
+ """Square root z gate applied to qubit."""
59
+ op = _op.s()
60
+ _qubit.apply(op, qubit)
61
+
62
+
63
+ @kernel
64
+ def sqrt_z_adj(qubit: Qubit) -> None:
65
+ """Adjoint square root z gate applied to qubit."""
66
+ op = _op.s()
67
+ _qubit.apply(_op.adjoint(op), qubit)
68
+
69
+
70
+ @kernel
71
+ def h(qubit: Qubit) -> None:
72
+ """Hadamard gate applied to qubit."""
73
+ op = _op.h()
74
+ _qubit.apply(op, qubit)
75
+
76
+
77
+ @kernel
78
+ def s(qubit: Qubit) -> None:
79
+ """s gate applied to qubit."""
80
+ op = _op.s()
81
+ _qubit.apply(op, qubit)
82
+
83
+
84
+ @kernel
85
+ def s_adj(qubit: Qubit) -> None:
86
+ """Adjoint s gate applied to qubit."""
87
+ op = _op.s()
88
+ _qubit.apply(_op.adjoint(op), qubit)
89
+
90
+
91
+ @kernel
92
+ def t(qubit: Qubit) -> None:
93
+ """t gate applied to qubit."""
94
+ op = _op.t()
95
+ _qubit.apply(op, qubit)
96
+
97
+
98
+ @kernel
99
+ def t_adj(qubit: Qubit) -> None:
100
+ """Adjoint t gate applied to qubit."""
101
+ op = _op.t()
102
+ _qubit.apply(_op.adjoint(op), qubit)
103
+
104
+
105
+ @kernel
106
+ def p0(qubit: Qubit) -> None:
107
+ """Projector on 0 applied to qubit."""
108
+ op = _op.p0()
109
+ _qubit.apply(op, qubit)
110
+
111
+
112
+ @kernel
113
+ def p1(qubit: Qubit) -> None:
114
+ """Projector on 1 applied to qubit."""
115
+ op = _op.p1()
116
+ _qubit.apply(op, qubit)
117
+
118
+
119
+ @kernel
120
+ def spin_n(qubit: Qubit) -> None:
121
+ """Spin lowering gate applied to qubit."""
122
+ op = _op.spin_n()
123
+ _qubit.apply(op, qubit)
124
+
125
+
126
+ @kernel
127
+ def spin_p(qubit: Qubit) -> None:
128
+ """Spin raising gate applied to qubit."""
129
+ op = _op.spin_p()
130
+ _qubit.apply(op, qubit)
131
+
132
+
133
+ @kernel
134
+ def reset(qubit: Qubit) -> None:
135
+ """Reset qubit to 0."""
136
+ op = _op.reset()
137
+ _qubit.apply(op, qubit)
138
+
139
+
140
+ @kernel
141
+ def cx(control: Qubit, target: Qubit) -> None:
142
+ """Controlled x gate applied to control and target"""
143
+ op = _op.cx()
144
+ _qubit.apply(op, control, target)
145
+
146
+
147
+ @kernel
148
+ def cy(control: Qubit, target: Qubit) -> None:
149
+ """Controlled y gate applied to control and target"""
150
+ op = _op.cy()
151
+ _qubit.apply(op, control, target)
152
+
153
+
154
+ @kernel
155
+ def cz(control: Qubit, target: Qubit) -> None:
156
+ """Controlled z gate applied to control and target"""
157
+ op = _op.cz()
158
+ _qubit.apply(op, control, target)
159
+
160
+
161
+ @kernel
162
+ def ch(control: Qubit, target: Qubit) -> None:
163
+ """Controlled Hadamard gate applied to control and target"""
164
+ op = _op.ch()
165
+ _qubit.apply(op, control, target)
166
+
167
+
168
+ @kernel
169
+ def u(theta: float, phi: float, lam: float, qubit: Qubit) -> None:
170
+ """3D rotation gate applied to control and target"""
171
+ op = _op.u(theta, phi, lam)
172
+ _qubit.apply(op, qubit)
173
+
174
+
175
+ @kernel
176
+ def rx(theta: float, qubit: Qubit) -> None:
177
+ """Rotation X gate applied to qubit."""
178
+ op = _op.rot(_op.x(), theta)
179
+ _qubit.apply(op, qubit)
180
+
181
+
182
+ @kernel
183
+ def ry(theta: float, qubit: Qubit) -> None:
184
+ """Rotation Y gate applied to qubit."""
185
+ op = _op.rot(_op.y(), theta)
186
+ _qubit.apply(op, qubit)
187
+
188
+
189
+ @kernel
190
+ def rz(theta: float, qubit: Qubit) -> None:
191
+ """Rotation Z gate applied to qubit."""
192
+ op = _op.rot(_op.z(), theta)
193
+ _qubit.apply(op, qubit)
@@ -0,0 +1,200 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from kirin.dialects import ilist
4
+
5
+ from bloqade.types import Qubit
6
+
7
+ from . import op as _op, qubit as _qubit
8
+ from .groups import kernel
9
+
10
+
11
+ @kernel
12
+ def x(qubits: ilist.IList[Qubit, Any]) -> None:
13
+ """x gate applied to qubits in parallel."""
14
+ op = _op.x()
15
+ _qubit.broadcast(op, qubits)
16
+
17
+
18
+ @kernel
19
+ def y(qubits: ilist.IList[Qubit, Any]) -> None:
20
+ """y gate applied to qubits in parallel."""
21
+ op = _op.y()
22
+ _qubit.broadcast(op, qubits)
23
+
24
+
25
+ @kernel
26
+ def z(qubits: ilist.IList[Qubit, Any]) -> None:
27
+ """z gate applied to qubits in parallel."""
28
+ op = _op.z()
29
+ _qubit.broadcast(op, qubits)
30
+
31
+
32
+ @kernel
33
+ def sqrt_x(qubits: ilist.IList[Qubit, Any]) -> None:
34
+ """Square root x gate applied to qubits in parallel."""
35
+ op = _op.sqrt_x()
36
+ _qubit.broadcast(op, qubits)
37
+
38
+
39
+ @kernel
40
+ def sqrt_y(qubits: ilist.IList[Qubit, Any]) -> None:
41
+ """Square root y gate applied to qubits in parallel."""
42
+ op = _op.sqrt_y()
43
+ _qubit.broadcast(op, qubits)
44
+
45
+
46
+ @kernel
47
+ def sqrt_z(qubits: ilist.IList[Qubit, Any]) -> None:
48
+ """Square root gate applied to qubits in parallel."""
49
+ op = _op.s()
50
+ _qubit.broadcast(op, qubits)
51
+
52
+
53
+ @kernel
54
+ def h(qubits: ilist.IList[Qubit, Any]) -> None:
55
+ """Hadamard gate applied to qubits in parallel."""
56
+ op = _op.h()
57
+ _qubit.broadcast(op, qubits)
58
+
59
+
60
+ @kernel
61
+ def s(qubits: ilist.IList[Qubit, Any]) -> None:
62
+ """s gate applied to qubits in parallel."""
63
+ op = _op.s()
64
+ _qubit.broadcast(op, qubits)
65
+
66
+
67
+ @kernel
68
+ def t(qubits: ilist.IList[Qubit, Any]) -> None:
69
+ """t gate applied to qubits in parallel."""
70
+ op = _op.t()
71
+ _qubit.broadcast(op, qubits)
72
+
73
+
74
+ @kernel
75
+ def p0(qubits: ilist.IList[Qubit, Any]) -> None:
76
+ """Projector on 0 applied to qubits in parallel."""
77
+ op = _op.p0()
78
+ _qubit.broadcast(op, qubits)
79
+
80
+
81
+ @kernel
82
+ def p1(qubits: ilist.IList[Qubit, Any]) -> None:
83
+ """Projector on 1 applied to qubits in parallel."""
84
+ op = _op.p1()
85
+ _qubit.broadcast(op, qubits)
86
+
87
+
88
+ @kernel
89
+ def spin_n(qubits: ilist.IList[Qubit, Any]) -> None:
90
+ """Spin lowering gate applied to qubits in parallel."""
91
+ op = _op.spin_n()
92
+ _qubit.broadcast(op, qubits)
93
+
94
+
95
+ @kernel
96
+ def spin_p(qubits: ilist.IList[Qubit, Any]) -> None:
97
+ """Spin raising gate applied to qubits in parallel."""
98
+ op = _op.spin_p()
99
+ _qubit.broadcast(op, qubits)
100
+
101
+
102
+ @kernel
103
+ def reset(qubits: ilist.IList[Qubit, Any]) -> None:
104
+ """Reset qubit to 0."""
105
+ op = _op.reset()
106
+ _qubit.broadcast(op, qubits)
107
+
108
+
109
+ N = TypeVar("N")
110
+
111
+
112
+ @kernel
113
+ def cx(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
114
+ """Controlled x gate applied to controls and targets in parallel."""
115
+ op = _op.cx()
116
+ _qubit.broadcast(op, controls, targets)
117
+
118
+
119
+ @kernel
120
+ def cy(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
121
+ """Controlled y gate applied to controls and targets in parallel."""
122
+ op = _op.cy()
123
+ _qubit.broadcast(op, controls, targets)
124
+
125
+
126
+ @kernel
127
+ def cz(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
128
+ """Controlled z gate applied to controls and targets in parallel."""
129
+ op = _op.cz()
130
+ _qubit.broadcast(op, controls, targets)
131
+
132
+
133
+ @kernel
134
+ def ch(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
135
+ """Controlled Hadamard gate applied to controls and targets in parallel."""
136
+ op = _op.ch()
137
+ _qubit.broadcast(op, controls, targets)
138
+
139
+
140
+ @kernel
141
+ def u(theta: float, phi: float, lam: float, qubits: ilist.IList[Qubit, Any]) -> None:
142
+ """3D rotation gate applied to controls and targets in parallel."""
143
+ op = _op.u(theta, phi, lam)
144
+ _qubit.broadcast(op, qubits)
145
+
146
+
147
+ @kernel
148
+ def rx(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
149
+ """Rotation X gate applied to qubits in parallel."""
150
+ op = _op.rot(_op.x(), theta)
151
+ _qubit.broadcast(op, qubits)
152
+
153
+
154
+ @kernel
155
+ def ry(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
156
+ """Rotation Y gate applied to qubits in parallel."""
157
+ op = _op.rot(_op.y(), theta)
158
+ _qubit.broadcast(op, qubits)
159
+
160
+
161
+ @kernel
162
+ def rz(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
163
+ """Rotation Z gate applied to qubits in parallel."""
164
+ op = _op.rot(_op.z(), theta)
165
+ _qubit.broadcast(op, qubits)
166
+
167
+
168
+ @kernel
169
+ def sqrt_x_adj(qubits: ilist.IList[Qubit, Any]) -> None:
170
+ """Adjoint sqrt_x gate applied to qubits in parallel."""
171
+ op = _op.sqrt_x()
172
+ _qubit.broadcast(_op.adjoint(op), qubits)
173
+
174
+
175
+ @kernel
176
+ def sqrt_y_adj(qubits: ilist.IList[Qubit, Any]) -> None:
177
+ """Adjoint sqrt_y gate applied to qubits in parallel."""
178
+ op = _op.sqrt_y()
179
+ _qubit.broadcast(_op.adjoint(op), qubits)
180
+
181
+
182
+ @kernel
183
+ def sqrt_z_adj(qubits: ilist.IList[Qubit, Any]) -> None:
184
+ """Adjoint square root z gate applied to qubits in parallel."""
185
+ op = _op.s()
186
+ _qubit.broadcast(_op.adjoint(op), qubits)
187
+
188
+
189
+ @kernel
190
+ def s_adj(qubits: ilist.IList[Qubit, Any]) -> None:
191
+ """Adjoint s gate applied to qubits in parallel."""
192
+ op = _op.s()
193
+ _qubit.broadcast(_op.adjoint(op), qubits)
194
+
195
+
196
+ @kernel
197
+ def t_adj(qubits: ilist.IList[Qubit, Any]) -> None:
198
+ """Adjoint t gate applied to qubits in parallel."""
199
+ op = _op.t()
200
+ _qubit.broadcast(_op.adjoint(op), qubits)
@@ -0,0 +1,5 @@
1
+ from .squin_to_stim import (
2
+ SquinToStimPass as SquinToStimPass,
3
+ StimSimplifyIfs as StimSimplifyIfs,
4
+ AggressiveForLoopUnroll as AggressiveForLoopUnroll,
5
+ )
@@ -9,6 +9,7 @@ from kirin.rewrite import (
9
9
  ConstantFold,
10
10
  CommonSubexpressionElimination,
11
11
  )
12
+ from kirin.dialects.ilist.passes import ConstList2IList
12
13
 
13
14
  from ..rewrite.ifs_to_stim import StimLiftThenBody, StimSplitIfStmts
14
15
 
@@ -23,8 +24,16 @@ class StimSimplifyIfs(Pass):
23
24
  Walk(StimSplitIfStmts()),
24
25
  ).rewrite(mt.code)
25
26
 
27
+ # because nested python lists don't have their
28
+ # member lists converted to ILists, ConstantFold
29
+ # can add python lists that can't be hashed, causing
30
+ # issues with CSE. ConstList2IList remedies that problem here.
26
31
  result = (
27
- Fixpoint(Walk(Chain(ConstantFold(), CommonSubexpressionElimination())))
32
+ Chain(
33
+ Fixpoint(Walk(ConstantFold())),
34
+ Walk(ConstList2IList()),
35
+ Walk(CommonSubexpressionElimination()),
36
+ )
28
37
  .rewrite(mt.code)
29
38
  .join(result)
30
39
  )