Skip to content

Commit

Permalink
Typo fixed in the implementation of p and tdg in steane_class.py (
Browse files Browse the repository at this point in the history
#76)

* Typo fixed

* Another typo in definition of tdg

* Fixing regression issue due to typo fix + fixing inconsistent creg use

---------

Co-authored-by: Ciaran Ryan-Anderson <[email protected]>
  • Loading branch information
PabloAndresCQ and ciaranra authored Sep 13, 2024
1 parent 67ee616 commit 64bb9f3
Show file tree
Hide file tree
Showing 28 changed files with 2,695 additions and 2,687 deletions.
9 changes: 4 additions & 5 deletions python/pecos/qeclib/steane/steane_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ def __init__(self, name: str, default_rus_limit: int = 3, ancillas: QReg | None

# derived classical registers
c = self.c
self.c_init = c[0]
self.log_raw = c[1]
self.log = c[2]
self.pf_x = c[3]
Expand All @@ -105,7 +104,7 @@ def p(self, state: str, rus_limit: int | None = None):

match state:
case "+X" | "X":
return self.pz(rus_limit=rus_limit)
return self.px(rus_limit=rus_limit)
case "-X":
return self.pnx(rus_limit=rus_limit)
case "+Y" | "Y":
Expand Down Expand Up @@ -189,7 +188,7 @@ def pz(self, rus_limit: int | None = None):
return PrepRUS(
q=self.d,
a=self.a[0],
init=self.c_init,
init=self.verify_prep[0],
limit=rus_limit,
state="+Z",
first_round_reset=True,
Expand All @@ -204,7 +203,7 @@ def pnz(self, rus_limit: int | None = None):
return PrepRUS(
q=self.d,
a=self.a[0],
init=self.c_init,
init=self.verify_prep[0],
limit=rus_limit,
state="-Z",
first_round_reset=True,
Expand Down Expand Up @@ -331,7 +330,7 @@ def tdg(self, aux: Steane, reject: Bit, rus_limit: int | None = None):
aux.prep_tdg_plus_state(reject=reject, rus_limit=rus_limit),
self.cx(aux),
aux.mz(self.tdg_meas),
If(self.t_meas == 1).Then(self.szdg()), # SZdg/Sdg correction.
If(self.tdg_meas == 1).Then(self.szdg()), # SZdg/Sdg correction.
)

if reject is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,61 +58,62 @@ barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
cx sin_d[5], sin_a[0];
cx sin_d[1], sin_a[0];
cx sin_d[3], sin_a[0];
measure sin_a[0] -> sin_c[0];
measure sin_a[0] -> sin_verify_prep[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];
if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];


if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];

if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];

// Logical H
h sin_d;
saux_scratch = 0;
reset saux_d[6];
ry(0.7853981633974483) saux_d[6];
Expand Down Expand Up @@ -846,35 +847,36 @@ barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
cx sin_d[5], sin_a[0];
cx sin_d[1], sin_a[0];
cx sin_d[3], sin_a[0];
measure sin_a[0] -> sin_c[0];
measure sin_a[0] -> sin_verify_prep[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];
if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];

if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];

// Logical H
h sin_d;
// Transversal Logical CX
barrier sin_d, saux_d;
cx sin_d[0], saux_d[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,61 +58,62 @@ barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
cx sin_d[5], sin_a[0];
cx sin_d[1], sin_a[0];
cx sin_d[3], sin_a[0];
measure sin_a[0] -> sin_c[0];
measure sin_a[0] -> sin_verify_prep[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];
if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];


if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];

if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];

// Logical H
h sin_d;
saux_scratch = 0;
reset saux_d[6];
ry(0.7853981633974483) saux_d[6];
Expand Down Expand Up @@ -848,35 +849,36 @@ barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
cx sin_d[5], sin_a[0];
cx sin_d[1], sin_a[0];
cx sin_d[3], sin_a[0];
measure sin_a[0] -> sin_c[0];
measure sin_a[0] -> sin_verify_prep[0];


if(sin_c[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d[0], sin_d[1], sin_d[2], sin_d[3], sin_d[4], sin_d[5], sin_d[6], sin_a[0];

if(sin_c[0] == 1) reset sin_d;
if(sin_c[0] == 1) reset sin_a[0];
if(sin_c[0] == 1) barrier sin_d, sin_a[0];
if(sin_c[0] == 1) h sin_d[0];
if(sin_c[0] == 1) h sin_d[4];
if(sin_c[0] == 1) h sin_d[6];
if(sin_verify_prep[0] == 1) reset sin_d;
if(sin_verify_prep[0] == 1) reset sin_a[0];
if(sin_verify_prep[0] == 1) barrier sin_d, sin_a[0];
if(sin_verify_prep[0] == 1) h sin_d[0];
if(sin_verify_prep[0] == 1) h sin_d[4];
if(sin_verify_prep[0] == 1) h sin_d[6];

if(sin_c[0] == 1) cx sin_d[4], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[1];
if(sin_c[0] == 1) cx sin_d[6], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[2];
if(sin_c[0] == 1) cx sin_d[6], sin_d[5];
if(sin_c[0] == 1) cx sin_d[0], sin_d[3];
if(sin_c[0] == 1) cx sin_d[4], sin_d[1];
if(sin_c[0] == 1) cx sin_d[3], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[2];
if(sin_verify_prep[0] == 1) cx sin_d[6], sin_d[5];
if(sin_verify_prep[0] == 1) cx sin_d[0], sin_d[3];
if(sin_verify_prep[0] == 1) cx sin_d[4], sin_d[1];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_d[2];

if(sin_c[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
if(sin_verify_prep[0] == 1) barrier sin_a[0], sin_d[1], sin_d[3], sin_d[5];
// verification step
if(sin_c[0] == 1) cx sin_d[5], sin_a[0];
if(sin_c[0] == 1) cx sin_d[1], sin_a[0];
if(sin_c[0] == 1) cx sin_d[3], sin_a[0];
if(sin_c[0] == 1) measure sin_a[0] -> sin_c[0];

if(sin_verify_prep[0] == 1) cx sin_d[5], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[1], sin_a[0];
if(sin_verify_prep[0] == 1) cx sin_d[3], sin_a[0];
if(sin_verify_prep[0] == 1) measure sin_a[0] -> sin_verify_prep[0];

// Logical H
h sin_d;
// Transversal Logical CX
barrier sin_d, saux_d;
cx sin_d[0], saux_d[0];
Expand Down
Loading

0 comments on commit 64bb9f3

Please sign in to comment.