Phase-gradient sequence

Reusable injection modules form a single-qubit chain of 22 signed π/4 rotations about X and Z, followed by a Hadamard. The source shows repeated definitions, rotated instances, and explicit quantum seams.

Block graph

BLOG source

BLOG 1.0

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

  0: Port [0, 0, 0] role=input <q_in>
  1: XZX [0, 0, 1]
  2: Port [0, 0, 2] role=output <q_out>
  3: T [0, 1, 0]
  4: XZZ [0, 1, 1]
  5: YZ [0, 1, 2]
  0 -> +Z
  1 -> +Z
  1 -> +Y
  3 -H> +Z
  4 -> +Z

  m = measure 1 -> +Y
  resolve 5 if m
  feedback X 1 if m

}

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

  0: Port [0, 0, 0] role=input <q_in>
  1: XZX [0, 0, 1]
  2: Port [0, 0, 2] role=output <q_out>
  3: T [0, 1, 0]
  4: XZZ [0, 1, 1]
  5: YZ [0, 1, 2]
  0 -> +Z
  1 -> +Z
  1 -> +Y
  3 -H> +Z
  4 -> +Z

  m = measure 1 -> +Y
  resolve 5 if !m
  feedback X 1 if !m

}

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

  0: Port [0, 0, 0] role=input <q_in>
  1: XZZ [0, 0, 1]
  2: Port [0, 0, 2] role=output <q_out>
  3: T [1, 0, 0]
  4: XZX [1, 0, 1]
  5: XY [1, 0, 2]
  0 -> +Z
  1 -> +Z
  1 -> +X
  3 -> +Z
  4 -> +Z

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

}

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

  0: Port [0, 0, 0] role=input <q_in>
  1: XZZ [0, 0, 1]
  2: Port [0, 0, 2] role=output <q_out>
  3: T [1, 0, 0]
  4: XZX [1, 0, 1]
  5: XY [1, 0, 2]
  0 -> +Z
  1 -> +Z
  1 -> +X
  3 -> +Z
  4 -> +Z

  m = measure 1 -> +X
  resolve 5 if m

}

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

  s00: RxPlusAtYPlus @ [0, 0, 0]
  s01: RzPlusAtXPlus @ [0, 0, 1]
  s02: RxPlusAtYPlus @ [0, 0, 2] rotate Z 180
  s03: RzPlusAtXPlus @ [0, 0, 3] rotate Z 180
  s04: RxMinusAtYPlus @ [0, 0, 4]
  s05: RzMinusAtXPlus @ [0, 0, 5]
  s06: RxMinusAtYPlus @ [0, 0, 6] rotate Z 180
  s07: RzMinusAtXPlus @ [0, 0, 7] rotate Z 180
  s08: RxMinusAtYPlus @ [0, 0, 8]
  s09: RzPlusAtXPlus @ [0, 0, 9]
  s10: RxMinusAtYPlus @ [0, 0, 10] rotate Z 180
  s11: RzMinusAtXPlus @ [0, 0, 11] rotate Z 180
  s12: RxPlusAtYPlus @ [0, 0, 12]
  s13: RzMinusAtXPlus @ [0, 0, 13]
  s14: RxMinusAtYPlus @ [0, 0, 14] rotate Z 180
  s15: RzPlusAtXPlus @ [0, 0, 15] rotate Z 180
  s16: RxMinusAtYPlus @ [0, 0, 16]
  s17: RzPlusAtXPlus @ [0, 0, 17]
  s18: RxPlusAtYPlus @ [0, 0, 18] rotate Z 180
  s19: RzMinusAtXPlus @ [0, 0, 19] rotate Z 180
  s20: RxPlusAtYPlus @ [0, 0, 20]
  s21: RzPlusAtXPlus @ [0, 0, 21]

  0: Port [0, 0, 0] role=input <q_in>
  1: ZXZ [0, 0, 23]
  2: Port [0, 0, 24] role=output <q_out>
  1 -> +Z

  0 -> s00.q_in
  s00.q_out -> s01.q_in
  s01.q_out -> s02.q_in
  s02.q_out -> s03.q_in
  s03.q_out -> s04.q_in
  s04.q_out -> s05.q_in
  s05.q_out -> s06.q_in
  s06.q_out -> s07.q_in
  s07.q_out -> s08.q_in
  s08.q_out -> s09.q_in
  s09.q_out -> s10.q_in
  s10.q_out -> s11.q_in
  s11.q_out -> s12.q_in
  s12.q_out -> s13.q_in
  s13.q_out -> s14.q_in
  s14.q_out -> s15.q_in
  s15.q_out -> s16.q_in
  s16.q_out -> s17.q_in
  s17.q_out -> s18.q_in
  s18.q_out -> s19.q_in
  s19.q_out -> s20.q_in
  s20.q_out -> s21.q_in
  s21.q_out -H> 1
}

See BLOG Format for the syntax or return to all examples.