Skip to content

Commit 346eefb

Browse files
committed
Resolve merge conflicts with david/571-kirin-upgrade-branch
2 parents ae296f8 + 2fb5402 commit 346eefb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+451
-374
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ requires-python = ">=3.10"
1313
dependencies = [
1414
"numpy>=1.22.0",
1515
"scipy>=1.13.1",
16-
"kirin-toolchain~=0.17.30",
16+
"kirin-toolchain~=0.20.0",
1717
"rich>=13.9.4",
1818
"pydantic>=1.3.0,<2.11.0",
1919
"pandas>=2.2.3",

src/bloqade/analysis/measure_id/impls.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from kirin.analysis import const
33
from kirin.dialects import py, scf, func, ilist
44

5-
from bloqade.squin import qubit
5+
from bloqade import qubit
66

77
from .lattice import (
88
AnyMeasureId,
@@ -21,22 +21,12 @@
2121
@qubit.dialect.register(key="measure_id")
2222
class SquinQubit(interp.MethodTable):
2323

24-
@interp.impl(qubit.MeasureQubit)
25-
def measure_qubit(
26-
self,
27-
interp: MeasurementIDAnalysis,
28-
frame: interp.Frame,
29-
stmt: qubit.MeasureQubit,
30-
):
31-
interp.measure_count += 1
32-
return (MeasureIdBool(interp.measure_count),)
33-
34-
@interp.impl(qubit.MeasureQubitList)
24+
@interp.impl(qubit.stmts.Measure)
3525
def measure_qubit_list(
3626
self,
3727
interp: MeasurementIDAnalysis,
3828
frame: interp.Frame,
39-
stmt: qubit.MeasureQubitList,
29+
stmt: qubit.stmts.Measure,
4030
):
4131

4232
# try to get the length of the list

src/bloqade/cirq_utils/emit/base.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,17 @@ def emit_invoke(self, emit: EmitCirq, frame: EmitCirqFrame, stmt: func.Invoke):
230230
"Function invokes should need to be inlined! "
231231
"If you called the emit_circuit method, that should have happened, please report this issue."
232232
)
233+
234+
@impl(func.Return)
235+
def return_(self, emit: EmitCirq, frame: EmitCirqFrame, stmt: func.Return):
236+
# NOTE: should only be hit if ignore_returns == True
237+
return ()
238+
239+
240+
@py.indexing.dialect.register(key="emit.cirq")
241+
class __Concrete(interp.MethodTable):
242+
243+
@interp.impl(py.indexing.GetItem)
244+
def getindex(self, interp, frame: interp.Frame, stmt: py.indexing.GetItem):
245+
# NOTE: no support for indexing into single statements in cirq
246+
return ()

src/bloqade/cirq_utils/emit/qubit.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import cirq
22
from kirin.interp import MethodTable, impl
33

4-
from bloqade.squin import qubit
4+
from bloqade.qubit import stmts as qubit
55

66
from .base import EmitCirq, EmitCirqFrame
77

@@ -18,17 +18,9 @@ def new(self, emit: EmitCirq, frame: EmitCirqFrame, stmt: qubit.New):
1818
frame.qubit_index += 1
1919
return (cirq_qubit,)
2020

21-
@impl(qubit.MeasureQubit)
22-
def measure_qubit(
23-
self, emit: EmitCirq, frame: EmitCirqFrame, stmt: qubit.MeasureQubit
24-
):
25-
qbit = frame.get(stmt.qubit)
26-
frame.circuit.append(cirq.measure(qbit))
27-
return (emit.void,)
28-
29-
@impl(qubit.MeasureQubitList)
21+
@impl(qubit.Measure)
3022
def measure_qubit_list(
31-
self, emit: EmitCirq, frame: EmitCirqFrame, stmt: qubit.MeasureQubitList
23+
self, emit: EmitCirq, frame: EmitCirqFrame, stmt: qubit.Measure
3224
):
3325
qbits = frame.get(stmt.qubits)
3426
frame.circuit.append(cirq.measure(qbits))

src/bloqade/cirq_utils/lowering.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from kirin.rewrite import Walk, CFGCompactify
77
from kirin.dialects import py, scf, func, ilist
88

9-
from bloqade.squin import gate, noise, qubit, kernel, qalloc
9+
from bloqade import qubit
10+
from bloqade.squin import gate, noise, kernel, qalloc
1011

1112

1213
def load_circuit(
@@ -403,13 +404,8 @@ def bool_op_or(x: bool, y: bool) -> bool:
403404
def visit_MeasurementGate(
404405
self, state: lowering.State[cirq.Circuit], node: cirq.GateOperation
405406
):
406-
cirq_qubits = node.qubits
407-
if len(cirq_qubits) == 1:
408-
qbit = self.lower_qubit_getindex(state, node.qubits[0])
409-
stmt = state.current_frame.push(qubit.MeasureQubit(qbit))
410-
else:
411-
qubits = self.lower_qubit_getindices(state, node.qubits)
412-
stmt = state.current_frame.push(qubit.MeasureQubitList(qubits))
407+
qubits = self.lower_qubit_getindices(state, node.qubits)
408+
stmt = state.current_frame.push(qubit.stmts.Measure(qubits))
413409

414410
# NOTE: add for classically controlled lowering
415411
key = node.gate.key

src/bloqade/cirq_utils/noise/model.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,29 @@ class GeminiNoiseModelABC(cirq.NoiseModel, MoveNoiseModelABC):
5656
"""The correlated CZ error rates as a dictionary"""
5757

5858
def __post_init__(self):
59-
if (
59+
is_ambiguous = (
60+
self.cz_paired_correlated_rates is not None
61+
and self.cz_paired_error_probabilities is not None
62+
)
63+
if is_ambiguous:
64+
raise ValueError(
65+
"Received both `cz_paired_correlated_rates` and `cz_paired_error_probabilities` as input. This is ambiguous, please only set one."
66+
)
67+
68+
use_default = (
6069
self.cz_paired_correlated_rates is None
6170
and self.cz_paired_error_probabilities is None
62-
):
71+
)
72+
if use_default:
6373
# NOTE: no input, set to default value; weird setattr for frozen dataclass
6474
object.__setattr__(
6575
self,
6676
"cz_paired_error_probabilities",
6777
_default_cz_paired_correlated_rates(),
6878
)
69-
elif (
70-
self.cz_paired_correlated_rates is not None
71-
and self.cz_paired_correlated_rates is None
72-
):
79+
return
7380

81+
if self.cz_paired_correlated_rates is not None:
7482
if self.cz_paired_correlated_rates.shape != (4, 4):
7583
raise ValueError(
7684
"Expected a 4x4 array of probabilities for cz_paired_correlated_rates"
@@ -82,13 +90,11 @@ def __post_init__(self):
8290
"cz_paired_error_probabilities",
8391
correlated_noise_array_to_dict(self.cz_paired_correlated_rates),
8492
)
85-
elif (
86-
self.cz_paired_correlated_rates is not None
87-
and self.cz_paired_correlated_rates is not None
88-
):
89-
raise ValueError(
90-
"Received both `cz_paired_correlated_rates` and `cz_paired_correlated_rates` as input. This is ambiguous, please only set one."
91-
)
93+
return
94+
95+
assert (
96+
self.cz_paired_error_probabilities is not None
97+
), "This error should not happen! Please report this issue."
9298

9399
@staticmethod
94100
def validate_moments(moments: Iterable[cirq.Moment]):

src/bloqade/native/_prelude.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from kirin.prelude import structural_no_opt
66
from typing_extensions import Doc
77

8-
from bloqade.squin import qubit
8+
from bloqade import qubit
99

1010
from .dialects import gates
1111

src/bloqade/native/dialects/gates/_interface.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from kirin import lowering
44
from kirin.dialects import ilist
55

6-
from bloqade.squin import qubit
6+
from bloqade import qubit
77

88
from .stmts import CZ, R, Rz
99

src/bloqade/native/dialects/gates/stmts.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from kirin.decl import info, statement
33
from kirin.dialects import ilist
44

5-
from bloqade.squin import qubit
5+
from bloqade.types import QubitType
66

77
from ._dialect import dialect
88

@@ -12,20 +12,20 @@
1212
@statement(dialect=dialect)
1313
class CZ(ir.Statement):
1414
traits = frozenset({lowering.FromPythonCall()})
15-
ctrls: ir.SSAValue = info.argument(ilist.IListType[qubit.QubitType, N])
16-
qargs: ir.SSAValue = info.argument(ilist.IListType[qubit.QubitType, N])
15+
ctrls: ir.SSAValue = info.argument(ilist.IListType[QubitType, N])
16+
qargs: ir.SSAValue = info.argument(ilist.IListType[QubitType, N])
1717

1818

1919
@statement(dialect=dialect)
2020
class R(ir.Statement):
2121
traits = frozenset({lowering.FromPythonCall()})
22-
inputs: ir.SSAValue = info.argument(ilist.IListType[qubit.QubitType, types.Any])
22+
inputs: ir.SSAValue = info.argument(ilist.IListType[QubitType, types.Any])
2323
axis_angle: ir.SSAValue = info.argument(types.Float)
2424
rotation_angle: ir.SSAValue = info.argument(types.Float)
2525

2626

2727
@statement(dialect=dialect)
2828
class Rz(ir.Statement):
2929
traits = frozenset({lowering.FromPythonCall()})
30-
inputs: ir.SSAValue = info.argument(ilist.IListType[qubit.QubitType, types.Any])
30+
inputs: ir.SSAValue = info.argument(ilist.IListType[QubitType, types.Any])
3131
rotation_angle: ir.SSAValue = info.argument(types.Float)

src/bloqade/native/stdlib/broadcast.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from kirin.dialects import ilist
55

6-
from bloqade.squin import qubit
6+
from bloqade import qubit
77
from bloqade.native._prelude import kernel
88
from bloqade.native.dialects.gates import _interface as native
99

0 commit comments

Comments
 (0)