program gates_regression
use std.quantum.gates
fn main() {
let x0:Field=pub_read()
let x1:Field=pub_read()
let x2:Field=pub_read()
let x3:Field=pub_read()
let x4:Field=pub_read()
let x5:Field=pub_read()
let x6:Field=pub_read()
let x7:Field=pub_read()
let a=gates.Complex {re:x0,im:x1}
let b=gates.Complex {re:x2,im:x3}
let c=gates.Complex {re:x4,im:x5}
let d=gates.Complex {re:x6,im:x7}
let q=gates.Qubit {zero:a,one:b}
let r=gates.Qubit {zero:c,one:d}
let state=gates.TwoQubit {q00:a,q01:b,q10:c,q11:d}
let out0=gates.complex_zero()
pub_write(out0.re)
pub_write(out0.im)
let out1=gates.complex_one()
pub_write(out1.re)
pub_write(out1.im)
let out2=gates.complex_add(a,b)
pub_write(out2.re)
pub_write(out2.im)
let out3=gates.complex_sub(a,b)
pub_write(out3.re)
pub_write(out3.im)
let out4=gates.complex_mul(a,b)
pub_write(out4.re)
pub_write(out4.im)
let out5=gates.complex_scale(x0,gates.Complex { re:x1,im:x2 })
pub_write(out5.re)
pub_write(out5.im)
let out6=gates.complex_conj(a)
pub_write(out6.re)
pub_write(out6.im)
let out7=gates.complex_norm_sq(a)
pub_write(out7)
let out8=gates.init_zero()
pub_write(out8.zero.re)
pub_write(out8.zero.im)
pub_write(out8.one.re)
pub_write(out8.one.im)
let out9=gates.init_one()
pub_write(out9.zero.re)
pub_write(out9.zero.im)
pub_write(out9.one.re)
pub_write(out9.one.im)
let out10=gates.paulix(q)
pub_write(out10.zero.re)
pub_write(out10.zero.im)
pub_write(out10.one.re)
pub_write(out10.one.im)
let out11=gates.pauliz(q)
pub_write(out11.zero.re)
pub_write(out11.zero.im)
pub_write(out11.one.re)
pub_write(out11.one.im)
let out12=gates.pauliy(q)
pub_write(out12.zero.re)
pub_write(out12.zero.im)
pub_write(out12.one.re)
pub_write(out12.one.im)
let out13=gates.hadamard(q)
pub_write(out13.zero.re)
pub_write(out13.zero.im)
pub_write(out13.one.re)
pub_write(out13.one.im)
let out14=gates.sgate(q)
pub_write(out14.zero.re)
pub_write(out14.zero.im)
pub_write(out14.one.re)
pub_write(out14.one.im)
let out15=gates.tgate(q)
pub_write(out15.zero.re)
pub_write(out15.zero.im)
pub_write(out15.one.re)
pub_write(out15.one.im)
let out16=gates.two_qubit_product(q,r)
pub_write(out16.q00.re)
pub_write(out16.q00.im)
pub_write(out16.q01.re)
pub_write(out16.q01.im)
pub_write(out16.q10.re)
pub_write(out16.q10.im)
pub_write(out16.q11.re)
pub_write(out16.q11.im)
let out17=gates.cnot(state)
pub_write(out17.q00.re)
pub_write(out17.q00.im)
pub_write(out17.q01.re)
pub_write(out17.q01.im)
pub_write(out17.q10.re)
pub_write(out17.q10.im)
pub_write(out17.q11.re)
pub_write(out17.q11.im)
let out18=gates.cz(state)
pub_write(out18.q00.re)
pub_write(out18.q00.im)
pub_write(out18.q01.re)
pub_write(out18.q01.im)
pub_write(out18.q10.re)
pub_write(out18.q10.im)
pub_write(out18.q11.re)
pub_write(out18.q11.im)
let out19=gates.swap(state)
pub_write(out19.q00.re)
pub_write(out19.q00.im)
pub_write(out19.q01.re)
pub_write(out19.q01.im)
pub_write(out19.q10.re)
pub_write(out19.q10.im)
pub_write(out19.q11.re)
pub_write(out19.q11.im)
let out20=gates.measure_deterministic(q)
if out20 { pub_write(1) } else { pub_write(0) }
}