Verification.ipynb 3.1 KB

Verification

import numpy as np
import qcgpu
from projectq import MainEngine
import projectq.ops as ops
from projectq.backends import Simulator, CircuitDrawer
def qcgpu_amplitudes(n, depth):
    state = qcgpu.State(n)

    h = qcgpu.gate.h()
    x = qcgpu.gate.x()
    t = qcgpu.gate.t()

    for level in range(depth):
        for q in range(n):
    
            state.apply_gate(h, q)
            state.apply_gate(t, q)

            if q != 0:
                state.apply_controlled_gate(x, q, 0)
        
    return state.amplitudes()
def projectq_amplitudes(n, depth):
#     drawing_engine = CircuitDrawer()
#     eng = MainEngine(drawing_engine)
    sim = Simulator(gate_fusion=True)
    eng = MainEngine(backend=sim, engine_list=[])
    qbits = eng.allocate_qureg(n)

    for level in range(depth):
        for q in qbits:
            ops.H | q
            ops.T | q
            if q != qbits[0]:
                ops.CNOT | (q, qbits[0])


    eng.flush()
    amplitudes = sim.cheat()[1]
    for q in qbits:
        ops.Measure | q
   
    return amplitudes
#     return drawing_engine.get_latex()
def verify(n, depth):
    amps_qcgpu = qcgpu_amplitudes(n,depth)
    amps_projectq = np.transpose(np.array([projectq_amplitudes(n,depth)]))
#     print(amps_qcgpu)
#     print(amps_projectq)
    return np.allclose(amps_qcgpu, amps_projectq, rtol=1e-04)
                        
verify(25,15)
True