bloqade-circuit 0.6.8__py3-none-any.whl → 0.7.1__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.

Files changed (33) hide show
  1. bloqade/analysis/measure_id/analysis.py +10 -11
  2. bloqade/analysis/measure_id/impls.py +15 -2
  3. bloqade/cirq_utils/noise/__init__.py +0 -2
  4. bloqade/cirq_utils/noise/_two_zone_utils.py +7 -15
  5. bloqade/cirq_utils/noise/model.py +141 -188
  6. bloqade/cirq_utils/noise/transform.py +2 -2
  7. bloqade/pyqrack/squin/qubit.py +4 -2
  8. bloqade/pyqrack/squin/runtime.py +14 -6
  9. bloqade/qasm2/emit/target.py +5 -1
  10. bloqade/squin/cirq/emit/op.py +37 -5
  11. bloqade/squin/cirq/emit/qubit.py +4 -4
  12. bloqade/squin/cirq/emit/runtime.py +0 -15
  13. bloqade/squin/cirq/lowering.py +3 -9
  14. bloqade/squin/gate.py +7 -0
  15. bloqade/squin/lowering.py +26 -0
  16. bloqade/squin/noise/__init__.py +0 -1
  17. bloqade/squin/noise/_wrapper.py +2 -6
  18. bloqade/squin/noise/rewrite.py +0 -11
  19. bloqade/squin/noise/stmts.py +2 -14
  20. bloqade/squin/op/_wrapper.py +4 -4
  21. bloqade/squin/op/stmts.py +33 -9
  22. bloqade/squin/op/types.py +104 -2
  23. bloqade/squin/qubit.py +27 -40
  24. bloqade/squin/rewrite/desugar.py +44 -66
  25. bloqade/stim/passes/squin_to_stim.py +21 -4
  26. bloqade/stim/rewrite/ifs_to_stim.py +6 -1
  27. bloqade/stim/rewrite/qubit_to_stim.py +1 -1
  28. bloqade/stim/rewrite/squin_noise.py +9 -7
  29. bloqade/stim/rewrite/util.py +15 -3
  30. {bloqade_circuit-0.6.8.dist-info → bloqade_circuit-0.7.1.dist-info}/METADATA +2 -2
  31. {bloqade_circuit-0.6.8.dist-info → bloqade_circuit-0.7.1.dist-info}/RECORD +33 -33
  32. {bloqade_circuit-0.6.8.dist-info → bloqade_circuit-0.7.1.dist-info}/WHEEL +0 -0
  33. {bloqade_circuit-0.6.8.dist-info → bloqade_circuit-0.7.1.dist-info}/licenses/LICENSE +0 -0
@@ -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) > 1 and all(q.type.is_subseteq(QubitType) for q in qubits):
57
- (qubits_ilist_stmt := ilist.New(qubits)).insert_before(
58
- node
59
- ) # qubits is just a tuple of SSAValues
60
- qubits_ilist = qubits_ilist_stmt.result
61
-
62
- elif len(qubits) == 1 and qubits[0].type.is_subseteq(QubitType):
63
- (qubits_ilist_stmt := ilist.New(qubits)).insert_before(node)
64
- qubits_ilist = qubits_ilist_stmt.result
65
-
66
- elif len(qubits) == 1 and qubits[0].type.is_subseteq(
67
- ilist.IListType[QubitType, types.Any]
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
- stmt = Apply(operator=op, qubits=qubits_ilist)
123
- node.replace_by(stmt)
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
- Walk(InlineAlias()).rewrite(mt.code).join(rewrite_result)
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
- TypeInfer(dialects=mt.dialects, no_raise=self.no_raise).unsafe_run(mt)
116
- Walk(ApplyDesugarRule()).rewrite(mt.code)
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
- address_attr = apply_or_broadcast.qubits.hints.get("address")
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)
@@ -58,7 +58,7 @@ class SquinQubitToStim(RewriteRule):
58
58
  if stim_1q_op is None:
