bloqade-circuit 0.6.5__tar.gz → 0.6.7__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 (400) hide show
  1. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/PKG-INFO +1 -1
  2. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/pyproject.toml +1 -1
  3. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/nsites/impls.py +7 -0
  4. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/__init__.py +31 -5
  5. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/emit/emit_circuit.py +21 -1
  6. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/emit/qubit.py +2 -2
  7. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/noise/rewrite.py +37 -8
  8. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/noise/test_noise_models.py +2 -2
  9. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/squin/test_noise.py +19 -0
  10. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/analysis/test_nsites_analysis.py +16 -0
  11. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/cirq/test_cirq_to_squin.py +36 -0
  12. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/cirq/test_squin_to_cirq.py +12 -1
  13. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/test_sugar.py +1 -1
  14. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/uv.lock +4 -4
  15. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.github/dependabot.yml +0 -0
  16. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.github/workflows/ci.yml +0 -0
  17. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.github/workflows/isort.yml +0 -0
  18. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.github/workflows/lint.yml +0 -0
  19. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.github/workflows/release.yml +0 -0
  20. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.gitignore +0 -0
  21. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/.pre-commit-config.yaml +0 -0
  22. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/LICENSE +0 -0
  23. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/README.md +0 -0
  24. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/_typos.toml +0 -0
  25. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/justfile +0 -0
  26. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/__init__.py +0 -0
  27. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/address/__init__.py +0 -0
  28. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/address/analysis.py +0 -0
  29. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/address/impls.py +0 -0
  30. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/address/lattice.py +0 -0
  31. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/fidelity/__init__.py +0 -0
  32. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/fidelity/analysis.py +0 -0
  33. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/measure_id/__init__.py +0 -0
  34. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/measure_id/analysis.py +0 -0
  35. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/measure_id/impls.py +0 -0
  36. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/analysis/measure_id/lattice.py +0 -0
  37. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/__init__.py +0 -0
  38. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/lineprog.py +0 -0
  39. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/noise/__init__.py +0 -0
  40. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/noise/_two_zone_utils.py +0 -0
  41. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/noise/conflict_graph.py +0 -0
  42. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/noise/model.py +0 -0
  43. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/noise/transform.py +0 -0
  44. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/cirq_utils/parallelize.py +0 -0
  45. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/device.py +0 -0
  46. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/__init__.py +0 -0
  47. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/base.py +0 -0
  48. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/device.py +0 -0
  49. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/noise/__init__.py +0 -0
  50. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/noise/native.py +0 -0
  51. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/qasm2/__init__.py +0 -0
  52. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/qasm2/core.py +0 -0
  53. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/qasm2/glob.py +0 -0
  54. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/qasm2/parallel.py +0 -0
  55. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/qasm2/uop.py +0 -0
  56. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/reg.py +0 -0
  57. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/__init__.py +0 -0
  58. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/noise/__init__.py +0 -0
  59. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/noise/native.py +0 -0
  60. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/op.py +0 -0
  61. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/qubit.py +0 -0
  62. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/runtime.py +0 -0
  63. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/squin/wire.py +0 -0
  64. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/target.py +0 -0
  65. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/pyqrack/task.py +0 -0
  66. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/__init__.py +0 -0
  67. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/_qasm_loading.py +0 -0
  68. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/_wrappers.py +0 -0
  69. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/__init__.py +0 -0
  70. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/__init__.py +0 -0
  71. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/_dialect.py +0 -0
  72. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/_emit.py +0 -0
  73. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/_typeinfer.py +0 -0
  74. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/address.py +0 -0
  75. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/core/stmts.py +0 -0
  76. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/__init__.py +0 -0
  77. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/_dialect.py +0 -0
  78. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/_emit.py +0 -0
  79. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/_from_python.py +0 -0
  80. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/_interp.py +0 -0
  81. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/expr/stmts.py +0 -0
  82. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/glob.py +0 -0
  83. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/indexing.py +0 -0
  84. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/inline.py +0 -0
  85. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/noise/__init__.py +0 -0
  86. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/noise/_dialect.py +0 -0
  87. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/noise/fidelity.py +0 -0
  88. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/noise/model.py +0 -0
  89. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/noise/stmts.py +0 -0
  90. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/parallel.py +0 -0
  91. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/uop/__init__.py +0 -0
  92. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/uop/_dialect.py +0 -0
  93. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/uop/_emit.py +0 -0
  94. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/uop/schedule.py +0 -0
  95. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/dialects/uop/stmts.py +0 -0
  96. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/__init__.py +0 -0
  97. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/base.py +0 -0
  98. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/gate.py +0 -0
  99. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/impls/__init__.py +0 -0
  100. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/impls/noise.py +0 -0
  101. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/main.py +0 -0
  102. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/emit/target.py +0 -0
  103. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/glob.py +0 -0
  104. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/groups.py +0 -0
  105. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/noise.py +0 -0
  106. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parallel.py +0 -0
  107. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/__init__.py +0 -0
  108. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/ast.py +0 -0
  109. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/build.py +0 -0
  110. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/lowering.py +0 -0
  111. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/parser.py +0 -0
  112. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/print.py +0 -0
  113. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/qasm2.lark +0 -0
  114. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/visitor.py +0 -0
  115. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/parse/visitor.pyi +0 -0
  116. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/__init__.py +0 -0
  117. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/fold.py +0 -0
  118. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/glob.py +0 -0
  119. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/lift_qubits.py +0 -0
  120. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/noise.py +0 -0
  121. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/parallel.py +0 -0
  122. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/py2qasm.py +0 -0
  123. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/qasm2py.py +0 -0
  124. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/passes/unroll_if.py +0 -0
  125. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/__init__.py +0 -0
  126. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/desugar.py +0 -0
  127. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/glob.py +0 -0
  128. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/insert_qubits.py +0 -0
  129. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/native_gates.py +0 -0
  130. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/noise/__init__.py +0 -0
  131. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/noise/heuristic_noise.py +0 -0
  132. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/noise/remove_noise.py +0 -0
  133. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/parallel_to_glob.py +0 -0
  134. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/parallel_to_uop.py +0 -0
  135. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/register.py +0 -0
  136. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/rewrite/uop_to_parallel.py +0 -0
  137. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qasm2/types.py +0 -0
  138. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qbraid/__init__.py +0 -0
  139. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qbraid/lowering.py +0 -0
  140. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qbraid/schema.py +0 -0
  141. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qbraid/simulation_result.py +0 -0
  142. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/qbraid/target.py +0 -0
  143. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/__init__.py +0 -0
  144. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/passes/__init__.py +0 -0
  145. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/passes/canonicalize_ilist.py +0 -0
  146. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/rules/__init__.py +0 -0
  147. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/rules/flatten_ilist.py +0 -0
  148. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/rules/inline_getitem_ilist.py +0 -0
  149. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/rewrite/rules/split_ifs.py +0 -0
  150. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/__init__.py +0 -0
  151. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/_typeinfer.py +0 -0
  152. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/__init__.py +0 -0
  153. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/address_impl.py +0 -0
  154. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/nsites/__init__.py +0 -0
  155. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/nsites/analysis.py +0 -0
  156. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/nsites/lattice.py +0 -0
  157. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/analysis/schedule.py +0 -0
  158. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/emit/noise.py +0 -0
  159. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/emit/op.py +0 -0
  160. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/emit/runtime.py +0 -0
  161. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/cirq/lowering.py +0 -0
  162. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/gate.py +0 -0
  163. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/groups.py +0 -0
  164. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/lowering.py +0 -0
  165. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/noise/__init__.py +0 -0
  166. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/noise/_dialect.py +0 -0
  167. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/noise/_wrapper.py +0 -0
  168. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/noise/stmts.py +0 -0
  169. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/__init__.py +0 -0
  170. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/_dialect.py +0 -0
  171. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/_wrapper.py +0 -0
  172. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/number.py +0 -0
  173. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/rewrite.py +0 -0
  174. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/stdlib.py +0 -0
  175. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/stmts.py +0 -0
  176. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/traits.py +0 -0
  177. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/op/types.py +0 -0
  178. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/parallel.py +0 -0
  179. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/qubit.py +0 -0
  180. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/U3_to_clifford.py +0 -0
  181. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/__init__.py +0 -0
  182. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/canonicalize.py +0 -0
  183. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/desugar.py +0 -0
  184. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/remove_dangling_qubits.py +0 -0
  185. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/rewrite/wrap_analysis.py +0 -0
  186. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/types.py +0 -0
  187. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/squin/wire.py +0 -0
  188. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/__init__.py +0 -0
  189. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/_wrappers.py +0 -0
  190. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/__init__.py +0 -0
  191. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/__init__.py +0 -0
  192. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/_dialect.py +0 -0
  193. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/emit.py +0 -0
  194. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/interp.py +0 -0
  195. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/lowering.py +0 -0
  196. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/stmts/__init__.py +0 -0
  197. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/stmts/annotate.py +0 -0
  198. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/stmts/const.py +0 -0
  199. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/auxiliary/types.py +0 -0
  200. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/__init__.py +0 -0
  201. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/_dialect.py +0 -0
  202. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/emit_str.py +0 -0
  203. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/stmts/__init__.py +0 -0
  204. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/stmts/measure.py +0 -0
  205. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/stmts/pp_measure.py +0 -0
  206. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/collapse/stmts/reset.py +0 -0
  207. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/__init__.py +0 -0
  208. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/_dialect.py +0 -0
  209. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/emit.py +0 -0
  210. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/__init__.py +0 -0
  211. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/base.py +0 -0
  212. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/clifford_1q.py +0 -0
  213. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/clifford_2q.py +0 -0
  214. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/control_2q.py +0 -0
  215. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/gate/stmts/pp.py +0 -0
  216. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/noise/__init__.py +0 -0
  217. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/noise/_dialect.py +0 -0
  218. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/noise/emit.py +0 -0
  219. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/dialects/noise/stmts.py +0 -0
  220. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/emit/__init__.py +0 -0
  221. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/emit/stim_str.py +0 -0
  222. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/groups.py +0 -0
  223. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/parse/__init__.py +0 -0
  224. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/parse/lowering.py +0 -0
  225. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/passes/__init__.py +0 -0
  226. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/passes/simplify_ifs.py +0 -0
  227. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/passes/squin_to_stim.py +0 -0
  228. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/__init__.py +0 -0
  229. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/ifs_to_stim.py +0 -0
  230. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/py_constant_to_stim.py +0 -0
  231. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/qubit_to_stim.py +0 -0
  232. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/squin_measure.py +0 -0
  233. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/squin_noise.py +0 -0
  234. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/util.py +0 -0
  235. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/wire_identity_elimination.py +0 -0
  236. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/rewrite/wire_to_stim.py +0 -0
  237. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/upstream/__init__.py +0 -0
  238. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/stim/upstream/from_squin.py +0 -0
  239. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/task.py +0 -0
  240. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/test_utils.py +0 -0
  241. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/types.py +0 -0
  242. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/__init__.py +0 -0
  243. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/__init__.py +0 -0
  244. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/animate.py +0 -0
  245. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/base.py +0 -0
  246. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/gate_event.py +0 -0
  247. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/__init__.py +0 -0
  248. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/aod.py +0 -0
  249. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/atoms.py +0 -0
  250. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/ppoly.py +0 -0
  251. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/qpustate.py +0 -0
  252. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/src/bloqade/visual/animation/runtime/utils.py +0 -0
  253. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/__init__.py +0 -0
  254. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/analysis/address/test_qubit_analysis.py +0 -0
  255. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/analysis/address/test_wire_analysis.py +0 -0
  256. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/analysis/address/util.py +0 -0
  257. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/analysis/fidelity/test_fidelity.py +0 -0
  258. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/analysis/measure_id/test_measure_id.py +0 -0
  259. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/noise/test_noisy_ghz.py +0 -0
  260. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/noise/test_one_zone_correlated_noise.py +0 -0
  261. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/test_lpsolvers.py +0 -0
  262. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/test_parallelize.py +0 -0
  263. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/cirq_utils/test_transpile.py +0 -0
  264. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/__init__.py +0 -0
  265. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/__init__.py +0 -0
  266. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/noise/__init__.py +0 -0
  267. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/noise/qasm2/test_loss.py +0 -0
  268. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/noise/qasm2/test_pauli.py +0 -0
  269. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/test_dyn_memory.py +0 -0
  270. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/runtime/test_qrack.py +0 -0
  271. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/squin/test_kernel.py +0 -0
  272. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/pyqrack/test_target.py +0 -0
  273. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/__init__.py +0 -0
  274. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/analysis/test_dag.py +0 -0
  275. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/emit/test_extended.py +0 -0
  276. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/emit/test_extended_noise.py +0 -0
  277. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/emit/test_qasm2.py +0 -0
  278. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/emit/test_qasm2_emit.py +0 -0
  279. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/__init__.py +0 -0
  280. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/invalid_programs/invalid_if.qasm +0 -0
  281. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/README.md +0 -0
  282. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/global.qasm +0 -0
  283. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/iqft1.qasm +0 -0
  284. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/main.qasm +0 -0
  285. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/noise.qasm +0 -0
  286. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/para.qasm +0 -0
  287. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/process_tomo.qasm +0 -0
  288. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/qelib1.inc +0 -0
  289. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/qft.qasm +0 -0
  290. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/qft2.qasm +0 -0
  291. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/rb.qasm +0 -0
  292. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/rep_code.qasm +0 -0
  293. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/ripple_carry_adder.qasm +0 -0
  294. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/tele.qasm +0 -0
  295. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/programs/valid_if.qasm +0 -0
  296. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/test_ast.py +0 -0
  297. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/parse/test_roundtrip.py +0 -0
  298. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/__init__.py +0 -0
  299. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_global_to_parallel.py +0 -0
  300. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_global_to_uop.py +0 -0
  301. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_heuristic_noise.py +0 -0
  302. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_parallel_to_global.py +0 -0
  303. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_parallel_to_uop.py +0 -0
  304. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_qasm2py.py +0 -0
  305. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_unroll_if.py +0 -0
  306. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/passes/test_uop_to_parallel.py +0 -0
  307. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/test_count.py +0 -0
  308. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/test_inline.py +0 -0
  309. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/test_lowering.py +0 -0
  310. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/test_native.py +0 -0
  311. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qasm2/test_two2one.py +0 -0
  312. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qbraid/__init__.py +0 -0
  313. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qbraid/test_clean_circuit.py +0 -0
  314. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qbraid/test_lowering.py +0 -0
  315. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/qbraid/test_target.py +0 -0
  316. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/sample/__init__.py +0 -0
  317. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/sample/test_noise_model.py +0 -0
  318. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/cirq/test_squin_noise_to_cirq.py +0 -0
  319. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/op/test_reset.py +0 -0
  320. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/rewrite/test_U3_to_clifford.py +0 -0
  321. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/rewrite/test_canonicalize.py +0 -0
  322. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/rewrite/test_desugar.py +0 -0
  323. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/rewrite/test_mult_rewrite.py +0 -0
  324. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/test_constprop.py +0 -0
  325. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/test_stdlib_shorthands.py +0 -0
  326. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/test_typeinfer.py +0 -0
  327. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/wire/__init__.py +0 -0
  328. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/squin/wire/test_check.py +0 -0
  329. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/__init__.py +0 -0
  330. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/__init__.py +0 -0
  331. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/__init__.py +0 -0
  332. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/__init__.py +0 -0
  333. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/base.py +0 -0
  334. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_1q.py +0 -0
  335. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_ctrl.py +0 -0
  336. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_detector.py +0 -0
  337. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_meas.py +0 -0
  338. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_noise.py +0 -0
  339. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_obs_inc.py +0 -0
  340. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_ppmeas.py +0 -0
  341. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_qubit_coords.py +0 -0
  342. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/emit/test_stim_spp.py +0 -0
  343. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/test_stim_circuits.py +0 -0
  344. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/dialects/stim/test_stim_const.py +0 -0
  345. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/__init__.py +0 -0
  346. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/base.py +0 -0
  347. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse.py +0 -0
  348. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse_clifford.py +0 -0
  349. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse_control.py +0 -0
  350. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse_custom.py +0 -0
  351. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse_noise.py +0 -0
  352. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/parse/test_parse_spp.py +0 -0
  353. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/__init__.py +0 -0
  354. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/apply_depolarize1.stim +0 -0
  355. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/apply_loss.stim +0 -0
  356. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/apply_pauli_channel_1.stim +0 -0
  357. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize1.stim +0 -0
  358. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize2.stim +0 -0
  359. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_bit_flip_channel.stim +0 -0
  360. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_phase_flip_channel.stim +0 -0
  361. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_y_flip_channel.stim +0 -0
  362. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1.stim +0 -0
  363. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_many_qubits.stim +0 -0
  364. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_reuse.stim +0 -0
  365. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2.stim +0 -0
  366. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2_reuse_on_4_qubits.stim +0 -0
  367. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/pure_squin_rewrite.txt +0 -0
  368. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/addition_assignment_measure.stim +0 -0
  369. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/alias_with_measure_list.stim +0 -0
  370. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/complex_storage_index_order.stim +0 -0
  371. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/for_loop_nontrivial_index.stim +0 -0
  372. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/nested_for_loop.stim +0 -0
  373. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/nested_list.stim +0 -0
  374. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/qubit.stim +0 -0
  375. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.stim +0 -0
  376. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/qubit_loss.stim +0 -0
  377. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/qubit_reset.stim +0 -0
  378. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/record_index_order.stim +0 -0
  379. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/simple_if_rewrite.stim +0 -0
  380. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/qubit/u3_to_clifford.stim +0 -0
  381. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire.stim +0 -0
  382. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_apply.stim +0 -0
  383. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_apply_control.stim +0 -0
  384. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_broadcast.stim +0 -0
  385. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.stim +0 -0
  386. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_measure.stim +0 -0
  387. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.stim +0 -0
  388. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_qubit_loss.stim +0 -0
  389. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/stim_reference_programs/wire/wire_reset.stim +0 -0
  390. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/test_squin_meas_to_stim.py +0 -0
  391. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/test_squin_noise_to_stim.py +0 -0
  392. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/test_squin_qubit_to_stim.py +0 -0
  393. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/passes/test_squin_wire_to_stim.py +0 -0
  394. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/test_measure_id_analysis.py +0 -0
  395. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/wrapper/__init__.py +0 -0
  396. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/stim/wrapper/test_wrapper.py +0 -0
  397. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/test_serialization.py +0 -0
  398. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/test_zone_model.py +0 -0
  399. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/test/visual/__init__.py +0 -0
  400. {bloqade_circuit-0.6.5 → bloqade_circuit-0.6.7}/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.5
