bloqade-circuit 0.6.7__py3-none-any.whl → 0.7.0__py3-none-any.whl
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/analysis/measure_id/analysis.py +10 -11
- bloqade/analysis/measure_id/impls.py +15 -2
- bloqade/cirq_utils/noise/__init__.py +0 -2
- bloqade/cirq_utils/noise/_two_zone_utils.py +7 -15
- bloqade/cirq_utils/noise/model.py +141 -188
- bloqade/cirq_utils/noise/transform.py +2 -2
- bloqade/pyqrack/device.py +96 -1
- bloqade/pyqrack/squin/qubit.py +4 -2
- bloqade/pyqrack/squin/runtime.py +14 -6
- bloqade/pyqrack/task.py +15 -0
- bloqade/rewrite/rules/split_ifs.py +18 -1
- bloqade/squin/cirq/emit/op.py +52 -1
- bloqade/squin/cirq/emit/qubit.py +4 -4
- bloqade/squin/cirq/lowering.py +3 -9
- bloqade/squin/gate.py +7 -0
- bloqade/squin/lowering.py +26 -0
- bloqade/squin/noise/__init__.py +0 -1
- bloqade/squin/noise/_wrapper.py +2 -6
- bloqade/squin/noise/rewrite.py +0 -11
- bloqade/squin/noise/stmts.py +2 -14
- bloqade/squin/op/_wrapper.py +4 -4
- bloqade/squin/op/stmts.py +33 -9
- bloqade/squin/op/types.py +104 -2
- bloqade/squin/qubit.py +27 -40
- bloqade/squin/rewrite/desugar.py +44 -66
- bloqade/stim/passes/squin_to_stim.py +21 -4
- bloqade/stim/rewrite/ifs_to_stim.py +6 -1
- bloqade/stim/rewrite/qubit_to_stim.py +1 -1
- bloqade/stim/rewrite/squin_noise.py +9 -7
- bloqade/stim/rewrite/util.py +15 -3
- {bloqade_circuit-0.6.7.dist-info → bloqade_circuit-0.7.0.dist-info}/METADATA +1 -1
- {bloqade_circuit-0.6.7.dist-info → bloqade_circuit-0.7.0.dist-info}/RECORD +34 -34
- {bloqade_circuit-0.6.7.dist-info → bloqade_circuit-0.7.0.dist-info}/WHEEL +0 -0
- {bloqade_circuit-0.6.7.dist-info → bloqade_circuit-0.7.0.dist-info}/licenses/LICENSE +0 -0
bloqade/squin/qubit.py
CHANGED
|
@@ -7,7 +7,7 @@ Depends on:
|
|
|
7
7
|
- `kirin.dialects.ilist`: provides the `ilist.IListType` type for lists of qubits.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from typing import Any, overload
|
|
10
|
+
from typing import Any, TypeVar, overload
|
|
11
11
|
|
|
12
12
|
from kirin import ir, types, lowering
|
|
13
13
|
from kirin.decl import info, statement
|
|
@@ -18,7 +18,7 @@ from bloqade.types import Qubit, QubitType
|
|
|
18
18
|
from bloqade.squin.op.types import Op, OpType
|
|
19
19
|
|
|
20
20
|
from .types import MeasurementResult, MeasurementResultType
|
|
21
|
-
from .lowering import ApplyAnyCallLowering
|
|
21
|
+
from .lowering import ApplyAnyCallLowering, BroadcastCallLowering
|
|
22
22
|
|
|
23
23
|
dialect = ir.Dialect("squin.qubit")
|
|
24
24
|
|
|
@@ -34,7 +34,7 @@ class New(ir.Statement):
|
|
|
34
34
|
class Apply(ir.Statement):
|
|
35
35
|
traits = frozenset({lowering.FromPythonCall()})
|
|
36
36
|
operator: ir.SSAValue = info.argument(OpType)
|
|
37
|
-
qubits: ir.SSAValue = info.argument(
|
|
37
|
+
qubits: tuple[ir.SSAValue, ...] = info.argument(QubitType)
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
@statement(dialect=dialect)
|
|
@@ -47,9 +47,9 @@ class ApplyAny(ir.Statement):
|
|
|
47
47
|
|
|
48
48
|
@statement(dialect=dialect)
|
|
49
49
|
class Broadcast(ir.Statement):
|
|
50
|
-
traits = frozenset({
|
|
50
|
+
traits = frozenset({BroadcastCallLowering()})
|
|
51
51
|
operator: ir.SSAValue = info.argument(OpType)
|
|
52
|
-
qubits: ir.SSAValue = info.argument(ilist.IListType[QubitType])
|
|
52
|
+
qubits: tuple[ir.SSAValue, ...] = info.argument(ilist.IListType[QubitType])
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
@statement(dialect=dialect)
|
|
@@ -93,26 +93,10 @@ def new(n_qubits: int) -> ilist.IList[Qubit, Any]:
|
|
|
93
93
|
...
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
@
|
|
97
|
-
def apply(operator: Op, qubits: ilist.IList[Qubit, Any] | list[Qubit]) -> None:
|
|
98
|
-
"""Apply an operator to a list of qubits.
|
|
99
|
-
|
|
100
|
-
Note, that when considering atom loss, lost qubits will be skipped.
|
|
101
|
-
|
|
102
|
-
Args:
|
|
103
|
-
operator: The operator to apply.
|
|
104
|
-
qubits: The list of qubits to apply the operator to. The size of the list
|
|
105
|
-
must be inferable and match the number of qubits expected by the operator.
|
|
106
|
-
|
|
107
|
-
Returns:
|
|
108
|
-
None
|
|
109
|
-
"""
|
|
110
|
-
...
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
@overload
|
|
96
|
+
@wraps(ApplyAny)
|
|
114
97
|
def apply(operator: Op, *qubits: Qubit) -> None:
|
|
115
|
-
"""Apply
|
|
98
|
+
"""Apply an operator to qubits. The number of qubit arguments must match the
|
|
99
|
+
size of the operator.
|
|
116
100
|
|
|
117
101
|
Note, that when considering atom loss, lost qubits will be skipped.
|
|
118
102
|
|
|
@@ -127,10 +111,6 @@ def apply(operator: Op, *qubits: Qubit) -> None:
|
|
|
127
111
|
...
|
|
128
112
|
|
|
129
113
|
|
|
130
|
-
@wraps(ApplyAny)
|
|
131
|
-
def apply(operator: Op, *qubits) -> None: ...
|
|
132
|
-
|
|
133
|
-
|
|
134
114
|
@overload
|
|
135
115
|
def measure(input: Qubit) -> MeasurementResult: ...
|
|
136
116
|
@overload
|
|
@@ -154,23 +134,30 @@ def measure(input: Any) -> Any:
|
|
|
154
134
|
...
|
|
155
135
|
|
|
156
136
|
|
|
137
|
+
OpSize = TypeVar("OpSize")
|
|
138
|
+
|
|
139
|
+
|
|
157
140
|
@wraps(Broadcast)
|
|
158
|
-
def broadcast(operator: Op, qubits: ilist.IList[Qubit,
|
|
159
|
-
"""Broadcast and apply an operator to
|
|
160
|
-
|
|
141
|
+
def broadcast(operator: Op, *qubits: ilist.IList[Qubit, OpSize] | list[Qubit]) -> None:
|
|
142
|
+
"""Broadcast and apply an operator to lists of qubits. The number of qubit lists must
|
|
143
|
+
match the size of the operator and the lists must be of same length. The operator is
|
|
144
|
+
then applied to the list elements similar to what python's map function does.
|
|
161
145
|
|
|
162
|
-
|
|
163
|
-
For example
|
|
146
|
+
## Usage examples
|
|
164
147
|
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
```
|
|
148
|
+
```python
|
|
149
|
+
from bloqade import squin
|
|
168
150
|
|
|
169
|
-
|
|
151
|
+
@squin.kernel
|
|
152
|
+
def ghz():
|
|
153
|
+
controls = squin.qubit.new(4)
|
|
154
|
+
targets = squin.qubit.new(4)
|
|
170
155
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
156
|
+
h = squin.op.h()
|
|
157
|
+
squin.qubit.broadcast(h, controls)
|
|
158
|
+
|
|
159
|
+
cx = squin.op.cx()
|
|
160
|
+
squin.qubit.broadcast(cx, controls, targets)
|
|
174
161
|
```
|
|
175
162
|
|
|
176
163
|
Args:
|
bloqade/squin/rewrite/desugar.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from warnings import warn
|
|
2
|
+
|
|
1
3
|
from kirin import ir, types
|
|
2
4
|
from kirin.dialects import py, ilist
|
|
3
5
|
from kirin.rewrite.abc import RewriteRule, RewriteResult
|
|
@@ -43,6 +45,8 @@ class MeasureDesugarRule(RewriteRule):
|
|
|
43
45
|
class ApplyDesugarRule(RewriteRule):
|
|
44
46
|
"""
|
|
45
47
|
Desugar apply operators in the kernel.
|
|
48
|
+
|
|
49
|
+
NOTE: this pass can be removed once we decide to disallow the syntax apply(op: Op, qubits: list)
|
|
46
50
|
"""
|
|
47
51
|
|
|
48
52
|
def rewrite_Statement(self, node: ir.Statement) -> RewriteResult:
|
|
@@ -53,72 +57,46 @@ class ApplyDesugarRule(RewriteRule):
|
|
|
53
57
|
op = node.operator
|
|
54
58
|
qubits = node.qubits
|
|
55
59
|
|
|
56
|
-
if len(qubits)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
qubits_ilist = qubits[0]
|
|
70
|
-
|
|
71
|
-
elif len(qubits) == 1:
|
|
72
|
-
# TODO: remove this elif clause once we're at kirin v0.18
|
|
73
|
-
# NOTE: this is a temporary workaround for kirin#408
|
|
74
|
-
# currently type inference fails here in for loops since the loop var
|
|
75
|
-
# is an IList for some reason
|
|
76
|
-
|
|
77
|
-
if not isinstance(qubits[0], ir.ResultValue):
|
|
78
|
-
return RewriteResult()
|
|
79
|
-
|
|
80
|
-
is_ilist = isinstance(qbit_stmt := qubits[0].stmt, ilist.New)
|
|
81
|
-
|
|
82
|
-
if is_ilist:
|
|
83
|
-
|
|
84
|
-
if not all(
|
|
85
|
-
isinstance(qbit_getindex_result, ir.ResultValue)
|
|
86
|
-
for qbit_getindex_result in qbit_stmt.values
|
|
87
|
-
):
|
|
88
|
-
return RewriteResult()
|
|
89
|
-
|
|
90
|
-
# Get the parent statement that the qubit came from
|
|
91
|
-
# (should be a GetItem instance, see logic below)
|
|
92
|
-
qbit_getindices = [
|
|
93
|
-
qbit_getindex_result.stmt
|
|
94
|
-
for qbit_getindex_result in qbit_stmt.values
|
|
95
|
-
]
|
|
96
|
-
else:
|
|
97
|
-
qbit_getindices = [qubit.stmt for qubit in qubits]
|
|
98
|
-
|
|
99
|
-
if any(
|
|
100
|
-
not isinstance(qbit_getindex, py.indexing.GetItem)
|
|
101
|
-
for qbit_getindex in qbit_getindices
|
|
102
|
-
):
|
|
103
|
-
return RewriteResult()
|
|
104
|
-
|
|
105
|
-
# The GetItem should have been applied on something that returns an IList of Qubits
|
|
106
|
-
if any(
|
|
107
|
-
not qbit_getindex.obj.type.is_subseteq(
|
|
108
|
-
ilist.IListType[QubitType, types.Any]
|
|
109
|
-
)
|
|
110
|
-
for qbit_getindex in qbit_getindices
|
|
111
|
-
):
|
|
112
|
-
return RewriteResult()
|
|
113
|
-
|
|
114
|
-
if is_ilist:
|
|
115
|
-
qubits_ilist = qbit_stmt.result
|
|
116
|
-
else:
|
|
117
|
-
(qubits_ilist_stmt := ilist.New(values=[qubits[0]])).insert_before(node)
|
|
118
|
-
qubits_ilist = qubits_ilist_stmt.result
|
|
119
|
-
else:
|
|
60
|
+
if len(qubits) == 0:
|
|
61
|
+
# NOTE: this is invalid syntax, but we don't error in rewrites
|
|
62
|
+
return RewriteResult()
|
|
63
|
+
|
|
64
|
+
if all(q.type.is_subseteq(QubitType) for q in qubits):
|
|
65
|
+
# NOTE: this is the syntax we want; the entire rewrite becomes unnecessary
|
|
66
|
+
# once we disallow the old syntax (just wrap Apply directly)
|
|
67
|
+
apply_stmt = Apply(op, qubits)
|
|
68
|
+
node.replace_by(apply_stmt)
|
|
69
|
+
return RewriteResult(has_done_something=True)
|
|
70
|
+
|
|
71
|
+
if len(qubits) > 1:
|
|
72
|
+
# NOTE: multiple arguments, that aren't qubits, let's bail
|
|
120
73
|
return RewriteResult()
|
|
121
74
|
|
|
122
|
-
|
|
123
|
-
|
|
75
|
+
qubit_type = qubits[0].type
|
|
76
|
+
is_qubit_list = qubit_type.is_subseteq(ilist.IListType[QubitType, types.Any])
|
|
77
|
+
|
|
78
|
+
if not is_qubit_list:
|
|
79
|
+
return RewriteResult()
|
|
80
|
+
|
|
81
|
+
# NOTE: deprecated syntax: we have a single list of qubits here
|
|
82
|
+
warn(
|
|
83
|
+
"The syntax `apply(operator: Op, qubits: list[Qubit])` is deprecated and may already lead to errors. Use `apply(operator: Op, *qubits: Qubit)` instead."
|
|
84
|
+
)
|
|
85
|
+
if not isinstance(qubit_type.vars[1], types.Literal):
|
|
86
|
+
# NOTE: unknown size, nothing we can do here, it will probably error down the road somewhere
|
|
87
|
+
return RewriteResult()
|
|
88
|
+
|
|
89
|
+
n = qubit_type.vars[1].data
|
|
90
|
+
if not isinstance(n, int):
|
|
91
|
+
# wat?
|
|
92
|
+
return RewriteResult()
|
|
93
|
+
|
|
94
|
+
qubits_rewrite = []
|
|
95
|
+
for i in range(n):
|
|
96
|
+
(idx := py.Constant(i)).insert_before(node)
|
|
97
|
+
(get_item := py.GetItem(qubits[0], idx.result)).insert_before(node)
|
|
98
|
+
qubits_rewrite.append(get_item.result)
|
|
99
|
+
|
|
100
|
+
apply_stmt = Apply(op, tuple(qubits_rewrite))
|
|
101
|
+
node.replace_by(apply_stmt)
|
|
124
102
|
return RewriteResult(has_done_something=True)
|
|
@@ -17,6 +17,7 @@ from kirin.passes.abc import Pass
|
|
|
17
17
|
from kirin.rewrite.abc import RewriteResult
|
|
18
18
|
from kirin.passes.inline import InlinePass
|
|
19
19
|
from kirin.rewrite.alias import InlineAlias
|
|
20
|
+
from kirin.dialects.scf.unroll import PickIfElse
|
|
20
21
|
|
|
21
22
|
from bloqade.stim.rewrite import (
|
|
22
23
|
SquinWireToStim,
|
|
@@ -34,7 +35,7 @@ from bloqade.squin.rewrite import (
|
|
|
34
35
|
from bloqade.rewrite.passes import CanonicalizeIList
|
|
35
36
|
from bloqade.analysis.address import AddressAnalysis
|
|
36
37
|
from bloqade.analysis.measure_id import MeasurementIDAnalysis
|
|
37
|
-
from bloqade.squin.rewrite.desugar import ApplyDesugarRule
|
|
38
|
+
from bloqade.squin.rewrite.desugar import ApplyDesugarRule, MeasureDesugarRule
|
|
38
39
|
|
|
39
40
|
from .simplify_ifs import StimSimplifyIfs
|
|
40
41
|
from ..rewrite.ifs_to_stim import IfToStim
|
|
@@ -91,7 +92,11 @@ class SquinToStimPass(Pass):
|
|
|
91
92
|
Walk(Fixpoint(CFGCompactify())).rewrite(mt.code).join(rewrite_result)
|
|
92
93
|
)
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
rewrite_result = (
|
|
96
|
+
Walk(Chain(InlineAlias(), PickIfElse()))
|
|
97
|
+
.rewrite(mt.code)
|
|
98
|
+
.join(rewrite_result)
|
|
99
|
+
)
|
|
95
100
|
|
|
96
101
|
rewrite_result = (
|
|
97
102
|
StimSimplifyIfs(mt.dialects, no_raise=self.no_raise)
|
|
@@ -112,8 +117,20 @@ class SquinToStimPass(Pass):
|
|
|
112
117
|
.join(rewrite_result)
|
|
113
118
|
)
|
|
114
119
|
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
rewrite_result = TypeInfer(
|
|
121
|
+
dialects=mt.dialects, no_raise=self.no_raise
|
|
122
|
+
).unsafe_run(mt)
|
|
123
|
+
|
|
124
|
+
rewrite_result = (
|
|
125
|
+
Walk(
|
|
126
|
+
Chain(
|
|
127
|
+
ApplyDesugarRule(),
|
|
128
|
+
MeasureDesugarRule(),
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
.rewrite(mt.code)
|
|
132
|
+
.join(rewrite_result)
|
|
133
|
+
)
|
|
117
134
|
|
|
118
135
|
# after this the program should be in a state where it is analyzable
|
|
119
136
|
# -------------------------------------------------------------------
|
|
@@ -170,7 +170,12 @@ class IfToStim(IfElseSimplification, RewriteRule):
|
|
|
170
170
|
get_record_stmt = GetRecord(id=measure_id_idx_stmt.result) # noqa: F841
|
|
171
171
|
|
|
172
172
|
# get address attribute and generate qubit idx statements
|
|
173
|
-
|
|
173
|
+
if len(apply_or_broadcast.qubits) != 1:
|
|
174
|
+
# NOTE: this is actually invalid since we are dealing with single-qubit operators here
|
|
175
|
+
return RewriteResult()
|
|
176
|
+
|
|
177
|
+
address_attr = apply_or_broadcast.qubits[0].hints.get("address")
|
|
178
|
+
|
|
174
179
|
if address_attr is None:
|
|
175
180
|
return RewriteResult()
|
|
176
181
|
assert isinstance(address_attr, AddressAttribute)
|
|
@@ -19,13 +19,13 @@ class SquinNoiseToStim(RewriteRule):
|
|
|
19
19
|
|
|
20
20
|
def rewrite_Statement(self, node: Statement) -> RewriteResult:
|
|
21
21
|
match node:
|
|
22
|
-
case qubit.Apply() | qubit.Broadcast():
|
|
22
|
+
case qubit.Apply() | qubit.Broadcast() | wire.Apply() | wire.Broadcast():
|
|
23
23
|
return self.rewrite_Apply_and_Broadcast(node)
|
|
24
24
|
case _:
|
|
25
25
|
return RewriteResult()
|
|
26
26
|
|
|
27
27
|
def rewrite_Apply_and_Broadcast(
|
|
28
|
-
self, stmt: qubit.Apply | qubit.Broadcast
|
|
28
|
+
self, stmt: qubit.Apply | qubit.Broadcast | wire.Apply | wire.Broadcast
|
|
29
29
|
) -> RewriteResult:
|
|
30
30
|
"""Rewrite Apply and Broadcast to their stim statements."""
|
|
31
31
|
|
|
@@ -37,20 +37,22 @@ class SquinNoiseToStim(RewriteRule):
|
|
|
37
37
|
|
|
38
38
|
if isinstance(applied_op, squin_noise.stmts.NoiseChannel):
|
|
39
39
|
|
|
40
|
+
rewrite_method = getattr(self, f"rewrite_{type(applied_op).__name__}", None)
|
|
41
|
+
# No rewrite method exists and the rewrite should stop
|
|
42
|
+
if rewrite_method is None:
|
|
43
|
+
return RewriteResult()
|
|
44
|
+
|
|
40
45
|
qubit_idx_ssas = insert_qubit_idx_after_apply(stmt=stmt)
|
|
41
46
|
if qubit_idx_ssas is None:
|
|
42
47
|
return RewriteResult()
|
|
43
48
|
|
|
44
|
-
rewrite_method = getattr(self, f"rewrite_{type(applied_op).__name__}")
|
|
45
49
|
stim_stmt = rewrite_method(stmt, qubit_idx_ssas)
|
|
46
50
|
|
|
47
51
|
if isinstance(stmt, (wire.Apply, wire.Broadcast)):
|
|
48
52
|
create_wire_passthrough(stmt)
|
|
49
53
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if len(stmt.operator.owner.result.uses) == 0:
|
|
53
|
-
stmt.operator.owner.delete()
|
|
54
|
+
# guaranteed that you have a valid stim_stmt to plug in
|
|
55
|
+
stmt.replace_by(stim_stmt)
|
|
54
56
|
|
|
55
57
|
return RewriteResult(has_done_something=True)
|
|
56
58
|
return RewriteResult()
|
bloqade/stim/rewrite/util.py
CHANGED
|
@@ -106,9 +106,21 @@ def insert_qubit_idx_after_apply(
|
|
|
106
106
|
"""
|
|
107
107
|
if isinstance(stmt, (qubit.Apply, qubit.Broadcast)):
|
|
108
108
|
qubits = stmt.qubits
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
if len(qubits) == 1:
|
|
110
|
+
address_attribute = qubits[0].hints.get("address")
|
|
111
|
+
if address_attribute is None:
|
|
112
|
+
return
|
|
113
|
+
else:
|
|
114
|
+
address_attribute_data = []
|
|
115
|
+
for qbit in qubits:
|
|
116
|
+
address_attribute = qbit.hints.get("address")
|
|
117
|
+
if not isinstance(address_attribute, AddressAttribute):
|
|
118
|
+
return
|
|
119
|
+
address_attribute_data.append(address_attribute.address)
|
|
120
|
+
address_attribute = AddressAttribute(
|
|
121
|
+
AddressTuple(data=tuple(address_attribute_data))
|
|
122
|
+
)
|
|
123
|
+
|
|
112
124
|
assert isinstance(address_attribute, AddressAttribute)
|
|
113
125
|
return insert_qubit_idx_from_address(
|
|
114
126
|
address=address_attribute, stmt_to_insert_before=stmt
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bloqade-circuit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.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
|
|
@@ -10,23 +10,23 @@ bloqade/analysis/address/lattice.py,sha256=dUq999feqPoBYkqEXe1hjHOn4TP_bkvKip8fy
|
|
|
10
10
|
bloqade/analysis/fidelity/__init__.py,sha256=iJkhoHvCMU9bKxQqgxIWKQWvpqNFRgNBI5DK8-4RAB8,59
|
|
11
11
|
bloqade/analysis/fidelity/analysis.py,sha256=G6JEYc8eeWJ9mwsbUAIzXuU2nrnTU4te41c04xE71gM,3218
|
|
12
12
|
bloqade/analysis/measure_id/__init__.py,sha256=r_R_br1e3H7ZzwkeQw4TnDAP4M_bUaRlRb7ZRdowvNI,145
|
|
13
|
-
bloqade/analysis/measure_id/analysis.py,sha256=
|
|
14
|
-
bloqade/analysis/measure_id/impls.py,sha256=
|
|
13
|
+
bloqade/analysis/measure_id/analysis.py,sha256=D8KcV8aL1yrqKhtqgaqMArX-PGXYcFXumEC5tx36plU,1974
|
|
14
|
+
bloqade/analysis/measure_id/impls.py,sha256=q_HKSxptGfOvvGrRcpl42UGoe7eRL2-5dIGiA0tDyrA,6866
|
|
15
15
|
bloqade/analysis/measure_id/lattice.py,sha256=WPrn0R79umCH909BFWsUJ64qx9n_3KYimIW5UaXNuGU,1891
|
|
16
16
|
bloqade/cirq_utils/__init__.py,sha256=1DRDCF3PpgJCOr0z7iULdrn3dqm7GLpRGs9AlqE7XA8,280
|
|
17
17
|
bloqade/cirq_utils/lineprog.py,sha256=JosrhfeOHI9FycUT_sYFj8TBzLpo97TL8zK-Ap2U4eQ,11021
|
|
18
18
|
bloqade/cirq_utils/parallelize.py,sha256=E2MsPm61Dkm3n0v4EFPJFGOc4B_Aw01yfhu-ViOKGiA,13812
|
|
19
|
-
bloqade/cirq_utils/noise/__init__.py,sha256=
|
|
20
|
-
bloqade/cirq_utils/noise/_two_zone_utils.py,sha256=
|
|
19
|
+
bloqade/cirq_utils/noise/__init__.py,sha256=hUBi53U0wE4u3AqGh5cNdgdCspt3O-Vw-SR68cfBZYc,421
|
|
20
|
+
bloqade/cirq_utils/noise/_two_zone_utils.py,sha256=iq4nwdJQITFlGB61wfrV7vyPA2194p-i_nv36powZ90,17883
|
|
21
21
|
bloqade/cirq_utils/noise/conflict_graph.py,sha256=ZUwPWTknrb6SgtZUVPeICn3YA-nUeWQJDuKKX5jL9tE,7179
|
|
22
|
-
bloqade/cirq_utils/noise/model.py,sha256=
|
|
23
|
-
bloqade/cirq_utils/noise/transform.py,sha256=
|
|
22
|
+
bloqade/cirq_utils/noise/model.py,sha256=8qovvB50oHzDszXkuMAs2I9BQV3eS1IU2D7Wux_dsGE,18459
|
|
23
|
+
bloqade/cirq_utils/noise/transform.py,sha256=pauFnOKbk2QjxeyXEV_x2zyRGypr5wiQ6ySirU7C2zg,2278
|
|
24
24
|
bloqade/pyqrack/__init__.py,sha256=lonTS-luJkTVujCCtgdZRC12V7FQdoFcozAI-byXwN0,810
|
|
25
25
|
bloqade/pyqrack/base.py,sha256=g0GRlEgyJ_P8z-lR8RK2CAuRTj6KPfglKX0iwrgg4DM,4408
|
|
26
|
-
bloqade/pyqrack/device.py,sha256
|
|
26
|
+
bloqade/pyqrack/device.py,sha256=-zlr1lSzOvcj5l28nnevy1oMYct79DTOdLYyGaT2Yco,11567
|
|
27
27
|
bloqade/pyqrack/reg.py,sha256=uTL07CT1R0xUsInLmwU9YuuNdV6lV0lCs1zhdUz1qIs,1660
|
|
28
28
|
bloqade/pyqrack/target.py,sha256=c78VtLWAiDNp_0sXwvVzhaEoeFsr1fUVsupxWuo6p3s,3661
|
|
29
|
-
bloqade/pyqrack/task.py,sha256=
|
|
29
|
+
bloqade/pyqrack/task.py,sha256=hzMueE03C-MR_-ti_5Z0lqFZcHDVCxmQHFaX9tPNm2o,1522
|
|
30
30
|
bloqade/pyqrack/noise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
bloqade/pyqrack/noise/native.py,sha256=BmRlRzqCzvSgfSsDlIjuB8L0gx4uaPqmPyfJ5-Ole6M,2751
|
|
32
32
|
bloqade/pyqrack/qasm2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -36,8 +36,8 @@ bloqade/pyqrack/qasm2/parallel.py,sha256=ITetuXOH2KUDpDOBuFnJoz2DhduvyBC72cOAOOi
|
|
|
36
36
|
bloqade/pyqrack/qasm2/uop.py,sha256=bLZONsEK15ymFGIQwy7muQv-TX0mvLrECuMp1Y3XTfA,8612
|
|
37
37
|
bloqade/pyqrack/squin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
bloqade/pyqrack/squin/op.py,sha256=m9QiQgQnKy1tYvrieU6MjXf_b9i2fovj4r2novcQwIc,5535
|
|
39
|
-
bloqade/pyqrack/squin/qubit.py,sha256=
|
|
40
|
-
bloqade/pyqrack/squin/runtime.py,sha256=
|
|
39
|
+
bloqade/pyqrack/squin/qubit.py,sha256=IXoAN_wOAzmKsKMKUakTQd_TbeJrFrtvH5Fd9SlQVLo,2277
|
|
40
|
+
bloqade/pyqrack/squin/runtime.py,sha256=3iVCN3XMUL8uk-bm0y4HSaVU7i5xZsNm5sY285rUKQE,15583
|
|
41
41
|
bloqade/pyqrack/squin/wire.py,sha256=rqlAeU-r_EHOwJMqHrEAxpZ_rKsvUpwGG7MP4BW75Nw,1658
|
|
42
42
|
bloqade/pyqrack/squin/noise/__init__.py,sha256=uXgRQPOrHNRp3k2ff2HD8mheUEaqxZPKEnwV-s4BiV4,31
|
|
43
43
|
bloqade/pyqrack/squin/noise/native.py,sha256=KF4VGzU5Ps92DeLcIDIMsxQQtQ97z_3KUHqBPPkZFaM,2286
|
|
@@ -124,14 +124,14 @@ bloqade/rewrite/passes/canonicalize_ilist.py,sha256=LmX09aPjagT6NzU-M87V8kZaCGkY
|
|
|
124
124
|
bloqade/rewrite/rules/__init__.py,sha256=3e1Z5T3INqNtP6OU0Vivu_SdMOR_2KDixeA0Yjoddgg,82
|
|
125
125
|
bloqade/rewrite/rules/flatten_ilist.py,sha256=QoIxMaBXSlatpWzi5s_MAPnV3bV3GeoWc31RBw0WQ3s,1465
|
|
126
126
|
bloqade/rewrite/rules/inline_getitem_ilist.py,sha256=uIXQRCsr3_GPMciDT4ghI-ezhQmkDcGcC6pguABPUVw,875
|
|
127
|
-
bloqade/rewrite/rules/split_ifs.py,sha256=
|
|
127
|
+
bloqade/rewrite/rules/split_ifs.py,sha256=KhwvUx-oBrBO2F1j-J5kwNbdnrnEZcZtJflzyQm-UOI,2613
|
|
128
128
|
bloqade/squin/__init__.py,sha256=b7ZD69ql9GriIPxN6JhWxANJVzuIJh_r-gC24wsW1mM,621
|
|
129
129
|
bloqade/squin/_typeinfer.py,sha256=bilWfC6whTMwewFCqDgB6vDHZsgXPr3azNOYqqnvtB4,780
|
|
130
|
-
bloqade/squin/gate.py,sha256=
|
|
130
|
+
bloqade/squin/gate.py,sha256=NEmdr6ZTdaVDc4onB0ref-r-4T9fxyYosiX0DVuQJOo,4162
|
|
131
131
|
bloqade/squin/groups.py,sha256=RXGJnNZUSXF_f5ljjhZ9At8UhaijayoxFoWvxEsUOWc,1310
|
|
132
|
-
bloqade/squin/lowering.py,sha256=
|
|
132
|
+
bloqade/squin/lowering.py,sha256=bfrPjx6t2mnd1qoBshF_RW-FXMWg3TOUA6XKUeONyig,2560
|
|
133
133
|
bloqade/squin/parallel.py,sha256=X6Ps9kQIgnFMlZO14y2ntdxvivqbIP28PAWF8KmxByM,5172
|
|
134
|
-
bloqade/squin/qubit.py,sha256=
|
|
134
|
+
bloqade/squin/qubit.py,sha256=cRy2a2jFLlor4KPHWk_05fMqr8Gmj5ixk624dLdWKmY,4911
|
|
135
135
|
bloqade/squin/types.py,sha256=T3lkqid4HEWuAK_wRns_p-K5DbLDwlldoyZtVay7A3o,119
|
|
136
136
|
bloqade/squin/wire.py,sha256=GZhF0EHCu7OU70zTV_N83yann-eQnYG_lM2u0QYFoAs,6596
|
|
137
137
|
bloqade/squin/analysis/__init__.py,sha256=DvnFHmEqMxRG92jVT3ZWwAQDTb6DC4fZDTV8ZSLZgP0,43
|
|
@@ -142,30 +142,30 @@ bloqade/squin/analysis/nsites/analysis.py,sha256=rIe1RU1MZRItcE2aB8DYahLrv73HfD3
|
|
|
142
142
|
bloqade/squin/analysis/nsites/impls.py,sha256=wSNWjNmgwCP35FgmreyLKmRYedxlebWi7LhsEq9jPs4,3097
|
|
143
143
|
bloqade/squin/analysis/nsites/lattice.py,sha256=ruh0808SHtj3ecuT-C3AZTsLY2j3DRhtezGiTZvcuVs,942
|
|
144
144
|
bloqade/squin/cirq/__init__.py,sha256=7OYYboSl5lPwdWOKk4AJgm1s1lBX_WAstVqPfaynSv8,10156
|
|
145
|
-
bloqade/squin/cirq/lowering.py,sha256=
|
|
145
|
+
bloqade/squin/cirq/lowering.py,sha256=trrcBDQQzy2r3JVKb2x6i2BdzBMYkjQNBzH_Va6JOu0,17789
|
|
146
146
|
bloqade/squin/cirq/emit/emit_circuit.py,sha256=JVFXiaSB7A9kamRwCjLqs03Sel4PVCBT-6kRNRWX-jo,4393
|
|
147
147
|
bloqade/squin/cirq/emit/noise.py,sha256=rESjGC_66s2Y4FwwYda4rY3mYHYjbqLlKE_vnqpZDYI,1534
|
|
148
|
-
bloqade/squin/cirq/emit/op.py,sha256=
|
|
149
|
-
bloqade/squin/cirq/emit/qubit.py,sha256=
|
|
148
|
+
bloqade/squin/cirq/emit/op.py,sha256=u1FoOlbz7NNXPlU-hMbnX_yRB5suKbsEm2jF3Ts4f68,5764
|
|
149
|
+
bloqade/squin/cirq/emit/qubit.py,sha256=FManFeDyi1l4Sd07IeD7Lb4xR-7jy5Nwe-quQHI1yPw,1984
|
|
150
150
|
bloqade/squin/cirq/emit/runtime.py,sha256=dH7JSMt2mALPhVFjmZETQzvnTUQ3BFY5poe0YZpM5vQ,6819
|
|
151
|
-
bloqade/squin/noise/__init__.py,sha256=
|
|
151
|
+
bloqade/squin/noise/__init__.py,sha256=JFJ4kmEeWt6bJ2xx3yA5ek-NEbj8ilYWf6mepgbJLOo,338
|
|
152
152
|
bloqade/squin/noise/_dialect.py,sha256=2IR98J-lXm5Y3srP9g-FD4JC-qTq2seureM6mKKq1xg,63
|
|
153
|
-
bloqade/squin/noise/_wrapper.py,sha256=
|
|
154
|
-
bloqade/squin/noise/rewrite.py,sha256=
|
|
155
|
-
bloqade/squin/noise/stmts.py,sha256
|
|
153
|
+
bloqade/squin/noise/_wrapper.py,sha256=yGiL_x5INGA_86A04Ra6aF-i1eYTk2JhvpJWIPSdUZ4,783
|
|
154
|
+
bloqade/squin/noise/rewrite.py,sha256=_6kGvxmbiMtL7MDHhLzgQnkq4SRthYA-cSKh_MBbC_U,4656
|
|
155
|
+
bloqade/squin/noise/stmts.py,sha256=-_BX18aJTALYehDMczehYd_cNwsixzuZbOXh5ZG8lFw,1686
|
|
156
156
|
bloqade/squin/op/__init__.py,sha256=6JOjPdzc6RKO4299ZFz4Jk-wtVyPlGTkakYewHBueXw,841
|
|
157
157
|
bloqade/squin/op/_dialect.py,sha256=66G1IYqmsqUEaCTyUqn2shSHmGYduiTU8GfDXcoMvw4,55
|
|
158
|
-
bloqade/squin/op/_wrapper.py,sha256=
|
|
158
|
+
bloqade/squin/op/_wrapper.py,sha256=XrEImj0M78u6imXq7SkckmWemziL7cM98FtoMj03l2M,1955
|
|
159
159
|
bloqade/squin/op/number.py,sha256=yujWUqLrOAr8i8OBDsiS5M882wV7t08u345NgNA6TUc,95
|
|
160
160
|
bloqade/squin/op/rewrite.py,sha256=Itxz_hTAPNLyLYeLS0PCVk143J1Z558UR7N9-urbnoU,1327
|
|
161
161
|
bloqade/squin/op/stdlib.py,sha256=4UFK3wKImpums2v5a9OFKuVvz2TLYbYwidg3JYYEi2o,1073
|
|
162
|
-
bloqade/squin/op/stmts.py,sha256=
|
|
162
|
+
bloqade/squin/op/stmts.py,sha256=DEV-hm9vNY2zMlnOZtWEOSQo-ByVFfW5EepCK0_tF1Y,6864
|
|
163
163
|
bloqade/squin/op/traits.py,sha256=jjsnzWtPtmQK7K3H_D2fvc8XiW1Y3EMBcgeyPax2sjc,1065
|
|
164
|
-
bloqade/squin/op/types.py,sha256=
|
|
164
|
+
bloqade/squin/op/types.py,sha256=xCFdaYZags7YvANUIlsv7VOIoj8iB1sGISe7NjDEH_o,2283
|
|
165
165
|
bloqade/squin/rewrite/U3_to_clifford.py,sha256=72ECWFrjeaEelR5e6IgNgaJXnTQ6ZXL4ZakZfXQbi8I,5670
|
|
166
166
|
bloqade/squin/rewrite/__init__.py,sha256=cY1GbXQXKvDeXi0YE4PgjORm6iGBPk63xzMCpVjiCgw,349
|
|
167
167
|
bloqade/squin/rewrite/canonicalize.py,sha256=hcfsn4ntsvnJ_cVnoUgcE5Zk9EqvwgixGArLPx4OjP0,2100
|
|
168
|
-
bloqade/squin/rewrite/desugar.py,sha256=
|
|
168
|
+
bloqade/squin/rewrite/desugar.py,sha256=nl7yvUKgruIU0Ksb184a6r6ebeQ93HsEAG6hrPOmpWk,3296
|
|
169
169
|
bloqade/squin/rewrite/remove_dangling_qubits.py,sha256=iTuWV-03YW5wtYbSeKMlnnWjNzDj9SmflyqYPgoYGy8,469
|
|
170
170
|
bloqade/squin/rewrite/wrap_analysis.py,sha256=JUPS4OAYbDHOK0VIrdz1pprSizISUfN7osuoP_P-bIo,2256
|
|
171
171
|
bloqade/stim/__init__.py,sha256=QPZnQRWiiC66pwZ4yRiX2m5doqgPQorQLqc3b7fav2A,935
|
|
@@ -207,14 +207,14 @@ bloqade/stim/parse/__init__.py,sha256=l2DjReB2KkgrDjP_4nP6RnoziiOewoSeZfTno1sVYT
|
|
|
207
207
|
bloqade/stim/parse/lowering.py,sha256=L-IcR_exlxsTVv4SQ0bhzIF4_L82P-GEdK6qRd6B86Y,23723
|
|
208
208
|
bloqade/stim/passes/__init__.py,sha256=aysjOZyn0IrJQCQBEqiz8pwZ5u5t2s9TmEzA9Y9KG9w,167
|
|
209
209
|
bloqade/stim/passes/simplify_ifs.py,sha256=zicqggWu_yzfrf2a7uUCt-ZenbYSEnFsyGxDfKw72qQ,1084
|
|
210
|
-
bloqade/stim/passes/squin_to_stim.py,sha256=
|
|
210
|
+
bloqade/stim/passes/squin_to_stim.py,sha256=cDn4W9TEsCZQT5YhEMEId87LtLv4iqwaurwgTqtE1qQ,6421
|
|
211
211
|
bloqade/stim/rewrite/__init__.py,sha256=zL5G73JEsXkehN7gCtUgGnmC2BJ3vKihOd1ohVwM68E,480
|
|
212
|
-
bloqade/stim/rewrite/ifs_to_stim.py,sha256=
|
|
212
|
+
bloqade/stim/rewrite/ifs_to_stim.py,sha256=A3SndoGinZHLul17zXWyQrK_1Hy5I4qvuOskLIeDRMU,6942
|
|
213
213
|
bloqade/stim/rewrite/py_constant_to_stim.py,sha256=PV8bHvn759-d_0JW4akaGSORW_oxigrlUBhAC51PJAU,1354
|
|
214
|
-
bloqade/stim/rewrite/qubit_to_stim.py,sha256=
|
|
214
|
+
bloqade/stim/rewrite/qubit_to_stim.py,sha256=vdTjzVJyzslp6BbXz5219DjF1pUJF9kvNWwUtQ_MP0g,2627
|
|
215
215
|
bloqade/stim/rewrite/squin_measure.py,sha256=1zuILosGACN7rPYA87MYVwv0M4pPTala1YTe9owbhkw,2519
|
|
216
|
-
bloqade/stim/rewrite/squin_noise.py,sha256=
|
|
217
|
-
bloqade/stim/rewrite/util.py,sha256=
|
|
216
|
+
bloqade/stim/rewrite/squin_noise.py,sha256=P-54e3lH9L2irsknRQ7u9UkCmUOQZFDra_yHlLlClDk,6379
|
|
217
|
+
bloqade/stim/rewrite/util.py,sha256=o96hA-h03vpwsB0jVe_q0hCmTVINaMaZKn1IYWM6DtM,7751
|
|
218
218
|
bloqade/stim/rewrite/wire_identity_elimination.py,sha256=Cscu8yaSslPuW04HvbXx4HJ3JzdUZNUMyFqcvuc4sxY,795
|
|
219
219
|
bloqade/stim/rewrite/wire_to_stim.py,sha256=rZY4Ya4I2b4C3tk84LvJvEi--jyUgza8WmtDtTxCajI,1814
|
|
220
220
|
bloqade/stim/upstream/__init__.py,sha256=Skev79lMyfz2bFoih-Fn_9iXbMArqlKxHSd1agHAtlA,55
|
|
@@ -230,7 +230,7 @@ bloqade/visual/animation/runtime/atoms.py,sha256=EmjxhujLiHHPS_HtH_B-7TiqeHgvW5u
|
|
|
230
230
|
bloqade/visual/animation/runtime/ppoly.py,sha256=JB9IP53N1w6adBJEue6J5Nmj818Id9JvrlgrmiQTU1I,1385
|
|
231
231
|
bloqade/visual/animation/runtime/qpustate.py,sha256=rlmxQeJSvaohXrTpXQL5y-NJcpvfW33xPaYM1slv7cc,4270
|
|
232
232
|
bloqade/visual/animation/runtime/utils.py,sha256=ju9IzOWX-vKwfpqUjlUKu3Ssr_UFPFFq-tzH_Nqyo_c,1212
|
|
233
|
-
bloqade_circuit-0.
|
|
234
|
-
bloqade_circuit-0.
|
|
235
|
-
bloqade_circuit-0.
|
|
236
|
-
bloqade_circuit-0.
|
|
233
|
+
bloqade_circuit-0.7.0.dist-info/METADATA,sha256=nH4KSeEfISkRsNt7OaAZgsdnGq_Fpt73ad7eIoHwt8E,3849
|
|
234
|
+
bloqade_circuit-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
235
|
+
bloqade_circuit-0.7.0.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
|
|
236
|
+
bloqade_circuit-0.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|