Skip to content

CI failing on main (AttributeError: 'Block' object has no attribute 'blocks') #566

@cduck

Description

@cduck

Three tests are failing on my machine (macOS ARM-based) when on the main branch. This is currently blocking merging #564.

uv Python version 3.10.18
uv pip freeze:

annotated-types==0.7.0
antlr4-python3-runtime==4.13.2
asttokens==3.0.0
attrs==25.4.0
autoray==0.8.0
beartype==0.22.3
black==25.9.0
-e file:///<...>/bloqade-circuit
certifi==2025.10.5
cffi==2.0.0
cfgv==3.4.0
charset-normalizer==3.4.4
cirq-core==1.5.0
clarabel==0.11.1
click==8.3.0
contourpy==1.3.2
cotengra==0.7.5
coverage==7.11.0
cycler==0.12.1
cytoolz==1.1.0
decorator==5.2.1
distlib==0.4.0
duet==0.2.9
exceptiongroup==1.3.0
executing==2.2.1
ffmpeg==1.4
filelock==3.20.0
fonttools==4.60.1
identify==2.6.15
idna==3.11
iniconfig==2.3.0
ipython==8.37.0
isort==7.0.0
jedi==0.19.2
kirin-toolchain==0.17.31
kiwisolver==1.4.9
lark==1.3.0
llvmlite==0.45.1
markdown-it-py==4.0.0
matplotlib==3.10.7
matplotlib-inline==0.2.1
mdurl==0.1.2
mpmath==1.3.0
mypy==1.18.2
mypy-extensions==1.1.0
networkx==3.4.2
nodeenv==1.9.1
numba==0.62.1
numpy==2.2.6
openqasm3==1.0.1
opt-einsum==3.4.0
ordered-set==4.1.0
packaging==25.0
pandas==2.3.3
parso==0.8.5
pathspec==0.12.1
pexpect==4.9.0
pillow==12.0.0
platformdirs==4.5.0
pluggy==1.6.0
ply==3.11
pre-commit==4.3.0
prompt-toolkit==3.0.52
psutil==7.1.1
ptyprocess==0.7.0
pure-eval==0.2.3
pycparser==2.23
pydantic==2.10.6
pydantic-core==2.27.2
pygments==2.19.2
pylatex==1.4.2
pyparsing==3.2.5
pyqasm==1.0.0
pyqrack==1.69.1
pyqrack-cpu==1.69.1
pyqt5==5.15.11
pyqt5-qt5==5.15.17
pyqt5-sip==12.17.1
pyright==1.1.406
pytest==8.4.2
python-dateutil==2.9.0.post0
pytokens==0.2.0
pytz==2025.2
pyyaml==6.0.3
qbraid==0.10.0
qbraid-core==0.1.45
qpsolvers==4.8.1
quimb==1.11.2
requests==2.32.5
rich==14.2.0
ruff==0.14.1
rust-just==1.43.0
rustworkx==0.17.1
scipy==1.15.3
six==1.17.0
sortedcontainers==2.4.0
stack-data==0.6.3
stim==1.15.0
sympy==1.14.0
tomli==2.3.0
tomlkit==0.13.3
toolz==1.1.0
tqdm==4.67.1
traitlets==5.14.3
typing-extensions==4.15.0
tzdata==2025.2
urllib3==2.5.0
virtualenv==20.35.3
wcwidth==0.2.14
==================================================== FAILURES ====================================================
_____________________________________________ test_classical_control _____________________________________________

run_sim = False

    def test_classical_control(run_sim: bool = False):
        q = cirq.LineQubit.range(2)
        circuit = cirq.Circuit(
            cirq.H(q[0]),
            cirq.measure(q[0]),
            cirq.X(q[1]).with_classical_controls("q(0)"),
            cirq.measure(q[1]),
        )

        print(circuit)

        if run_sim:
            simulator = cirq.Simulator()
            simulator.run(circuit, repetitions=1)

>       kernel = load_circuit(circuit)

