bloqade-circuit 0.4.4__tar.gz → 0.4.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 (326) hide show
  1. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/PKG-INFO +1 -1
  2. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/pyproject.toml +1 -1
  3. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/__init__.py +74 -9
  4. bloqade_circuit-0.4.5/src/bloqade/squin/cirq/emit/noise.py +49 -0
  5. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/emit/runtime.py +9 -1
  6. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/lowering.py +27 -21
  7. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/noise/_wrapper.py +9 -2
  8. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/noise/rewrite.py +3 -3
  9. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/cirq/test_cirq_to_squin.py +76 -0
  10. bloqade_circuit-0.4.5/test/squin/cirq/test_squin_noise_to_cirq.py +88 -0
  11. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/uv.lock +1 -1
  12. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.github/dependabot.yml +0 -0
  13. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.github/workflows/ci.yml +0 -0
  14. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.github/workflows/isort.yml +0 -0
  15. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.github/workflows/lint.yml +0 -0
  16. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.github/workflows/release.yml +0 -0
  17. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.gitignore +0 -0
  18. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/.pre-commit-config.yaml +0 -0
  19. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/LICENSE +0 -0
  20. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/README.md +0 -0
  21. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/_typos.toml +0 -0
  22. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/justfile +0 -0
  23. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/__init__.py +0 -0
  24. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/address/__init__.py +0 -0
  25. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/address/analysis.py +0 -0
  26. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/address/impls.py +0 -0
  27. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/address/lattice.py +0 -0
  28. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/fidelity/__init__.py +0 -0
  29. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/analysis/fidelity/analysis.py +0 -0
  30. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/device.py +0 -0
  31. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/__init__.py +0 -0
  32. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/base.py +0 -0
  33. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/device.py +0 -0
  34. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/noise/__init__.py +0 -0
  35. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/noise/native.py +0 -0
  36. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/qasm2/__init__.py +0 -0
  37. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/qasm2/core.py +0 -0
  38. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/qasm2/glob.py +0 -0
  39. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/qasm2/parallel.py +0 -0
  40. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/qasm2/uop.py +0 -0
  41. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/reg.py +0 -0
  42. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/__init__.py +0 -0
  43. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/noise/__init__.py +0 -0
  44. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/noise/native.py +0 -0
  45. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/op.py +0 -0
  46. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/qubit.py +0 -0
  47. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/runtime.py +0 -0
  48. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/squin/wire.py +0 -0
  49. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/target.py +0 -0
  50. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/pyqrack/task.py +0 -0
  51. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/__init__.py +0 -0
  52. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/_qasm_loading.py +0 -0
  53. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/_wrappers.py +0 -0
  54. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/__init__.py +0 -0
  55. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/__init__.py +0 -0
  56. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/_dialect.py +0 -0
  57. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/_emit.py +0 -0
  58. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/_typeinfer.py +0 -0
  59. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/address.py +0 -0
  60. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/core/stmts.py +0 -0
  61. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/__init__.py +0 -0
  62. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/_dialect.py +0 -0
  63. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/_emit.py +0 -0
  64. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/_from_python.py +0 -0
  65. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/_interp.py +0 -0
  66. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/expr/stmts.py +0 -0
  67. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/glob.py +0 -0
  68. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/indexing.py +0 -0
  69. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/inline.py +0 -0
  70. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/noise/__init__.py +0 -0
  71. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/noise/_dialect.py +0 -0
  72. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/noise/fidelity.py +0 -0
  73. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/noise/model.py +0 -0
  74. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/noise/stmts.py +0 -0
  75. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/parallel.py +0 -0
  76. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/uop/__init__.py +0 -0
  77. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/uop/_dialect.py +0 -0
  78. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/uop/_emit.py +0 -0
  79. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/uop/schedule.py +0 -0
  80. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/dialects/uop/stmts.py +0 -0
  81. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/__init__.py +0 -0
  82. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/base.py +0 -0
  83. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/gate.py +0 -0
  84. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/impls/__init__.py +0 -0
  85. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/impls/noise.py +0 -0
  86. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/main.py +0 -0
  87. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/emit/target.py +0 -0
  88. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/glob.py +0 -0
  89. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/groups.py +0 -0
  90. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/noise.py +0 -0
  91. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parallel.py +0 -0
  92. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/__init__.py +0 -0
  93. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/ast.py +0 -0
  94. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/build.py +0 -0
  95. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/lowering.py +0 -0
  96. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/parser.py +0 -0
  97. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/print.py +0 -0
  98. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/qasm2.lark +0 -0
  99. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/visitor.py +0 -0
  100. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/parse/visitor.pyi +0 -0
  101. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/__init__.py +0 -0
  102. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/fold.py +0 -0
  103. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/glob.py +0 -0
  104. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/lift_qubits.py +0 -0
  105. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/noise.py +0 -0
  106. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/parallel.py +0 -0
  107. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/py2qasm.py +0 -0
  108. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/qasm2py.py +0 -0
  109. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/passes/unroll_if.py +0 -0
  110. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/__init__.py +0 -0
  111. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/desugar.py +0 -0
  112. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/glob.py +0 -0
  113. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/insert_qubits.py +0 -0
  114. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/native_gates.py +0 -0
  115. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/noise/__init__.py +0 -0
  116. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/noise/heuristic_noise.py +0 -0
  117. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/noise/remove_noise.py +0 -0
  118. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/parallel_to_uop.py +0 -0
  119. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/register.py +0 -0
  120. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/split_ifs.py +0 -0
  121. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/rewrite/uop_to_parallel.py +0 -0
  122. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qasm2/types.py +0 -0
  123. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qbraid/__init__.py +0 -0
  124. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qbraid/lowering.py +0 -0
  125. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qbraid/schema.py +0 -0
  126. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qbraid/simulation_result.py +0 -0
  127. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/qbraid/target.py +0 -0
  128. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/__init__.py +0 -0
  129. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/__init__.py +0 -0
  130. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/nsites/__init__.py +0 -0
  131. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/nsites/analysis.py +0 -0
  132. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/nsites/impls.py +0 -0
  133. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/nsites/lattice.py +0 -0
  134. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/analysis/schedule.py +0 -0
  135. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/emit/emit_circuit.py +0 -0
  136. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/emit/op.py +0 -0
  137. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/cirq/emit/qubit.py +0 -0
  138. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/groups.py +0 -0
  139. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/lowering.py +0 -0
  140. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/noise/__init__.py +0 -0
  141. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/noise/_dialect.py +0 -0
  142. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/noise/stmts.py +0 -0
  143. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/__init__.py +0 -0
  144. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/_dialect.py +0 -0
  145. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/_wrapper.py +0 -0
  146. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/number.py +0 -0
  147. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/rewrite.py +0 -0
  148. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/stdlib.py +0 -0
  149. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/stmts.py +0 -0
  150. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/traits.py +0 -0
  151. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/op/types.py +0 -0
  152. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/qubit.py +0 -0
  153. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/rewrite/U3_to_clifford.py +0 -0
  154. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/rewrite/__init__.py +0 -0
  155. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/rewrite/desugar.py +0 -0
  156. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/rewrite/remove_dangling_qubits.py +0 -0
  157. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/rewrite/wrap_analysis.py +0 -0
  158. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/squin/wire.py +0 -0
  159. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/__init__.py +0 -0
  160. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/_wrappers.py +0 -0
  161. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/__init__.py +0 -0
  162. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/__init__.py +0 -0
  163. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/_dialect.py +0 -0
  164. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/emit.py +0 -0
  165. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/interp.py +0 -0
  166. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/lowering.py +0 -0
  167. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/stmts/__init__.py +0 -0
  168. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/stmts/annotate.py +0 -0
  169. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/stmts/const.py +0 -0
  170. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/auxiliary/types.py +0 -0
  171. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/__init__.py +0 -0
  172. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/_dialect.py +0 -0
  173. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/emit_str.py +0 -0
  174. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/stmts/__init__.py +0 -0
  175. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/stmts/measure.py +0 -0
  176. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/stmts/pp_measure.py +0 -0
  177. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/collapse/stmts/reset.py +0 -0
  178. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/__init__.py +0 -0
  179. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/_dialect.py +0 -0
  180. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/emit.py +0 -0
  181. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/__init__.py +0 -0
  182. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/base.py +0 -0
  183. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/clifford_1q.py +0 -0
  184. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/clifford_2q.py +0 -0
  185. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/control_2q.py +0 -0
  186. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/gate/stmts/pp.py +0 -0
  187. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/noise/__init__.py +0 -0
  188. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/noise/_dialect.py +0 -0
  189. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/noise/emit.py +0 -0
  190. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/dialects/noise/stmts.py +0 -0
  191. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/emit/__init__.py +0 -0
  192. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/emit/stim_str.py +0 -0
  193. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/groups.py +0 -0
  194. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/parse/__init__.py +0 -0
  195. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/parse/lowering.py +0 -0
  196. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/passes/__init__.py +0 -0
  197. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/passes/squin_to_stim.py +0 -0
  198. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/__init__.py +0 -0
  199. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/py_constant_to_stim.py +0 -0
  200. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/qubit_to_stim.py +0 -0
  201. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/squin_measure.py +0 -0
  202. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/util.py +0 -0
  203. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/wire_identity_elimination.py +0 -0
  204. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/stim/rewrite/wire_to_stim.py +0 -0
  205. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/task.py +0 -0
  206. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/test_utils.py +0 -0
  207. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/types.py +0 -0
  208. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/__init__.py +0 -0
  209. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/__init__.py +0 -0
  210. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/animate.py +0 -0
  211. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/base.py +0 -0
  212. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/gate_event.py +0 -0
  213. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/__init__.py +0 -0
  214. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/aod.py +0 -0
  215. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/atoms.py +0 -0
  216. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/ppoly.py +0 -0
  217. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/qpustate.py +0 -0
  218. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/src/bloqade/visual/animation/runtime/utils.py +0 -0
  219. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/__init__.py +0 -0
  220. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/analysis/address/test_analysis.py +0 -0
  221. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/analysis/address/test_lattice.py +0 -0
  222. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/analysis/fidelity/test_fidelity.py +0 -0
  223. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/__init__.py +0 -0
  224. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/__init__.py +0 -0
  225. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/noise/__init__.py +0 -0
  226. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/noise/qasm2/test_loss.py +0 -0
  227. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/noise/qasm2/test_pauli.py +0 -0
  228. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/test_dyn_memory.py +0 -0
  229. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/runtime/test_qrack.py +0 -0
  230. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/squin/test_kernel.py +0 -0
  231. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/squin/test_noise.py +0 -0
  232. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/pyqrack/test_target.py +0 -0
  233. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/__init__.py +0 -0
  234. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/analysis/test_dag.py +0 -0
  235. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/emit/test_extended.py +0 -0
  236. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/emit/test_extended_noise.py +0 -0
  237. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/emit/test_qasm2.py +0 -0
  238. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/emit/test_qasm2_emit.py +0 -0
  239. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/__init__.py +0 -0
  240. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/invalid_programs/invalid_if.qasm +0 -0
  241. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/README.md +0 -0
  242. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/global.qasm +0 -0
  243. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/iqft1.qasm +0 -0
  244. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/main.qasm +0 -0
  245. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/noise.qasm +0 -0
  246. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/para.qasm +0 -0
  247. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/process_tomo.qasm +0 -0
  248. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/qelib1.inc +0 -0
  249. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/qft.qasm +0 -0
  250. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/qft2.qasm +0 -0
  251. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/rb.qasm +0 -0
  252. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/rep_code.qasm +0 -0
  253. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/ripple_carry_adder.qasm +0 -0
  254. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/tele.qasm +0 -0
  255. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/programs/valid_if.qasm +0 -0
  256. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/test_ast.py +0 -0
  257. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/parse/test_roundtrip.py +0 -0
  258. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/__init__.py +0 -0
  259. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_global_to_parallel.py +0 -0
  260. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_global_to_uop.py +0 -0
  261. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_heuristic_noise.py +0 -0
  262. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_parallel_to_uop.py +0 -0
  263. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_qasm2py.py +0 -0
  264. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_unroll_if.py +0 -0
  265. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/passes/test_uop_to_parallel.py +0 -0
  266. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/test_count.py +0 -0
  267. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/test_inline.py +0 -0
  268. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/test_lowering.py +0 -0
  269. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/test_native.py +0 -0
  270. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qasm2/test_two2one.py +0 -0
  271. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qbraid/__init__.py +0 -0
  272. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qbraid/test_clean_circuit.py +0 -0
  273. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qbraid/test_lowering.py +0 -0
  274. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/qbraid/test_target.py +0 -0
  275. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/sample/__init__.py +0 -0
  276. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/sample/test_noise_model.py +0 -0
  277. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/analysis/test_nsites_analysis.py +0 -0
  278. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/cirq/test_squin_to_cirq.py +0 -0
  279. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/op/test_reset.py +0 -0
  280. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/rewrite/test_U3_to_clifford.py +0 -0
  281. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/rewrite/test_mult_rewrite.py +0 -0
  282. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/test_constprop.py +0 -0
  283. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/squin/test_sugar.py +0 -0
  284. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/__init__.py +0 -0
  285. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/__init__.py +0 -0
  286. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/__init__.py +0 -0
  287. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/__init__.py +0 -0
  288. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/base.py +0 -0
  289. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_1q.py +0 -0
  290. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_ctrl.py +0 -0
  291. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_detector.py +0 -0
  292. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_meas.py +0 -0
  293. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_noise.py +0 -0
  294. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_obs_inc.py +0 -0
  295. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_ppmeas.py +0 -0
  296. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_qubit_coords.py +0 -0
  297. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/emit/test_stim_spp.py +0 -0
  298. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/test_stim_circuits.py +0 -0
  299. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/dialects/stim/test_stim_const.py +0 -0
  300. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/__init__.py +0 -0
  301. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/base.py +0 -0
  302. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse.py +0 -0
  303. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse_clifford.py +0 -0
  304. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse_control.py +0 -0
  305. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse_custom.py +0 -0
  306. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse_noise.py +0 -0
  307. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/parse/test_parse_spp.py +0 -0
  308. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/qubit/qubit.txt +0 -0
  309. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.txt +0 -0
  310. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/qubit/qubit_reset.txt +0 -0
  311. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire.txt +0 -0
  312. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_apply.txt +0 -0
  313. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_apply_control.txt +0 -0
  314. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_broadcast.txt +0 -0
  315. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.txt +0 -0
  316. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_measure.txt +0 -0
  317. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.txt +0 -0
  318. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/stim_reference_programs/wire/wire_reset.txt +0 -0
  319. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/test_squin_qubit_to_stim.py +0 -0
  320. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/passes/test_squin_wire_to_stim.py +0 -0
  321. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/wrapper/__init__.py +0 -0
  322. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/stim/wrapper/test_wrapper.py +0 -0
  323. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/test_serialization.py +0 -0
  324. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/test_zone_model.py +0 -0
  325. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.5}/test/visual/__init__.py +0 -0
  326. {bloqade_circuit-0.4.4 → bloqade_circuit-0.4.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.4.4
3
+ Version: 0.4.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.4.4"
3
+ version = "0.4.5"
4
4
  description = "The software development toolkit for neutral atom arrays."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -9,8 +9,9 @@ from . import lowering as lowering
9
9
  from .. import kernel
10
10
 
11
11
  # NOTE: just to register methods
12
- from .emit import op as op, qubit as qubit
12
+ from .emit import op as op, noise as noise, qubit as qubit
13
13
  from .lowering import Squin
14
+ from ..noise.rewrite import RewriteNoiseStmts
14
15
  from .emit.emit_circuit import EmitCirq
15
16
 
16
17
 
@@ -18,6 +19,9 @@ def load_circuit(
18
19
  circuit: cirq.Circuit,
19
20
  kernel_name: str = "main",
20
21
  dialects: ir.DialectGroup = kernel,
22
+ register_as_argument: bool = False,
23
+ return_register: bool = False,
24
+ register_argument_name: str = "q",
21
25
  globals: dict[str, Any] | None = None,
22
26
  file: str | None = None,
23
27
  lineno_offset: int = 0,
@@ -32,13 +36,23 @@ def load_circuit(
32
36
  Keyword Args:
33
37
  kernel_name (str): The name of the kernel to load. Defaults to "main".
34
38
  dialects (ir.DialectGroup | None): The dialects to use. Defaults to `squin.kernel`.
39
+ register_as_argument (bool): Determine whether the resulting kernel function should accept
40
+ a single `ilist.IList[Qubit, Any]` argument that is a list of qubits used within the
41
+ function. This allows you to compose kernel functions generated from circuits.
42
+ Defaults to `False`.
43
+ return_register (bool): Determine whether the resulting kernel functionr returns a
44
+ single value of type `ilist.IList[Qubit, Any]` that is the list of qubits used
45
+ in the kernel function. Useful when you want to compose multiple kernel functions
46
+ generated from circuits. Defaults to `False`.
47
+ register_argument_name (str): The name of the argument that represents the qubit register.
48
+ Only used when `register_as_argument=True`. Defaults to "q".
35
49
  globals (dict[str, Any] | None): The global variables to use. Defaults to None.
36
50
  file (str | None): The file name for error reporting. Defaults to None.
37
51
  lineno_offset (int): The line number offset for error reporting. Defaults to 0.
38
52
  col_offset (int): The column number offset for error reporting. Defaults to 0.
39
53
  compactify (bool): Whether to compactify the output. Defaults to True.
40
54
 
41
- Example:
55
+ ## Usage Examples:
42
56
 
43
57
  ```python
44
58
  # from cirq's "hello qubit" example
@@ -60,6 +74,30 @@ def load_circuit(
60
74
  # print the resulting IR
61
75
  main.print()
62
76
  ```
77
+
78
+ You can also compose kernel functions generated from circuits by passing in
79
+ and / or returning the respective quantum registers:
80
+
81
+ ```python
82
+ q = cirq.LineQubit.range(2)
83
+ circuit = cirq.Circuit(cirq.H(q[0]), cirq.CX(*q))
84
+
85
+ get_entangled_qubits = squin.cirq.load_circuit(
86
+ circuit, return_register=True, kernel_name="get_entangled_qubits"
87
+ )
88
+ get_entangled_qubits.print()
89
+
90
+ entangle_qubits = squin.cirq.load_circuit(
91
+ circuit, register_as_argument=True, kernel_name="entangle_qubits"
92
+ )
93
+
94
+ @squin.kernel
95
+ def main():
96
+ qreg = get_entangled_qubits()
97
+ qreg2 = squin.qubit.new(1)
98
+ entangle_qubits([qreg[1], qreg2[0]])
99
+ return squin.qubit.measure(qreg2)
100
+ ```
63
101
  """
64
102
 
65
103
  target = Squin(dialects=dialects, circuit=circuit)
@@ -71,16 +109,38 @@ def load_circuit(
71
109
  lineno_offset=lineno_offset,
72
110
  col_offset=col_offset,
73
111
  compactify=compactify,
112
+ register_as_argument=register_as_argument,
113
+ register_argument_name=register_argument_name,
74
114
  )
75
115
 
76
- # NOTE: no return value
77
- return_value = func.ConstantNone()
78
- body.blocks[0].stmts.append(return_value)
79
- body.blocks[0].stmts.append(func.Return(value_or_stmt=return_value))
116
+ if return_register:
117
+ return_value = target.qreg
118
+ else:
119
+ return_value = func.ConstantNone()
120
+ body.blocks[0].stmts.append(return_value)
121
+
122
+ return_node = func.Return(value_or_stmt=return_value)
123
+ body.blocks[0].stmts.append(return_node)
124
+
125
+ self_arg_name = kernel_name + "_self"
126
+ arg_names = [self_arg_name]
127
+ if register_as_argument:
128
+ args = (target.qreg.type,)
129
+ arg_names.append(register_argument_name)
130
+ else:
131
+ args = ()
132
+
133
+ # NOTE: add _self as argument; need to know signature before so do it after lowering
134
+ signature = func.Signature(args, return_node.value.type)
135
+ body.blocks[0].args.insert_from(
136
+ 0,
137
+ types.Generic(ir.Method, types.Tuple.where(signature.inputs), signature.output),
138
+ self_arg_name,
139
+ )
80
140
 
81
141
  code = func.Function(
82
142
  sym_name=kernel_name,
83
- signature=func.Signature((), types.NoneType),
143
+ signature=signature,
84
144
  body=body,
85
145
  )
86
146
 
@@ -88,7 +148,7 @@ def load_circuit(
88
148
  mod=None,
89
149
  py_func=None,
90
150
  sym_name=kernel_name,
91
- arg_names=[],
151
+ arg_names=arg_names,
92
152
  dialects=dialects,
93
153
  code=code,
94
154
  )
@@ -176,7 +236,12 @@ def emit_circuit(
176
236
  )
177
237
 
178
238
  emitter = EmitCirq(qubits=qubits)
179
- return emitter.run(mt, args=())
239
+
240
+ # Rewrite noise statements
241
+ mt_ = mt.similar(mt.dialects)
242
+ RewriteNoiseStmts(mt_.dialects)(mt_)
243
+
244
+ return emitter.run(mt_, args=())
180
245
 
181
246
 
182
247
  def dump_circuit(mt: ir.Method, qubits: Sequence[cirq.Qid] | None = None, **kwargs):
@@ -0,0 +1,49 @@
1
+ import cirq
2
+ from kirin.emit import EmitError
3
+ from kirin.interp import MethodTable, impl
4
+
5
+ from ... import noise
6
+ from .runtime import (
7
+ KronRuntime,
8
+ BasicOpRuntime,
9
+ OperatorRuntimeABC,
10
+ PauliStringRuntime,
11
+ )
12
+ from .emit_circuit import EmitCirq, EmitCirqFrame
13
+
14
+
15
+ @noise.dialect.register(key="emit.cirq")
16
+ class EmitCirqNoiseMethods(MethodTable):
17
+
18
+ @impl(noise.stmts.StochasticUnitaryChannel)
19
+ def stochastic_unitary_channel(
20
+ self,
21
+ emit: EmitCirq,
22
+ frame: EmitCirqFrame,
23
+ stmt: noise.stmts.StochasticUnitaryChannel,
24
+ ):
25
+ ops = frame.get(stmt.operators)
26
+ ps = frame.get(stmt.probabilities)
27
+
28
+ error_probabilities = {self._op_to_key(op_): p for op_, p in zip(ops, ps)}
29
+ cirq_op = cirq.asymmetric_depolarize(error_probabilities=error_probabilities)
30
+ return (BasicOpRuntime(cirq_op),)
31
+
32
+ @staticmethod
33
+ def _op_to_key(operator: OperatorRuntimeABC) -> str:
34
+ match operator:
35
+ case KronRuntime():
36
+ key_lhs = EmitCirqNoiseMethods._op_to_key(operator.lhs)
37
+ key_rhs = EmitCirqNoiseMethods._op_to_key(operator.rhs)
38
+ return key_lhs + key_rhs
39
+
40
+ case BasicOpRuntime():
41
+ return str(operator.gate)
42
+
43
+ case PauliStringRuntime():
44
+ return operator.string
45
+
46
+ case _:
47
+ raise EmitError(
48
+ f"Unexpected operator runtime in StochasticUnitaryChannel of type {type(operator).__name__} encountered!"
49
+ )
@@ -21,7 +21,10 @@ class OperatorRuntimeABC:
21
21
 
22
22
  def unsafe_apply(
23
23
  self, qubits: Sequence[cirq.Qid], adjoint: bool = False
24
- ) -> list[cirq.Operation]: ...
24
+ ) -> list[cirq.Operation]:
25
+ raise NotImplementedError(
26
+ f"Apply method needs to be implemented in {self.__class__.__name__}"
27
+ )
25
28
 
26
29
 
27
30
  @dataclass
@@ -38,6 +41,11 @@ class BasicOpRuntime(UnsafeOperatorRuntimeABC):
38
41
  def num_qubits(self) -> int:
39
42
  return self.gate.num_qubits()
40
43
 
44
+ def unsafe_apply(
45
+ self, qubits: Sequence[cirq.Qid], adjoint: bool = False
46
+ ) -> list[cirq.Operation]:
47
+ return [self.gate(*qubits)]
48
+
41
49
 
42
50
  @dataclass
43
51
  class UnitaryRuntime(BasicOpRuntime):
@@ -3,7 +3,7 @@ from typing import Any
3
3
  from dataclasses import field, dataclass
4
4
 
5
5
  import cirq
6
- from kirin import ir, lowering
6
+ from kirin import ir, types, lowering
7
7
  from kirin.rewrite import Walk, CFGCompactify
8
8
  from kirin.dialects import py, scf, ilist
9
9
 
@@ -25,27 +25,26 @@ class Squin(lowering.LoweringABC[CirqNode]):
25
25
  """Lower a cirq.Circuit object to a squin kernel"""
26
26
 
27
27
  circuit: cirq.Circuit
28
- qreg: qubit.New = field(init=False)
28
+ qreg: ir.SSAValue = field(init=False)
29
29
  qreg_index: dict[cirq.Qid, int] = field(init=False, default_factory=dict)
30
30
  next_qreg_index: int = field(init=False, default=0)
31
31
 
32
- def lower_qubit_getindex(self, state: lowering.State[CirqNode], qid: cirq.Qid):
33
- index = self.qreg_index.get(qid)
34
-
35
- if index is None:
36
- index = self.next_qreg_index
37
- self.qreg_index[qid] = index
38
- self.next_qreg_index += 1
32
+ def __post_init__(self):
33
+ # TODO: sort by cirq ordering
34
+ qbits = sorted(self.circuit.all_qubits())
35
+ self.qreg_index = {qid: idx for (idx, qid) in enumerate(qbits)}
39
36
 
37
+ def lower_qubit_getindex(self, state: lowering.State[CirqNode], qid: cirq.Qid):
38
+ index = self.qreg_index[qid]
40
39
  index_ssa = state.current_frame.push(py.Constant(index)).result
41
- qbit_getitem = state.current_frame.push(py.GetItem(self.qreg.result, index_ssa))
40
+ qbit_getitem = state.current_frame.push(py.GetItem(self.qreg, index_ssa))
42
41
  return qbit_getitem.result
43
42
 
44
43
  def lower_qubit_getindices(
45
44
  self, state: lowering.State[CirqNode], qids: list[cirq.Qid]
46
45
  ):
47
46
  qbits_getitem = [self.lower_qubit_getindex(state, qid) for qid in qids]
48
- qbits_stmt = ilist.New(values=qbits_getitem)
47
+ qbits_stmt = ilist.New(values=qbits_getitem, elem_type=qubit.QubitType)
49
48
  qbits_result = state.current_frame.get(qbits_stmt.name)
50
49
 
51
50
  if qbits_result is not None:
@@ -64,6 +63,8 @@ class Squin(lowering.LoweringABC[CirqNode]):
64
63
  lineno_offset: int = 0,
65
64
  col_offset: int = 0,
66
65
  compactify: bool = True,
66
+ register_as_argument: bool = False,
67
+ register_argument_name: str = "q",
67
68
  ) -> ir.Region:
68
69
 
69
70
  state = lowering.State(
@@ -73,16 +74,21 @@ class Squin(lowering.LoweringABC[CirqNode]):
73
74
  col_offset=col_offset,
74
75
  )
75
76
 
76
- with state.frame(
77
- [stmt],
78
- globals=globals,
79
- finalize_next=False,
80
- ) as frame:
81
- # NOTE: create a global register of qubits first
82
- # TODO: can there be a circuit without qubits?
83
- n_qubits = cirq.num_qubits(self.circuit)
84
- n = frame.push(py.Constant(n_qubits))
85
- self.qreg = frame.push(qubit.New(n_qubits=n.result))
77
+ with state.frame([stmt], globals=globals, finalize_next=False) as frame:
78
+
79
+ # NOTE: need a register of qubits before lowering statements
80
+ if register_as_argument:
81
+ # NOTE: register as argument to the kernel; we have freedom of choice for the name here
82
+ frame.curr_block.args.append_from(
83
+ ilist.IListType[qubit.QubitType, types.Any],
84
+ name=register_argument_name,
85
+ )
86
+ self.qreg = frame.curr_block.args[0]
87
+ else:
88
+ # NOTE: create a new register of appropriate size
89
+ n_qubits = len(self.qreg_index)
90
+ n = frame.push(py.Constant(n_qubits))
91
+ self.qreg = frame.push(qubit.New(n_qubits=n.result)).result
86
92
 
87
93
  self.visit(state, stmt)
88
94
 
@@ -1,3 +1,6 @@
1
+ from typing import Literal
2
+
3
+ from kirin.dialects import ilist
1
4
  from kirin.lowering import wraps
2
5
 
3
6
  from bloqade.squin.op.types import Op
@@ -18,11 +21,15 @@ def depolarize(p: float) -> Op: ...
18
21
 
19
22
 
20
23
  @wraps(stmts.SingleQubitPauliChannel)
21
- def single_qubit_pauli_channel(params: tuple[float, float, float]) -> Op: ...
24
+ def single_qubit_pauli_channel(
25
+ params: ilist.IList[float, Literal[3]] | list[float] | tuple[float, float, float],
26
+ ) -> Op: ...
22
27
 
23
28
 
24
29
  @wraps(stmts.TwoQubitPauliChannel)
25
- def two_qubit_pauli_channel(params: tuple[float, ...]) -> Op: ...
30
+ def two_qubit_pauli_channel(
31
+ params: ilist.IList[float, Literal[15]] | list[float] | tuple[float, ...],
32
+ ) -> Op: ...
26
33
 
27
34
 
28
35
  @wraps(stmts.QubitLoss)
@@ -58,12 +58,12 @@ class _RewriteNoiseStmts(RewriteRule):
58
58
  def rewrite_two_qubit_pauli_channel(
59
59
  self, node: TwoQubitPauliChannel
60
60
  ) -> RewriteResult:
61
- paulis = (X(), Y(), Z(), Identity(sites=1))
61
+ paulis = (Identity(sites=1), X(), Y(), Z())
62
62
  for op in paulis:
63
63
  op.insert_before(node)
64
64
 
65
- # NOTE: collect list so we can skip the last entry, which will be two identities
66
- combinations = list(itertools.product(paulis, repeat=2))[:-1]
65
+ # NOTE: collect list so we can skip the first entry, which will be two identities
66
+ combinations = list(itertools.product(paulis, repeat=2))[1:]
67
67
  operators: list[ir.SSAValue] = []
68
68
  for pauli_1, pauli_2 in combinations:
69
69
  op = Kron(pauli_1.result, pauli_2.result)
@@ -2,6 +2,9 @@ import math
2
2
 
3
3
  import cirq
4
4
  import pytest
5
+ from kirin import types
6
+ from kirin.passes import inline
7
+ from kirin.dialects import ilist
5
8
 
6
9
  from bloqade import squin
7
10
  from bloqade.pyqrack import DynamicMemorySimulator
@@ -124,6 +127,19 @@ def noise_channels():
124
127
  )
125
128
 
126
129
 
130
+ def nested_circuit():
131
+ q = cirq.LineQubit.range(3)
132
+
133
+ return cirq.Circuit(
134
+ cirq.H(q[0]),
135
+ cirq.CircuitOperation(
136
+ cirq.Circuit(cirq.H(q[1]), cirq.CX(q[1], q[2])).freeze(),
137
+ use_repetition_ids=False,
138
+ ).controlled_by(q[0]),
139
+ cirq.measure(*q),
140
+ )
141
+
142
+
127
143
  @pytest.mark.parametrize(
128
144
  "circuit_f",
129
145
  [
@@ -161,6 +177,66 @@ def test_circuit(circuit_f, run_sim: bool = False):
161
177
  print(ket)
162
178
 
163
179
 
180
+ def test_return_register():
181
+ circuit = basic_circuit()
182
+ kernel = squin.load_circuit(circuit, return_register=True)
183
+ kernel.print()
184
+
185
+ assert isinstance(kernel.return_type, types.Generic)
186
+ assert kernel.return_type.body.is_subseteq(ilist.IListType)
187
+
188
+
189
+ @pytest.mark.xfail
190
+ def test_nested_circuit():
191
+ # TODO: lowering for CircuitOperation
192
+ test_circuit(nested_circuit)
193
+
194
+
195
+ def test_passing_in_register():
196
+ circuit = pow_gate_circuit()
197
+ print(circuit)
198
+ kernel = squin.cirq.load_circuit(circuit, register_as_argument=True)
199
+ kernel.print()
200
+
201
+
202
+ def test_passing_and_returning_register():
203
+ circuit = pow_gate_circuit()
204
+ print(circuit)
205
+ kernel = squin.cirq.load_circuit(
206
+ circuit, register_as_argument=True, return_register=True
207
+ )
208
+ kernel.print()
209
+
210
+
211
+ def test_nesting_lowered_circuit():
212
+ q = cirq.LineQubit.range(2)
213
+ circuit = cirq.Circuit(cirq.H(q[0]), cirq.CX(*q))
214
+
215
+ get_entangled_qubits = squin.cirq.load_circuit(
216
+ circuit, return_register=True, kernel_name="get_entangled_qubits"
217
+ )
218
+ get_entangled_qubits.print()
219
+
220
+ entangle_qubits = squin.cirq.load_circuit(
221
+ circuit, register_as_argument=True, kernel_name="entangle_qubits"
222
+ )
223
+
224
+ @squin.kernel
225
+ def main():
226
+ qreg = get_entangled_qubits()
227
+ qreg2 = squin.qubit.new(1)
228
+ entangle_qubits([qreg[1], qreg2[0]])
229
+ return squin.qubit.measure(qreg2)
230
+
231
+ # if you get up to here, the validation works
232
+ main.print()
233
+
234
+ # inline to see if the IR is correct
235
+ inline.InlinePass(main.dialects)(main)
236
+
237
+ main.print()
238
+
239
+
164
240
  def test_classical_control(run_sim: bool = False):
165
241
  q = cirq.LineQubit.range(2)
166
242
  circuit = cirq.Circuit(
@@ -0,0 +1,88 @@
1
+ import cirq
2
+
3
+ from bloqade import squin
4
+
5
+
6
+ def test_pauli_channel(run_sim: bool = False):
7
+ @squin.kernel
8
+ def main():
9
+ q = squin.qubit.new(2)
10
+ h = squin.op.h()
11
+ cx = squin.op.cx()
12
+ squin.qubit.apply(h, q[0])
13
+ dpl = squin.noise.depolarize(0.1)
14
+ squin.qubit.apply(dpl, q[0])
15
+ squin.qubit.apply(cx, q)
16
+ single_qubit_noise = squin.noise.single_qubit_pauli_channel([0.1, 0.12, 0.13])
17
+ squin.qubit.apply(single_qubit_noise, q[1])
18
+ two_qubit_noise = squin.noise.two_qubit_pauli_channel(
19
+ [
20
+ 0.036,
21
+ 0.007,
22
+ 0.035,
23
+ 0.022,
24
+ 0.063,
25
+ 0.024,
26
+ 0.006,
27
+ 0.033,
28
+ 0.014,
29
+ 0.019,
30
+ 0.023,
31
+ 0.058,
32
+ 0.0,
33
+ 0.0,
34
+ 0.064,
35
+ ]
36
+ )
37
+ squin.qubit.apply(two_qubit_noise, q)
38
+ squin.qubit.measure(q)
39
+
40
+ main.print()
41
+
42
+ circuit = squin.cirq.emit_circuit(main)
43
+
44
+ print(circuit)
45
+
46
+ if run_sim:
47
+ sim = cirq.Simulator()
48
+ sim.run(circuit)
49
+
50
+
51
+ def test_pauli_error(run_sim: bool = False):
52
+ @squin.kernel
53
+ def main():
54
+ q = squin.qubit.new(2)
55
+ x = squin.op.x()
56
+ n = squin.noise.pauli_error(x, 0.1)
57
+ squin.qubit.apply(n, q[0])
58
+ squin.qubit.measure(q)
59
+
60
+ main.print()
61
+
62
+ circuit = squin.cirq.emit_circuit(main)
63
+
64
+ print(circuit)
65
+
66
+ if run_sim:
67
+ sim = cirq.Simulator()
68
+ sim.run(circuit)
69
+
70
+
71
+ def test_pperror(run_sim: bool = False):
72
+ @squin.kernel
73
+ def main():
74
+ q = squin.qubit.new(3)
75
+ ps = squin.op.pauli_string(string="XYZ")
76
+ n = squin.noise.pp_error(ps, 0.1)
77
+ squin.qubit.apply(n, q)
78
+ squin.qubit.measure(q)
79
+
80
+ main.print()
81
+
82
+ circuit = squin.cirq.emit_circuit(main)
83
+
84
+ print(circuit)
85
+
86
+ if run_sim:
87
+ sim = cirq.Simulator()
88
+ sim.run(circuit)
@@ -96,7 +96,7 @@ wheels = [
96
96
 
97
97
  [[package]]
98
98
  name = "bloqade-circuit"
99
- version = "0.4.4"
99
+ version = "0.4.5"
100
100
  source = { editable = "." }
101
101
  dependencies = [
102
102
  { name = "kirin-toolchain" },
File without changes