59
59
  return RewriteResult()
60
60
 
61
- address_attr = stmt.qubits.hints.get("address")
61
+ address_attr = stmt.qubits[0].hints.get("address")
62
62
 
63
63
  if address_attr is None:
64
64
  return RewriteResult()
@@ -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
- if stim_stmt is not None:
51
- stmt.replace_by(stim_stmt)
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()
@@ -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
- address_attribute = qubits.hints.get("address")
110
- if address_attribute is None:
111
- return
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,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bloqade-circuit
3
- Version: 0.6.8
3
+ Version: 0.7.1
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
7
7
  Requires-Python: >=3.10
8
- Requires-Dist: kirin-toolchain~=0.17.0
8
+ Requires-Dist: kirin-toolchain~=0.17.17
9
9
  Requires-Dist: numpy>=1.22.0
10
10
  Requires-Dist: pandas>=2.2.3
11
11
  Requires-Dist: pydantic<2.11.0,>=1.3.0
@@ -10,17 +10,17 @@ 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=F22mLWeOLH_QHm25_4DZLLse4ljsiZr7UNThaIy4pzA,2149
14
- bloqade/analysis/measure_id/impls.py,sha256=ojFSQrrqj-jdcBklaLa3HHojHvw59Z7Dl2iNdfSuP1w,6376
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=Z7d293ibzsNZyfS0tbL2JrdoypsDm20KE4zwlY6QnVA,559
20
- bloqade/cirq_utils/noise/_two_zone_utils.py,sha256=3atgRbCMXZh0hu3zXAk7dThe4vljigKg0Z1bKPGM0s4,18293
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=06Y_BLChOA-PhhAJcWLSgLVAAJoNjOrAujL1YCwcXA0,20590
23
- bloqade/cirq_utils/noise/transform.py,sha256=tvDt4WMLM8dKPME51y0_peSZk2-jKmjq0urOxm0lWuQ,2309
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
26
  bloqade/pyqrack/device.py,sha256=-zlr1lSzOvcj5l28nnevy1oMYct79DTOdLYyGaT2Yco,11567
@@ -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=svQMbsLxv3yjiFMSRc4C7QGllzjtmlSWOsMY1mjTI8Q,2223
40
- bloqade/pyqrack/squin/runtime.py,sha256=BM_xRoTpsRipL_Vt-N5UO-x2Nsgiafw3nwiqiuOeH68,15401
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
@@ -80,7 +80,7 @@ bloqade/qasm2/emit/__init__.py,sha256=Fl9WWMoSyAt3UGAsvCPwnbelhPiPdWDjTpkr8XAJTH
80
80
  bloqade/qasm2/emit/base.py,sha256=Ln7gwnstszmrdAe4SmI5_7hnSgaSRgDwSYZbpI4l3Dg,2342
81
81
  bloqade/qasm2/emit/gate.py,sha256=zVxVQEf_M8pzfbQ1kMEn3e5PiDQAQvEp6CSsFBHRr0w,2684
82
82
  bloqade/qasm2/emit/main.py,sha256=OGfOWnBEmd3vwoQYpx8iRGyqJchd-cLZXmYPhhd2xl8,4325
83
- bloqade/qasm2/emit/target.py,sha256=V4GXYixErdXnls7yTQy4xX7ygD259yTFhcV0EGgQKrU,6081
83
+ bloqade/qasm2/emit/target.py,sha256=6kUatL9L5jlhl_Cnh_1BKIkou7IWYbi4Gs6s2hCtt2Q,6205
84
84
  bloqade/qasm2/emit/impls/__init__.py,sha256=ynptLB_449irP9_9u2h3KXmOqF8YvH_NH08NnVoc7zQ,46
85
85
  bloqade/qasm2/emit/impls/noise.py,sha256=-N9PmCbz8MwC6xtd55GOpjDoWMyJPJBMVDWT3G83Ads,2779