test/cirq_utils/test_cirq_to_squin.py:281:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/bloqade/cirq_utils/lowering.py:102: in load_circuit
    body = target.run(
src/bloqade/cirq_utils/lowering.py:269: in run
    Walk(CFGCompactify()).rewrite(frame.curr_region)
.venv/lib/python3.10/site-packages/kirin/rewrite/walk.py:38: in rewrite
    result = self.rule.rewrite(subnode)
.venv/lib/python3.10/site-packages/kirin/rewrite/abc.py:38: in rewrite
    return self.rewrite_Statement(cast(Statement, node))
.venv/lib/python3.10/site-packages/kirin/rewrite/compactify.py:286: in rewrite_Statement
    cfg = trait.get_graph(region)
.venv/lib/python3.10/site-packages/kirin/ir/traits/region/ssacfg.py:22: in get_graph
    return CFG(region)
<string>:5: in __init__
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = CFG(parent=Block(_args=(<BlockArgument[bool] cond, uses: 0>,)), entry=None)

    def __post_init__(self):
>       if self.parent.blocks.isempty():
E       AttributeError: 'Block' object has no attribute 'blocks'

.venv/lib/python3.10/site-packages/kirin/analysis/cfg.py:29: AttributeError
---------------------------------------------- Captured stdout call ----------------------------------------------
0: ──────H───M───────────
             ║
1: ──────────╫───X───M───
             ║   ║
q(0): ═══════@═══^═══════
________________________________________ test_classical_control_register _________________________________________

    def test_classical_control_register():
        q = cirq.LineQubit.range(2)
        circuit = cirq.Circuit(
            cirq.H(q[0]),
            cirq.measure(q, key="test"),
            cirq.X(q[1]).with_classical_controls("test"),
            cirq.measure(q[1]),
        )

        print(circuit)

>       kernel = load_circuit(circuit)

test/cirq_utils/test_cirq_to_squin.py:296:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/bloqade/cirq_utils/lowering.py:102: in load_circuit
    body = target.run(
src/bloqade/cirq_utils/lowering.py:269: in run
    Walk(CFGCompactify()).rewrite(frame.curr_region)
.venv/lib/python3.10/site-packages/kirin/rewrite/walk.py:38: in rewrite
    result = self.rule.rewrite(subnode)
.venv/lib/python3.10/site-packages/kirin/rewrite/abc.py:38: in rewrite
    return self.rewrite_Statement(cast(Statement, node))
.venv/lib/python3.10/site-packages/kirin/rewrite/compactify.py:286: in rewrite_Statement
    cfg = trait.get_graph(region)
.venv/lib/python3.10/site-packages/kirin/ir/traits/region/ssacfg.py:22: in get_graph
    return CFG(region)
<string>:5: in __init__
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = CFG(parent=Block(_args=(<BlockArgument[bool] cond, uses: 0>,)), entry=None)

    def __post_init__(self):
>       if self.parent.blocks.isempty():
E       AttributeError: 'Block' object has no attribute 'blocks'

.venv/lib/python3.10/site-packages/kirin/analysis/cfg.py:29: AttributeError
---------------------------------------------- Captured stdout call ----------------------------------------------
0: ──────H───M───────────
             ║
1: ──────────M───X───M───
             ║   ║
test: ═══════@═══^═══════
________________________________________ test_multiple_classical_controls ________________________________________

run_sim = False

    def test_multiple_classical_controls(run_sim: bool = False):
        q = cirq.LineQubit.range(2)
        q2 = cirq.GridQubit(0, 1)
        circuit = cirq.Circuit(
            cirq.H(q[0]),
            cirq.H(q2),
            cirq.measure(q, key="test"),
            cirq.measure(q2),
            cirq.X(q[1]).with_classical_controls("test", "q(0, 1)"),
            cirq.measure(q[1]),
        )

        print(circuit)

        if run_sim:
            sim = cirq.Simulator()
            sim.run(circuit)

>       kernel = load_circuit(circuit)

test/cirq_utils/test_cirq_to_squin.py:318:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/bloqade/cirq_utils/lowering.py:102: in load_circuit
    body = target.run(
src/bloqade/cirq_utils/lowering.py:269: in run
    Walk(CFGCompactify()).rewrite(frame.curr_region)
.venv/lib/python3.10/site-packages/kirin/rewrite/walk.py:38: in rewrite
    result = self.rule.rewrite(subnode)
.venv/lib/python3.10/site-packages/kirin/rewrite/abc.py:38: in rewrite
    return self.rewrite_Statement(cast(Statement, node))
.venv/lib/python3.10/site-packages/kirin/rewrite/compactify.py:286: in rewrite_Statement
    cfg = trait.get_graph(region)
.venv/lib/python3.10/site-packages/kirin/ir/traits/region/ssacfg.py:22: in get_graph
    return CFG(region)
<string>:5: in __init__
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = CFG(parent=Block(_args=(<BlockArgument[bool] cond, uses: 0>,)), entry=None)

    def __post_init__(self):
>       if self.parent.blocks.isempty():
E       AttributeError: 'Block' object has no attribute 'blocks'

.venv/lib/python3.10/site-packages/kirin/analysis/cfg.py:29: AttributeError
---------------------------------------------- Captured stdout call ----------------------------------------------
                ┌──┐
(0, 1): ────H─────M────────────
                  ║
0: ─────────H────M╫────────────
                 ║║
1: ──────────────M╫────X───M───
                 ║║    ║
q(0, 1): ════════╬@════^═══════
                 ║     ║
test: ═══════════@═════^═══════
                └──┘
================================================ warnings summary ================================================
test/cirq_utils/test_clifford_to_cirq.py::test_custom_qubits
  /Users/caseyduckering/docs/dev/qec-arch/bloqade-circuit/src/bloqade/cirq_utils/emit/base.py:96: UserWarning: The keyword argument `qubits` is deprecated. Use `circuit_qubits` instead.
    warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================ short test summary info =============================================
FAILED test/cirq_utils/test_cirq_to_squin.py::test_classical_control - AttributeError: 'Block' object has no attribute 'blocks'
FAILED test/cirq_utils/test_cirq_to_squin.py::test_classical_control_register - AttributeError: 'Block' object has no attribute 'blocks'
FAILED test/cirq_utils/test_cirq_to_squin.py::test_multiple_classical_controls - AttributeError: 'Block' object has no attribute 'blocks'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/Users/caseyduckering/docs/dev/qec-arch/bloqade-circuit/.venv/lib/python3.10/site-packages/cirq/circuits/circuit_operation.py:173: KeyboardInterrupt
(to show a full traceback on KeyboardInterrupt use --full-trace)
============================= 3 failed, 217 passed, 14 xfailed, 1 warning in 11.18s ==============================

Metadata

Metadata

Labels

bugSomething isn't workingcirq

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions