Quick Start

In this guide, we walk through compiling two simple logical computations: a static logical CNOT and a dynamic logical T gate. Each step is shown in Python, Rust, and the bloq CLI; pick whichever you installed in Installation. Both examples load built-in gallery graphs, so you do not need to write any source yet.

Static Logical CNOT

The cnot gallery entry implements a logical CNOT with control and target input and output ports. Load it and print its BLOG definition:

from pathlib import Path

import bloq

cnot = bloq.GalleryItem.CNOT.load()
print(cnot.to_text())
let cnot = GalleryItem::CNOT.build();
println!("{}", cnot.to_blog_text());
bloq gallery
bloq view --gallery cnot --html

The gallery command lists available entries; the viewer writes cnot.html. The BLOG source is displayed below and can also be opened in the editor’s gallery.

BLOG 1.0

module main {
  in control_in: data = 0
  out control_out: data = 3
  in target_in: data = 6
  out target_out: data = 9

  0: Port [0, 0, 0] <In_Control>
  1: ZXZ [0, 0, 1]
  2: ZXZ [0, 0, 2]
  3: Port [0, 0, 3] <Out_Control>
  4: ZXX [0, 1, 1]
  5: ZXZ [0, 1, 2]
  6: Port [1, 1, 0] <In_Target>
  7: ZXZ [1, 1, 1]
  8: ZXZ [1, 1, 2]
  9: Port [1, 1, 3] <Out_Target>
  0 -> +Z
  1 -> +Z
  1 -> +Y
  2 -> +Z
  4 -> +Z
  5 -> +X
  6 -> +Z
  7 -> +Z
  8 -> +Z

}

Compile to Bloq IR

We then compile the block graph into Bloq IR format.

cnot_program = bloq.compile(cnot, distance=3)
cnot_program.save("cnot.bloqir")
let cnot_program = compile(&cnot, 3)?;
std::fs::write("cnot.bloqir", cnot_program.to_text())?;
bloq compile --gallery cnot -d 3 --backend ir-text -o cnot.bloqir

Bloq IR is a graph-based representation of a physical quantum program. Quantum nodes place reusable circuit templates; classical nodes construct logical readouts, decode measurements, and compute control values. Quantum, value, and order edges describe their dependencies. The IR also retains detectors, logical boundary operators, dynamic regions, and source provenance.

The same program can be saved as human-readable text (.bloqir) or compact binary (.bloq). See Inspect and exchange Bloq IR for its structure, codecs, and inspection APIs. Here is the compiled CNOT in text form:

BLOQIR 1
metadata bloq_compile.code_distance u64 3
metadata bloq_compile.convention string fixed-bulk
logical-input (0,0,0) instance i2 x X(3,1)*X(3,3)*X(3,5) z Z(1,3)*Z(3,3)*Z(5,3)
logical-input (1,1,0) instance i0 x X(11,9)*X(11,11)*X(11,13) z Z(9,11)*Z(11,11)*Z(13,11)
logical-output (0,0,3) instance i9 x X(3,1)*X(3,3)*X(3,5) z Z(1,3)*Z(3,3)*Z(5,3)
logical-output (1,1,3) instance i7 x X(11,9)*X(11,11)*X(11,13) z Z(9,11)*Z(11,11)*Z(13,11)

template t0 {
  circuit {
    MPP X(3,1)*X(5,1):m0 Z(1,1)*Z(1,3):m1 X(1,1)*X(1,3)*X(3,1)*X(3,3):m2 Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3):m3 Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5):m4 X(3,3)*X(3,5)*X(5,3)*X(5,5):m5 Z(5,3)*Z(5,5):m6 X(1,5)*X(3,5):m7
  }
  flow _ -> X(3,1)*X(5,1) meas m0 center (4,0)
  flow _ -> Z(1,1)*Z(1,3) meas m1 center (0,2)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m2 center (2,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m3 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m4 center (2,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m5 center (4,4)
  flow _ -> Z(5,3)*Z(5,5) meas m6 center (6,4)
  flow _ -> X(1,5)*X(3,5) meas m7 center (2,6)
}

template t1 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3
    MX (4,0):m4 (2,2):m5 (4,4):m6 (2,6):m7
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m8 (4,2):m9 (2,4):m10 (6,4):m11
    MX (4,0):m12 (2,2):m13 (4,4):m14 (2,6):m15
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m16 (4,2):m17 (2,4):m18 (6,4):m19
    MX (4,0):m20 (2,2):m21 (4,4):m22 (2,6):m23
  }
  detector m4*m12 @ (4,0)
  detector m0*m8 @ (0,2)
  detector m5*m13 @ (2,2)
  detector m1*m9 @ (4,2)
  detector m2*m10 @ (2,4)
  detector m6*m14 @ (4,4)
  detector m3*m11 @ (6,4)
  detector m7*m15 @ (2,6)
  detector m12*m20 @ (4,0)
  detector m8*m16 @ (0,2)
  detector m13*m21 @ (2,2)
  detector m9*m17 @ (4,2)
  detector m10*m18 @ (2,4)
  detector m14*m22 @ (4,4)
  detector m11*m19 @ (6,4)
  detector m15*m23 @ (2,6)
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow X(3,1)*X(5,1) -> _ meas m4 center (4,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m5 center (2,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m6 center (4,4)
  flow X(1,5)*X(3,5) -> _ meas m7 center (2,6)
  flow _ -> Z(1,1)*Z(1,3) meas m16 center (0,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m17 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m18 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m19 center (6,4)
  flow _ -> X(3,1)*X(5,1) meas m20 center (4,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m21 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m22 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m23 center (2,6)
}

template t2 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4) (0,6) (4,6)
    RX (4,0) (2,2) (4,4) (2,6)
    RX (1,7) (3,7) (5,7)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4) (2,6) (1,7) (3,7) (4,6)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (2,6) (3,7) (3,5) (4,6)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (1,7) (0,6) (2,6) (1,5) (5,7) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (2,6) (3,5) (5,5) (4,6)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3 (0,6):m4 (4,6):m5
    MX (4,0):m6 (2,2):m7 (4,4):m8 (2,6):m9
    TICK
    R (0,2) (4,2) (2,4) (6,4) (0,6) (4,6)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4) (2,6) (1,7) (3,7) (4,6)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (2,6) (3,7) (3,5) (4,6)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (1,7) (0,6) (2,6) (1,5) (5,7) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (2,6) (3,5) (5,5) (4,6)
    TICK
    M (0,2):m10 (4,2):m11 (2,4):m12 (6,4):m13 (0,6):m14 (4,6):m15
    MX (4,0):m16 (2,2):m17 (4,4):m18 (2,6):m19
    TICK
    R (0,2) (4,2) (2,4) (6,4) (0,6) (4,6)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4) (2,6) (1,7) (3,7) (4,6)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (2,6) (3,7) (3,5) (4,6)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (1,7) (0,6) (2,6) (1,5) (5,7) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (2,6) (3,5) (5,5) (4,6)
    TICK
    M (0,2):m20 (4,2):m21 (2,4):m22 (6,4):m23 (0,6):m24 (4,6):m25
    MX (4,0):m26 (2,2):m27 (4,4):m28 (2,6):m29
    MX (1,7):m30 (3,7):m31 (5,7):m32
  }
  detector m6*m16 @ (4,0)
  detector m0*m10 @ (0,2)
  detector m7*m17 @ (2,2)
  detector m1*m11 @ (4,2)
  detector m2*m12 @ (2,4)
  detector m8*m18 @ (4,4)
  detector m3*m13 @ (6,4)
  detector m4*m14 @ (0,6)
  detector m9*m19 @ (2,6)
  detector m5*m15 @ (4,6)
  detector m16*m26 @ (4,0)
  detector m10*m20 @ (0,2)
  detector m17*m27 @ (2,2)
  detector m11*m21 @ (4,2)
  detector m12*m22 @ (2,4)
  detector m18*m28 @ (4,4)
  detector m13*m23 @ (6,4)
  detector m14*m24 @ (0,6)
  detector m19*m29 @ (2,6)
  detector m15*m25 @ (4,6)
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow X(3,1)*X(5,1) -> _ meas m6 center (4,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m7 center (2,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m8 center (4,4)
  flow X(1,5)*X(3,5) -> _ meas m9 center (2,6)
  flow _ -> Z(1,1)*Z(1,3) meas m20 center (0,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m21 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m22 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m23 center (6,4)
  flow _ -> X(3,1)*X(5,1) meas m26 center (4,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m27 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m28 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m30*m31*m29 center (2,6)
}

template t3 {
  circuit {
    R (2,0) (6,0) (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    RX (1,-1) (3,-1) (5,-1) (1,1) (3,1) (5,1) (1,3) (3,3) (5,3) (1,5) (3,5) (5,5)
    TICK
    CX (1,1) (2,0) (4,0) (3,1) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (1,-1) (2,0) (4,0) (5,1) (5,-1) (6,0) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (3,1) (2,0) (4,0) (3,-1) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (3,-1) (2,0) (4,0) (5,-1) (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (2,0):m0 (6,0):m1 (0,2):m2 (4,2):m3 (2,4):m4 (6,4):m5
    MX (4,0):m6 (2,2):m7 (4,4):m8 (2,6):m9
    TICK
    R (2,0) (6,0) (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (1,1) (2,0) (4,0) (3,1) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (1,-1) (2,0) (4,0) (5,1) (5,-1) (6,0) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (3,1) (2,0) (4,0) (3,-1) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (3,-1) (2,0) (4,0) (5,-1) (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (2,0):m10 (6,0):m11 (0,2):m12 (4,2):m13 (2,4):m14 (6,4):m15
    MX (4,0):m16 (2,2):m17 (4,4):m18 (2,6):m19
    TICK
    R (2,0) (6,0) (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (1,1) (2,0) (4,0) (3,1) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (1,-1) (2,0) (4,0) (5,1) (5,-1) (6,0) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (3,1) (2,0) (4,0) (3,-1) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (3,-1) (2,0) (4,0) (5,-1) (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (2,0):m20 (6,0):m21 (0,2):m22 (4,2):m23 (2,4):m24 (6,4):m25
    MX (4,0):m26 (2,2):m27 (4,4):m28 (2,6):m29
    MX (1,-1):m30 (3,-1):m31 (5,-1):m32
  }
  detector m6 @ (4,0)
  detector m7 @ (2,2)
  detector m8 @ (4,4)
  detector m9 @ (2,6)
  detector m0*m10 @ (2,0)
  detector m6*m16 @ (4,0)
  detector m1*m11 @ (6,0)
  detector m2*m12 @ (0,2)
  detector m7*m17 @ (2,2)
  detector m3*m13 @ (4,2)
  detector m4*m14 @ (2,4)
  detector m8*m18 @ (4,4)
  detector m5*m15 @ (6,4)
  detector m9*m19 @ (2,6)
  detector m10*m20 @ (2,0)
  detector m16*m26 @ (4,0)
  detector m11*m21 @ (6,0)
  detector m12*m22 @ (0,2)
  detector m17*m27 @ (2,2)
  detector m13*m23 @ (4,2)
  detector m14*m24 @ (2,4)
  detector m18*m28 @ (4,4)
  detector m15*m25 @ (6,4)
  detector m19*m29 @ (2,6)
  flow _ -> Z(1,1)*Z(1,3) meas m22 center (0,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m23 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m24 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m25 center (6,4)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m27 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m28 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m29 center (2,6)
  flow _ -> X(3,1)*X(5,1) meas m31*m32*m26 center (4,0)
}

template t4 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (6,2) (4,4) (2,6) (6,6)
    R (7,1) (7,3) (7,5)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4) (2,6) (1,5) (6,6) (5,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (2,6) (3,5) (6,6) (7,5)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3
    MX (4,0):m4 (2,2):m5 (6,2):m6 (4,4):m7 (2,6):m8 (6,6):m9
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (6,2) (4,4) (2,6) (6,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4) (2,6) (1,5) (6,6) (5,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (2,6) (3,5) (6,6) (7,5)
    TICK
    M (0,2):m10 (4,2):m11 (2,4):m12 (6,4):m13
    MX (4,0):m14 (2,2):m15 (6,2):m16 (4,4):m17 (2,6):m18 (6,6):m19
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (6,2) (4,4) (2,6) (6,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4) (2,6) (1,5) (6,6) (5,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (2,6) (3,5) (6,6) (7,5)
    TICK
    M (0,2):m20 (4,2):m21 (2,4):m22 (6,4):m23
    MX (4,0):m24 (2,2):m25 (6,2):m26 (4,4):m27 (2,6):m28 (6,6):m29
    M (1,1):m30 (3,1):m31 (5,1):m32 (7,1):m33 (1,3):m34 (3,3):m35 (5,3):m36 (7,3):m37 (1,5):m38 (3,5):m39 (5,5):m40 (7,5):m41
  }
  detector m4*m14 @ (4,0)
  detector m0*m10 @ (0,2)
  detector m5*m15 @ (2,2)
  detector m1*m11 @ (4,2)
  detector m6*m16 @ (6,2)
  detector m2*m12 @ (2,4)
  detector m7*m17 @ (4,4)
  detector m3*m13 @ (6,4)
  detector m8*m18 @ (2,6)
  detector m9*m19 @ (6,6)
  detector m14*m24 @ (4,0)
  detector m10*m20 @ (0,2)
  detector m15*m25 @ (2,2)
  detector m11*m21 @ (4,2)
  detector m16*m26 @ (6,2)
  detector m12*m22 @ (2,4)
  detector m17*m27 @ (4,4)
  detector m13*m23 @ (6,4)
  detector m18*m28 @ (2,6)
  detector m19*m29 @ (6,6)
  detector m20*m30*m34 @ (0,2)
  detector m21*m31*m32*m35*m36 @ (4,2)
  detector m22*m34*m35*m38*m39 @ (2,4)
  detector m23*m36*m37*m40*m41 @ (6,4)
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow X(3,1)*X(5,1) -> _ meas m4 center (4,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m5 center (2,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m7 center (4,4)
  flow X(1,5)*X(3,5) -> _ meas m8 center (2,6)
}

template t5 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4)
    RX (0,0) (4,0) (2,2) (0,4) (4,4) (2,6)
    R (-1,1) (-1,3) (-1,5)
    TICK
    CX (0,0) (-1,1) (4,0) (3,1) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (0,0) (1,1) (4,0) (5,1) (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3
    MX (0,0):m4 (4,0):m5 (2,2):m6 (0,4):m7 (4,4):m8 (2,6):m9
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (0,0) (4,0) (2,2) (0,4) (4,4) (2,6)
    TICK
    CX (0,0) (-1,1) (4,0) (3,1) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (0,0) (1,1) (4,0) (5,1) (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m10 (4,2):m11 (2,4):m12 (6,4):m13
    MX (0,0):m14 (4,0):m15 (2,2):m16 (0,4):m17 (4,4):m18 (2,6):m19
    TICK
    R (0,2) (4,2) (2,4) (6,4)
    RX (0,0) (4,0) (2,2) (0,4) (4,4) (2,6)
    TICK
    CX (0,0) (-1,1) (4,0) (3,1) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (0,0) (1,1) (4,0) (5,1) (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m20 (4,2):m21 (2,4):m22 (6,4):m23
    MX (0,0):m24 (4,0):m25 (2,2):m26 (0,4):m27 (4,4):m28 (2,6):m29
    M (-1,1):m30 (-1,3):m31 (-1,5):m32
  }
  detector m4*m14 @ (0,0)
  detector m5*m15 @ (4,0)
  detector m0*m10 @ (0,2)
  detector m6*m16 @ (2,2)
  detector m1*m11 @ (4,2)
  detector m7*m17 @ (0,4)
  detector m2*m12 @ (2,4)
  detector m8*m18 @ (4,4)
  detector m3*m13 @ (6,4)
  detector m9*m19 @ (2,6)
  detector m14*m24 @ (0,0)
  detector m15*m25 @ (4,0)
  detector m10*m20 @ (0,2)
  detector m16*m26 @ (2,2)
  detector m11*m21 @ (4,2)
  detector m17*m27 @ (0,4)
  detector m12*m22 @ (2,4)
  detector m18*m28 @ (4,4)
  detector m13*m23 @ (6,4)
  detector m19*m29 @ (2,6)
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow X(3,1)*X(5,1) -> _ meas m5 center (4,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m6 center (2,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m8 center (4,4)
  flow X(1,5)*X(3,5) -> _ meas m9 center (2,6)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m21 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m22 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m23 center (6,4)
  flow _ -> X(3,1)*X(5,1) meas m25 center (4,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m26 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m28 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m29 center (2,6)
  flow _ -> Z(1,1)*Z(1,3) meas m30*m31*m20 center (0,2)
}

template t6 {
  circuit {
    MPP X(3,1)*X(5,1):m0 Z(1,1)*Z(1,3):m1 X(1,1)*X(1,3)*X(3,1)*X(3,3):m2 Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3):m3 Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5):m4 X(3,3)*X(3,5)*X(5,3)*X(5,5):m5 Z(5,3)*Z(5,5):m6 X(1,5)*X(3,5):m7
  }
  flow X(3,1)*X(5,1) -> _ meas m0 center (4,0)
  flow Z(1,1)*Z(1,3) -> _ meas m1 center (0,2)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m2 center (2,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m3 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m4 center (2,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m5 center (4,4)
  flow Z(5,3)*Z(5,5) -> _ meas m6 center (6,4)
  flow X(1,5)*X(3,5) -> _ meas m7 center (2,6)
}

template t7 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3
    MX (4,0):m4 (2,2):m5 (4,4):m6 (2,6):m7
  }
  flow _ -> Z(1,1)*Z(1,3) meas m0 center (0,2)
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m1 center (4,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m2 center (2,4)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m3 center (6,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow _ -> X(3,1)*X(5,1) meas m4 center (4,0)
  flow X(3,1)*X(5,1) -> _ meas m4 center (4,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m5 center (2,2)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m5 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m6 center (4,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m6 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m7 center (2,6)
  flow X(1,5)*X(3,5) -> _ meas m7 center (2,6)
}

template t8 {
  circuit {
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m0 (4,2):m1 (2,4):m2 (6,4):m3
    MX (4,0):m4 (2,2):m5 (4,4):m6 (2,6):m7
    TICK
    REPEAT 2 b1
  }
  body b1 {
    R (0,2) (4,2) (2,4) (6,4)
    RX (4,0) (2,2) (4,4) (2,6)
    TICK
    CX (4,0) (3,1) (2,2) (1,3) (3,3) (4,2) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (4,0) (5,1) (2,2) (3,3) (3,1) (4,2) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4)
    TICK
    CX (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (0,2):m8 (4,2):m9 (2,4):m10 (6,4):m11
    MX (4,0):m12 (2,2):m13 (4,4):m14 (2,6):m15
    TICK
  }
  detector body(b1) m8*s0 @ (0,2)
  detector body(b1) m9*s1 @ (4,2)
  detector body(b1) m10*s2 @ (2,4)
  detector body(b1) m11*s3 @ (6,4)
  detector body(b1) m12*s4 @ (4,0)
  detector body(b1) m13*s5 @ (2,2)
  detector body(b1) m14*s6 @ (4,4)
  detector body(b1) m15*s7 @ (2,6)
  loop(b1,s0) init m0 next m8
  loop(b1,s1) init m1 next m9
  loop(b1,s2) init m2 next m10
  loop(b1,s3) init m3 next m11
  loop(b1,s4) init m4 next m12
  loop(b1,s5) init m5 next m13
  loop(b1,s6) init m6 next m14
  loop(b1,s7) init m7 next m15
  flow Z(1,1)*Z(1,3) -> _ meas m0 center (0,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(5,3)*Z(5,5) -> _ meas m3 center (6,4)
  flow X(3,1)*X(5,1) -> _ meas m4 center (4,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m5 center (2,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m6 center (4,4)
  flow X(1,5)*X(3,5) -> _ meas m7 center (2,6)
  flow _ -> Z(1,1)*Z(1,3) meas m8 center (0,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m9 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m10 center (2,4)
  flow _ -> Z(5,3)*Z(5,5) meas m11 center (6,4)
  flow _ -> X(3,1)*X(5,1) meas m12 center (4,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m13 center (2,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m14 center (4,4)
  flow _ -> X(1,5)*X(3,5) meas m15 center (2,6)
}

bundle b0 owners t0 t1 {
  detector o0:m1*o1:m0 @ (0,2)
  detector o0:m3*o1:m1 @ (4,2)
  detector o0:m4*o1:m2 @ (2,4)
  detector o0:m6*o1:m3 @ (6,4)
  detector o0:m0*o1:m4 @ (4,0)
  detector o0:m2*o1:m5 @ (2,2)
  detector o0:m5*o1:m6 @ (4,4)
  detector o0:m7*o1:m7 @ (2,6)
}

bundle b1 owners t0 t2 {
  detector o0:m1*o1:m0 @ (0,2)
  detector o0:m3*o1:m1 @ (4,2)
  detector o0:m4*o1:m2 @ (2,4)
  detector o0:m6*o1:m3 @ (6,4)
  detector o0:m0*o1:m6 @ (4,0)
  detector o0:m2*o1:m7 @ (2,2)
  detector o0:m5*o1:m8 @ (4,4)
  detector o0:m7*o1:m9 @ (2,6)
}

bundle b2 owners t3 t4 {
  detector o0:m22*o1:m0 @ (0,2)
  detector o0:m23*o1:m1 @ (4,2)
  detector o0:m24*o1:m2 @ (2,4)
  detector o0:m25*o1:m3 @ (6,4)
  detector o0:m26*o0:m31*o0:m32*o1:m4 @ (4,0)
  detector o0:m27*o1:m5 @ (2,2)
  detector o0:m28*o1:m7 @ (4,4)
  detector o0:m29*o1:m8 @ (2,6)
}

bundle b3 owners t1 t5 {
  detector o0:m16*o1:m0 @ (0,2)
  detector o0:m17*o1:m1 @ (4,2)
  detector o0:m18*o1:m2 @ (2,4)
  detector o0:m19*o1:m3 @ (6,4)
  detector o0:m20*o1:m5 @ (4,0)
  detector o0:m21*o1:m6 @ (2,2)
  detector o0:m22*o1:m8 @ (4,4)
  detector o0:m23*o1:m9 @ (2,6)
}

bundle b4 owners t2 t1 {
  detector o0:m20*o1:m0 @ (0,2)
  detector o0:m21*o1:m1 @ (4,2)
  detector o0:m22*o1:m2 @ (2,4)
  detector o0:m23*o1:m3 @ (6,4)
  detector o0:m26*o1:m4 @ (4,0)
  detector o0:m27*o1:m5 @ (2,2)
  detector o0:m28*o1:m6 @ (4,4)
  detector o0:m29*o0:m30*o0:m31*o1:m7 @ (2,6)
}

bundle b5 owners t5 t6 {
  detector o0:m25*o1:m0 @ (4,0)
  detector o0:m20*o0:m30*o0:m31*o1:m1 @ (0,2)
  detector o0:m26*o1:m2 @ (2,2)
  detector o0:m21*o1:m3 @ (4,2)
  detector o0:m22*o1:m4 @ (2,4)
  detector o0:m28*o1:m5 @ (4,4)
  detector o0:m23*o1:m6 @ (6,4)
  detector o0:m29*o1:m7 @ (2,6)
}

bundle b6 owners t1 t6 {
  detector o0:m20*o1:m0 @ (4,0)
  detector o0:m16*o1:m1 @ (0,2)
  detector o0:m21*o1:m2 @ (2,2)
  detector o0:m17*o1:m3 @ (4,2)
  detector o0:m18*o1:m4 @ (2,4)
  detector o0:m22*o1:m5 @ (4,4)
  detector o0:m19*o1:m6 @ (6,4)
  detector o0:m23*o1:m7 @ (2,6)
}

graph {
  n0 quantum {
    instance i0 t0 @ (8,8) from block (1,1,0)
    from blocks (1,1,0)
  }
  n1 quantum {
    instance i1 t1 @ (8,8) from block (1,1,1)
    use b0 i0 i1 @ (8,8)
    from blocks (1,1,1)
  }
  n2 quantum {
    instance i2 t0 @ (0,0) from block (0,0,0)
    from blocks (0,0,0)
  }
  n3 quantum {
    instance i3 t2 @ (0,0) from block (0,0,1)
    instance i4 t3 @ (0,8) from block (0,1,1)
    use b1 i2 i3 @ (0,0)
    from blocks (0,0,1) (0,1,1)
  }
  n4 quantum {
    instance i5 t4 @ (0,8) from block (0,1,2)
    instance i6 t5 @ (8,8) from block (1,1,2)
    use b2 i4 i5 @ (0,8)
    use b3 i1 i6 @ (8,8)
    from blocks (0,1,2) (1,1,2)
  }
  n5 quantum {
    instance i7 t6 @ (8,8) from block (1,1,3)
    use b5 i6 i7 @ (8,8)
    from blocks (1,1,3)
  }
  n6 quantum {
    instance i8 t1 @ (0,0) from block (0,0,2)
    use b4 i3 i8 @ (0,0)
    from blocks (0,0,2)
  }
  n7 quantum {
    instance i9 t6 @ (0,0) from block (0,0,3)
    use b6 i8 i9 @ (0,0)
    from blocks (0,0,3)
  }
  n10 observable 0 operators i0 input X(11,9)*X(11,11)*X(11,13), i7 output X(11,9)*X(11,11)*X(11,13) from generator 0
  n11 compute in0 from frame z (1,1,3)
  n18 observable 1 measurements i3:m2*i3:m3*i3:m4*i3:m5*i4:m0*i4:m1*i4:m2*i4:m3*i5:m34*i5:m35*i5:m36*i5:m37 operators i0 input Z(9,11)*Z(11,11)*Z(13,11), i2 input Z(1,3)*Z(3,3)*Z(5,3), i7 output Z(9,11)*Z(11,11)*Z(13,11) from generator 1
  n19 compute in0 from frame x (1,1,3)
  n25 observable 2 measurements i3:m31*i5:m4*i5:m6*i5:m7*i5:m9*i6:m4*i6:m6*i6:m7*i6:m9 operators i0 input X(11,9)*X(11,11)*X(11,13), i2 input X(3,1)*X(3,3)*X(3,5), i9 output X(3,1)*X(3,3)*X(3,5) from generator 2
  n26 compute in0 from frame z (0,0,3)
  n28 observable 3 operators i2 input Z(1,3)*Z(3,3)*Z(5,3), i9 output Z(1,3)*Z(3,3)*Z(5,3) from generator 3
  n29 compute in0 from frame x (0,0,3)
  n0 -> n1 quantum (1,1,0)>(1,1,1) padding offset (8,8) one t7 loop t8
  n1 -> n4 quantum (1,1,1)>(1,1,2) padding offset (8,8) one t7 loop t8
  n2 -> n3 quantum (0,0,0)>(0,0,1) padding offset (0,0) one t7 loop t8
  n3 -> n4 quantum (0,1,1)>(0,1,2) padding offset (0,8) one t7 loop t8
  n3 -> n6 quantum (0,0,1)>(0,0,2) padding offset (0,0) one t7 loop t8
  n4 -> n5 quantum (1,1,2)>(1,1,3) padding offset (8,8) one t7 loop t8
  n6 -> n7 quantum (0,0,2)>(0,0,3) padding offset (0,0) one t7 loop t8
  n0 -> n1 order
  n2 -> n3 order
  n3 -> n4 order
  n1 -> n4 order
  n3 -> n6 order
  n4 -> n5 order
  n6 -> n7 order
  n10 -> n11 value 0
  n18 -> n19 value 0
  n25 -> n26 value 0
  n28 -> n29 value 0
  n5 -> n10 order
  n5 -> n18 order
  n4 -> n25 order
  n7 -> n25 order
  n7 -> n28 order
}

Download the CNOT IR.

Visualize the IR graph

Export the graph as SVG, including its classical nodes:

Path("cnot.svg").write_text(cnot_program.to_svg(include_classical=True), encoding="utf-8")
std::fs::write("cnot.svg", cnot_program.to_svg(true))?;
bloq view cnot.bloqir --svg --include-classical -o cnot.svg
Compiled CNOT dependency graph including quantum and classical nodes and nested regions.

Optional: emit to Stim

Bloq includes a default emitter from static Bloq IR to the Stim backend. It translates physical operations and logical readouts into a circuit with detector and observable annotations. See Stim emission for supported IR constructs and emission options.

circuit = bloq.emit_stim(cnot_program)
circuit.to_file("cnot.stim")
let stim_text = emit_bloq_stim(&cnot_program)?;
std::fs::write("cnot.stim", stim_text)?;
bloq emit cnot.bloqir -o cnot.stim

The following is the emitted noiseless CNOT circuit:

QUBIT_COORDS(0, 2) 0
QUBIT_COORDS(0, 6) 1
QUBIT_COORDS(0, 10) 2
QUBIT_COORDS(1, 1) 3
QUBIT_COORDS(1, 3) 4
QUBIT_COORDS(1, 5) 5
QUBIT_COORDS(1, 7) 6
QUBIT_COORDS(1, 9) 7
QUBIT_COORDS(1, 11) 8
QUBIT_COORDS(1, 13) 9
QUBIT_COORDS(2, 2) 10
QUBIT_COORDS(2, 4) 11
QUBIT_COORDS(2, 6) 12
QUBIT_COORDS(2, 8) 13
QUBIT_COORDS(2, 10) 14
QUBIT_COORDS(2, 12) 15
QUBIT_COORDS(2, 14) 16
QUBIT_COORDS(3, 1) 17
QUBIT_COORDS(3, 3) 18
QUBIT_COORDS(3, 5) 19
QUBIT_COORDS(3, 7) 20
QUBIT_COORDS(3, 9) 21
QUBIT_COORDS(3, 11) 22
QUBIT_COORDS(3, 13) 23
QUBIT_COORDS(4, 0) 24
QUBIT_COORDS(4, 2) 25
QUBIT_COORDS(4, 4) 26
QUBIT_COORDS(4, 6) 27
QUBIT_COORDS(4, 8) 28
QUBIT_COORDS(4, 10) 29
QUBIT_COORDS(4, 12) 30
QUBIT_COORDS(5, 1) 31
QUBIT_COORDS(5, 3) 32
QUBIT_COORDS(5, 5) 33
QUBIT_COORDS(5, 7) 34
QUBIT_COORDS(5, 9) 35
QUBIT_COORDS(5, 11) 36
QUBIT_COORDS(5, 13) 37
QUBIT_COORDS(6, 4) 38
QUBIT_COORDS(6, 8) 39
QUBIT_COORDS(6, 10) 40
QUBIT_COORDS(6, 12) 41
QUBIT_COORDS(6, 14) 42
QUBIT_COORDS(7, 9) 43
QUBIT_COORDS(7, 11) 44
QUBIT_COORDS(7, 13) 45
QUBIT_COORDS(8, 8) 46
QUBIT_COORDS(8, 10) 47
QUBIT_COORDS(8, 12) 48
QUBIT_COORDS(9, 9) 49
QUBIT_COORDS(9, 11) 50
QUBIT_COORDS(9, 13) 51
QUBIT_COORDS(10, 10) 52
QUBIT_COORDS(10, 12) 53
QUBIT_COORDS(10, 14) 54
QUBIT_COORDS(11, 9) 55
QUBIT_COORDS(11, 11) 56
QUBIT_COORDS(11, 13) 57
QUBIT_COORDS(12, 8) 58
QUBIT_COORDS(12, 10) 59
QUBIT_COORDS(12, 12) 60
QUBIT_COORDS(13, 9) 61
QUBIT_COORDS(13, 11) 62
QUBIT_COORDS(13, 13) 63
QUBIT_COORDS(14, 12) 64
# node 0: quantum blocks (1,1,0)
OBSERVABLE_INCLUDE(0) X55 X56 X57
OBSERVABLE_INCLUDE(1) Z50 Z56 Z62
OBSERVABLE_INCLUDE(2) X55 X56 X57
MPP X55*X61 Z49*Z50 X49*X50*X55*X56 Z55*Z56*Z61*Z62 Z50*Z51*Z56*Z57 X56*X57*X62*X63 Z62*Z63 X51*X57
TICK
# node 1: quantum blocks (1,1,1)
R 47 59 53 64
RX 58 52 60 54
TICK
CX 58 55 52 50 56 59 51 53 60 57 63 64
TICK
CX 58 61 52 56 55 59 50 53 60 63 62 64
TICK
CX 50 47 52 49 62 59 57 53 60 56 54 51
TICK
CX 49 47 52 55 61 59 56 53 60 62 54 57
TICK
M 47 59 53 64
MX 58 52 60 54
TICK
R 47 59 53 64
RX 58 52 60 54
TICK
CX 58 55 52 50 56 59 51 53 60 57 63 64
TICK
CX 58 61 52 56 55 59 50 53 60 63 62 64
TICK
CX 50 47 52 49 62 59 57 53 60 56 54 51
TICK
CX 49 47 52 55 61 59 56 53 60 62 54 57
TICK
M 47 59 53 64
MX 58 52 60 54
TICK
R 47 59 53 64
RX 58 52 60 54
TICK
CX 58 55 52 50 56 59 51 53 60 57 63 64
TICK
CX 58 61 52 56 55 59 50 53 60 63 62 64
TICK
CX 50 47 52 49 62 59 57 53 60 56 54 51
TICK
CX 49 47 52 55 61 59 56 53 60 62 54 57
TICK
M 47 59 53 64
MX 58 52 60 54
DETECTOR(12, 8) rec[-20] rec[-12]
DETECTOR(8, 10) rec[-24] rec[-16]
DETECTOR(10, 10) rec[-19] rec[-11]
DETECTOR(12, 10) rec[-23] rec[-15]
DETECTOR(10, 12) rec[-22] rec[-14]
DETECTOR(12, 12) rec[-18] rec[-10]
DETECTOR(14, 12) rec[-21] rec[-13]
DETECTOR(10, 14) rec[-17] rec[-9]
DETECTOR(12, 8) rec[-12] rec[-4]
DETECTOR(8, 10) rec[-16] rec[-8]
DETECTOR(10, 10) rec[-11] rec[-3]
DETECTOR(12, 10) rec[-15] rec[-7]
DETECTOR(10, 12) rec[-14] rec[-6]
DETECTOR(12, 12) rec[-10] rec[-2]
DETECTOR(14, 12) rec[-13] rec[-5]
DETECTOR(10, 14) rec[-9] rec[-1]
DETECTOR(8, 10) rec[-31] rec[-24]
DETECTOR(12, 10) rec[-29] rec[-23]
DETECTOR(10, 12) rec[-28] rec[-22]
DETECTOR(14, 12) rec[-26] rec[-21]
DETECTOR(12, 8) rec[-32] rec[-20]
DETECTOR(10, 10) rec[-30] rec[-19]
DETECTOR(12, 12) rec[-27] rec[-18]
DETECTOR(10, 14) rec[-25] rec[-17]
TICK
# node 2: quantum blocks (0,0,0)
OBSERVABLE_INCLUDE(1) Z4 Z18 Z32
OBSERVABLE_INCLUDE(2) X17 X18 X19
OBSERVABLE_INCLUDE(3) Z4 Z18 Z32
MPP X17*X31 Z3*Z4 X3*X4*X17*X18 Z17*Z18*Z31*Z32 Z4*Z5*Z18*Z19 X18*X19*X32*X33 Z32*Z33 X5*X19
TICK
# node 3: quantum blocks (0,0,1) (0,1,1)
R 0 25 11 38 1 27
RX 24 10 26 12
RX 6 20 34
R 13 39 2 29 15 41
RX 28 14 30 16
RX 7 21 35 8 22 36 9 23 37
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38 12 6 20 27
CX 7 13 28 21 35 39 14 8 22 29 9 15 30 23 37 41
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38 12 20 19 27
CX 6 13 28 35 34 39 14 22 21 29 8 15 30 37 36 41
TICK
CX 4 0 10 3 32 25 19 11 26 18 6 1 12 5 34 27
CX 21 13 28 20 8 2 14 7 36 29 23 15 30 22 16 9
TICK
CX 3 0 10 17 31 25 18 11 26 32 5 1 12 19 33 27
CX 20 13 28 34 7 2 14 21 35 29 22 15 30 36 16 23
TICK
M 0 25 11 38 1 27
MX 24 10 26 12
M 13 39 2 29 15 41
MX 28 14 30 16
TICK
R 0 25 11 38 1 27
RX 24 10 26 12
R 13 39 2 29 15 41
RX 28 14 30 16
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38 12 6 20 27
CX 7 13 28 21 35 39 14 8 22 29 9 15 30 23 37 41
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38 12 20 19 27
CX 6 13 28 35 34 39 14 22 21 29 8 15 30 37 36 41
TICK
CX 4 0 10 3 32 25 19 11 26 18 6 1 12 5 34 27
CX 21 13 28 20 8 2 14 7 36 29 23 15 30 22 16 9
TICK
CX 3 0 10 17 31 25 18 11 26 32 5 1 12 19 33 27
CX 20 13 28 34 7 2 14 21 35 29 22 15 30 36 16 23
TICK
M 0 25 11 38 1 27
MX 24 10 26 12
M 13 39 2 29 15 41
MX 28 14 30 16
TICK
R 0 25 11 38 1 27
RX 24 10 26 12
R 13 39 2 29 15 41
RX 28 14 30 16
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38 12 6 20 27
CX 7 13 28 21 35 39 14 8 22 29 9 15 30 23 37 41
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38 12 20 19 27
CX 6 13 28 35 34 39 14 22 21 29 8 15 30 37 36 41
TICK
CX 4 0 10 3 32 25 19 11 26 18 6 1 12 5 34 27
CX 21 13 28 20 8 2 14 7 36 29 23 15 30 22 16 9
TICK
CX 3 0 10 17 31 25 18 11 26 32 5 1 12 19 33 27
CX 20 13 28 34 7 2 14 21 35 29 22 15 30 36 16 23
TICK
M 0 25 11 38 1 27
MX 24 10 26 12
MX 6 20 34
M 13 39 2 29 15 41
MX 28 14 30 16
DETECTOR(4, 0) rec[-57] rec[-37]
DETECTOR(0, 2) rec[-63] rec[-43]
DETECTOR(2, 2) rec[-56] rec[-36]
DETECTOR(4, 2) rec[-62] rec[-42]
DETECTOR(2, 4) rec[-61] rec[-41]
DETECTOR(4, 4) rec[-55] rec[-35]
DETECTOR(6, 4) rec[-60] rec[-40]
DETECTOR(0, 6) rec[-59] rec[-39]
DETECTOR(2, 6) rec[-54] rec[-34]
DETECTOR(4, 6) rec[-58] rec[-38]
DETECTOR(4, 0) rec[-37] rec[-17]
DETECTOR(0, 2) rec[-43] rec[-23]
DETECTOR(2, 2) rec[-36] rec[-16]
DETECTOR(4, 2) rec[-42] rec[-22]
DETECTOR(2, 4) rec[-41] rec[-21]
DETECTOR(4, 4) rec[-35] rec[-15]
DETECTOR(6, 4) rec[-40] rec[-20]
DETECTOR(0, 6) rec[-39] rec[-19]
DETECTOR(2, 6) rec[-34] rec[-14]
DETECTOR(4, 6) rec[-38] rec[-18]
DETECTOR(4, 8) rec[-47]
DETECTOR(2, 10) rec[-46]
DETECTOR(4, 12) rec[-45]
DETECTOR(2, 14) rec[-44]
DETECTOR(2, 8) rec[-53] rec[-33]
DETECTOR(4, 8) rec[-47] rec[-27]
DETECTOR(6, 8) rec[-52] rec[-32]
DETECTOR(0, 10) rec[-51] rec[-31]
DETECTOR(2, 10) rec[-46] rec[-26]
DETECTOR(4, 10) rec[-50] rec[-30]
DETECTOR(2, 12) rec[-49] rec[-29]
DETECTOR(4, 12) rec[-45] rec[-25]
DETECTOR(6, 12) rec[-48] rec[-28]
DETECTOR(2, 14) rec[-44] rec[-24]
DETECTOR(2, 8) rec[-33] rec[-10]
DETECTOR(4, 8) rec[-27] rec[-4]
DETECTOR(6, 8) rec[-32] rec[-9]
DETECTOR(0, 10) rec[-31] rec[-8]
DETECTOR(2, 10) rec[-26] rec[-3]
DETECTOR(4, 10) rec[-30] rec[-7]
DETECTOR(2, 12) rec[-29] rec[-6]
DETECTOR(4, 12) rec[-25] rec[-2]
DETECTOR(6, 12) rec[-28] rec[-5]
DETECTOR(2, 14) rec[-24] rec[-1]
DETECTOR(0, 2) rec[-70] rec[-63]
DETECTOR(4, 2) rec[-68] rec[-62]
DETECTOR(2, 4) rec[-67] rec[-61]
DETECTOR(6, 4) rec[-65] rec[-60]
DETECTOR(4, 0) rec[-71] rec[-57]
DETECTOR(2, 2) rec[-69] rec[-56]
DETECTOR(4, 4) rec[-66] rec[-55]
DETECTOR(2, 6) rec[-64] rec[-54]
TICK
# node 4: quantum blocks (0,1,2) (1,1,2)
R 2 29 15 41
RX 28 14 40 30 16 42
R 43 44 45
R 47 59 53 64
RX 46 58 52 48 60 54
TICK
CX 28 21 14 8 22 29 40 36 9 15 30 23 37 41
CX 46 43 58 55 44 47 52 50 56 59 48 45 51 53 60 57 63 64
TICK
CX 28 35 14 22 21 29 40 44 8 15 30 37 36 41
CX 46 49 58 61 43 47 52 56 55 59 48 51 50 53 60 63 62 64
TICK
CX 8 2 14 7 36 29 40 35 23 15 30 22 45 41 16 9 42 37
CX 50 47 52 49 62 59 48 44 57 53 60 56 54 51
TICK
CX 7 2 14 21 35 29 40 43 22 15 30 36 44 41 16 23 42 45
CX 49 47 52 55 61 59 48 50 56 53 60 62 54 57
TICK
M 2 29 15 41
MX 28 14 40 30 16 42
M 47 59 53 64
MX 46 58 52 48 60 54
TICK
R 2 29 15 41
RX 28 14 40 30 16 42
R 47 59 53 64
RX 46 58 52 48 60 54
TICK
CX 28 21 14 8 22 29 40 36 9 15 30 23 37 41
CX 46 43 58 55 44 47 52 50 56 59 48 45 51 53 60 57 63 64
TICK
CX 28 35 14 22 21 29 40 44 8 15 30 37 36 41
CX 46 49 58 61 43 47 52 56 55 59 48 51 50 53 60 63 62 64
TICK
CX 8 2 14 7 36 29 40 35 23 15 30 22 45 41 16 9 42 37
CX 50 47 52 49 62 59 48 44 57 53 60 56 54 51
TICK
CX 7 2 14 21 35 29 40 43 22 15 30 36 44 41 16 23 42 45
CX 49 47 52 55 61 59 48 50 56 53 60 62 54 57
TICK
M 2 29 15 41
MX 28 14 40 30 16 42
M 47 59 53 64
MX 46 58 52 48 60 54
TICK
R 2 29 15 41
RX 28 14 40 30 16 42
R 47 59 53 64
RX 46 58 52 48 60 54
TICK
CX 28 21 14 8 22 29 40 36 9 15 30 23 37 41
CX 46 43 58 55 44 47 52 50 56 59 48 45 51 53 60 57 63 64
TICK
CX 28 35 14 22 21 29 40 44 8 15 30 37 36 41
CX 46 49 58 61 43 47 52 56 55 59 48 51 50 53 60 63 62 64
TICK
CX 8 2 14 7 36 29 40 35 23 15 30 22 45 41 16 9 42 37
CX 50 47 52 49 62 59 48 44 57 53 60 56 54 51
TICK
CX 7 2 14 21 35 29 40 43 22 15 30 36 44 41 16 23 42 45
CX 49 47 52 55 61 59 48 50 56 53 60 62 54 57
TICK
M 2 29 15 41
MX 28 14 40 30 16 42
M 7 21 35 43 8 22 36 44 9 23 37 45
M 47 59 53 64
MX 46 58 52 48 60 54
DETECTOR(4, 8) rec[-68] rec[-48]
DETECTOR(0, 10) rec[-72] rec[-52]
DETECTOR(2, 10) rec[-67] rec[-47]
DETECTOR(4, 10) rec[-71] rec[-51]
DETECTOR(6, 10) rec[-66] rec[-46]
DETECTOR(2, 12) rec[-70] rec[-50]
DETECTOR(4, 12) rec[-65] rec[-45]
DETECTOR(6, 12) rec[-69] rec[-49]
DETECTOR(2, 14) rec[-64] rec[-44]
DETECTOR(6, 14) rec[-63] rec[-43]
DETECTOR(4, 8) rec[-48] rec[-28]
DETECTOR(0, 10) rec[-52] rec[-32]
DETECTOR(2, 10) rec[-47] rec[-27]
DETECTOR(4, 10) rec[-51] rec[-31]
DETECTOR(6, 10) rec[-46] rec[-26]
DETECTOR(2, 12) rec[-50] rec[-30]
DETECTOR(4, 12) rec[-45] rec[-25]
DETECTOR(6, 12) rec[-49] rec[-29]
DETECTOR(2, 14) rec[-44] rec[-24]
DETECTOR(6, 14) rec[-43] rec[-23]
DETECTOR(0, 10) rec[-32] rec[-22] rec[-18]
DETECTOR(4, 10) rec[-31] rec[-21] rec[-20] rec[-17] rec[-16]
DETECTOR(2, 12) rec[-30] rec[-18] rec[-17] rec[-14] rec[-13]
DETECTOR(6, 12) rec[-29] rec[-16] rec[-15] rec[-12] rec[-11]
DETECTOR(8, 8) rec[-58] rec[-38]
DETECTOR(12, 8) rec[-57] rec[-37]
DETECTOR(8, 10) rec[-62] rec[-42]
DETECTOR(10, 10) rec[-56] rec[-36]
DETECTOR(12, 10) rec[-61] rec[-41]
DETECTOR(8, 12) rec[-55] rec[-35]
DETECTOR(10, 12) rec[-60] rec[-40]
DETECTOR(12, 12) rec[-54] rec[-34]
DETECTOR(14, 12) rec[-59] rec[-39]
DETECTOR(10, 14) rec[-53] rec[-33]
DETECTOR(8, 8) rec[-38] rec[-6]
DETECTOR(12, 8) rec[-37] rec[-5]
DETECTOR(8, 10) rec[-42] rec[-10]
DETECTOR(10, 10) rec[-36] rec[-4]
DETECTOR(12, 10) rec[-41] rec[-9]
DETECTOR(8, 12) rec[-35] rec[-3]
DETECTOR(10, 12) rec[-40] rec[-8]
DETECTOR(12, 12) rec[-34] rec[-2]
DETECTOR(14, 12) rec[-39] rec[-7]
DETECTOR(10, 14) rec[-33] rec[-1]
DETECTOR(0, 10) rec[-80] rec[-72]
DETECTOR(4, 10) rec[-79] rec[-71]
DETECTOR(2, 12) rec[-78] rec[-70]
DETECTOR(6, 12) rec[-77] rec[-69]
DETECTOR(4, 8) rec[-84] rec[-83] rec[-76] rec[-68]
DETECTOR(2, 10) rec[-75] rec[-67]
DETECTOR(4, 12) rec[-74] rec[-65]
DETECTOR(2, 14) rec[-73] rec[-64]
DETECTOR(8, 10) rec[-151] rec[-62]
DETECTOR(12, 10) rec[-150] rec[-61]
DETECTOR(10, 12) rec[-149] rec[-60]
DETECTOR(14, 12) rec[-148] rec[-59]
DETECTOR(12, 8) rec[-147] rec[-57]
DETECTOR(10, 10) rec[-146] rec[-56]
DETECTOR(12, 12) rec[-145] rec[-54]
DETECTOR(10, 14) rec[-144] rec[-53]
TICK
# node 5: quantum blocks (1,1,3)
MPP X55*X61 Z49*Z50 X49*X50*X55*X56 Z55*Z56*Z61*Z62 Z50*Z51*Z56*Z57 X56*X57*X62*X63 Z62*Z63 X51*X57
DETECTOR(12, 8) rec[-13] rec[-8]
DETECTOR(8, 10) rec[-27] rec[-23] rec[-18] rec[-7]
DETECTOR(10, 10) rec[-12] rec[-6]
DETECTOR(12, 10) rec[-17] rec[-5]
DETECTOR(10, 12) rec[-16] rec[-4]
DETECTOR(12, 12) rec[-10] rec[-3]
DETECTOR(14, 12) rec[-15] rec[-2]
DETECTOR(10, 14) rec[-9] rec[-1]
TICK
OBSERVABLE_INCLUDE(0) X55 X56 X57
OBSERVABLE_INCLUDE(1) Z50 Z56 Z62
# node 6: quantum blocks (0,0,2)
R 0 25 11 38
RX 24 10 26 12
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38
TICK
CX 4 0 10 3 32 25 19 11 26 18 12 5
TICK
CX 3 0 10 17 31 25 18 11 26 32 12 19
TICK
M 0 25 11 38
MX 24 10 26 12
TICK
R 0 25 11 38
RX 24 10 26 12
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38
TICK
CX 4 0 10 3 32 25 19 11 26 18 12 5
TICK
CX 3 0 10 17 31 25 18 11 26 32 12 19
TICK
M 0 25 11 38
MX 24 10 26 12
TICK
R 0 25 11 38
RX 24 10 26 12
TICK
CX 24 17 10 4 18 25 5 11 26 19 33 38
TICK
CX 24 31 10 18 17 25 4 11 26 33 32 38
TICK
CX 4 0 10 3 32 25 19 11 26 18 12 5
TICK
CX 3 0 10 17 31 25 18 11 26 32 12 19
TICK
M 0 25 11 38
MX 24 10 26 12
DETECTOR(4, 0) rec[-20] rec[-12]
DETECTOR(0, 2) rec[-24] rec[-16]
DETECTOR(2, 2) rec[-19] rec[-11]
DETECTOR(4, 2) rec[-23] rec[-15]
DETECTOR(2, 4) rec[-22] rec[-14]
DETECTOR(4, 4) rec[-18] rec[-10]
DETECTOR(6, 4) rec[-21] rec[-13]
DETECTOR(2, 6) rec[-17] rec[-9]
DETECTOR(4, 0) rec[-12] rec[-4]
DETECTOR(0, 2) rec[-16] rec[-8]
DETECTOR(2, 2) rec[-11] rec[-3]
DETECTOR(4, 2) rec[-15] rec[-7]
DETECTOR(2, 4) rec[-14] rec[-6]
DETECTOR(4, 4) rec[-10] rec[-2]
DETECTOR(6, 4) rec[-13] rec[-5]
DETECTOR(2, 6) rec[-9] rec[-1]
DETECTOR(0, 2) rec[-127] rec[-24]
DETECTOR(4, 2) rec[-126] rec[-23]
DETECTOR(2, 4) rec[-125] rec[-22]
DETECTOR(6, 4) rec[-124] rec[-21]
DETECTOR(4, 0) rec[-121] rec[-20]
DETECTOR(2, 2) rec[-120] rec[-19]
DETECTOR(4, 4) rec[-119] rec[-18]
DETECTOR(2, 6) rec[-118] rec[-117] rec[-116] rec[-17]
TICK
# node 7: quantum blocks (0,0,3)
MPP X17*X31 Z3*Z4 X3*X4*X17*X18 Z17*Z18*Z31*Z32 Z4*Z5*Z18*Z19 X18*X19*X32*X33 Z32*Z33 X5*X19
DETECTOR(4, 0) rec[-12] rec[-8]
DETECTOR(0, 2) rec[-16] rec[-7]
DETECTOR(2, 2) rec[-11] rec[-6]
DETECTOR(4, 2) rec[-15] rec[-5]
DETECTOR(2, 4) rec[-14] rec[-4]
DETECTOR(4, 4) rec[-10] rec[-3]
DETECTOR(6, 4) rec[-13] rec[-2]
DETECTOR(2, 6) rec[-9] rec[-1]
TICK
OBSERVABLE_INCLUDE(2) X17 X18 X19
OBSERVABLE_INCLUDE(3) Z4 Z18 Z32
# node 18: observable 1 generator 1
OBSERVABLE_INCLUDE(1) rec[-173] rec[-172] rec[-171] rec[-170] rec[-165] rec[-164] rec[-163] rec[-162] rec[-58] rec[-57] rec[-56] rec[-55]
# node 25: observable 2 generator 2
OBSERVABLE_INCLUDE(2) rec[-124] rec[-108] rec[-106] rec[-105] rec[-103] rec[-98] rec[-96] rec[-95] rec[-93]

Download the Stim circuit.

Dynamic Logical T Gate

Load the gallery graph

The t_gate implements a logical T gate using a cultivated T resource state and gate teleportation. It demonstrates dynamic features: a repeat-until-success cultivation protocol and measurement-basis selection conditioned on a logical measurement result.

t_gate = bloq.GalleryItem.T_GATE.load()
print(t_gate.to_text())
let t_gate = GalleryItem::T.build();
println!("{}", t_gate.to_blog_text());
bloq view --gallery t_gate --html

Open t_gate.html to inspect the gallery graph.

BLOG 1.0

module main {
  in q_in: data = 0
  out q_out: data = 2

  0: Port [0, 0, 0]
  1: XZX [0, 0, 1]
  2: Port [0, 0, 2]
  3: T [1, 0, 0]
  4: XZX [1, 0, 1]
  5: XY [1, 0, 2]
  0 -> +Z
  1 -> +Z
  1 -> +X
  3 -> +Z
  5 -> -Z

  mzz = measure 1 -> +X
  resolve 5 if !mzz

}

Compile to Bloq IR

t_program = bloq.compile(t_gate, distance=3)
t_program.save("t-gate.bloqir")
let t_program = compile(&t_gate, 3)?;
std::fs::write("t-gate.bloqir", t_program.to_text())?;
bloq compile --gallery t_gate -d 3 --backend ir-text -o t-gate.bloqir

The resulting IR retains runtime control alongside physical circuits:

BLOQIR 1
metadata bloq_compile.code_distance u64 3
metadata bloq_compile.convention string fixed-bulk
logical-input (0,0,0) instance i2 x X(1,3)*X(3,3)*X(5,3) z Z(3,1)*Z(3,3)*Z(3,5)
logical-output (0,0,2) instance i7 x X(1,3)*X(3,3)*X(5,3) z Z(3,1)*Z(3,3)*Z(3,5)

template t0 {
  circuit {
    RX (5,-3) (3,-3) (3,-1) (1,-3) (6,-4) (3,-5) (5,-1) (2,-4) (2,-6) (0,-2)
    R (4,-4) (4,-2) (2,-2)
    TICK
    CX (5,-3) (4,-4) (3,-3) (4,-2) (3,-1) (2,-2)
    TICK
    CX (5,-3) (4,-2) (3,-3) (2,-2)
    TICK
    CX (3,-3) (4,-4) (3,-1) (4,-2) (1,-3) (2,-2) (6,-4) (5,-3)
    TICK
    CX (3,-5) (4,-4) (5,-1) (4,-2) (2,-4) (1,-3) (5,-3) (6,-4)
    TICK
    CX (2,-4) (3,-5) (4,-2) (5,-1) (2,-2) (1,-3)
    TICK
    CX (4,-4) (3,-5) (1,-3) (2,-4)
    TICK
    CX (3,-5) (2,-4)
    TICK
    T (2,-4)
    TICK
    CX (3,-5) (2,-4)
    TICK
    CX (1,-3) (2,-4)
    TICK
    CX (2,-6) (3,-5) (0,-2) (1,-3)
    TICK
    CX (3,-5) (2,-6) (1,-3) (0,-2)
    TICK
    RX (1,-3)
    R (2,-2) (1,-1)
    RX (4,-2)
    R (5,-3)
    RX (3,-5)
    R (4,-4) (5,-5)
    TICK
    CX (0,-2) (1,-1) (1,-3) (2,-2) (4,-2) (5,-3) (3,-5) (4,-4) (6,-4) (5,-5)
    TICK
    CX (3,-1) (2,-2) (0,-2) (1,-3) (5,-1) (4,-2) (6,-4) (5,-3) (2,-6) (3,-5) (3,-3) (4,-4)
    TICK
    CX (1,-1) (0,-2) (3,-3) (4,-2) (2,-4) (3,-5) (5,-5) (6,-4)
    TICK
    CX (2,-4) (1,-3) (3,-3) (2,-2) (3,-1) (4,-2) (5,-5) (4,-4)
    TICK
    CX (1,-3) (2,-4) (2,-2) (3,-3) (4,-2) (3,-1) (4,-4) (5,-5)
    TICK
    CX (2,-2) (3,-1) (4,-2) (3,-3) (3,-5) (2,-6) (6,-4) (5,-5)
    TICK
    CX (2,-2) (1,-1) (4,-2) (5,-1) (5,-3) (6,-4) (3,-5) (2,-4) (4,-4) (3,-3)
    TICK
    CX (1,-3) (2,-2) (4,-2) (5,-3) (3,-5) (4,-4) (5,-5) (6,-4)
    TICK
    MX (1,-3):m0
    M (2,-2):m1
    M (0,-2):m2
    MX (4,-2):m3
    M (5,-3):m4
    MX (3,-5):m5
    M (4,-4):m6
    MX (5,-5):m7
    TICK
    RX (3,-5) (4,-4) (5,-3) (4,-2) (1,-3) (2,-2)
    TICK
    T (3,-3) (1,-1) (6,-4) (5,-1) (2,-4) (3,-1) (2,-6)
    TICK
    CX (3,-5) (2,-6) (4,-4) (3,-3) (5,-3) (6,-4) (4,-2) (5,-1) (1,-3) (2,-4) (2,-2) (1,-1)
    TICK
    CX (2,-4) (3,-5) (4,-2) (5,-3) (3,-3) (2,-2)
    TICK
    CX (3,-3) (2,-4) (4,-2) (3,-1)
    TICK
    CX (3,-3) (4,-2)
    TICK
    MX (3,-3):m8
    TICK
    RX (3,-3)
    TICK
    CX (3,-3) (4,-2)
    TICK
    CX (3,-3) (2,-4) (4,-2) (3,-1)
    TICK
    CX (2,-4) (3,-5) (4,-2) (5,-3) (3,-3) (2,-2)
    TICK
    CX (3,-5) (2,-6) (4,-4) (3,-3) (5,-3) (6,-4) (4,-2) (5,-1) (1,-3) (2,-4) (2,-2) (1,-1)
    TICK
    T_DAG (3,-3) (1,-1) (6,-4) (5,-1) (2,-4) (3,-1) (2,-6)
    TICK
    MX (3,-5):m9
    MX (4,-4):m10
    MX (5,-3):m11
    MX (4,-2):m12
    MX (1,-3):m13
    MX (2,-2):m14
  }
  flow _ -> Z(3,-3)*Z(3,-1)*Z(5,-1)*Z(6,-4) restart
  flow _ -> Z(2,-6)*Z(2,-4)*Z(3,-3)*Z(6,-4) meas m1*m4*m6 restart
  flow _ -> Z(1,-1)*Z(2,-4)*Z(3,-3)*Z(3,-1) meas m6 restart
  flow _ -> X(1,-1)*X(2,-4)*X(3,-3)*X(3,-1) meas m8*m0 restart
  flow _ -> X(3,-3)*X(3,-1)*X(5,-1)*X(6,-4) meas m8*m3 restart
  flow _ -> X(2,-6)*X(2,-4)*X(3,-3)*X(6,-4) meas m8*m5*m7 restart
  restart m0
  restart m1
  restart m3*m7
  restart m4
  restart m5
  restart m6
  restart m2
  restart m1*m4*m7*m8
  restart m9
  restart m11
  restart m12
  restart m13
  restart m14
  restart m8*m10
}

template t1 {
  circuit {
    R (1,-3) (4,-2) (3,-5) (1,1) (3,1) (5,1) (1,3) (3,3) (5,3) (1,5) (3,5) (5,5) (4,2) (2,4) (4,6)
    RX (2,-2) (5,-3) (4,-4) (5,-5) (2,0) (4,0) (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (2,-2) (1,-3) (5,-3) (4,-2) (4,-4) (3,-5) (5,-5) (6,-4) (4,0) (3,-1) (2,2) (1,1) (3,1) (4,2) (6,2) (5,1) (1,3) (2,4) (4,4) (3,3) (3,5) (4,6)
    TICK
    CX (2,-2) (3,-1) (4,-2) (3,-3) (5,-3) (6,-4) (3,-5) (2,-6) (2,0) (1,-1) (4,0) (3,1) (2,2) (1,3) (5,1) (4,2) (6,2) (5,3) (3,3) (2,4) (4,4) (3,5) (5,5) (4,6)
    TICK
    CX (2,-2) (1,-1) (4,-2) (3,-1) (3,-5) (2,-4) (4,-4) (3,-3) (6,-4) (5,-5) (2,0) (1,1) (4,0) (5,-1) (2,2) (3,1) (3,3) (4,2) (0,4) (1,3) (1,5) (2,4) (4,4) (5,3)
    TICK
    CX (1,-3) (2,-4) (2,-2) (3,-3) (4,-2) (5,-1) (4,-4) (5,-5) (4,0) (5,1) (2,2) (3,3) (5,3) (4,2) (0,4) (1,5) (3,5) (2,4) (4,4) (5,5)
    TICK
    CX (2,-2) (1,-3) (3,-1) (4,-2) (5,-5) (4,-4)
    TICK
    MX (2,0):m0 (2,-2):m1 (4,0):m2 (2,2):m3 (6,2):m4 (0,4):m5 (4,4):m6
    M (1,-3):m7 (4,2):m8 (2,4):m9 (4,6):m10
    TICK
    R (1,-3) (4,2) (2,4) (4,6)
    RX (2,-2) (0,0) (2,0) (4,0) (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (3,-3) (4,-2) (2,-6) (3,-5) (5,-5) (6,-4) (2,-2) (1,-3) (0,0) (1,-1) (4,0) (3,-1) (2,2) (1,1) (3,1) (4,2) (6,2) (5,1) (1,3) (2,4) (4,4) (3,3) (3,5) (4,6)
    TICK
    CX (5,-1) (4,-2) (6,-4) (5,-3) (2,-4) (3,-5) (3,-3) (4,-4) (0,0) (1,1) (2,-2) (1,-1) (4,0) (3,1) (2,2) (1,3) (5,1) (4,2) (6,2) (5,3) (3,3) (2,4) (4,4) (3,5) (5,5) (4,6)
    TICK
    CX (5,-3) (4,-2) (4,-4) (3,-5) (6,-4) (5,-5) (1,-3) (2,-4) (2,-2) (3,-3) (2,0) (1,-1) (4,0) (5,-1) (2,2) (3,1) (3,3) (4,2) (0,4) (1,3) (1,5) (2,4) (4,4) (5,3)
    TICK
    CX (2,-2) (3,-1) (2,0) (1,1) (4,0) (5,1) (2,2) (3,3) (5,3) (4,2) (0,4) (1,5) (3,5) (2,4) (4,4) (5,5)
    TICK
    CX (2,-2) (1,-3)
    TICK
    M (4,-2):m11 (3,-5):m12 (5,-5):m13 (1,-3):m14 (1,-1):m15 (4,2):m16 (2,4):m17 (4,6):m18
    MX (5,-3):m19 (4,-4):m20 (0,0):m21 (2,0):m22 (2,-2):m23 (4,0):m24 (2,2):m25 (6,2):m26 (0,4):m27 (4,4):m28
    TICK
    R (4,-2) (3,-5) (2,0) (4,2) (2,4) (4,6)
    RX (5,-3) (4,-4) (5,-5) (4,0) (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (5,-3) (4,-2) (4,-4) (3,-5) (5,-5) (6,-4) (4,0) (3,-1) (2,2) (1,1) (3,1) (4,2) (6,2) (5,1) (1,3) (2,4) (4,4) (3,3) (3,5) (4,6)
    TICK
    CX (3,-5) (2,-6) (4,-4) (3,-3) (4,-2) (3,-1) (4,0) (3,1) (2,2) (1,3) (5,1) (4,2) (6,2) (5,3) (3,3) (2,4) (4,4) (3,5) (5,5) (4,6)
    TICK
    CX (1,1) (2,0) (3,-5) (2,-4) (4,-4) (5,-5) (4,-2) (3,-3) (5,-3) (6,-4) (4,0) (5,-1) (2,2) (3,1) (3,3) (4,2) (0,4) (1,3) (1,5) (2,4) (4,4) (5,3)
    TICK
    CX (3,1) (2,0) (4,-2) (5,-1) (4,-4) (3,-5) (4,0) (5,1) (2,2) (3,3) (5,3) (4,2) (0,4) (1,5) (3,5) (2,4) (4,4) (5,5)
    TICK
    CX (5,-3) (4,-2)
    TICK
    MX (4,-4):m29 (5,-3):m30 (4,0):m31 (2,2):m32 (6,2):m33 (0,4):m34 (4,4):m35
    M (3,-3):m36 (6,-4):m37 (5,-5):m38 (2,-4):m39 (3,-1):m40 (2,-6):m41 (5,-1):m42 (3,-5):m43 (4,-2):m44 (2,0):m45 (4,2):m46 (2,4):m47 (4,6):m48
    TICK
    R (2,0) (4,2) (2,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (5,5) (4,6)
    TICK
    M (2,0):m49 (4,2):m50 (2,4):m51 (4,6):m52
    MX (2,2):m53 (6,2):m54 (0,4):m55 (4,4):m56
    TICK
    REPEAT 3 b1
  }
  body b1 {
    R (2,0) (4,2) (2,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (5,5) (4,6)
    TICK
    M (2,0):m57 (4,2):m58 (2,4):m59 (4,6):m60
    MX (2,2):m61 (6,2):m62 (0,4):m63 (4,4):m64
    TICK
  }
  detector m3*m25 @ (2,2)
  detector m25*m32 @ (2,2)
  detector m8 @ (4,2)
  detector m8*m16 @ (4,2)
  detector m16*m46 @ (4,2)
  detector m4*m26 @ (6,2)
  detector m26*m33 @ (6,2)
  detector m5*m27 @ (0,4)
  detector m27*m34 @ (0,4)
  detector m9 @ (2,4)
  detector m9*m17 @ (2,4)
  detector m17*m47 @ (2,4)
  detector m6*m28 @ (4,4)
  detector m28*m35 @ (4,4)
  detector m10 @ (4,6)
  detector m10*m18 @ (4,6)
  detector m18*m48 @ (4,6)
  detector m45*m49 @ (2,0)
  detector m46*m50 @ (4,2)
  detector m47*m51 @ (2,4)
  detector m48*m52 @ (4,6)
  detector m32*m53 @ (2,2)
  detector m33*m54 @ (6,2)
  detector m34*m55 @ (0,4)
  detector m35*m56 @ (4,4)
  detector body(b1) m57*s0 @ (2,0)
  detector body(b1) m58*s1 @ (4,2)
  detector body(b1) m59*s2 @ (2,4)
  detector body(b1) m60*s3 @ (4,6)
  detector body(b1) m61*s4 @ (2,2)
  detector body(b1) m62*s5 @ (6,2)
  detector body(b1) m63*s6 @ (0,4)
  detector body(b1) m64*s7 @ (4,4)
  loop(b1,s0) init m49 next m57
  loop(b1,s1) init m50 next m58
  loop(b1,s2) init m51 next m59
  loop(b1,s3) init m52 next m60
  loop(b1,s4) init m53 next m61
  loop(b1,s5) init m54 next m62
  loop(b1,s6) init m55 next m63
  loop(b1,s7) init m56 next m64
  flow X(1,-1)*X(2,-4)*X(3,-3)*X(3,-1) -> _ meas m1 restart
  flow Z(3,-3)*Z(3,-1)*Z(5,-1)*Z(6,-4) -> _ meas m11*m13 restart
  flow Z(2,-6)*Z(2,-4)*Z(3,-3)*Z(6,-4) -> _ meas m12 restart
  flow X(3,-3)*X(3,-1)*X(5,-1)*X(6,-4) -> _ meas m19 restart
  flow X(2,-6)*X(2,-4)*X(3,-3)*X(6,-4) -> _ meas m20 restart
  flow Z(1,-1)*Z(2,-4)*Z(3,-3)*Z(3,-1) -> _ meas m36*m15*m39*m40*m45 restart
  flow _ -> Z(1,1)*Z(3,1) meas m57 center (2,0)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m58 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m59 center (2,4)
  flow _ -> Z(3,5)*Z(5,5) meas m60 center (4,6)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m61 center (2,2)
  flow _ -> X(5,1)*X(5,3) meas m62 center (6,2)
  flow _ -> X(1,3)*X(1,5) meas m63 center (0,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m64 center (4,4)
  restart m7
  restart m1*m20*m23
  restart m14
  restart m44
  restart m30
  restart m43
  restart m19*m20*m29
  restart m11*m36*m37*m38*m40*m42
  restart m12*m13*m36*m37*m38*m39*m41
  restart m0*m21
  restart m21*m22
  restart m2*m24
  restart m24*m31
}

template t2 {
  circuit {
    MPP Z(1,1)*Z(3,1):m0 X(1,1)*X(1,3)*X(3,1)*X(3,3):m1 Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3):m2 X(5,1)*X(5,3):m3 X(1,3)*X(1,5):m4 Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5):m5 X(3,3)*X(3,5)*X(5,3)*X(5,5):m6 Z(3,5)*Z(5,5):m7
  }
  flow _ -> Z(1,1)*Z(3,1) meas m0 center (2,0)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m1 center (2,2)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m2 center (4,2)
  flow _ -> X(5,1)*X(5,3) meas m3 center (6,2)
  flow _ -> X(1,3)*X(1,5) meas m4 center (0,4)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m5 center (2,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m6 center (4,4)
  flow _ -> Z(3,5)*Z(5,5) meas m7 center (4,6)
}

template t3 {
  circuit {
    R (2,0) (6,0) (4,2) (2,4) (6,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    RX (7,1) (7,3) (7,5)
    TICK
    CX (1,1) (2,0) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (3,1) (2,0) (7,1) (6,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (5,5) (4,6)
    TICK
    M (2,0):m0 (6,0):m1 (4,2):m2 (2,4):m3 (6,4):m4 (4,6):m5
    MX (2,2):m6 (6,2):m7 (0,4):m8 (4,4):m9
    TICK
    R (2,0) (6,0) (4,2) (2,4) (6,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (3,1) (2,0) (7,1) (6,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (5,5) (4,6)
    TICK
    M (2,0):m10 (6,0):m11 (4,2):m12 (2,4):m13 (6,4):m14 (4,6):m15
    MX (2,2):m16 (6,2):m17 (0,4):m18 (4,4):m19
    TICK
    R (2,0) (6,0) (4,2) (2,4) (6,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (5,1) (6,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5) (5,5) (6,4)
    TICK
    CX (3,1) (2,0) (7,1) (6,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (7,5) (6,4)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (6,2) (7,3) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (5,3) (6,4) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (6,2) (7,1) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (7,3) (6,4) (5,5) (4,6)
    TICK
    M (2,0):m20 (6,0):m21 (4,2):m22 (2,4):m23 (6,4):m24 (4,6):m25
    MX (2,2):m26 (6,2):m27 (0,4):m28 (4,4):m29
    MX (7,1):m30 (7,3):m31 (7,5):m32
  }
  detector m0*m10 @ (2,0)
  detector m1*m11 @ (6,0)
  detector m6*m16 @ (2,2)
  detector m2*m12 @ (4,2)
  detector m7*m17 @ (6,2)
  detector m8*m18 @ (0,4)
  detector m3*m13 @ (2,4)
  detector m9*m19 @ (4,4)
  detector m4*m14 @ (6,4)
  detector m5*m15 @ (4,6)
  detector m10*m20 @ (2,0)
  detector m11*m21 @ (6,0)
  detector m16*m26 @ (2,2)
  detector m12*m22 @ (4,2)
  detector m17*m27 @ (6,2)
  detector m18*m28 @ (0,4)
  detector m13*m23 @ (2,4)
  detector m19*m29 @ (4,4)
  detector m14*m24 @ (6,4)
  detector m15*m25 @ (4,6)
  flow Z(1,1)*Z(3,1) -> _ meas m0 center (2,0)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m2 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m3 center (2,4)
  flow Z(3,5)*Z(5,5) -> _ meas m5 center (4,6)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m6 center (2,2)
  flow X(5,1)*X(5,3) -> _ meas m7 center (6,2)
  flow X(1,3)*X(1,5) -> _ meas m8 center (0,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m9 center (4,4)
  flow _ -> Z(1,1)*Z(3,1) meas m20 center (2,0)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m22 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m23 center (2,4)
  flow _ -> Z(3,5)*Z(5,5) meas m25 center (4,6)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m26 center (2,2)
  flow _ -> X(1,3)*X(1,5) meas m28 center (0,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m29 center (4,4)
  flow _ -> X(5,1)*X(5,3) meas m30*m31*m27 center (6,2)
}

template t4 {
  circuit {
    R (2,0) (0,2) (4,2) (2,4) (0,6) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    RX (-1,1) (-1,3) (-1,5)
    TICK
    CX (1,1) (2,0) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (-1,5) (0,6) (3,5) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (5,5) (4,6)
    TICK
    M (2,0):m0 (0,2):m1 (4,2):m2 (2,4):m3 (0,6):m4 (4,6):m5
    MX (2,2):m6 (6,2):m7 (0,4):m8 (4,4):m9
    TICK
    R (2,0) (0,2) (4,2) (2,4) (0,6) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (-1,5) (0,6) (3,5) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (5,5) (4,6)
    TICK
    M (2,0):m10 (0,2):m11 (4,2):m12 (2,4):m13 (0,6):m14 (4,6):m15
    MX (2,2):m16 (6,2):m17 (0,4):m18 (4,4):m19
    TICK
    R (2,0) (0,2) (4,2) (2,4) (0,6) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (-1,3) (0,2) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (0,4) (-1,5) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (0,4) (-1,3) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (-1,1) (0,2) (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (-1,5) (0,6) (3,5) (4,6)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (1,5) (0,6) (5,5) (4,6)
    TICK
    M (2,0):m20 (0,2):m21 (4,2):m22 (2,4):m23 (0,6):m24 (4,6):m25
    MX (2,2):m26 (6,2):m27 (0,4):m28 (4,4):m29
    MX (-1,1):m30 (-1,3):m31 (-1,5):m32
  }
  detector m0*m10 @ (2,0)
  detector m1*m11 @ (0,2)
  detector m6*m16 @ (2,2)
  detector m2*m12 @ (4,2)
  detector m7*m17 @ (6,2)
  detector m8*m18 @ (0,4)
  detector m3*m13 @ (2,4)
  detector m9*m19 @ (4,4)
  detector m4*m14 @ (0,6)
  detector m5*m15 @ (4,6)
  detector m10*m20 @ (2,0)
  detector m11*m21 @ (0,2)
  detector m16*m26 @ (2,2)
  detector m12*m22 @ (4,2)
  detector m17*m27 @ (6,2)
  detector m18*m28 @ (0,4)
  detector m13*m23 @ (2,4)
  detector m19*m29 @ (4,4)
  detector m14*m24 @ (0,6)
  detector m15*m25 @ (4,6)
  flow Z(1,1)*Z(3,1) -> _ meas m0 center (2,0)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m2 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m3 center (2,4)
  flow Z(3,5)*Z(5,5) -> _ meas m5 center (4,6)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m6 center (2,2)
  flow X(5,1)*X(5,3) -> _ meas m7 center (6,2)
  flow X(1,3)*X(1,5) -> _ meas m8 center (0,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m9 center (4,4)
  flow _ -> Z(1,1)*Z(3,1) meas m20 center (2,0)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m22 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m23 center (2,4)
  flow _ -> Z(3,5)*Z(5,5) meas m25 center (4,6)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m26 center (2,2)
  flow _ -> X(5,1)*X(5,3) meas m27 center (6,2)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m29 center (4,4)
  flow _ -> X(1,3)*X(1,5) meas m31*m32*m28 center (0,4)
}

template t5 {
  circuit {
    MX (1,1):m0 (3,1):m1 (5,1):m2 (1,3):m3 (3,3):m4 (5,3):m5 (1,5):m6 (3,5):m7 (5,5):m8
  }
  flow Z(1,1)*Z(3,1) -> _ center (2,0) discard
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ center (2,4) discard
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ center (4,2) discard
  flow Z(3,5)*Z(5,5) -> _ center (4,6) discard
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m0*m1*m3*m4 center (2,2)
  flow X(5,1)*X(5,3) -> _ meas m2*m5 center (6,2)
  flow X(1,3)*X(1,5) -> _ meas m3*m6 center (0,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m4*m5*m7*m8 center (4,4)
}

template t6 {
  circuit {
    RX (0,2) (2,2) (6,2) (0,4) (4,4)
    R (2,0) (4,2) (2,4) (2,6) (4,6)
    TICK
    CX (2,2) (3,1) (0,4) (1,3) (4,4) (5,3)
    CX (5,1) (4,2) (3,3) (2,4) (5,5) (4,6)
    TICK
    CX (2,2) (3,3) (0,4) (1,5) (4,4) (5,5)
    CX (3,1) (4,2) (1,3) (2,4) (3,5) (4,6)
    TICK
    CX (1,5) (2,6)
    CX (0,2) (1,3) (2,4) (3,5)
    CY (2,2) (1,1) (4,4) (3,3)
    CX (6,2) (5,1)
    CX (3,1) (2,0) (5,3) (4,2)
    TICK
    CX (1,3) (0,4) (3,5) (2,6)
    CX (6,2) (5,3)
    CX (1,1) (2,0) (3,3) (4,2)
    TICK
    CY (1,1) (0,2) (3,3) (2,4)
    TICK
    H (0,2) (1,3) (0,4) (2,4) (1,5) (3,5) (2,6) (4,6)
    S (2,2) (4,4)
    TICK
    MX (2,2):m0 (6,2):m1 (4,4):m2 (2,6):m3 (4,6):m4
    MY (5,5):m5
    M (2,0):m6 (0,2):m7 (4,2):m8 (0,4):m9 (2,4):m10
    TICK
    R (2,0) (0,2) (4,2) (2,4)
    RX (2,2) (6,2) (4,4) (2,6)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (1,3) (2,4)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (2,0):m11 (0,2):m12 (4,2):m13 (2,4):m14
    MX (2,2):m15 (6,2):m16 (4,4):m17 (2,6):m18
    TICK
    R (2,0) (0,2) (4,2) (2,4)
    RX (2,2) (6,2) (4,4) (2,6)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (1,3) (0,2) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3) (2,6) (1,5)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (1,3) (2,4)
    TICK
    CX (1,1) (0,2) (2,2) (3,1) (5,1) (4,2) (3,3) (2,4) (4,4) (5,3) (2,6) (3,5)
    TICK
    M (2,0):m19 (0,2):m20 (4,2):m21 (2,4):m22
    MX (2,2):m23 (6,2):m24 (4,4):m25 (2,6):m26
    MX (5,1):m27 (3,3):m28 (5,3):m29 (1,5):m30 (3,5):m31
    M (1,1):m32 (3,1):m33 (1,3):m34
  }
  detector m6*m11 @ (2,0)
  detector m7*m9*m12 @ (0,2)
  detector m8*m13 @ (4,2)
  detector m10*m14 @ (2,4)
  detector m0*m7*m10*m15 @ (2,2)
  detector m1*m16 @ (6,2)
  detector -m2*m4*m5*m10*m17 @ (4,4)
  detector m3*m18 @ (2,6)
  detector m11*m19 @ (2,0)
  detector m12*m20 @ (0,2)
  detector m15*m23 @ (2,2)
  detector m13*m21 @ (4,2)
  detector m16*m24 @ (6,2)
  detector m14*m22 @ (2,4)
  detector m17*m25 @ (4,4)
  detector m18*m26 @ (2,6)
  detector m19*m32*m33 @ (2,0)
  detector m20*m32*m34 @ (0,2)
  detector m24*m27*m29 @ (6,2)
  detector m25*m28*m29*m31 @ (4,4)
  detector m26*m30*m31 @ (2,6)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m0*m7 center (2,2)
  flow X(5,1)*X(5,3) -> _ meas m1 center (6,2)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m2*m10 center (4,4)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m3 center (2,4)
  flow Z(3,5)*Z(5,5) -> _ meas m4 center (4,6)
  flow Z(1,1)*Z(3,1) -> _ meas m6 center (2,0)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m8 center (4,2)
  flow X(1,3)*X(1,5) -> _ meas m9 center (0,4)
}

template t7 {
  circuit {
    MPP Z(1,1)*Z(3,1):m0 X(1,1)*X(1,3)*X(3,1)*X(3,3):m1 Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3):m2 X(5,1)*X(5,3):m3 X(1,3)*X(1,5):m4 Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5):m5 X(3,3)*X(3,5)*X(5,3)*X(5,5):m6 Z(3,5)*Z(5,5):m7
  }
  flow Z(1,1)*Z(3,1) -> _ meas m0 center (2,0)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m1 center (2,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m2 center (4,2)
  flow X(5,1)*X(5,3) -> _ meas m3 center (6,2)
  flow X(1,3)*X(1,5) -> _ meas m4 center (0,4)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m5 center (2,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m6 center (4,4)
  flow Z(3,5)*Z(5,5) -> _ meas m7 center (4,6)
}

template t8 {
  circuit {
    R (2,0) (4,2) (2,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (5,5) (4,6)
    TICK
    M (2,0):m0 (4,2):m1 (2,4):m2 (4,6):m3
    MX (2,2):m4 (6,2):m5 (0,4):m6 (4,4):m7
  }
  flow _ -> Z(1,1)*Z(3,1) meas m0 center (2,0)
  flow Z(1,1)*Z(3,1) -> _ meas m0 center (2,0)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m1 center (4,2)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m2 center (2,4)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow _ -> Z(3,5)*Z(5,5) meas m3 center (4,6)
  flow Z(3,5)*Z(5,5) -> _ meas m3 center (4,6)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m4 center (2,2)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m4 center (2,2)
  flow _ -> X(5,1)*X(5,3) meas m5 center (6,2)
  flow X(5,1)*X(5,3) -> _ meas m5 center (6,2)
  flow _ -> X(1,3)*X(1,5) meas m6 center (0,4)
  flow X(1,3)*X(1,5) -> _ meas m6 center (0,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m7 center (4,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m7 center (4,4)
}

template t9 {
  circuit {
    R (2,0) (4,2) (2,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (5,5) (4,6)
    TICK
    M (2,0):m0 (4,2):m1 (2,4):m2 (4,6):m3
    MX (2,2):m4 (6,2):m5 (0,4):m6 (4,4):m7
    TICK
    REPEAT 2 b1
  }
  body b1 {
    R (2,0) (4,2) (2,4) (4,6)
    RX (2,2) (6,2) (0,4) (4,4)
    TICK
    CX (1,1) (2,0) (2,2) (1,3) (3,3) (4,2) (6,2) (5,3) (1,5) (2,4) (4,4) (3,5)
    TICK
    CX (3,1) (2,0) (2,2) (1,1) (5,3) (4,2) (6,2) (5,1) (3,5) (2,4) (4,4) (3,3)
    TICK
    CX (2,2) (3,3) (3,1) (4,2) (0,4) (1,5) (1,3) (2,4) (4,4) (5,5) (3,5) (4,6)
    TICK
    CX (2,2) (3,1) (5,1) (4,2) (0,4) (1,3) (3,3) (2,4) (4,4) (5,3) (5,5) (4,6)
    TICK
    M (2,0):m8 (4,2):m9 (2,4):m10 (4,6):m11
    MX (2,2):m12 (6,2):m13 (0,4):m14 (4,4):m15
    TICK
  }
  detector body(b1) m8*s0 @ (2,0)
  detector body(b1) m9*s1 @ (4,2)
  detector body(b1) m10*s2 @ (2,4)
  detector body(b1) m11*s3 @ (4,6)
  detector body(b1) m12*s4 @ (2,2)
  detector body(b1) m13*s5 @ (6,2)
  detector body(b1) m14*s6 @ (0,4)
  detector body(b1) m15*s7 @ (4,4)
  loop(b1,s0) init m0 next m8
  loop(b1,s1) init m1 next m9
  loop(b1,s2) init m2 next m10
  loop(b1,s3) init m3 next m11
  loop(b1,s4) init m4 next m12
  loop(b1,s5) init m5 next m13
  loop(b1,s6) init m6 next m14
  loop(b1,s7) init m7 next m15
  flow Z(1,1)*Z(3,1) -> _ meas m0 center (2,0)
  flow Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) -> _ meas m1 center (4,2)
  flow Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) -> _ meas m2 center (2,4)
  flow Z(3,5)*Z(5,5) -> _ meas m3 center (4,6)
  flow X(1,1)*X(1,3)*X(3,1)*X(3,3) -> _ meas m4 center (2,2)
  flow X(5,1)*X(5,3) -> _ meas m5 center (6,2)
  flow X(1,3)*X(1,5) -> _ meas m6 center (0,4)
  flow X(3,3)*X(3,5)*X(5,3)*X(5,5) -> _ meas m7 center (4,4)
  flow _ -> Z(1,1)*Z(3,1) meas m8 center (2,0)
  flow _ -> Z(3,1)*Z(3,3)*Z(5,1)*Z(5,3) meas m9 center (4,2)
  flow _ -> Z(1,3)*Z(1,5)*Z(3,3)*Z(3,5) meas m10 center (2,4)
  flow _ -> Z(3,5)*Z(5,5) meas m11 center (4,6)
  flow _ -> X(1,1)*X(1,3)*X(3,1)*X(3,3) meas m12 center (2,2)
  flow _ -> X(5,1)*X(5,3) meas m13 center (6,2)
  flow _ -> X(1,3)*X(1,5) meas m14 center (0,4)
  flow _ -> X(3,3)*X(3,5)*X(5,3)*X(5,5) meas m15 center (4,4)
}

bundle b0 owners t2 t3 {
  detector o0:m0*o1:m0 @ (2,0)
  detector o0:m2*o1:m2 @ (4,2)
  detector o0:m5*o1:m3 @ (2,4)
  detector o0:m7*o1:m5 @ (4,6)
  detector o0:m1*o1:m6 @ (2,2)
  detector o0:m3*o1:m7 @ (6,2)
  detector o0:m4*o1:m8 @ (0,4)
  detector o0:m6*o1:m9 @ (4,4)
}

bundle b1 owners t1 t4 {
  detector o0:m57*o1:m0 @ (2,0)
  detector o0:m58*o1:m2 @ (4,2)
  detector o0:m59*o1:m3 @ (2,4)
  detector o0:m60*o1:m5 @ (4,6)
  detector o0:m61*o1:m6 @ (2,2)
  detector o0:m62*o1:m7 @ (6,2)
  detector o0:m63*o1:m8 @ (0,4)
  detector o0:m64*o1:m9 @ (4,4)
}

bundle b2 owners t3 t7 {
  detector o0:m20*o1:m0 @ (2,0)
  detector o0:m26*o1:m1 @ (2,2)
  detector o0:m22*o1:m2 @ (4,2)
  detector o0:m27*o0:m30*o0:m31*o1:m3 @ (6,2)
  detector o0:m28*o1:m4 @ (0,4)
  detector o0:m23*o1:m5 @ (2,4)
  detector o0:m29*o1:m6 @ (4,4)
  detector o0:m25*o1:m7 @ (4,6)
}

bundle b3 owners t4 t5 {
  detector o0:m26*o1:m0*o1:m1*o1:m3*o1:m4 @ (2,2)
  detector o0:m27*o1:m2*o1:m5 @ (6,2)
  detector o0:m28*o0:m31*o0:m32*o1:m3*o1:m6 @ (0,4)
  detector o0:m29*o1:m4*o1:m5*o1:m7*o1:m8 @ (4,4)
}

bundle b4 owners t4 t6 {
  detector o0:m26*o1:m0*o1:m7 @ (2,2)
  detector o0:m27*o1:m1 @ (6,2)
  detector o0:m29*o1:m2*o1:m10 @ (4,4)
  detector o0:m23*o1:m3 @ (2,4)
  detector o0:m25*o1:m4 @ (4,6)
  detector o0:m20*o1:m6 @ (2,0)
  detector o0:m22*o1:m8 @ (4,2)
  detector o0:m28*o0:m31*o0:m32*o1:m9 @ (0,4)
}

graph {
  n0 quantum {
    instance i2 t2 @ (0,0) from block (0,0,0)
    from blocks (0,0,0)
  }
  n1 quantum {
    instance i3 t3 @ (0,0) from block (0,0,1)
    instance i4 t4 @ (8,0) from block (1,0,1)
    use b0 i2 i3 @ (0,0)
    use b1 i1 i4 @ (8,0)
    from blocks (0,0,1) (1,0,1)
  }
  n2 quantum {
    instance i5 t5 @ (8,0)
    instance i6 t6 @ (8,0)
    use b3 i4 i5 @ (8,0)
    use b4 i4 i6 @ (8,0)
    guard 0 i5 b0
    guard 1 i6 b1
    from blocks (1,0,2)
  }
  n3 quantum {
    instance i7 t7 @ (0,0) from block (0,0,2)
    use b2 i3 i7 @ (0,0)
    from blocks (0,0,2)
  }
  n4 rus in0 source n4 {
    body {
      n0 quantum {
        instance i0 t0 @ (8,0)
        from blocks (1,0,0)
      }
      n1 quantum {
        instance i1 t1 @ (8,0)
        restart i0:m0*i0:m8*i1:m1
        restart i1:m11*i1:m13
        restart i0:m1*i0:m4*i0:m6*i1:m12
        restart i0:m3*i0:m8*i1:m19
        restart i0:m5*i0:m7*i0:m8*i1:m20
        restart i0:m6*i1:m15*i1:m36*i1:m39*i1:m40*i1:m45
        from blocks (1,0,0)
      }
      n2 observable 0 measurements i1:m15*i1:m39*i1:m41*i1:m49*i1:m51 operators i1 input Z(9,-1)*Z(10,-6)*Z(10,-4), i1 output Z(11,1)*Z(11,3)*Z(11,5) from generator 0
      n3 observable 1 measurements i1:m0*i1:m2*i1:m53*i1:m54 operators i1 input X(9,-1)*X(11,-1)*X(13,-1), i1 output X(9,3)*X(11,3)*X(13,3) from generator 1
      n4 compute in0 | in1
      n0 -> n1 quantum
      n1 -> n2 order
      n1 -> n3 order
      n2 -> n4 value 0 flip
      n3 -> n4 value 1 flip
    }
  }
  n5 compute in0
  n6 compute parity(1, in0)
  n7 compute in0 from selector selective%20%5B1%2C0%2C2%5D
  n13 observable 2 measurements i1:m15*i1:m39*i1:m41*i1:m49*i1:m51*i3:m1*i3:m2*i3:m4*i3:m5*i4:m0*i4:m1*i4:m3*i4:m4 operators i1 input Z(9,-1)*Z(10,-6)*Z(10,-4), i2 input Z(3,1)*Z(3,3)*Z(3,5) from action 0
  n15 observable fragment measurements i1:m15*i1:m39*i1:m41*i1:m49*i1:m51*i6:m2*i6:m4*i6:m5*i6:m6*i6:m7 operators i1 input Y(9,-1)*Z(10,-6)*Z(10,-4)*X(11,-1)*X(13,-1) when v0
  n17 observable fragment measurements i5:m3*i5:m4*i5:m5 operators i1 input X(9,-1)*X(11,-1)*X(13,-1) when v0
  n23 observable 3 measurements i1:m0*i1:m2*i1:m53*i1:m54*i3:m31 operators i2 input X(1,3)*X(3,3)*X(5,3), i7 output X(1,3)*X(3,3)*X(5,3) from generator 3
  n24 compute in0 from frame z (0,0,2)
  n26 observable 4 operators i2 input Z(3,1)*Z(3,3)*Z(3,5), i7 output Z(3,1)*Z(3,3)*Z(3,5) from generator 4
  n27 compute in0 from frame x (0,0,2)
  n5 -> n6 value 0
  n6 -> n7 value 0
  n6 -> n2 value 0
  n5 -> n2 value 1
  n0 -> n1 quantum (0,0,0)>(0,0,1) padding offset (0,0) one t8 loop t9
  n1 -> n2 quantum (1,0,1)>(1,0,2) padding offset (8,0) one t8 loop t9
  n1 -> n3 quantum (0,0,1)>(0,0,2) padding offset (0,0) one t8 loop t9
  n4 -> n1 quantum (1,0,0)>(1,0,1) padding offset (8,0) one t8 loop t9
  n0 -> n1 order
  n4 -> n1 order
  n1 -> n3 order
  n1 -> n2 order
  n5 -> n15 value 0
  n4 -> n15 order
  n6 -> n17 value 0
  n2 -> n17 order
  n15 -> n23 compose 1
  n17 -> n23 compose 3
  n23 -> n24 value 0
  n26 -> n27 value 0
  n13 -> n5 value 0
  n4 -> n13 order
  n1 -> n13 order
  n4 -> n23 order
  n2 -> n15 order
  n3 -> n23 order
  n3 -> n26 order
}

Download the T-gate IR. The cultivation region uses RepeatUntilSuccess. Decoded mzz controls guarded quantum instances for the selective X/Y measurement, and classical dependencies carry corrected logical readouts. Inside the region, a Compute node ORs the two observables’ Flip outputs and supplies the explicit restart predicate. Both decoder predictions must be false for success; physical postselection failures also retry.

Visualize the IR graph

Path("t-gate.svg").write_text(t_program.to_svg(include_classical=True), encoding="utf-8")
std::fs::write("t-gate.svg", t_program.to_svg(true))?;
bloq view t-gate.bloqir --svg --include-classical -o t-gate.svg
Compiled T Gate dependency graph including quantum and classical nodes and nested regions.

See the Bloq IR chapter of the User Guide for node kinds, output frames, observable composition, and retry conditions.

Next steps