bloqade-circuit 0.6.4__py3-none-any.whl → 0.6.6__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/pyqrack/base.py CHANGED
@@ -48,7 +48,7 @@ def _default_pyqrack_args() -> PyQrackOptions:
48
48
  isSchmidtDecomposeMulti=True,
49
49
  isSchmidtDecompose=True,
50
50
  isStabilizerHybrid=False,
51
- isBinaryDecisionTree=True,
51
+ isBinaryDecisionTree=False,
52
52
  isPaged=True,
53
53
  isCpuGpuHybrid=True,
54
54
  isOpenCL=True,
bloqade/squin/__init__.py CHANGED
@@ -9,6 +9,10 @@ from . import (
9
9
  )
10
10
  from .groups import wired as wired, kernel as kernel
11
11
 
12
+ # NOTE: it's important to keep these imports here since they import squin.kernel
13
+ # we skip isort here
14
+ from . import gate as gate, parallel as parallel # isort: skip
15
+
12
16
  try:
13
17
  # NOTE: make sure optional cirq dependency is installed
14
18
  import cirq as cirq_package # noqa: F401
@@ -1,4 +1,5 @@
1
1
  from typing import Any, Sequence
2
+ from warnings import warn
2
3
 
3
4
  import cirq
4
5
  from kirin import ir, types