3
+ Version: 0.6.7
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.5"
3
+ version = "0.6.7"
4
4
  description = "The software development toolkit for neutral atom arrays."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -81,6 +81,13 @@ class SquinOp(interp.MethodTable):
81
81
  op_sites = frame.get(stmt.op)
82
82
  return (op_sites,)
83
83
 
84
+ @interp.impl(op.stmts.PauliString)
85
+ def pauli_string(
86
+ self, interp: NSitesAnalysis, frame: interp.Frame, stmt: op.stmts.PauliString
87
+ ):
88
+ s = stmt.string
89
+ return (NumberSites(sites=len(s)),)
90
+
84
91
 
85
92
  @scf.dialect.register(key="op.nsites")
86
93
  class ScfSquinOp(ScfTypeInfer):
@@ -1,4 +1,5 @@
1
1
  from typing import Any, Sequence
2
+ from warnings import warn
2
3
 
3
4
  import cirq
4
5
  from kirin import ir, types
@@ -157,6 +158,8 @@ def load_circuit(
157
158
  def emit_circuit(
158
159
  mt: ir.Method,
159
160
  qubits: Sequence[cirq.Qid] | None = None,
161
+ circuit_qubits: Sequence[cirq.Qid] | None = None,
162
+ args: tuple = (),
160
163
  ignore_returns: bool = False,
161
164
  ) -> cirq.Circuit:
162
165
  """Converts a squin.kernel method to a cirq.Circuit object.
@@ -165,12 +168,14 @@ def emit_circuit(
165
168
  mt (ir.Method): The kernel method from which to construct the circuit.
166
169
 
167
170
  Keyword Args:
168
- qubits (Sequence[cirq.Qid] | None):
171
+ circuit_qubits (Sequence[cirq.Qid] | None):
169
172
  A list of qubits to use as the qubits in the circuit. Defaults to None.
170
173
  If this is None, then `cirq.LineQubit`s are inserted for every `squin.qubit.new`
171
174
  statement in the order they appear inside the kernel.
172
175
  **Note**: If a list of qubits is provided, make sure that there is a sufficient
173
176
  number of qubits for the resulting circuit.
177
+ args (tuple):
178
+ The arguments of the kernel function from which to emit a circuit.
174
179
  ignore_returns (bool):
175
180
  If `False`, emitting a circuit from a kernel that returns a value will error.
176
181
  Set it to `True` in order to ignore the return value(s). Defaults to `False`.
@@ -223,7 +228,7 @@ def emit_circuit(
223
228
  # custom list of qubits on grid
224
229
  qubits = [cirq.GridQubit(i, i+1) for i in range(5)]
225
230
 
226
- circuit = squin.cirq.emit_circuit(main, qubits=qubits)
231
+ circuit = squin.cirq.emit_circuit(main, circuit_qubits=qubits)
227
232
  print(circuit)
228
233
 
229
234
  ```
@@ -232,6 +237,12 @@ def emit_circuit(
232
237
  and manipulate the qubits in other circuits directly written in cirq as well.
233
238
  """
234
239
 
240
+ if circuit_qubits is None and qubits is not None:
241
+ circuit_qubits = qubits
242
+ warn(
243
+ "The keyword argument `qubits` is deprecated. Use `circuit_qubits` instead."
244
+ )
245
+
235
246
  if (
236
247
  not ignore_returns
237
248
  and isinstance(mt.code, func.Function)
@@ -242,17 +253,24 @@ def emit_circuit(
242
253
  " Set `ignore_returns = True` in order to simply ignore the return values and emit a circuit."
243
254
  )
244
255
 
256
+ if len(args) != len(mt.args):
257
+ raise ValueError(
258
+ f"The method from which you're trying to emit a circuit takes {len(mt.args)} as input, but you passed in {len(args)} via the `args` keyword!"
259
+ )
260
+
245
261
  emitter = EmitCirq(qubits=qubits)
246
262
 
247
263
  # Rewrite noise statements
248
264
  mt_ = mt.similar(mt.dialects)
249
265
  RewriteNoiseStmts(mt_.dialects)(mt_)
250
266
 
251
- return emitter.run(mt_, args=())
267
+ return emitter.run(mt_, args=args)
252
268
 
253
269
 
254
270
  def dump_circuit(
255
271
  mt: ir.Method,
272
+ circuit_qubits: Sequence[cirq.Qid] | None = None,
273
+ args: tuple = (),
256
274
  qubits: Sequence[cirq.Qid] | None = None,
257
275
  ignore_returns: bool = False,
258
276
  **kwargs,
@@ -265,16 +283,24 @@ def dump_circuit(
265
283
  mt (ir.Method): The kernel method from which to construct the circuit.
266
284
 
267
285
  Keyword Args:
268
- qubits (Sequence[cirq.Qid] | None):
286
+ circuit_qubits (Sequence[cirq.Qid] | None):
269
287
  A list of qubits to use as the qubits in the circuit. Defaults to None.
270
288
  If this is None, then `cirq.LineQubit`s are inserted for every `squin.qubit.new`
271
289
  statement in the order they appear inside the kernel.
272
290
  **Note**: If a list of qubits is provided, make sure that there is a sufficient
273
291
  number of qubits for the resulting circuit.
292
+ args (tuple):
293
+ The arguments of the kernel function from which to emit a circuit.
274
294
  ignore_returns (bool):
275
295
  If `False`, emitting a circuit from a kernel that returns a value will error.
276
296
  Set it to `True` in order to ignore the return value(s). Defaults to `False`.
277
297
 
278
298
  """
279
- circuit = emit_circuit(mt, qubits=qubits, ignore_returns=ignore_returns)
299
+ circuit = emit_circuit(
300
+ mt,
301
+ circuit_qubits=circuit_qubits,
302
+ qubits=qubits,
303
+ args=args,
304
+ ignore_returns=ignore_returns,
305
+ )
280
306
  return cirq.to_json(circuit, **kwargs)
@@ -2,7 +2,7 @@ from typing import Sequence
2
2
  from dataclasses import field, dataclass
3
3
 
4
4
  import cirq
5
- from kirin import ir
5
+ from kirin import ir, interp
6
6
  from kirin.emit import EmitABC, EmitError, EmitFrame
7
7
  from kirin.interp import MethodTable, impl
8
8
  from kirin.dialects import func
@@ -45,6 +45,26 @@ class EmitCirq(EmitABC[EmitCirqFrame, cirq.Circuit]):
45
45
  def run_method(self, method: ir.Method, args: tuple[cirq.Circuit, ...]):
46
46
  return self.run_callable(method.code, args)
47
47
 
48
+ def run_callable_region(
49
+ self,
50
+ frame: EmitCirqFrame,
51
+ code: ir.Statement,
52
+ region: ir.Region,
53
+ args: tuple,
54
+ ):
55
+ if len(region.blocks) > 0:
56
+ block_args = list(region.blocks[0].args)
57
+ # NOTE: skip self arg
58
+ frame.set_values(block_args[1:], args)
59
+
60
+ results = self.eval_stmt(frame, code)
61
+ if isinstance(results, tuple):
62
+ if len(results) == 0:
63
+ return self.void
64
+ elif len(results) == 1:
65
+ return results[0]
66
+ raise interp.InterpreterError(f"Unexpected results {results}")
67
+
48
68
  def emit_block(self, frame: EmitCirqFrame, block: ir.Block) -> cirq.Circuit:
49
69
  for stmt in block.stmts:
50
70
  result = self.eval_stmt(frame, stmt)
@@ -49,7 +49,7 @@ class EmitCirqQubitMethods(MethodTable):
49
49
  ):
50
50
  qbit = frame.get(stmt.qubit)
51
51
  frame.circuit.append(cirq.measure(qbit))
52
- return ()
52
+ return (emit.void,)
53
53
 
54
54
  @impl(qubit.MeasureQubitList)
55
55
  def measure_qubit_list(
@@ -57,4 +57,4 @@ class EmitCirqQubitMethods(MethodTable):
57
57
  ):
58
58
  qbits = frame.get(stmt.qubits)
59
59
  frame.circuit.append(cirq.measure(qbits))
60
- return ()
60
+ return (emit.void,)
@@ -3,7 +3,7 @@ import itertools
3
3
  from kirin import ir
4
4
  from kirin.passes import Pass
5
5
  from kirin.rewrite import Walk
6
- from kirin.dialects import ilist
6
+ from kirin.dialects import py, ilist
7
7
  from kirin.rewrite.abc import RewriteRule, RewriteResult
8
8
 
9
9
  from .stmts import (
@@ -11,6 +11,7 @@ from .stmts import (
11
11
  QubitLoss,
12
12
  Depolarize,
13
13
  PauliError,
14
+ Depolarize2,
14
15
  NoiseChannel,
15
16
  TwoQubitPauliChannel,
16
17
  SingleQubitPauliChannel,
@@ -58,6 +59,18 @@ class _RewriteNoiseStmts(RewriteRule):
58
59
  def rewrite_two_qubit_pauli_channel(
59
60
  self, node: TwoQubitPauliChannel
60
61
  ) -> RewriteResult:
62
+ operator_list = self._insert_two_qubit_paulis_before_node(node)
63
+ stochastic_unitary = StochasticUnitaryChannel(
64
+ operators=operator_list, probabilities=node.params
65
+ )
66
+
67
+ node.replace_by(stochastic_unitary)
68
+ return RewriteResult(has_done_something=True)
69
+
70
+ @staticmethod
71
+ def _insert_two_qubit_paulis_before_node(
72
+ node: TwoQubitPauliChannel | Depolarize2,
73
+ ) -> ir.ResultValue:
61
74
  paulis = (Identity(sites=1), X(), Y(), Z())
62
75
  for op in paulis:
63
76
  op.insert_before(node)
@@ -71,12 +84,7 @@ class _RewriteNoiseStmts(RewriteRule):
71
84
  operators.append(op.result)
72
85
 
73
86
  (operator_list := ilist.New(values=operators)).insert_before(node)
74
- stochastic_unitary = StochasticUnitaryChannel(
75
- operators=operator_list.result, probabilities=node.params
76
- )
77
-
78
- node.replace_by(stochastic_unitary)
79
- return RewriteResult(has_done_something=True)
87
+ return operator_list.result
80
88
 
81
89
  def rewrite_p_p_error(self, node: PPError) -> RewriteResult:
82
90
  (operators := ilist.New(values=(node.op,))).insert_before(node)
@@ -95,8 +103,14 @@ class _RewriteNoiseStmts(RewriteRule):
95
103
  op.insert_before(node)
96
104
  operators.append(op.result)
97
105
 
106
+ # NOTE: need to divide the probability by 3 to get the correct total error rate
107
+ (three := py.Constant(3)).insert_before(node)
108
+ (p_over_3 := py.Div(node.p, three.result)).insert_before(node)
109
+
98
110
  (operator_list := ilist.New(values=operators)).insert_before(node)
99
- (ps := ilist.New(values=[node.p for _ in range(3)])).insert_before(node)
111
+ (ps := ilist.New(values=[p_over_3.result for _ in range(3)])).insert_before(
112
+ node
113
+ )
100
114
 
101
115
  stochastic_unitary = StochasticUnitaryChannel(
102
116
  operators=operator_list.result, probabilities=ps.result
@@ -105,6 +119,21 @@ class _RewriteNoiseStmts(RewriteRule):
105
119
 
106
120
  return RewriteResult(has_done_something=True)
107
121
 
122
+ def rewrite_depolarize2(self, node: Depolarize2) -> RewriteResult:
123
+ operator_list = self._insert_two_qubit_paulis_before_node(node)
124
+
125
+ # NOTE: need to divide the probability by 15 to get the correct total error rate
126
+ (fifteen := py.Constant(15)).insert_before(node)
127
+ (p_over_15 := py.Div(node.p, fifteen.result)).insert_before(node)
128
+ (probs := ilist.New(values=[p_over_15.result] * 15)).insert_before(node)
129
+
130
+ stochastic_unitary = StochasticUnitaryChannel(
131
+ operators=operator_list, probabilities=probs.result
132
+ )
133
+ node.replace_by(stochastic_unitary)
134
+
135
+ return RewriteResult(has_done_something=True)
136
+
108
137
 
109
138
  class RewriteNoiseStmts(Pass):
110
139
  def unsafe_run(self, mt: ir.Method):
@@ -84,5 +84,5 @@ def test_simple_model(model: cirq.NoiseModel, qubits):
84
84
 
85
85
  assert pops[0] < 0.5001
86
86
  assert pops[3] < 0.5001
87
- assert pops[1] > 0.0
88
- assert pops[2] > 0.0
87
+ assert pops[1] >= 0.0
88
+ assert pops[2] >= 0.0
@@ -209,3 +209,22 @@ def test_pauli_string_error():
209
209
  print(ket)
210
210
 
211
211
  assert math.isclose(abs(ket[2]) ** 2, 1.0, abs_tol=1e-5)
212
+
213
+
214
+ def test_depolarize2():
215
+ @squin.kernel
216
+ def main():
217
+ q = squin.qubit.new(2)
218
+ err = squin.noise.depolarize2(0.1)
219
+ squin.qubit.apply(err, q[0], q[1])
220
+
221
+ main.print()
222
+
223
+ main_ = main.similar(main.dialects)
224
+
225
+ result = RewriteNoiseStmts(main.dialects)(main_)
226
+ assert result.has_done_something
227
+ main_.print()
228
+
229
+ sim = StackMemorySimulator(min_qubits=2)
230
+ sim.run(main)
@@ -248,3 +248,19 @@ def test_invoke():
248
248
  assert has_n_sites[0].sites == 1
249
249
  for n_site in has_n_sites[1:]:
250
250
  assert n_site.sites == 2
251
+
252
+
253
+ def test_pauli_string():
254
+ @squin.kernel(fold=False)
255
+ def main():
256
+ squin.op.pauli_string(string="XYZ")
257
+
258
+ nsites_frame, _ = nsites.NSitesAnalysis(main.dialects).run_analysis(main)
259
+
260
+ has_n_sites = []
261
+ for nsites_type in nsites_frame.entries.values():
262
+ if isinstance(nsites_type, nsites.NumberSites):
263
+ has_n_sites.append(nsites_type)
264
+
265
+ assert len(has_n_sites) == 1
266
+ assert has_n_sites[0].sites == 3
@@ -370,3 +370,39 @@ def test_ghz_simulation():
370
370
  assert ket[1] == ket[2] == 0
371
371
  assert math.isclose(abs(ket[0]) ** 2, 0.5, abs_tol=1e-5)
372
372
  assert math.isclose(abs(ket[3]) ** 2, 0.5, abs_tol=1e-5)
373
+
374
+
375
+ def test_kernel_with_args():
376
+
377
+ @squin.kernel
378
+ def main(n: int):
379
+ q = squin.qubit.new(n)
380
+ x = squin.op.x()
381
+ for i in range(n):
382
+ squin.qubit.apply(x, q[i])
383
+
384
+ main.print()
385
+
386
+ n_arg = 3
387
+ circuit = squin.cirq.emit_circuit(main, args=(n_arg,))
388
+ print(circuit)
389
+
390
+ q = cirq.LineQubit.range(n_arg)
391
+ expected_circuit = cirq.Circuit()
392
+ for i in range(n_arg):
393
+ expected_circuit.append(cirq.X(q[i]))
394
+
395
+ assert circuit == expected_circuit
396
+
397
+ @squin.kernel
398
+ def multi_arg(n: int, p: float):
399
+ q = squin.qubit.new(n)
400
+ h = squin.op.h()
401
+ squin.qubit.apply(h, q[0])
402
+
403
+ if p > 0:
404
+ squin.qubit.apply(h, q[1])
405
+
406
+ circuit = squin.cirq.emit_circuit(multi_arg, args=(3, 0.1))
407
+
408
+ print(circuit)
@@ -349,4 +349,15 @@ def test_invoke_cache():
349
349
  assert len(target._cached_circuit_operations) == 2
350
350
 
351
351
 
352
- test_return_value()
352
+ def test_return_measurement():
353
+
354
+ @squin.kernel
355
+ def coinflip():
356
+ qubit = squin.qubit.new(1)[0]
357
+ squin.gate.h(qubit)
358
+ return squin.qubit.measure(qubit)
359
+
360
+ coinflip.print()
361
+
362
+ circuit = squin.cirq.emit_circuit(coinflip, ignore_returns=True)
363
+ print(circuit)
@@ -87,7 +87,7 @@ def test_apply_in_for_loop():
87
87
  sim = StackMemorySimulator(min_qubits=2)
88
88
  ket = sim.state_vector(main)
89
89
 
90
- assert math.isclose(abs(ket[0]) ** 2, 1, abs_tol=1e-7)
90
+ assert math.isclose(abs(ket[0]) ** 2, 1, abs_tol=1e-5)
91
91
  assert ket[1] == ket[2] == ket[3] == 0
92
92
 
93
93
 
@@ -102,7 +102,7 @@ wheels = [
102
102
 
103
103
  [[package]]
104
104
  name = "bloqade-circuit"
105
- version = "0.6.5"
105
+ version = "0.6.7"
106
106
  source = { editable = "." }
107
107
  dependencies = [
108
108
  { name = "kirin-toolchain" },
@@ -1936,15 +1936,15 @@ wheels = [
1936
1936
 
1937
1937
  [[package]]
1938
1938
  name = "qpsolvers"
1939
- version = "4.8.0"
1939
+ version = "4.8.1"
1940
1940
  source = { registry = "https://pypi.org/simple" }
1941
1941
  dependencies = [
1942
1942
  { name = "numpy" },
1943
1943
  { name = "scipy" },
1944
1944
  ]
1945
- sdist = { url = "https://files.pythonhosted.org/packages/53/02/c650ed13204175e191fd8fd1bf7a8e3eb3d0a90557c009f1dbc072d85e52/qpsolvers-4.8.0.tar.gz", hash = "sha256:56addf5f60c11a5ead1e17441e06a6255feda184b2d8dc9982fef90ca258b92e", size = 98066 }
1945
+ sdist = { url = "https://files.pythonhosted.org/packages/68/87/42743adbcc31728798b26c219b14fadf02c12d49d691cd0f5813cb493c51/qpsolvers-4.8.1.tar.gz", hash = "sha256:69548b6871c57312b03b35826cc443b460adfd6d195d45bc21b12de21ca2f915", size = 97660 }
1946
1946
  wheels = [
1947
- { url = "https://files.pythonhosted.org/packages/ac/be/9abe51a4dbb16d7ea99f8b4202659992986eefef6dfd48c1dd380eeb56df/qpsolvers-4.8.0-py3-none-any.whl", hash = "sha256:837fe625d4257da902086ce3ca868244eeea1b1966bed3005f9a6ed73570f2f1", size = 91996 },
1947
+ { url = "https://files.pythonhosted.org/packages/e4/02/aa2050f2beba7c07ead8d2efe1f7876a0b8cc538d4718511c46e210d9ff2/qpsolvers-4.8.1-py3-none-any.whl", hash = "sha256:ebbda8f4391968582e634bece6c865d4737f5199e2a35795092ca0ff4891a845", size = 92104 },
1948
1948
  ]
1949
1949
 
1950
1950
  [package.optional-dependencies]
File without changes