from pyquil import Program, get_qc
from pyquil.gates import *


pg = Program()
rads1 = pg.declare("rads1", memory_type="REAL")
ro = pg.declare("ro", memory_type="BIT", memory_size=6)

pg += H(3)
pg += X(2)
pg += Y(2)
pg += Z(2)
pg += RX(rads1*.5*(-2), 3)
pg += RY(-rads1*(-2), 3)
pg += RZ(-2.0943951023931953, 3)
pg += RZ(-0.7675840859664932, 4)
pg += RY(-1.4439793494898379, 4)
pg += RZ(-1.943589293061628, 4)
# 0->5 allowed by c_to_tars
pg += CNOT(0, 5)
# 0->1 not allowed by c_to_tars
# SIGX  AT  1  IF  0T
# not allowed in strict mode
pg += PHASE(-rads1, 2)
pg += CPHASE00(rads1, 0, 2)
pg += CPHASE01(-rads1, 0, 2)
pg += CPHASE10(0.7853981633974483, 0, 2)
pg += CPHASE(0.7853981633974483, 0, 2)
pg += SWAP(2, 0)


pg.MEASURE(0, ro[0])
pg.MEASURE(1, ro[1])
pg.MEASURE(2, ro[2])
pg.MEASURE(3, ro[3])
pg.MEASURE(4, ro[4])
pg.MEASURE(5, ro[5])
