bloqade-circuit 0.7.5__tar.gz → 0.7.6__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.
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/PKG-INFO +1 -1
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/pyproject.toml +1 -1
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/device.py +95 -5
- bloqade_circuit-0.7.6/src/bloqade/pyqrack/task.py +147 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/test_qrack.py +86 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/uv.lock +1 -1
- bloqade_circuit-0.7.5/src/bloqade/pyqrack/task.py +0 -53
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.github/dependabot.yml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.github/workflows/ci.yml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.github/workflows/isort.yml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.github/workflows/lint.yml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.github/workflows/release.yml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.gitignore +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/.pre-commit-config.yaml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/LICENSE +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/README.md +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/_typos.toml +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/justfile +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/address/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/address/analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/address/impls.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/address/lattice.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/fidelity/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/fidelity/analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/measure_id/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/measure_id/analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/measure_id/impls.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/analysis/measure_id/lattice.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/lineprog.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/_two_zone_utils.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/conflict_graph.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/model.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/transform.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/parallelize.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/device.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/_prelude.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/_interface.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/stdlib/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/stdlib/broadcast.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/stdlib/simple.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/native.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/noise/native.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/qasm2/core.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/qasm2/glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/qasm2/parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/qasm2/uop.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/reg.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/noise/native.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/op.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/qubit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/runtime.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/squin/wire.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/pyqrack/target.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/_qasm_loading.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/_wrappers.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/_emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/_typeinfer.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/address.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/_emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/_from_python.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/_interp.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/indexing.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/inline.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/noise/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/noise/fidelity.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/noise/model.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/noise/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/uop/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/uop/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/uop/_emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/uop/schedule.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/uop/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/gate.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/impls/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/impls/noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/main.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/emit/target.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/groups.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/ast.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/build.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/parser.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/print.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/qasm2.lark +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/visitor.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/parse/visitor.pyi +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/fold.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/lift_qubits.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/py2qasm.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/qasm2py.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/passes/unroll_if.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/desugar.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/insert_qubits.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/native_gates.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/noise/heuristic_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/noise/remove_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/parallel_to_glob.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/parallel_to_uop.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/register.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/rewrite/uop_to_parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/types.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qbraid/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qbraid/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qbraid/schema.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qbraid/simulation_result.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qbraid/target.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/passes/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/passes/canonicalize_ilist.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/rules/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/rules/flatten_ilist.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/rules/inline_getitem_ilist.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/rewrite/rules/split_ifs.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/_typeinfer.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/address_impl.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/nsites/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/nsites/analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/nsites/impls.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/nsites/lattice.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/analysis/schedule.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/emit/emit_circuit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/emit/noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/emit/op.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/emit/qubit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/emit/runtime.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/cirq/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/groups.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/noise/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/noise/_wrapper.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/noise/rewrite.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/noise/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/_wrapper.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/number.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/rewrite.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/stdlib.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/traits.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/op/types.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/qubit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/U3_to_clifford.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/canonicalize.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/desugar.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/remove_dangling_qubits.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/rewrite/wrap_analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/stdlib/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/stdlib/channel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/stdlib/gate.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/types.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/squin/wire.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/_wrappers.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/interp.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/stmts/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/stmts/annotate.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/stmts/const.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/auxiliary/types.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/emit_str.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/stmts/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/stmts/measure.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/stmts/pp_measure.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/collapse/stmts/reset.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/clifford_1q.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/clifford_2q.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/control_2q.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/gate/stmts/pp.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/noise/_dialect.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/noise/emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/dialects/noise/stmts.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/emit/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/emit/stim_str.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/groups.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/parse/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/parse/lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/passes/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/passes/simplify_ifs.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/passes/squin_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/ifs_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/py_constant_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/qubit_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/squin_measure.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/squin_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/util.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/wire_identity_elimination.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/rewrite/wire_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/upstream/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/stim/upstream/from_squin.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/task.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/test_utils.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/types.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/animate.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/gate_event.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/aod.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/atoms.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/ppoly.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/qpustate.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/visual/animation/runtime/utils.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/analysis/address/test_qubit_analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/analysis/address/test_wire_analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/analysis/address/util.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/analysis/fidelity/test_fidelity.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/analysis/measure_id/test_measure_id.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/noise/test_noise_models.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/noise/test_noisy_ghz.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/noise/test_one_zone_correlated_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/test_lpsolvers.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/test_parallelize.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/cirq_utils/test_transpile.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/native/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/native/test_stdlib.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/noise/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/noise/qasm2/test_loss.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/noise/qasm2/test_pauli.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/runtime/test_dyn_memory.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/squin/test_kernel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/squin/test_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/pyqrack/test_target.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/analysis/test_dag.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/emit/test_extended.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/emit/test_extended_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/emit/test_qasm2.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/emit/test_qasm2_emit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/invalid_programs/invalid_if.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/README.md +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/global.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/iqft1.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/main.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/noise.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/para.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/process_tomo.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/qelib1.inc +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/qft.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/qft2.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/rb.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/rep_code.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/ripple_carry_adder.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/tele.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/programs/valid_if.qasm +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/test_ast.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/parse/test_roundtrip.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_global_to_parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_global_to_uop.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_heuristic_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_parallel_to_global.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_parallel_to_uop.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_qasm2py.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_unroll_if.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/passes/test_uop_to_parallel.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/test_count.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/test_inline.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/test_lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/test_native.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qasm2/test_two2one.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qbraid/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qbraid/test_clean_circuit.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qbraid/test_lowering.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/qbraid/test_target.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/sample/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/sample/test_noise_model.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/analysis/test_nsites_analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/cirq/test_cirq_to_squin.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/cirq/test_squin_noise_to_cirq.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/cirq/test_squin_to_cirq.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/op/test_reset.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/rewrite/test_U3_to_clifford.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/rewrite/test_canonicalize.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/rewrite/test_desugar.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/rewrite/test_mult_rewrite.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/test_constprop.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/test_stdlib_shorthands.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/test_sugar.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/test_typeinfer.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/wire/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/squin/wire/test_check.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_1q.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_ctrl.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_detector.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_meas.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_obs_inc.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_ppmeas.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_qubit_coords.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/emit/test_stim_spp.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/test_stim_circuits.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/dialects/stim/test_stim_const.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/base.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse_clifford.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse_control.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse_custom.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse_noise.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/parse/test_parse_spp.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/apply_depolarize1.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/apply_loss.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/apply_pauli_channel_1.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize1.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_depolarize2.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_bit_flip_channel.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_phase_flip_channel.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_iid_y_flip_channel.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_many_qubits.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_1_reuse.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/broadcast_pauli_channel_2_reuse_on_4_qubits.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/noise/wire_apply_pauli_channel_1.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/pure_squin_rewrite.txt +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/addition_assignment_measure.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/alias_with_measure_list.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/complex_storage_index_order.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/for_loop_nontrivial_index.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/measure_desugar.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/nested_for_loop.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/nested_list.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/non_pure_loop_iterator.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/pick_if_else.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/qubit.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/qubit_broadcast.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/qubit_loss.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/qubit_reset.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/record_index_order.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/simple_if_rewrite.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/qubit/u3_to_clifford.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_apply.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_apply_control.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_broadcast.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_broadcast_control.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_measure.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_multiple_apply.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_qubit_loss.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/stim_reference_programs/wire/wire_reset.stim +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/test_squin_meas_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/test_squin_noise_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/test_squin_qubit_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/passes/test_squin_wire_to_stim.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/test_measure_id_analysis.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/wrapper/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/stim/wrapper/test_wrapper.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/test_serialization.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/test_zone_model.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/test/visual/__init__.py +0 -0
- {bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/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.7.
|
|
3
|
+
Version: 0.7.6
|
|
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,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, TypeVar, ParamSpec
|
|
1
|
+
from typing import Any, TypeVar, ParamSpec, NamedTuple
|
|
2
2
|
from dataclasses import field, dataclass
|
|
3
3
|
|
|
4
4
|
import numpy as np
|
|
@@ -28,9 +28,99 @@ RetType = TypeVar("RetType")
|
|
|
28
28
|
Params = ParamSpec("Params")
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
class QuantumState(NamedTuple):
|
|
32
|
+
"""
|
|
33
|
+
A representation of a quantum state as a density matrix, where the density matrix is
|
|
34
|
+
rho = sum_i eigenvalues[i] |eigenvectors[:,i]><eigenvectors[:,i]|.
|
|
35
|
+
|
|
36
|
+
This reprsentation is efficient for low-rank density matrices by only storing
|
|
37
|
+
the non-zero eigenvalues and corresponding eigenvectors of the density matrix.
|
|
38
|
+
For example, a pure state has only one non-zero eigenvalue equal to 1.0.
|
|
39
|
+
|
|
40
|
+
Endianness and qubit ordering of the state vector is consistent with Cirq, where
|
|
41
|
+
eigenvectors[0,0] corresponds to the amplitude of the |00..000> element of the zeroth eigenvector;
|
|
42
|
+
eigenvectors[1,0] corresponds to the amplitude of the |00..001> element of the zeroth eigenvector;
|
|
43
|
+
eigenvectors[3,0] corresponds to the amplitude of the |00..011> element of the zeroth eigenvector;
|
|
44
|
+
eigenvectors[-1,0] corresponds to the amplitude of the |11..111> element of the zeroth eigenvector.
|
|
45
|
+
A flip of the LAST bit |00..000><00..001| corresponds to applying a PauliX gate to the FIRST qubit.
|
|
46
|
+
A flip of the FIRST bit |00..000><10..000| corresponds to applying a PauliX gate to the LAST qubit.
|
|
47
|
+
|
|
48
|
+
Attributes:
|
|
49
|
+
eigenvalues (1d np.ndarray):
|
|
50
|
+
The non-zero eigenvalues of the density matrix.
|
|
51
|
+
eigenvectors (2d np.ndarray):
|
|
52
|
+
The corresponding eigenvectors of the density matrix,
|
|
53
|
+
where eigenvectors[:,i] is the i-th eigenvector.
|
|
54
|
+
Methods:
|
|
55
|
+
Not Implemented, pending https://github.com/QuEraComputing/bloqade-circuit/issues/447
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
eigenvalues: np.ndarray
|
|
59
|
+
eigenvectors: np.ndarray
|
|
60
|
+
|
|
61
|
+
def canonicalize(self, tol: float = 1e-12) -> "QuantumState":
|
|
62
|
+
raise NotImplementedError(
|
|
63
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def __add__(self, other: "QuantumState") -> "QuantumState":
|
|
67
|
+
raise NotImplementedError(
|
|
68
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
def __mul__(self, scalar: float) -> "QuantumState":
|
|
72
|
+
raise NotImplementedError(
|
|
73
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def dense(self) -> np.ndarray[tuple[int, int], np.complexfloating]:
|
|
78
|
+
raise NotImplementedError(
|
|
79
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
def __matmul__(self, right: "cirq.Circuit") -> "QuantumState": # noqa: F821
|
|
83
|
+
raise NotImplementedError(
|
|
84
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
def expect(self, operator: Any) -> float:
|
|
88
|
+
raise NotImplementedError(
|
|
89
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def probability(self) -> np.ndarray[tuple[int], np.floating]:
|
|
93
|
+
raise NotImplementedError(
|
|
94
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
def von_neumann_entropy(self) -> float:
|
|
98
|
+
raise NotImplementedError(
|
|
99
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def qubit_basis(self) -> list[PyQrackQubit]:
|
|
104
|
+
raise NotImplementedError(
|
|
105
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
def reduced_density_matrix(
|
|
109
|
+
self, qubits: list[PyQrackQubit], tol: float = 1e-12
|
|
110
|
+
) -> "QuantumState":
|
|
111
|
+
raise NotImplementedError(
|
|
112
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
def overlap(self, other: "QuantumState") -> complex:
|
|
116
|
+
raise NotImplementedError(
|
|
117
|
+
"https://github.com/QuEraComputing/bloqade-circuit/issues/447"
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
31
121
|
def _pyqrack_reduced_density_matrix(
|
|
32
122
|
inds: tuple[int, ...], sim_reg: QrackSimulator, tol: float = 1e-12
|
|
33
|
-
) ->
|
|
123
|
+
) -> QuantumState:
|
|
34
124
|
"""
|
|
35
125
|
Extract the reduced density matrix representing the state of a list
|
|
36
126
|
of qubits from a PyQRack simulator register.
|
|
@@ -73,7 +163,7 @@ def _pyqrack_reduced_density_matrix(
|
|
|
73
163
|
s = s[:, nonzero_inds]
|
|
74
164
|
v = v[nonzero_inds] ** 2
|
|
75
165
|
# Forge into the correct result type
|
|
76
|
-
result =
|
|
166
|
+
result = QuantumState(eigenvalues=v, eigenvectors=s)
|
|
77
167
|
return result
|
|
78
168
|
|
|
79
169
|
|
|
@@ -165,7 +255,7 @@ class PyQrackSimulatorBase(AbstractSimulatorDevice[PyQrackSimulatorTask]):
|
|
|
165
255
|
@staticmethod
|
|
166
256
|
def quantum_state(
|
|
167
257
|
qubits: list[PyQrackQubit] | IList[PyQrackQubit, Any], tol: float = 1e-12
|
|
168
|
-
) -> "
|
|
258
|
+
) -> "QuantumState":
|
|
169
259
|
"""
|
|
170
260
|
Extract the reduced density matrix representing the state of a list
|
|
171
261
|
of qubits from a PyQRack simulator register.
|
|
@@ -177,7 +267,7 @@ class PyQrackSimulatorBase(AbstractSimulatorDevice[PyQrackSimulatorTask]):
|
|
|
177
267
|
An eigh result containing the eigenvalues and eigenvectors of the reduced density matrix.
|
|
178
268
|
"""
|
|
179
269
|
if len(qubits) == 0:
|
|
180
|
-
return
|
|
270
|
+
return QuantumState(
|
|
181
271
|
eigenvalues=np.array([]), eigenvectors=np.array([]).reshape(0, 0)
|
|
182
272
|
)
|
|
183
273
|
sim_reg = qubits[0].sim_reg
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
from typing import TypeVar, ParamSpec, cast
|
|
2
|
+
from collections import Counter
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
from kirin.dialects.ilist import IList
|
|
7
|
+
|
|
8
|
+
from bloqade.task import AbstractSimulatorTask
|
|
9
|
+
from bloqade.pyqrack.reg import QubitState, PyQrackQubit
|
|
10
|
+
from bloqade.pyqrack.base import (
|
|
11
|
+
MemoryABC,
|
|
12
|
+
PyQrackInterpreter,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
RetType = TypeVar("RetType")
|
|
16
|
+
Param = ParamSpec("Param")
|
|
17
|
+
MemoryType = TypeVar("MemoryType", bound=MemoryABC)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class PyQrackSimulatorTask(AbstractSimulatorTask[Param, RetType, MemoryType]):
|
|
22
|
+
"""PyQrack simulator task for Bloqade."""
|
|
23
|
+
|
|
24
|
+
pyqrack_interp: PyQrackInterpreter[MemoryType]
|
|
25
|
+
|
|
26
|
+
def run(self) -> RetType:
|
|
27
|
+
return cast(
|
|
28
|
+
RetType,
|
|
29
|
+
self.pyqrack_interp.run(
|
|
30
|
+
self.kernel,
|
|
31
|
+
args=self.args,
|
|
32
|
+
kwargs=self.kwargs,
|
|
33
|
+
),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def state(self) -> MemoryType:
|
|
38
|
+
return self.pyqrack_interp.memory
|
|
39
|
+
|
|
40
|
+
def state_vector(self) -> list[complex]:
|
|
41
|
+
"""Returns the state vector of the simulator."""
|
|
42
|
+
self.run()
|
|
43
|
+
return self.state.sim_reg.out_ket()
|
|
44
|
+
|
|
45
|
+
def qubits(self) -> list[PyQrackQubit]:
|
|
46
|
+
"""Returns the qubits in the simulator."""
|
|
47
|
+
try:
|
|
48
|
+
N = self.state.sim_reg.num_qubits()
|
|
49
|
+
return [
|
|
50
|
+
PyQrackQubit(
|
|
51
|
+
addr=i, sim_reg=self.state.sim_reg, state=QubitState.Active
|
|
52
|
+
)
|
|
53
|
+
for i in range(N)
|
|
54
|
+
]
|
|
55
|
+
except AttributeError:
|
|
56
|
+
Warning("Task has not been run, there are no qubits!")
|
|
57
|
+
return []
|
|
58
|
+
|
|
59
|
+
def batch_run(self, shots: int = 1) -> dict[RetType, float]:
|
|
60
|
+
"""
|
|
61
|
+
Repeatedly run the task to collect statistics on the shot outcomes.
|
|
62
|
+
The average is done over [shots] repetitions and thus is frequentist
|
|
63
|
+
and converges to exact only in the shots -> infinity limit.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
shots (int):
|
|
67
|
+
the number of repetitions of the task
|
|
68
|
+
Returns:
|
|
69
|
+
dict[RetType, float]:
|
|
70
|
+
a dictionary mapping outcomes to their probabilities,
|
|
71
|
+
as estimated from counting the shot outcomes. RetType must be hashable.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
results: list[RetType] = [self.run() for _ in range(shots)]
|
|
75
|
+
|
|
76
|
+
# Convert IList to tuple so that it is hashable by Counter
|
|
77
|
+
def convert(data):
|
|
78
|
+
if isinstance(data, (list, IList)):
|
|
79
|
+
return tuple(convert(item) for item in data)
|
|
80
|
+
return data
|
|
81
|
+
|
|
82
|
+
results = convert(results)
|
|
83
|
+
|
|
84
|
+
data = {
|
|
85
|
+
key: value / len(results) for key, value in Counter(results).items()
|
|
86
|
+
} # Normalize to probabilities
|
|
87
|
+
return data
|
|
88
|
+
|
|
89
|
+
def batch_state(
|
|
90
|
+
self, shots: int = 1, qubit_map: None = None
|
|
91
|
+
) -> "QuantumState": # noqa: F821
|
|
92
|
+
"""
|
|
93
|
+
Repeatedly run the task to extract the averaged quantum state.
|
|
94
|
+
The average is done over [shots] repetitions and thus is frequentist
|
|
95
|
+
and converges to exact only in the shots -> infinity limit.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
shots (int):
|
|
99
|
+
the number of repetitions of the task
|
|
100
|
+
qubit_map (callable | None):
|
|
101
|
+
an optional callable that takes the output of self.run() and extract
|
|
102
|
+
the [returned] qubits to be used for the quantum state.
|
|
103
|
+
If None, all qubits in the simulator are used, in the order set by the simulator.
|
|
104
|
+
If callable, qubit_map must have the signature
|
|
105
|
+
> qubit_map(output:RetType) -> list[PyQrackQubit]
|
|
106
|
+
and the averaged state is
|
|
107
|
+
> quantum_state(qubit_map(self.run())).
|
|
108
|
+
If qubit_map is not None, self.run() must return qubit(s).
|
|
109
|
+
Two common patterns here are:
|
|
110
|
+
> qubit_map = lambda qubits: qubits
|
|
111
|
+
for the case where self.run() returns a list of qubits, or
|
|
112
|
+
> qubit_map = lambda qubit: [qubits]
|
|
113
|
+
for the case where self.run() returns a single qubit.
|
|
114
|
+
Returns:
|
|
115
|
+
QuantumState:
|
|
116
|
+
the averaged quantum state as a density matrix,
|
|
117
|
+
represented in its eigenbasis.
|
|
118
|
+
"""
|
|
119
|
+
# Import here to avoid circular dependencies.
|
|
120
|
+
from bloqade.pyqrack.device import QuantumState, PyQrackSimulatorBase
|
|
121
|
+
|
|
122
|
+
states: list[QuantumState] = []
|
|
123
|
+
for _ in range(shots):
|
|
124
|
+
res = self.run()
|
|
125
|
+
if callable(qubit_map):
|
|
126
|
+
qbs = qubit_map(res)
|
|
127
|
+
else:
|
|
128
|
+
qbs = self.qubits()
|
|
129
|
+
states.append(PyQrackSimulatorBase.quantum_state(qbs))
|
|
130
|
+
|
|
131
|
+
state = QuantumState(
|
|
132
|
+
eigenvectors=np.concatenate(
|
|
133
|
+
[state.eigenvectors for state in states], axis=1
|
|
134
|
+
),
|
|
135
|
+
eigenvalues=np.concatenate([state.eigenvalues for state in states], axis=0)
|
|
136
|
+
/ len(states),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Canonicalize the state by orthoganalizing the basis vectors.
|
|
140
|
+
tol = 1e-7
|
|
141
|
+
s, v, d = np.linalg.svd(
|
|
142
|
+
state.eigenvectors * np.sqrt(state.eigenvalues), full_matrices=False
|
|
143
|
+
)
|
|
144
|
+
mask = v > tol
|
|
145
|
+
v = v[mask] ** 2
|
|
146
|
+
s = s[:, mask]
|
|
147
|
+
return QuantumState(eigenvalues=v, eigenvectors=s)
|
|
@@ -366,3 +366,89 @@ def test_get_qubits():
|
|
|
366
366
|
|
|
367
367
|
qubits2 = task.qubits()
|
|
368
368
|
assert len(qubits2) == 6
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
def test_batch_run():
|
|
372
|
+
@squin.kernel
|
|
373
|
+
def coinflip():
|
|
374
|
+
qubit = squin.qubit.new(1)[0]
|
|
375
|
+
squin.gate.h(qubit)
|
|
376
|
+
return squin.qubit.measure(qubit)
|
|
377
|
+
|
|
378
|
+
emulator = StackMemorySimulator()
|
|
379
|
+
task = emulator.task(coinflip)
|
|
380
|
+
results: dict = task.batch_run(1000)
|
|
381
|
+
assert len(set(results.keys()).symmetric_difference({False, True})) == 0
|
|
382
|
+
assert results[True] + results[False] == 1.0
|
|
383
|
+
assert abs(results[True] - 0.5) < 0.1
|
|
384
|
+
assert abs(results[False] - 0.5) < 0.1
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def test_batch_run_IList_converter():
|
|
388
|
+
@squin.kernel
|
|
389
|
+
def coinflip():
|
|
390
|
+
qubit = squin.qubit.new(1)[0]
|
|
391
|
+
squin.gate.h(qubit)
|
|
392
|
+
return [squin.qubit.measure(qubit)]
|
|
393
|
+
|
|
394
|
+
emulator = StackMemorySimulator()
|
|
395
|
+
task = emulator.task(coinflip)
|
|
396
|
+
results: dict = task.batch_run(1000)
|
|
397
|
+
assert len(set(results.keys()).symmetric_difference({(False,), (True,)})) == 0
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def test_batch_state1():
|
|
401
|
+
"""
|
|
402
|
+
Averaging with no selector function
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
@squin.kernel
|
|
406
|
+
def coinflip():
|
|
407
|
+
qubit = squin.qubit.new(1)[0]
|
|
408
|
+
squin.gate.h(qubit)
|
|
409
|
+
return squin.qubit.measure(qubit)
|
|
410
|
+
|
|
411
|
+
emulator = StackMemorySimulator()
|
|
412
|
+
task = emulator.task(coinflip)
|
|
413
|
+
results = task.batch_state(1000)
|
|
414
|
+
assert results.eigenvalues.shape == (2,)
|
|
415
|
+
assert results.eigenvectors.shape == (2, 2)
|
|
416
|
+
assert np.isclose(sum(results.eigenvalues), 1)
|
|
417
|
+
assert abs(results.eigenvalues[0] - 0.5) < 0.1
|
|
418
|
+
assert abs(results.eigenvalues[1] - 0.5) < 0.1
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def test_batch_state2():
|
|
422
|
+
"""
|
|
423
|
+
Averaging with a qubit_map function
|
|
424
|
+
"""
|
|
425
|
+
|
|
426
|
+
@squin.kernel
|
|
427
|
+
def coinflip2():
|
|
428
|
+
qubit = squin.qubit.new(2)
|
|
429
|
+
squin.gate.h(qubit[0])
|
|
430
|
+
bit = squin.qubit.measure(
|
|
431
|
+
qubit[0]
|
|
432
|
+
) # Other (pythonic) sources of randomness are not possible, so some duct tape is required
|
|
433
|
+
if bit:
|
|
434
|
+
squin.gate.h(qubit[1])
|
|
435
|
+
return qubit[1]
|
|
436
|
+
|
|
437
|
+
emulator = StackMemorySimulator(min_qubits=2)
|
|
438
|
+
task = emulator.task(coinflip2)
|
|
439
|
+
|
|
440
|
+
results1 = task.batch_state(1000)
|
|
441
|
+
|
|
442
|
+
assert results1.eigenvalues.shape == (2,)
|
|
443
|
+
assert results1.eigenvectors.shape == (4, 2)
|
|
444
|
+
assert np.isclose(sum(results1.eigenvalues), 1)
|
|
445
|
+
assert abs(results1.eigenvalues[0] - 0.5) < 0.05
|
|
446
|
+
assert abs(results1.eigenvalues[1] - 0.5) < 0.05
|
|
447
|
+
|
|
448
|
+
results2 = task.batch_state(1000, qubit_map=lambda q: [q])
|
|
449
|
+
|
|
450
|
+
assert results2.eigenvalues.shape == (2,)
|
|
451
|
+
assert results2.eigenvectors.shape == (2, 2)
|
|
452
|
+
assert np.isclose(sum(results1.eigenvalues), 1)
|
|
453
|
+
assert abs(results2.eigenvalues[0] - 0.85355339) < 0.05
|
|
454
|
+
assert abs(results2.eigenvalues[1] - 0.14644661) < 0.05
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
from typing import TypeVar, ParamSpec, cast
|
|
2
|
-
from dataclasses import dataclass
|
|
3
|
-
|
|
4
|
-
from bloqade.task import AbstractSimulatorTask
|
|
5
|
-
from bloqade.pyqrack.reg import QubitState, PyQrackQubit
|
|
6
|
-
from bloqade.pyqrack.base import (
|
|
7
|
-
MemoryABC,
|
|
8
|
-
PyQrackInterpreter,
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
RetType = TypeVar("RetType")
|
|
12
|
-
Param = ParamSpec("Param")
|
|
13
|
-
MemoryType = TypeVar("MemoryType", bound=MemoryABC)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@dataclass
|
|
17
|
-
class PyQrackSimulatorTask(AbstractSimulatorTask[Param, RetType, MemoryType]):
|
|
18
|
-
"""PyQrack simulator task for Bloqade."""
|
|
19
|
-
|
|
20
|
-
pyqrack_interp: PyQrackInterpreter[MemoryType]
|
|
21
|
-
|
|
22
|
-
def run(self) -> RetType:
|
|
23
|
-
return cast(
|
|
24
|
-
RetType,
|
|
25
|
-
self.pyqrack_interp.run(
|
|
26
|
-
self.kernel,
|
|
27
|
-
args=self.args,
|
|
28
|
-
kwargs=self.kwargs,
|
|
29
|
-
),
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
@property
|
|
33
|
-
def state(self) -> MemoryType:
|
|
34
|
-
return self.pyqrack_interp.memory
|
|
35
|
-
|
|
36
|
-
def state_vector(self) -> list[complex]:
|
|
37
|
-
"""Returns the state vector of the simulator."""
|
|
38
|
-
self.run()
|
|
39
|
-
return self.state.sim_reg.out_ket()
|
|
40
|
-
|
|
41
|
-
def qubits(self) -> list[PyQrackQubit]:
|
|
42
|
-
"""Returns the qubits in the simulator."""
|
|
43
|
-
try:
|
|
44
|
-
N = self.state.sim_reg.num_qubits()
|
|
45
|
-
return [
|
|
46
|
-
PyQrackQubit(
|
|
47
|
-
addr=i, sim_reg=self.state.sim_reg, state=QubitState.Active
|
|
48
|
-
)
|
|
49
|
-
for i in range(N)
|
|
50
|
-
]
|
|
51
|
-
except AttributeError:
|
|
52
|
-
Warning("Task has not been run, there are no qubits!")
|
|
53
|
-
return []
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/_two_zone_utils.py
RENAMED
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/cirq_utils/noise/conflict_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/__init__.py
RENAMED
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/_dialect.py
RENAMED
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/native/dialects/gates/_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/core/_typeinfer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bloqade_circuit-0.7.5 → bloqade_circuit-0.7.6}/src/bloqade/qasm2/dialects/expr/_from_python.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|