86
86
  bloqade/qasm2/parse/__init__.py,sha256=01tlLfrR015nAAPWw3i_Cs9IXsShpXMnJMagcJ_Vuik,986
@@ -127,11 +127,11 @@ bloqade/rewrite/rules/inline_getitem_ilist.py,sha256=uIXQRCsr3_GPMciDT4ghI-ezhQm
127
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=tCnjfrSVsXHX7VxkEulZ2SQS5ydtmON8QlcGibM6c2I,4028
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=SR6q-IfV8WHPKT97M7UFu5KoRgAojfDno8Bft1mUSKM,1736
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=LgNJsm6qCyP7_O-lZg3YT8IiqzF5W5ff1VwQ79nXN4c,5148
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=F0_skv9lORxUFrhbNaN2ZQpqGnhPyslHt5E92uta5BQ,17959
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=gWMLghj65yQeAbwy2E0YhRLbzM_DkYBlvXKfsgY26fc,4712
149
- bloqade/squin/cirq/emit/qubit.py,sha256=IegghRU5E1urd0ddV1X2Fh_aEWAPmUPZLVj9AafN2Cg,1930
150
- bloqade/squin/cirq/emit/runtime.py,sha256=RA_3C_0qkwQCcztalmfOqJe-c4DZgEqWn2ArNjyycZ4,7170
151
- bloqade/squin/noise/__init__.py,sha256=xST2qojx6ZApRoiKIXOtifDzSpTZgo-67ja309FFvWw,364
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
+ bloqade/squin/cirq/emit/runtime.py,sha256=dH7JSMt2mALPhVFjmZETQzvnTUQ3BFY5poe0YZpM5vQ,6819
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=P8fkr1_2U47PtvqnQqeTI7VzThNIK17cNh2QX6ABh_w,815
154
- bloqade/squin/noise/rewrite.py,sha256=8v8AAi2G-ZatZ6dTpqc88hCBMMoWz2TK3nwkLkwk7Fo,5099
155
- bloqade/squin/noise/stmts.py,sha256=F8AsDp2xsLez9vkSamDW985MUCubz3TMRrE0L745GmI,1875
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=bg6MLA6u-qkPpo-sKL3lib1VVtQWKCe6RMZb57w8PJQ,1929
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=wPfEzial7_onG9zUaFxQ7iz2wrojQ1PIC9--NX-InFc,6001
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=ozUT0Bv9NuUxPjB2vAeqJ9cpdvUaBfP9trB5mybYxgc,663
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=sZKqnwyoM7_gIEKbXOVE9aQKLrRiSfC8f6Lddada0So,4075
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=6TpnpvA6JA3dQyH6mxNpGn9-__sPlSmyUBIdThn9xVg,6018
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=jmCb6AwNqGXWuLR8BkAYIVvAlOptQzVPHWv52_v-Vsw,6755
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=oiKmi8BlBwXJq-8kGhN1nXgyxJ2UIt_9uouNkU1J8vs,2624
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=NafmAiByT4Y5895fZM4Od8arKjsJuW6F5wvRpAFFo70,6240
217
- bloqade/stim/rewrite/util.py,sha256=xnLDiEj45CBoG3mpG-ywE1Jjh1k_OVP4iI1A75VR6sw,7257
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.6.8.dist-info/METADATA,sha256=8pPrKcmeLw4CJWHLi6DJuYS-xhwkGMOKZLtzzvxFAa4,3849
234
- bloqade_circuit-0.6.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
235
- bloqade_circuit-0.6.8.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
236
- bloqade_circuit-0.6.8.dist-info/RECORD,,
233
+ bloqade_circuit-0.7.1.dist-info/METADATA,sha256=z-DYZxBKke2_YBJPwEQKOwMqr9lWSJWG35Dio9e-afk,3850
234
+ bloqade_circuit-0.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
235
+ bloqade_circuit-0.7.1.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
236
+ bloqade_circuit-0.7.1.dist-info/RECORD,,