bloqade-circuit 0.4.4__tar.gz → 0.5.0__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.
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.github/workflows/release.yml +1 -1
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.pre-commit-config.yaml +2 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/PKG-INFO +4 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/pyproject.toml +10 -2
- bloqade_circuit-0.5.0/src/bloqade/cirq_utils/__init__.py +7 -0
- bloqade_circuit-0.5.0/src/bloqade/cirq_utils/lineprog.py +295 -0
- bloqade_circuit-0.5.0/src/bloqade/cirq_utils/parallelize.py +400 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/op.py +7 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/runtime.py +4 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/stmts.py +2 -20
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/lowering.py +1 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/parallel.py +18 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/__init__.py +1 -0
- bloqade_circuit-0.5.0/src/bloqade/qasm2/rewrite/parallel_to_glob.py +82 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/__init__.py +1 -0
- bloqade_circuit-0.5.0/src/bloqade/squin/_typeinfer.py +20 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/nsites/impls.py +6 -1
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/__init__.py +74 -9
- bloqade_circuit-0.5.0/src/bloqade/squin/cirq/emit/noise.py +49 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/emit/runtime.py +9 -1
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/lowering.py +46 -27
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/noise/_wrapper.py +9 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/noise/rewrite.py +3 -3
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/__init__.py +1 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/_wrapper.py +4 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/stmts.py +20 -2
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/qubit.py +8 -5
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/rewrite/__init__.py +1 -0
- bloqade_circuit-0.5.0/src/bloqade/squin/rewrite/canonicalize.py +60 -0
- bloqade_circuit-0.5.0/src/bloqade/squin/rewrite/desugar.py +112 -0
- bloqade_circuit-0.5.0/src/bloqade/squin/types.py +8 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/wire.py +91 -5
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/__init__.py +1 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/_wrappers.py +4 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/noise/emit.py +1 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/noise/stmts.py +5 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/passes/squin_to_stim.py +16 -1
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/__init__.py +1 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/qubit_to_stim.py +10 -6
- bloqade_circuit-0.5.0/src/bloqade/stim/rewrite/squin_noise.py +120 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/util.py +44 -9
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/wire_to_stim.py +8 -3
- bloqade_circuit-0.5.0/test/cirq_utils/test_lpsolvers.py +35 -0
- bloqade_circuit-0.5.0/test/cirq_utils/test_parallelize.py +77 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/squin/test_kernel.py +16 -1
- bloqade_circuit-0.5.0/test/qasm2/passes/test_parallel_to_global.py +137 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/analysis/test_nsites_analysis.py +68 -74
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/cirq/test_cirq_to_squin.py +77 -1
- bloqade_circuit-0.5.0/test/squin/cirq/test_squin_noise_to_cirq.py +88 -0
- bloqade_circuit-0.5.0/test/squin/rewrite/test_canonicalize.py +54 -0
- bloqade_circuit-0.5.0/test/squin/rewrite/test_desugar.py +68 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/test_sugar.py +19 -0
- bloqade_circuit-0.5.0/test/squin/test_typeinfer.py +71 -0
- bloqade_circuit-0.5.0/test/squin/wire/test_check.py +28 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/test_stim_circuits.py +7 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse_custom.py +12 -0
- bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/qubit/qubit_loss.stim +5 -0
- bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/qubit/u3_to_clifford.stim +3 -0
- bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_qubit_loss.stim +8 -0
- bloqade_circuit-0.5.0/test/stim/passes/test_squin_noise_to_stim.py +151 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/passes/test_squin_qubit_to_stim.py +71 -5
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/passes/test_squin_wire_to_stim.py +57 -8
- bloqade_circuit-0.5.0/test/stim/wrapper/__init__.py +0 -0
- bloqade_circuit-0.5.0/test/visual/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/uv.lock +132 -9
- bloqade_circuit-0.4.4/src/bloqade/squin/rewrite/desugar.py +0 -65
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.github/dependabot.yml +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.github/workflows/ci.yml +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.github/workflows/isort.yml +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.github/workflows/lint.yml +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/.gitignore +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/LICENSE +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/README.md +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/_typos.toml +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/justfile +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/address/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/address/analysis.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/address/impls.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/address/lattice.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/fidelity/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/analysis/fidelity/analysis.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/device.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/device.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/noise/native.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/qasm2/core.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/qasm2/glob.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/qasm2/parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/qasm2/uop.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/reg.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/noise/native.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/qubit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/squin/wire.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/target.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/pyqrack/task.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/_qasm_loading.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/_wrappers.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/_emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/_typeinfer.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/address.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/core/stmts.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/_emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/_from_python.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/expr/_interp.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/glob.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/indexing.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/inline.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/noise/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/noise/fidelity.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/noise/model.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/noise/stmts.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/uop/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/uop/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/uop/_emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/uop/schedule.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/dialects/uop/stmts.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/gate.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/impls/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/impls/noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/main.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/emit/target.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/glob.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/groups.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/ast.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/build.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/parser.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/print.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/qasm2.lark +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/visitor.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/parse/visitor.pyi +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/fold.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/glob.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/lift_qubits.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/py2qasm.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/qasm2py.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/passes/unroll_if.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/desugar.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/glob.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/insert_qubits.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/native_gates.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/noise/heuristic_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/noise/remove_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/parallel_to_uop.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/register.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/split_ifs.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/rewrite/uop_to_parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qasm2/types.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qbraid/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qbraid/lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qbraid/schema.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qbraid/simulation_result.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/qbraid/target.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/nsites/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/nsites/analysis.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/nsites/lattice.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/analysis/schedule.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/emit/emit_circuit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/emit/op.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/cirq/emit/qubit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/groups.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/noise/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/noise/stmts.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/number.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/rewrite.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/stdlib.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/traits.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/op/types.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/rewrite/U3_to_clifford.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/rewrite/remove_dangling_qubits.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/squin/rewrite/wrap_analysis.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/interp.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/stmts/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/stmts/annotate.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/stmts/const.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/auxiliary/types.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/emit_str.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/stmts/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/stmts/measure.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/stmts/pp_measure.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/collapse/stmts/reset.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/clifford_1q.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/clifford_2q.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/control_2q.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/gate/stmts/pp.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/dialects/noise/_dialect.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/emit/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/emit/stim_str.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/groups.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/parse/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/parse/lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/passes/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/py_constant_to_stim.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/squin_measure.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/stim/rewrite/wire_identity_elimination.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/task.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/test_utils.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/types.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/animate.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/gate_event.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/aod.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/atoms.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/ppoly.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/qpustate.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/src/bloqade/visual/animation/runtime/utils.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/analysis/address/test_analysis.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/analysis/address/test_lattice.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/analysis/fidelity/test_fidelity.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/noise/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/noise/qasm2/test_loss.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/noise/qasm2/test_pauli.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/test_dyn_memory.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/runtime/test_qrack.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/squin/test_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/pyqrack/test_target.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/analysis/test_dag.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/emit/test_extended.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/emit/test_extended_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/emit/test_qasm2.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/emit/test_qasm2_emit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/invalid_programs/invalid_if.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/README.md +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/global.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/iqft1.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/main.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/noise.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/para.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/process_tomo.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/qelib1.inc +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/qft.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/qft2.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/rb.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/rep_code.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/ripple_carry_adder.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/tele.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/programs/valid_if.qasm +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/test_ast.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/parse/test_roundtrip.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_global_to_parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_global_to_uop.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_heuristic_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_parallel_to_uop.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_qasm2py.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_unroll_if.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/passes/test_uop_to_parallel.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/test_count.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/test_inline.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/test_lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/test_native.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qasm2/test_two2one.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qbraid/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qbraid/test_clean_circuit.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qbraid/test_lowering.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/qbraid/test_target.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/sample/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/sample/test_noise_model.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/cirq/test_squin_to_cirq.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/op/test_reset.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/rewrite/test_U3_to_clifford.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/rewrite/test_mult_rewrite.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/squin/test_constprop.py +0 -0
- {bloqade_circuit-0.4.4/test/stim → bloqade_circuit-0.5.0/test/squin/wire}/__init__.py +0 -0
- {bloqade_circuit-0.4.4/test/stim/dialects → bloqade_circuit-0.5.0/test/stim}/__init__.py +0 -0
- {bloqade_circuit-0.4.4/test/stim/dialects/stim → bloqade_circuit-0.5.0/test/stim/dialects}/__init__.py +0 -0
- {bloqade_circuit-0.4.4/test/stim/dialects/stim/emit → bloqade_circuit-0.5.0/test/stim/dialects/stim}/__init__.py +0 -0
- {bloqade_circuit-0.4.4/test/stim/parse → bloqade_circuit-0.5.0/test/stim/dialects/stim/emit}/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_1q.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_ctrl.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_detector.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_meas.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_obs_inc.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_ppmeas.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_qubit_coords.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/emit/test_stim_spp.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/dialects/stim/test_stim_const.py +0 -0
- {bloqade_circuit-0.4.4/test/stim/wrapper → bloqade_circuit-0.5.0/test/stim/parse}/__init__.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/base.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse_clifford.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse_control.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse_noise.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/parse/test_parse_spp.py +0 -0
- {bloqade_circuit-0.4.4/test/visual → bloqade_circuit-0.5.0/test/stim/passes}/__init__.py +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/qubit/qubit.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/qubit/qubit.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/qubit/qubit_reset.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/qubit/qubit_reset.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_apply.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_apply.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_apply_control.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_apply_control.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_broadcast.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_broadcast.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_measure.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_measure.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.stim +0 -0
- /bloqade_circuit-0.4.4/test/stim/passes/stim_reference_programs/wire/wire_reset.txt → /bloqade_circuit-0.5.0/test/stim/passes/stim_reference_programs/wire/wire_reset.stim +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/stim/wrapper/test_wrapper.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/test_serialization.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/test_zone_model.py +0 -0
- {bloqade_circuit-0.4.4 → bloqade_circuit-0.5.0}/test/visual/test_utils.py +0 -0
|
@@ -19,10 +19,10 @@ repos:
|
|
|
19
19
|
- id: black
|
|
20
20
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
|
21
21
|
# Ruff version.
|
|
22
|
-
rev: "v0.
|
|
22
|
+
rev: "v0.12.1"
|
|
23
23
|
hooks:
|
|
24
24
|
- id: ruff
|
|
25
25
|
- repo: https://github.com/crate-ci/typos
|
|
26
|
-
rev: v1
|
|
26
|
+
rev: v1
|
|
27
27
|
hooks:
|
|
28
28
|
- id: typos
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bloqade-circuit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
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
|
|
@@ -16,6 +16,7 @@ Requires-Dist: scipy>=1.13.1
|
|
|
16
16
|
Provides-Extra: cirq
|
|
17
17
|
Requires-Dist: cirq-core>=1.4.1; extra == 'cirq'
|
|
18
18
|
Requires-Dist: cirq-core[contrib]>=1.4.1; extra == 'cirq'
|
|
19
|
+
Requires-Dist: qpsolvers[clarabel]>=4.7.0; extra == 'cirq'
|
|
19
20
|
Provides-Extra: pyqrack-cuda
|
|
20
21
|
Requires-Dist: pyqrack-cuda>=1.38.2; extra == 'pyqrack-cuda'
|
|
21
22
|
Provides-Extra: pyqrack-opencl
|
|
@@ -29,7 +30,8 @@ Requires-Dist: stim>=1.15.0; extra == 'stim'
|
|
|
29
30
|
Provides-Extra: vis
|
|
30
31
|
Requires-Dist: ffmpeg>=1.4; extra == 'vis'
|
|
31
32
|
Requires-Dist: matplotlib>=3.9.2; extra == 'vis'
|
|
32
|
-
Requires-Dist: pyqt5>=5.15.11; extra == 'vis'
|
|
33
|
+
Requires-Dist: pyqt5>=5.15.11; (sys_platform == 'darwin') and extra == 'vis'
|
|
34
|
+
Requires-Dist: pyqt5>=5.15.11; (sys_platform == 'linux') and extra == 'vis'
|
|
33
35
|
Requires-Dist: tqdm>=4.66.5; extra == 'vis'
|
|
34
36
|
Description-Content-Type: text/markdown
|
|
35
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "bloqade-circuit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.5.0"
|
|
4
4
|
description = "The software development toolkit for neutral atom arrays."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -28,7 +28,8 @@ qasm2 = [
|
|
|
28
28
|
vis = [
|
|
29
29
|
"tqdm>=4.66.5",
|
|
30
30
|
"matplotlib>=3.9.2",
|
|
31
|
-
"pyqt5>=5.15.11",
|
|
31
|
+
"pyqt5>=5.15.11; sys_platform == 'darwin'",
|
|
32
|
+
"pyqt5>=5.15.11; sys_platform == 'linux'",
|
|
32
33
|
"ffmpeg>=1.4",
|
|
33
34
|
]
|
|
34
35
|
qbraid = [
|
|
@@ -37,6 +38,7 @@ qbraid = [
|
|
|
37
38
|
cirq = [
|
|
38
39
|
"cirq-core>=1.4.1",
|
|
39
40
|
"cirq-core[contrib]>=1.4.1",
|
|
41
|
+
"qpsolvers[clarabel]>=4.7.0",
|
|
40
42
|
]
|
|
41
43
|
pyqrack-opencl = [
|
|
42
44
|
"pyqrack>=1.38.2 ; sys_platform != 'darwin'",
|
|
@@ -83,6 +85,9 @@ dev-linux = [
|
|
|
83
85
|
"pyqt5>=5.15.11",
|
|
84
86
|
"tqdm>=4.67.1",
|
|
85
87
|
"stim>=1.15.0",
|
|
88
|
+
"cirq-core>=1.4.1",
|
|
89
|
+
"cirq-core[contrib]>=1.4.1",
|
|
90
|
+
"qpsolvers[clarabel]>=4.7.0",
|
|
86
91
|
]
|
|
87
92
|
dev-mac-arm = [
|
|
88
93
|
"cirq-core[contrib]>=1.4.1",
|
|
@@ -94,6 +99,9 @@ dev-mac-arm = [
|
|
|
94
99
|
"qbraid>=0.9.5",
|
|
95
100
|
"tqdm>=4.67.1",
|
|
96
101
|
"stim>=1.15.0",
|
|
102
|
+
"cirq-core>=1.4.1",
|
|
103
|
+
"cirq-core[contrib]>=1.4.1",
|
|
104
|
+
"qpsolvers[clarabel]>=4.7.0",
|
|
97
105
|
]
|
|
98
106
|
|
|
99
107
|
[tool.isort]
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import dataclasses
|
|
2
|
+
from typing import Union
|
|
3
|
+
from collections import Counter
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
import scipy.sparse
|
|
7
|
+
from qpsolvers import solve_qp
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Variable:
|
|
11
|
+
def __add__(
|
|
12
|
+
self, other: Union["Variable", "Expression", float, int]
|
|
13
|
+
) -> "Expression":
|
|
14
|
+
if isinstance(other, Variable):
|
|
15
|
+
return Expression({self: 1}) + Expression({other: 1})
|
|
16
|
+
elif isinstance(other, Expression):
|
|
17
|
+
return Expression({self: 1}) + other
|
|
18
|
+
elif isinstance(other, (float, int)):
|
|
19
|
+
return Expression({self: 1}) + Expression({None: other})
|
|
20
|
+
else:
|
|
21
|
+
raise TypeError(f"Cannot add {type(other)} to Variable")
|
|
22
|
+
|
|
23
|
+
def __radd__(self, left: float | int) -> "Expression":
|
|
24
|
+
return self.__add__(left)
|
|
25
|
+
|
|
26
|
+
def __sub__(
|
|
27
|
+
self, other: Union["Variable", "Expression", float, int]
|
|
28
|
+
) -> "Expression":
|
|
29
|
+
if isinstance(other, Variable):
|
|
30
|
+
return Expression({self: 1}) - Expression({other: 1})
|
|
31
|
+
elif isinstance(other, Expression):
|
|
32
|
+
return Expression({self: 1}) - other
|
|
33
|
+
elif isinstance(other, (float, int)):
|
|
34
|
+
return Expression({self: 1}) - Expression({None: other})
|
|
35
|
+
else:
|
|
36
|
+
raise TypeError(f"Cannot subtract {type(other)} from Variable")
|
|
37
|
+
|
|
38
|
+
def __rsub__(self, left: float | int) -> "Expression":
|
|
39
|
+
return self.__sub__(left)
|
|
40
|
+
|
|
41
|
+
def __neg__(self) -> "Expression":
|
|
42
|
+
return 0 - self
|
|
43
|
+
|
|
44
|
+
def __mul__(self, factor: float | int) -> "Expression":
|
|
45
|
+
if not isinstance(factor, (float, int)):
|
|
46
|
+
raise TypeError("Cannot multiply by non-numeric type")
|
|
47
|
+
return Expression({self: factor})
|
|
48
|
+
|
|
49
|
+
def __rmul__(self, factor: float | int) -> "Expression":
|
|
50
|
+
return self.__mul__(factor)
|
|
51
|
+
|
|
52
|
+
def __truediv__(self, factor: float | int) -> "Expression":
|
|
53
|
+
if not isinstance(factor, (float, int)):
|
|
54
|
+
raise TypeError("Cannot divide by non-numeric type")
|
|
55
|
+
return Expression({self: 1 / factor})
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclasses.dataclass(frozen=True)
|
|
59
|
+
class Expression:
|
|
60
|
+
coeffs: dict[Variable | None, float]
|
|
61
|
+
|
|
62
|
+
def get(self, key: Variable | None) -> float:
|
|
63
|
+
if key in self.coeffs:
|
|
64
|
+
return self.coeffs[key]
|
|
65
|
+
else:
|
|
66
|
+
return 0
|
|
67
|
+
|
|
68
|
+
def __getitem__(self, key: Variable | None) -> float:
|
|
69
|
+
return self.get(key)
|
|
70
|
+
|
|
71
|
+
def __add__(
|
|
72
|
+
self, other: Union["Expression", "Variable", float, int]
|
|
73
|
+
) -> "Expression":
|
|
74
|
+
if isinstance(other, Variable):
|
|
75
|
+
coeff = {key: val for key, val in self.coeffs.items()}
|
|
76
|
+
coeff[other] = coeff.get(other, 0) + 1
|
|
77
|
+
return Expression(coeffs=coeff)
|
|
78
|
+
elif isinstance(other, Expression):
|
|
79
|
+
coeff = {}
|
|
80
|
+
for key in set(self.coeffs.keys()).union(other.coeffs.keys()):
|
|
81
|
+
coeff[key] = self.coeffs.get(key, 0) + other.coeffs.get(key, 0)
|
|
82
|
+
return Expression(coeffs=coeff)
|
|
83
|
+
elif isinstance(other, (float, int)):
|
|
84
|
+
coeff = {key: val for key, val in self.coeffs.items()}
|
|
85
|
+
coeff[None] = coeff.get(None, 0) + other
|
|
86
|
+
return Expression(coeffs=coeff)
|
|
87
|
+
|
|
88
|
+
def __radd__(self, left: float | int) -> "Expression":
|
|
89
|
+
return self.__add__(left)
|
|
90
|
+
|
|
91
|
+
def __sub__(
|
|
92
|
+
self, other: Union["Expression", "Variable", float, int]
|
|
93
|
+
) -> "Expression":
|
|
94
|
+
if isinstance(other, Variable):
|
|
95
|
+
coeff = {key: val for key, val in self.coeffs.items()}
|
|
96
|
+
coeff[other] = coeff.get(other, 0) - 1
|
|
97
|
+
return Expression(coeffs=coeff)
|
|
98
|
+
elif isinstance(other, Expression):
|
|
99
|
+
coeff = {}
|
|
100
|
+
for key in set(self.coeffs.keys()).union(other.coeffs.keys()):
|
|
101
|
+
coeff[key] = self.coeffs.get(key, 0) - other.coeffs.get(key, 0)
|
|
102
|
+
return Expression(coeffs=coeff)
|
|
103
|
+
elif isinstance(other, (float, int)):
|
|
104
|
+
coeff = {key: val for key, val in self.coeffs.items()}
|
|
105
|
+
coeff[None] = coeff.get(None, 0) - other
|
|
106
|
+
return Expression(coeffs=coeff)
|
|
107
|
+
|
|
108
|
+
def __rsub__(self, left: float | int) -> "Expression":
|
|
109
|
+
return self.__sub__(left)
|
|
110
|
+
|
|
111
|
+
def __neg__(self) -> "Expression":
|
|
112
|
+
return 0 - self
|
|
113
|
+
|
|
114
|
+
def __mul__(self, factor: float | int) -> "Expression":
|
|
115
|
+
if not isinstance(factor, (float, int)):
|
|
116
|
+
raise TypeError("Cannot multiply by non-numeric type")
|
|
117
|
+
coeff = {key: factor * val for key, val in self.coeffs.items()}
|
|
118
|
+
return Expression(coeffs=coeff)
|
|
119
|
+
|
|
120
|
+
def __rmul__(self, factor: float | int) -> "Expression":
|
|
121
|
+
return self.__mul__(factor)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class Solution(dict[Variable, float]): ...
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@dataclasses.dataclass(frozen=False)
|
|
128
|
+
class LPProblem:
|
|
129
|
+
constraints_eqz: list[Expression] = dataclasses.field(default_factory=list)
|
|
130
|
+
constraints_gez: list[Expression] = dataclasses.field(default_factory=list)
|
|
131
|
+
linear_objective: Expression = dataclasses.field(
|
|
132
|
+
default_factory=lambda: Expression({})
|
|
133
|
+
)
|
|
134
|
+
quadratic_objective: list[Expression] = dataclasses.field(default_factory=list)
|
|
135
|
+
|
|
136
|
+
def add_gez(self, expr: Expression):
|
|
137
|
+
if isinstance(expr, (Expression, Variable)):
|
|
138
|
+
self.constraints_gez.append(expr)
|
|
139
|
+
elif expr < 0:
|
|
140
|
+
raise RuntimeError("No solution found")
|
|
141
|
+
|
|
142
|
+
def add_lez(self, expr: Expression):
|
|
143
|
+
if isinstance(expr, (Expression, Variable)):
|
|
144
|
+
self.constraints_gez.append(-expr)
|
|
145
|
+
elif expr > 0:
|
|
146
|
+
raise RuntimeError("No solution found")
|
|
147
|
+
|
|
148
|
+
def add_eqz(self, expr: Expression):
|
|
149
|
+
if isinstance(expr, (Expression, Variable)):
|
|
150
|
+
self.constraints_eqz.append(expr)
|
|
151
|
+
elif expr != 0:
|
|
152
|
+
raise RuntimeError("No solution found")
|
|
153
|
+
|
|
154
|
+
def add_linear(self, expr: Expression):
|
|
155
|
+
if isinstance(expr, (Expression, Variable)):
|
|
156
|
+
self.linear_objective += expr
|
|
157
|
+
else:
|
|
158
|
+
print("LP Program Warning: no variables in linear objective term")
|
|
159
|
+
|
|
160
|
+
def add_quadratic(self, expr: Expression):
|
|
161
|
+
if isinstance(expr, (Expression, Variable)):
|
|
162
|
+
self.quadratic_objective.append(expr)
|
|
163
|
+
else:
|
|
164
|
+
print("LP Program Warning: No variables in quadratic objective term")
|
|
165
|
+
|
|
166
|
+
def add_abs(self, expr: Expression):
|
|
167
|
+
"""
|
|
168
|
+
Use a slack variable to add an absolute value constraint.
|
|
169
|
+
"""
|
|
170
|
+
slack = Variable()
|
|
171
|
+
self.add_gez(slack - expr)
|
|
172
|
+
self.add_gez(slack + expr)
|
|
173
|
+
self.add_gez(1.0 * slack)
|
|
174
|
+
self.add_linear(1.0 * slack)
|
|
175
|
+
|
|
176
|
+
def __repr__(self):
|
|
177
|
+
payload = "A Linear programming problem with {:} inequalies, {:} equalities, {:} quadratic".format(
|
|
178
|
+
len(self.constraints_gez),
|
|
179
|
+
len(self.constraints_eqz),
|
|
180
|
+
len(self.quadratic_objective),
|
|
181
|
+
)
|
|
182
|
+
return payload
|
|
183
|
+
|
|
184
|
+
@property
|
|
185
|
+
def basis(self) -> list[Variable]:
|
|
186
|
+
all_vars = Counter()
|
|
187
|
+
for expr in self.constraints_eqz:
|
|
188
|
+
all_vars.update(expr.coeffs.keys())
|
|
189
|
+
for expr in self.constraints_gez:
|
|
190
|
+
all_vars.update(expr.coeffs.keys())
|
|
191
|
+
for expr in self.quadratic_objective:
|
|
192
|
+
all_vars.update(expr.coeffs.keys())
|
|
193
|
+
all_vars.update(self.linear_objective.coeffs.keys())
|
|
194
|
+
all_vars.pop(None, None) # The constant term is not a variable
|
|
195
|
+
all_vars = list(all_vars.keys())
|
|
196
|
+
return all_vars
|
|
197
|
+
|
|
198
|
+
def __add__(self, other: "LPProblem") -> "LPProblem":
|
|
199
|
+
if not isinstance(other, LPProblem):
|
|
200
|
+
raise TypeError(f"Cannot add {type(other)} to LPProblem")
|
|
201
|
+
return LPProblem(
|
|
202
|
+
constraints_eqz=self.constraints_eqz + other.constraints_eqz,
|
|
203
|
+
constraints_gez=self.constraints_gez + other.constraints_gez,
|
|
204
|
+
linear_objective=self.linear_objective + other.linear_objective,
|
|
205
|
+
quadratic_objective=self.quadratic_objective + other.quadratic_objective,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
def solve(self) -> Solution:
|
|
209
|
+
|
|
210
|
+
basis = self.basis
|
|
211
|
+
if len(basis) == 0:
|
|
212
|
+
return Solution()
|
|
213
|
+
|
|
214
|
+
# Generate the sparse matrix for each value...
|
|
215
|
+
# Inequality constraints
|
|
216
|
+
A_gez_dat = []
|
|
217
|
+
A_gez_i = []
|
|
218
|
+
A_gez_j = []
|
|
219
|
+
B_gez_dat = []
|
|
220
|
+
for k in range(len(self.constraints_gez)):
|
|
221
|
+
for key, val in self.constraints_gez[k].coeffs.items():
|
|
222
|
+
if key is not None:
|
|
223
|
+
A_gez_dat.append(val)
|
|
224
|
+
A_gez_i.append(k)
|
|
225
|
+
A_gez_j.append(basis.index(key))
|
|
226
|
+
B_gez_dat.append(self.constraints_gez[k].coeffs.get(None, 0))
|
|
227
|
+
|
|
228
|
+
# Equality constraints
|
|
229
|
+
A_eqz_dat = []
|
|
230
|
+
A_eqz_i = []
|
|
231
|
+
A_eqz_j = []
|
|
232
|
+
B_eqz_dat = []
|
|
233
|
+
for k in range(len(self.constraints_eqz)):
|
|
234
|
+
for key, val in self.constraints_eqz[k].coeffs.items():
|
|
235
|
+
if key is not None:
|
|
236
|
+
A_eqz_dat.append(val)
|
|
237
|
+
A_eqz_i.append(k)
|
|
238
|
+
A_eqz_j.append(basis.index(key))
|
|
239
|
+
B_eqz_dat.append(self.constraints_eqz[k].get(None))
|
|
240
|
+
|
|
241
|
+
# Linear objective
|
|
242
|
+
C_dat = [self.linear_objective.coeffs.get(key, 0) for key in basis]
|
|
243
|
+
|
|
244
|
+
# Quadratic objective
|
|
245
|
+
Q_dat = []
|
|
246
|
+
Q_i = []
|
|
247
|
+
Q_j = []
|
|
248
|
+
for k in range(len(self.quadratic_objective)):
|
|
249
|
+
for key1, val1 in self.quadratic_objective[k].coeffs.items():
|
|
250
|
+
for key2, val2 in self.quadratic_objective[k].coeffs.items():
|
|
251
|
+
if key1 is not None and key2 is not None:
|
|
252
|
+
Q_dat.append(val1 * val2)
|
|
253
|
+
Q_i.append(basis.index(key1))
|
|
254
|
+
Q_j.append(basis.index(key2))
|
|
255
|
+
elif key1 is None and key2 is not None:
|
|
256
|
+
C_dat[basis.index(key2)] += 0.5 * val1 * val2
|
|
257
|
+
elif key1 is not None and key2 is None:
|
|
258
|
+
C_dat[basis.index(key1)] += 0.5 * val1 * val2
|
|
259
|
+
elif key1 is None and key2 is None:
|
|
260
|
+
# This is the constant term and can be ignored
|
|
261
|
+
pass
|
|
262
|
+
else:
|
|
263
|
+
raise RuntimeError("I should never get here")
|
|
264
|
+
|
|
265
|
+
A_gez_mat = scipy.sparse.coo_matrix(
|
|
266
|
+
(A_gez_dat, (A_gez_i, A_gez_j)), shape=(len(B_gez_dat), len(basis))
|
|
267
|
+
).tocsc()
|
|
268
|
+
B_gez_vec = np.array(B_gez_dat)
|
|
269
|
+
|
|
270
|
+
A_eqz_mat = scipy.sparse.coo_matrix(
|
|
271
|
+
(A_eqz_dat, (A_eqz_i, A_eqz_j)), shape=(len(B_eqz_dat), len(basis))
|
|
272
|
+
).tocsc()
|
|
273
|
+
B_eqz_vec = np.array(B_eqz_dat)
|
|
274
|
+
|
|
275
|
+
C_vec = np.array(C_dat)
|
|
276
|
+
|
|
277
|
+
Q_mat = scipy.sparse.coo_matrix(
|
|
278
|
+
(Q_dat, (Q_i, Q_j)), shape=(len(basis), len(basis))
|
|
279
|
+
).tocsc()
|
|
280
|
+
|
|
281
|
+
# The quadratic problem uses slightly different variable symbols than
|
|
282
|
+
# scipy, which is why the letters are all off...
|
|
283
|
+
solution = solve_qp(
|
|
284
|
+
P=Q_mat,
|
|
285
|
+
q=C_vec,
|
|
286
|
+
G=-A_gez_mat,
|
|
287
|
+
h=B_gez_vec,
|
|
288
|
+
A=A_eqz_mat,
|
|
289
|
+
b=B_eqz_vec,
|
|
290
|
+
solver="clarabel",
|
|
291
|
+
)
|
|
292
|
+
if solution is None:
|
|
293
|
+
raise RuntimeError("No solution found")
|
|
294
|
+
|
|
295
|
+
return Solution(zip(basis, solution))
|