예제 #1
0
def evolve_in_real_time(logfile, qc, t, c):
    # definizione di U3 --- https://qiskit-staging.mybluemix.net/documentation/terra/summary_of_quantum_operations.html
    H, U = get_matrices(t, c)
    two_qubit_cnot_decompose = TwoQubitBasisDecomposer(CnotGate())
    C = two_qubit_cnot_decompose.__call__(U)
    i, j = 0, 1
    parameter_string = []
    for g in C:
        instruction, q1, q2 = g
        if (instruction.name == 'u3'):
            t1, t2, t3 = instruction.params
            for x in [t1, t2, t3]:
                parameter_string.append(round(x, 4))
            if (q1[0].index == 0): idx = i
            else: idx = j
            qc.u3(t1, t2, t3, idx)
        if (instruction.name == 'cx'):
            if (q1[0].index == 0):
                idx_ctrl = i
                idx_targ = j
            else:
                idx_ctrl = j
                idx_targ = i
            qc.cx(idx_ctrl, idx_targ)
    logfile.write("time = %f \n" % (t))
    #logfile.write("circuit: \n"+str(qc.draw())+"\n")
    ##logfile.write(qc.draw())
    return qc
예제 #2
0
 def evolve_dimer(self,qc,i,j,dt):                       #
         c=self.B
         H,U  = get_matrices(dt,c)
         two_qubit_cnot_decompose = TwoQubitBasisDecomposer(CnotGate())
         C = two_qubit_cnot_decompose.__call__(U)
         parameter_string = []
         for g in C:
             instruction,q1,q2 = g
             if(instruction.name=='u3'):
                t1,t2,t3 = instruction.params
                for x in [t1,t2,t3]: parameter_string.append(round(x,4))
                if(q1[0].index==0): idx = i
                else:               idx = j
                qc.u3(t1,t2,t3,idx)
             if(instruction.name=='cx'):
                if(q1[0].index==0): idx_ctrl = i; idx_targ = j
                else:               idx_ctrl = j; idx_targ = i
                qc.cx(idx_ctrl,idx_targ)
         return qc