@@ -157,6 +158,8 @@ def load_circuit(
157
158
  def emit_circuit(
158
159
  mt: ir.Method,
159
160
  qubits: Sequence[cirq.Qid] | None = None,
161
+ circuit_qubits: Sequence[cirq.Qid] | None = None,
162
+ args: tuple = (),
160
163
  ignore_returns: bool = False,
161
164
  ) -> cirq.Circuit:
162
165
  """Converts a squin.kernel method to a cirq.Circuit object.
@@ -165,12 +168,14 @@ def emit_circuit(
165
168
  mt (ir.Method): The kernel method from which to construct the circuit.
166
169
 
167
170
  Keyword Args:
168
- qubits (Sequence[cirq.Qid] | None):
171
+ circuit_qubits (Sequence[cirq.Qid] | None):
169
172
  A list of qubits to use as the qubits in the circuit. Defaults to None.
170
173
  If this is None, then `cirq.LineQubit`s are inserted for every `squin.qubit.new`
171
174
  statement in the order they appear inside the kernel.
172
175
  **Note**: If a list of qubits is provided, make sure that there is a sufficient
173
176
  number of qubits for the resulting circuit.
177
+ args (tuple):
178
+ The arguments of the kernel function from which to emit a circuit.
174
179
  ignore_returns (bool):
175
180
  If `False`, emitting a circuit from a kernel that returns a value will error.
176
181
  Set it to `True` in order to ignore the return value(s). Defaults to `False`.
@@ -223,7 +228,7 @@ def emit_circuit(
223
228
  # custom list of qubits on grid
224
229
  qubits = [cirq.GridQubit(i, i+1) for i in range(5)]
225
230
 
226
- circuit = squin.cirq.emit_circuit(main, qubits=qubits)
231
+ circuit = squin.cirq.emit_circuit(main, circuit_qubits=qubits)
227
232
  print(circuit)
228
233
 
229
234
  ```
@@ -232,6 +237,12 @@ def emit_circuit(
232
237
  and manipulate the qubits in other circuits directly written in cirq as well.
233
238
  """
234
239
 
240
+ if circuit_qubits is None and qubits is not None:
241
+ circuit_qubits = qubits
242
+ warn(
243
+ "The keyword argument `qubits` is deprecated. Use `circuit_qubits` instead."
244
+ )
245
+
235
246
  if (
236
247
  not ignore_returns
237
248
  and isinstance(mt.code, func.Function)
@@ -242,17 +253,24 @@ def emit_circuit(
242
253
  " Set `ignore_returns = True` in order to simply ignore the return values and emit a circuit."
243
254
  )
244
255
 
256
+ if len(args) != len(mt.args):
257
+ raise ValueError(
258
+ f"The method from which you're trying to emit a circuit takes {len(mt.args)} as input, but you passed in {len(args)} via the `args` keyword!"
259
+ )
260
+
245
261
  emitter = EmitCirq(qubits=qubits)
246
262
 
247
263
  # Rewrite noise statements
248
264
  mt_ = mt.similar(mt.dialects)
249
265
  RewriteNoiseStmts(mt_.dialects)(mt_)
250
266
 
251
- return emitter.run(mt_, args=())
267
+ return emitter.run(mt_, args=args)
252
268
 
253
269
 
254
270
  def dump_circuit(
255
271
  mt: ir.Method,
272
+ circuit_qubits: Sequence[cirq.Qid] | None = None,
273
+ args: tuple = (),
256
274
  qubits: Sequence[cirq.Qid] | None = None,
257
275
  ignore_returns: bool = False,
258
276
  **kwargs,
@@ -265,16 +283,24 @@ def dump_circuit(
265
283
  mt (ir.Method): The kernel method from which to construct the circuit.
266
284
 
267
285
  Keyword Args:
268
- qubits (Sequence[cirq.Qid] | None):
286
+ circuit_qubits (Sequence[cirq.Qid] | None):
269
287
  A list of qubits to use as the qubits in the circuit. Defaults to None.
270
288
  If this is None, then `cirq.LineQubit`s are inserted for every `squin.qubit.new`
271
289
  statement in the order they appear inside the kernel.
272
290
  **Note**: If a list of qubits is provided, make sure that there is a sufficient
273
291
  number of qubits for the resulting circuit.
292
+ args (tuple):
293
+ The arguments of the kernel function from which to emit a circuit.
274
294
  ignore_returns (bool):
275
295
  If `False`, emitting a circuit from a kernel that returns a value will error.
276
296
  Set it to `True` in order to ignore the return value(s). Defaults to `False`.
277
297
 
278
298
  """
279
- circuit = emit_circuit(mt, qubits=qubits, ignore_returns=ignore_returns)
299
+ circuit = emit_circuit(
300
+ mt,
301
+ circuit_qubits=circuit_qubits,
302
+ qubits=qubits,
303
+ args=args,
304
+ ignore_returns=ignore_returns,
305
+ )
280
306
  return cirq.to_json(circuit, **kwargs)
@@ -2,7 +2,7 @@ from typing import Sequence
2
2
  from dataclasses import field, dataclass
3
3
 
4
4
  import cirq
5
- from kirin import ir
5
+ from kirin import ir, interp
6
6
  from kirin.emit import EmitABC, EmitError, EmitFrame
7
7
  from kirin.interp import MethodTable, impl
8
8
  from kirin.dialects import func
@@ -45,6 +45,26 @@ class EmitCirq(EmitABC[EmitCirqFrame, cirq.Circuit]):
45
45
  def run_method(self, method: ir.Method, args: tuple[cirq.Circuit, ...]):
46
46
  return self.run_callable(method.code, args)
47
47
 
48
+ def run_callable_region(
49
+ self,
50
+ frame: EmitCirqFrame,
51
+ code: ir.Statement,
52
+ region: ir.Region,
53
+ args: tuple,
54
+ ):
55
+ if len(region.blocks) > 0:
56
+ block_args = list(region.blocks[0].args)
57
+ # NOTE: skip self arg
58
+ frame.set_values(block_args[1:], args)
59
+
60
+ results = self.eval_stmt(frame, code)
61
+ if isinstance(results, tuple):
62
+ if len(results) == 0:
63
+ return self.void
64
+ elif len(results) == 1:
65
+ return results[0]
66
+ raise interp.InterpreterError(f"Unexpected results {results}")
67
+
48
68
  def emit_block(self, frame: EmitCirqFrame, block: ir.Block) -> cirq.Circuit:
49
69
  for stmt in block.stmts:
50
70
  result = self.eval_stmt(frame, stmt)
@@ -49,7 +49,7 @@ class EmitCirqQubitMethods(MethodTable):
49
49
  ):
50
50
  qbit = frame.get(stmt.qubit)
51
51
  frame.circuit.append(cirq.measure(qbit))
52
- return ()
52
+ return (emit.void,)
53
53
 
54
54
  @impl(qubit.MeasureQubitList)
55
55
  def measure_qubit_list(
@@ -57,4 +57,4 @@ class EmitCirqQubitMethods(MethodTable):
57
57
  ):
58
58
  qbits = frame.get(stmt.qubits)
59
59
  frame.circuit.append(cirq.measure(qbits))
60
- return ()
60
+ return (emit.void,)
bloqade/squin/gate.py ADDED
@@ -0,0 +1,193 @@
1
+ from bloqade.types import Qubit
2
+
3
+ from . import op as _op, qubit as _qubit
4
+ from .groups import kernel
5
+
6
+
7
+ @kernel
8
+ def x(qubit: Qubit) -> None:
9
+ """x gate applied to qubit."""
10
+ op = _op.x()
11
+ _qubit.apply(op, qubit)
12
+
13
+
14
+ @kernel
15
+ def y(qubit: Qubit) -> None:
16
+ """y gate applied to qubit."""
17
+ op = _op.y()
18
+ _qubit.apply(op, qubit)
19
+
20
+
21
+ @kernel
22
+ def z(qubit: Qubit) -> None:
23
+ """z gate applied to qubit."""
24
+ op = _op.z()
25
+ _qubit.apply(op, qubit)
26
+
27
+
28
+ @kernel
29
+ def sqrt_x(qubit: Qubit) -> None:
30
+ """Square root x gate applied to qubit."""
31
+ op = _op.sqrt_x()
32
+ _qubit.apply(op, qubit)
33
+
34
+
35
+ @kernel
36
+ def sqrt_x_adj(qubit: Qubit) -> None:
37
+ """Adjoint sqrt_x gate applied to qubit."""
38
+ op = _op.sqrt_x()
39
+ _qubit.apply(_op.adjoint(op), qubit)
40
+
41
+
42
+ @kernel
43
+ def sqrt_y(qubit: Qubit) -> None:
44
+ """Square root y gate applied to qubit."""
45
+ op = _op.sqrt_y()
46
+ _qubit.apply(op, qubit)
47
+
48
+
49
+ @kernel
50
+ def sqrt_y_adj(qubit: Qubit) -> None:
51
+ """Adjoint sqrt_y gate applied to qubit."""
52
+ op = _op.sqrt_y()
53
+ _qubit.apply(_op.adjoint(op), qubit)
54
+
55
+
56
+ @kernel
57
+ def sqrt_z(qubit: Qubit) -> None:
58
+ """Square root z gate applied to qubit."""
59
+ op = _op.s()
60
+ _qubit.apply(op, qubit)
61
+
62
+
63
+ @kernel
64
+ def sqrt_z_adj(qubit: Qubit) -> None:
65
+ """Adjoint square root z gate applied to qubit."""
66
+ op = _op.s()
67
+ _qubit.apply(_op.adjoint(op), qubit)
68
+
69
+
70
+ @kernel
71
+ def h(qubit: Qubit) -> None:
72
+ """Hadamard gate applied to qubit."""
73
+ op = _op.h()
74
+ _qubit.apply(op, qubit)
75
+
76
+
77
+ @kernel
78
+ def s(qubit: Qubit) -> None:
79
+ """s gate applied to qubit."""
80
+ op = _op.s()
81
+ _qubit.apply(op, qubit)
82
+
83
+
84
+ @kernel
85
+ def s_adj(qubit: Qubit) -> None:
86
+ """Adjoint s gate applied to qubit."""
87
+ op = _op.s()
88
+ _qubit.apply(_op.adjoint(op), qubit)
89
+
90
+
91
+ @kernel
92
+ def t(qubit: Qubit) -> None:
93
+ """t gate applied to qubit."""
94
+ op = _op.t()
95
+ _qubit.apply(op, qubit)
96
+
97
+
98
+ @kernel
99
+ def t_adj(qubit: Qubit) -> None:
100
+ """Adjoint t gate applied to qubit."""
101
+ op = _op.t()
102
+ _qubit.apply(_op.adjoint(op), qubit)
103
+
104
+
105
+ @kernel
106
+ def p0(qubit: Qubit) -> None:
107
+ """Projector on 0 applied to qubit."""
108
+ op = _op.p0()
109
+ _qubit.apply(op, qubit)
110
+
111
+
112
+ @kernel
113
+ def p1(qubit: Qubit) -> None:
114
+ """Projector on 1 applied to qubit."""
115
+ op = _op.p1()
116
+ _qubit.apply(op, qubit)
117
+
118
+
119
+ @kernel
120
+ def spin_n(qubit: Qubit) -> None:
121
+ """Spin lowering gate applied to qubit."""
122
+ op = _op.spin_n()
123
+ _qubit.apply(op, qubit)
124
+
125
+
126
+ @kernel
127
+ def spin_p(qubit: Qubit) -> None:
128
+ """Spin raising gate applied to qubit."""
129
+ op = _op.spin_p()
130
+ _qubit.apply(op, qubit)
131
+
132
+
133
+ @kernel
134
+ def reset(qubit: Qubit) -> None:
135
+ """Reset qubit to 0."""
136
+ op = _op.reset()
137
+ _qubit.apply(op, qubit)
138
+
139
+
140
+ @kernel
141
+ def cx(control: Qubit, target: Qubit) -> None:
142
+ """Controlled x gate applied to control and target"""
143
+ op = _op.cx()
144
+ _qubit.apply(op, control, target)
145
+
146
+
147
+ @kernel
148
+ def cy(control: Qubit, target: Qubit) -> None:
149
+ """Controlled y gate applied to control and target"""
150
+ op = _op.cy()
151
+ _qubit.apply(op, control, target)
152
+
153
+
154
+ @kernel
155
+ def cz(control: Qubit, target: Qubit) -> None:
156
+ """Controlled z gate applied to control and target"""
157
+ op = _op.cz()
158
+ _qubit.apply(op, control, target)
159
+
160
+
161
+ @kernel
162
+ def ch(control: Qubit, target: Qubit) -> None:
163
+ """Controlled Hadamard gate applied to control and target"""
164
+ op = _op.ch()
165
+ _qubit.apply(op, control, target)
166
+
167
+
168
+ @kernel
169
+ def u(theta: float, phi: float, lam: float, qubit: Qubit) -> None:
170
+ """3D rotation gate applied to control and target"""
171
+ op = _op.u(theta, phi, lam)
172
+ _qubit.apply(op, qubit)
173
+
174
+
175
+ @kernel
176
+ def rx(theta: float, qubit: Qubit) -> None:
177
+ """Rotation X gate applied to qubit."""
178
+ op = _op.rot(_op.x(), theta)
179
+ _qubit.apply(op, qubit)
180
+
181
+
182
+ @kernel
183
+ def ry(theta: float, qubit: Qubit) -> None:
184
+ """Rotation Y gate applied to qubit."""
185
+ op = _op.rot(_op.y(), theta)
186
+ _qubit.apply(op, qubit)
187
+
188
+
189
+ @kernel
190
+ def rz(theta: float, qubit: Qubit) -> None:
191
+ """Rotation Z gate applied to qubit."""
192
+ op = _op.rot(_op.z(), theta)
193
+ _qubit.apply(op, qubit)
@@ -0,0 +1,200 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from kirin.dialects import ilist
4
+
5
+ from bloqade.types import Qubit
6
+
7
+ from . import op as _op, qubit as _qubit
8
+ from .groups import kernel
9
+
10
+
11
+ @kernel
12
+ def x(qubits: ilist.IList[Qubit, Any]) -> None:
13
+ """x gate applied to qubits in parallel."""
14
+ op = _op.x()
15
+ _qubit.broadcast(op, qubits)
16
+
17
+
18
+ @kernel
19
+ def y(qubits: ilist.IList[Qubit, Any]) -> None:
20
+ """y gate applied to qubits in parallel."""
21
+ op = _op.y()
22
+ _qubit.broadcast(op, qubits)
23
+
24
+
25
+ @kernel
26
+ def z(qubits: ilist.IList[Qubit, Any]) -> None:
27
+ """z gate applied to qubits in parallel."""
28
+ op = _op.z()
29
+ _qubit.broadcast(op, qubits)
30
+
31
+
32
+ @kernel
33
+ def sqrt_x(qubits: ilist.IList[Qubit, Any]) -> None:
34
+ """Square root x gate applied to qubits in parallel."""
35
+ op = _op.sqrt_x()
36
+ _qubit.broadcast(op, qubits)
37
+
38
+
39
+ @kernel
40
+ def sqrt_y(qubits: ilist.IList[Qubit, Any]) -> None:
41
+ """Square root y gate applied to qubits in parallel."""
42
+ op = _op.sqrt_y()
43
+ _qubit.broadcast(op, qubits)
44
+
45
+
46
+ @kernel
47
+ def sqrt_z(qubits: ilist.IList[Qubit, Any]) -> None:
48
+ """Square root gate applied to qubits in parallel."""
49
+ op = _op.s()
50
+ _qubit.broadcast(op, qubits)
51
+
52
+
53
+ @kernel
54
+ def h(qubits: ilist.IList[Qubit, Any]) -> None:
55
+ """Hadamard gate applied to qubits in parallel."""
56
+ op = _op.h()
57
+ _qubit.broadcast(op, qubits)
58
+
59
+
60
+ @kernel
61
+ def s(qubits: ilist.IList[Qubit, Any]) -> None:
62
+ """s gate applied to qubits in parallel."""
63
+ op = _op.s()
64
+ _qubit.broadcast(op, qubits)
65
+
66
+
67
+ @kernel
68
+ def t(qubits: ilist.IList[Qubit, Any]) -> None:
69
+ """t gate applied to qubits in parallel."""
70
+ op = _op.t()
71
+ _qubit.broadcast(op, qubits)
72
+
73
+
74
+ @kernel
75
+ def p0(qubits: ilist.IList[Qubit, Any]) -> None:
76
+ """Projector on 0 applied to qubits in parallel."""
77
+ op = _op.p0()
78
+ _qubit.broadcast(op, qubits)
79
+
80
+
81
+ @kernel
82
+ def p1(qubits: ilist.IList[Qubit, Any]) -> None:
83
+ """Projector on 1 applied to qubits in parallel."""
84
+ op = _op.p1()
85
+ _qubit.broadcast(op, qubits)
86
+
87
+
88
+ @kernel
89
+ def spin_n(qubits: ilist.IList[Qubit, Any]) -> None:
90
+ """Spin lowering gate applied to qubits in parallel."""
91
+ op = _op.spin_n()
92
+ _qubit.broadcast(op, qubits)
93
+
94
+
95
+ @kernel
96
+ def spin_p(qubits: ilist.IList[Qubit, Any]) -> None:
97
+ """Spin raising gate applied to qubits in parallel."""
98
+ op = _op.spin_p()
99
+ _qubit.broadcast(op, qubits)
100
+
101
+
102
+ @kernel
103
+ def reset(qubits: ilist.IList[Qubit, Any]) -> None:
104
+ """Reset qubit to 0."""
105
+ op = _op.reset()
106
+ _qubit.broadcast(op, qubits)
107
+
108
+
109
+ N = TypeVar("N")
110
+
111
+
112
+ @kernel
113
+ def cx(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
114
+ """Controlled x gate applied to controls and targets in parallel."""
115
+ op = _op.cx()
116
+ _qubit.broadcast(op, controls, targets)
117
+
118
+
119
+ @kernel
120
+ def cy(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
121
+ """Controlled y gate applied to controls and targets in parallel."""
122
+ op = _op.cy()
123
+ _qubit.broadcast(op, controls, targets)
124
+
125
+
126
+ @kernel
127
+ def cz(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
128
+ """Controlled z gate applied to controls and targets in parallel."""
129
+ op = _op.cz()
130
+ _qubit.broadcast(op, controls, targets)
131
+
132
+
133
+ @kernel
134
+ def ch(controls: ilist.IList[Qubit, N], targets: ilist.IList[Qubit, N]) -> None:
135
+ """Controlled Hadamard gate applied to controls and targets in parallel."""
136
+ op = _op.ch()
137
+ _qubit.broadcast(op, controls, targets)
138
+
139
+
140
+ @kernel
141
+ def u(theta: float, phi: float, lam: float, qubits: ilist.IList[Qubit, Any]) -> None:
142
+ """3D rotation gate applied to controls and targets in parallel."""
143
+ op = _op.u(theta, phi, lam)
144
+ _qubit.broadcast(op, qubits)
145
+
146
+
147
+ @kernel
148
+ def rx(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
149
+ """Rotation X gate applied to qubits in parallel."""
150
+ op = _op.rot(_op.x(), theta)
151
+ _qubit.broadcast(op, qubits)
152
+
153
+
154
+ @kernel
155
+ def ry(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
156
+ """Rotation Y gate applied to qubits in parallel."""
157
+ op = _op.rot(_op.y(), theta)
158
+ _qubit.broadcast(op, qubits)
159
+
160
+
161
+ @kernel
162
+ def rz(theta: float, qubits: ilist.IList[Qubit, Any]) -> None:
163
+ """Rotation Z gate applied to qubits in parallel."""
164
+ op = _op.rot(_op.z(), theta)
165
+ _qubit.broadcast(op, qubits)
166
+
167
+
168
+ @kernel
169
+ def sqrt_x_adj(qubits: ilist.IList[Qubit, Any]) -> None:
170
+ """Adjoint sqrt_x gate applied to qubits in parallel."""
171
+ op = _op.sqrt_x()
172
+ _qubit.broadcast(_op.adjoint(op), qubits)
173
+
174
+
175
+ @kernel
176
+ def sqrt_y_adj(qubits: ilist.IList[Qubit, Any]) -> None:
177
+ """Adjoint sqrt_y gate applied to qubits in parallel."""
178
+ op = _op.sqrt_y()
179
+ _qubit.broadcast(_op.adjoint(op), qubits)
180
+
181
+
182
+ @kernel
183
+ def sqrt_z_adj(qubits: ilist.IList[Qubit, Any]) -> None:
184
+ """Adjoint square root z gate applied to qubits in parallel."""
185
+ op = _op.s()
186
+ _qubit.broadcast(_op.adjoint(op), qubits)
187
+
188
+
189
+ @kernel
190
+ def s_adj(qubits: ilist.IList[Qubit, Any]) -> None:
191
+ """Adjoint s gate applied to qubits in parallel."""
192
+ op = _op.s()
193
+ _qubit.broadcast(_op.adjoint(op), qubits)
194
+
195
+
196
+ @kernel
197
+ def t_adj(qubits: ilist.IList[Qubit, Any]) -> None:
198
+ """Adjoint t gate applied to qubits in parallel."""
199
+ op = _op.t()
200
+ _qubit.broadcast(_op.adjoint(op), qubits)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bloqade-circuit
3
- Version: 0.6.4
3
+ Version: 0.6.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
@@ -22,7 +22,7 @@ bloqade/cirq_utils/noise/conflict_graph.py,sha256=ZUwPWTknrb6SgtZUVPeICn3YA-nUeW
22
22
  bloqade/cirq_utils/noise/model.py,sha256=06Y_BLChOA-PhhAJcWLSgLVAAJoNjOrAujL1YCwcXA0,20590
23
23
  bloqade/cirq_utils/noise/transform.py,sha256=tvDt4WMLM8dKPME51y0_peSZk2-jKmjq0urOxm0lWuQ,2309
24
24
  bloqade/pyqrack/__init__.py,sha256=lonTS-luJkTVujCCtgdZRC12V7FQdoFcozAI-byXwN0,810
25
- bloqade/pyqrack/base.py,sha256=9z61PaaAFqCBBwkgsDZSr-qr9IQ5OJ_JUvltmJ7Bgls,4407
25
+ bloqade/pyqrack/base.py,sha256=g0GRlEgyJ_P8z-lR8RK2CAuRTj6KPfglKX0iwrgg4DM,4408
26
26
  bloqade/pyqrack/device.py,sha256=40vduanEgA26GAW3buHoRpyqPA0xUt2tONY3w5JeH5s,7524
27
27
  bloqade/pyqrack/reg.py,sha256=uTL07CT1R0xUsInLmwU9YuuNdV6lV0lCs1zhdUz1qIs,1660
28
28
  bloqade/pyqrack/target.py,sha256=c78VtLWAiDNp_0sXwvVzhaEoeFsr1fUVsupxWuo6p3s,3661
@@ -125,10 +125,12 @@ bloqade/rewrite/rules/__init__.py,sha256=3e1Z5T3INqNtP6OU0Vivu_SdMOR_2KDixeA0Yjo
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
127
  bloqade/rewrite/rules/split_ifs.py,sha256=Nm4lpEUHZcnCeewIld0tt7UuGO69LiBGl7Uybuwissw,2119
128
- bloqade/squin/__init__.py,sha256=MH7i5gR9DhTjLMI6vsP_NT7_yoaEowYiQwsYhrrUEX0,454
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
131
  bloqade/squin/groups.py,sha256=RXGJnNZUSXF_f5ljjhZ9At8UhaijayoxFoWvxEsUOWc,1310
131
132
  bloqade/squin/lowering.py,sha256=SR6q-IfV8WHPKT97M7UFu5KoRgAojfDno8Bft1mUSKM,1736
133
+ bloqade/squin/parallel.py,sha256=X6Ps9kQIgnFMlZO14y2ntdxvivqbIP28PAWF8KmxByM,5172
132
134
  bloqade/squin/qubit.py,sha256=LgNJsm6qCyP7_O-lZg3YT8IiqzF5W5ff1VwQ79nXN4c,5148
133
135
  bloqade/squin/types.py,sha256=T3lkqid4HEWuAK_wRns_p-K5DbLDwlldoyZtVay7A3o,119
134
136
  bloqade/squin/wire.py,sha256=GZhF0EHCu7OU70zTV_N83yann-eQnYG_lM2u0QYFoAs,6596
@@ -139,12 +141,12 @@ bloqade/squin/analysis/nsites/__init__.py,sha256=RlQg7ivczXCXG5lMeL3ipYKj2oJKC4T
139
141
  bloqade/squin/analysis/nsites/analysis.py,sha256=rIe1RU1MZRItcE2aB8DYahLrv73HfD3IHCX3E_EGQ1c,1773
140
142
  bloqade/squin/analysis/nsites/impls.py,sha256=bVqO4E2hDzfYWwSG0pfj2j8oT1m0C3b42LdSHr4HQlo,2874
141
143
  bloqade/squin/analysis/nsites/lattice.py,sha256=ruh0808SHtj3ecuT-C3AZTsLY2j3DRhtezGiTZvcuVs,942
142
- bloqade/squin/cirq/__init__.py,sha256=qGTrEzDEHqIMOh031y23-Y1NsyKew3QCrBYD9P_i63E,9236
144
+ bloqade/squin/cirq/__init__.py,sha256=7OYYboSl5lPwdWOKk4AJgm1s1lBX_WAstVqPfaynSv8,10156
143
145
  bloqade/squin/cirq/lowering.py,sha256=F0_skv9lORxUFrhbNaN2ZQpqGnhPyslHt5E92uta5BQ,17959
144
- bloqade/squin/cirq/emit/emit_circuit.py,sha256=7puJ3eCFwE9VdPb9NAiSdyRNkoQPwo_uVykz9Yv7c14,3761
146
+ bloqade/squin/cirq/emit/emit_circuit.py,sha256=JVFXiaSB7A9kamRwCjLqs03Sel4PVCBT-6kRNRWX-jo,4393
145
147
  bloqade/squin/cirq/emit/noise.py,sha256=rESjGC_66s2Y4FwwYda4rY3mYHYjbqLlKE_vnqpZDYI,1534
146
148
  bloqade/squin/cirq/emit/op.py,sha256=z54NP5KqMxffXeFGWamEzvunpTNrxmYuluurk4j2-ps,4000
147
- bloqade/squin/cirq/emit/qubit.py,sha256=Z2HUsZmJ5F2uHCPGru81ux2usoX77KwtS97_cgeJRMI,1910
149
+ bloqade/squin/cirq/emit/qubit.py,sha256=IegghRU5E1urd0ddV1X2Fh_aEWAPmUPZLVj9AafN2Cg,1930
148
150
  bloqade/squin/cirq/emit/runtime.py,sha256=dH7JSMt2mALPhVFjmZETQzvnTUQ3BFY5poe0YZpM5vQ,6819
149
151
  bloqade/squin/noise/__init__.py,sha256=xST2qojx6ZApRoiKIXOtifDzSpTZgo-67ja309FFvWw,364
150
152
  bloqade/squin/noise/_dialect.py,sha256=2IR98J-lXm5Y3srP9g-FD4JC-qTq2seureM6mKKq1xg,63
@@ -228,7 +230,7 @@ bloqade/visual/animation/runtime/atoms.py,sha256=EmjxhujLiHHPS_HtH_B-7TiqeHgvW5u
228
230
  bloqade/visual/animation/runtime/ppoly.py,sha256=JB9IP53N1w6adBJEue6J5Nmj818Id9JvrlgrmiQTU1I,1385
229
231
  bloqade/visual/animation/runtime/qpustate.py,sha256=rlmxQeJSvaohXrTpXQL5y-NJcpvfW33xPaYM1slv7cc,4270
230
232
  bloqade/visual/animation/runtime/utils.py,sha256=ju9IzOWX-vKwfpqUjlUKu3Ssr_UFPFFq-tzH_Nqyo_c,1212
231
- bloqade_circuit-0.6.4.dist-info/METADATA,sha256=DXODLKpcteMafxszRYcrC1WliONCL2gKY-9F-g4WftQ,3849
232
- bloqade_circuit-0.6.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
233
- bloqade_circuit-0.6.4.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
234
- bloqade_circuit-0.6.4.dist-info/RECORD,,
233
+ bloqade_circuit-0.6.6.dist-info/METADATA,sha256=uDJH5m1IwfBujpFvXFYjP89i0aHRbwSMEc6vhx9xwXw,3849
234
+ bloqade_circuit-0.6.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
235
+ bloqade_circuit-0.6.6.dist-info/licenses/LICENSE,sha256=S5GIJwR6QCixPA9wryYb44ZEek0Nz4rt_zLUqP05UbU,13160
236
+ bloqade_circuit-0.6.6.dist-info/RECORD,,