Beispiel #1
0
def test():
    machine=pq.init_quantum_machine(pq.QMachineType.CPU)
    qlist=machine.qAlloc_many(4)
    clist = machine.cAlloc_many(4)
    prog=pq.QProg()
    prog.insert(pq.H(qlist[2])).insert(pq.meas_all(qlist,clist))
    data = {'shots':1000}
    result=machine.run_with_configuration(prog,clist,data) 
    pq.destroy_quantum_machine(machine)
    

    machine2=pq.init_quantum_machine(pq.QMachineType.CPU)
    qlist2=machine2.qAlloc_many(3)
    prog2=pq.QProg()
    prog2.insert(pq.H(qlist2[0])).insert(pq.CNOT(qlist2[0],qlist2[1]))
    result2=machine2.prob_run_dict(prog2,qlist2,-1)
    pq.destroy_quantum_machine(machine2)

    pq.init(pq.QMachineType.CPU)
    qlist3=pq.qAlloc_many(5)
    clist3=pq.cAlloc_many(5)
    prog3=pq.QProg()
    prog3.insert(pq.H(qlist3[0])).insert(pq.CNOT(qlist3[0],qlist3[1]))\
         .insert(pq.CNOT(qlist3[1],qlist3[2])).insert(pq.CNOT(qlist3[2],qlist3[3]))\
         .insert(pq.meas_all(qlist3,clist3))
    result3=pq.run_with_configuration(prog3,clist3,100)
    pq.finalize()


    return result,result2,result3
Beispiel #2
0
    def test_layer1(self):
        init_machine = InitQMachine()
        machine = init_machine.m_machine
        q = machine.qAlloc_many(6)
        c = machine.cAlloc_many(6)
        prog = pq.QProg()
        cir = pq.QCircuit()
        cir.insert(pq.T(q[0])).insert(pq.iSWAP(q[1], q[5])).insert(pq.S(
            q[1])).insert(pq.CNOT(q[1], q[0]))
        cir.insert(pq.CU(np.pi / 3, 3, 4, 5, q[3], q[2]))
        cir.insert(pq.CZ(q[0],
                         q[2])).insert(pq.CU(np.pi / 3, 3, 4, 5, q[5],
                                             q[2])).insert(pq.SWAP(q[1], q[0]))
        cir.insert(pq.iSWAP(q[1], q[5])).insert(pq.iSWAP(
            q[1], q[5], 0.12345)).insert(pq.SqiSWAP(q[1], q[5]))
        cir.set_control([q[4], q[3]])
        cir.set_dagger(True)
        prog.insert(cir)

        # 分层接口 circuit_layer
        layer_info = pq.circuit_layer(prog)

        # 通过打印线路查看分层信息
        qcd = MatplotlibDrawer(qregs=layer_info[1],
                               cregs=layer_info[2],
                               ops=layer_info[0],
                               scale=0.7)
Beispiel #3
0
def test_is_swappable(q, c):
    prog = pq.QProg()
    cir = pq.QCircuit()
    cir2 = pq.QCircuit()
    cir2.insert(pq.H(q[0])).insert(pq.RX(q[1], math.pi / 2)).insert(pq.T(
        q[2])).insert(pq.RY(q[3],
                            math.pi / 2)).insert(pq.RZ(q[2], math.pi / 2))
    cir.insert(pq.H(q[1])).insert(cir2).insert(pq.CR(q[1], q[2], math.pi / 2))
    prog.insert(pq.H(q[0])).insert(pq.S(q[2]))\
        .insert(cir)\
        .insert(pq.CNOT(q[0], q[1])).insert(pq.CZ(q[1], q[2])).insert(pq.measure_all(q,c))

    iter_first = cir2.begin()

    iter_second = iter_first.get_next()
    iter_second = iter_second.get_next()
    iter_second = iter_second.get_next()

    type = iter_first.get_node_type()
    if pq.NodeType.GATE_NODE == type:
        gate = pq.QGate(iter_first)
        print(gate.gate_type())

    type = iter_second.get_node_type()
    if pq.NodeType.GATE_NODE == type:
        gate = pq.QGate(iter_second)
        print(gate.gate_type())

    if (pq.is_swappable(prog, iter_first, iter_second)) == True:
        print('Could be swapped !\n')
    else:
        print('Could NOT be swapped.')
Beispiel #4
0
def test_layer1():
    init_machine = InitQMachine()
    machine = init_machine.m_machine
    q = machine.qAlloc_many(6)
    c = machine.cAlloc_many(6)
    prog = pq.QProg()
    cir = pq.QCircuit()
    cir.insert(pq.T(q[0])).insert(pq.iSWAP(q[1], q[5], 3.2233233)).insert(
        pq.S(q[1])).insert(pq.CNOT(q[1], q[0]))
    cir.insert(pq.CU(np.pi / 3, 3, 4, 5, q[1], q[2]))
    cir.insert(pq.CR(q[2], q[1], 0.00000334))
    cir.insert(pq.RX(q[2], np.pi / 3)).insert(pq.RZ(q[2], np.pi / 3)).insert(
        pq.RY(q[2], np.pi / 3))
    cir.insert(pq.CZ(q[0],
                     q[2])).insert(pq.CU(np.pi / 3, 3, 4, 5, q[5],
                                         q[2])).insert(pq.SWAP(q[1], q[0]))
    cir.set_control([q[4], q[3]])
    cir.set_dagger(True)
    prog.insert(cir)

    # 打印多控门分解之前的量子线路
    draw_qprog(prog,
               'pic',
               filename='D:/before_decompose_multiple_control_qgate.jpg',
               verbose=True)

    #多控门分解接口
    new_prog = pq.decompose_multiple_control_qgate(prog, machine)

    #打印多控门分解之后的量子线路
    draw_qprog(new_prog,
               'pic',
               filename='D:/after_decompose_multiple_control_qgate.jpg',
               verbose=True)
Beispiel #5
0
 def test_to_originir(self):
     init_machine = InitQMachine(8, 8)
     qlist = init_machine.m_qlist
     clist = init_machine.m_clist
     machine = init_machine.m_machine
     prog = pq.QProg()
     prog.insert(pq.H(qlist[2])).insert(pq.measure_all(qlist, clist))
     print(pq.to_originir(prog, machine))
Beispiel #6
0
def test_layer1():
    init_machine = InitQMachine()
    machine = init_machine.m_machine
    q = machine.qAlloc_many(4)
    c = machine.cAlloc_many(4)
    prog = pq.QProg()
    cir = pq.QCircuit()
    cir.insert(pq.RX(q[1], np.pi / 5)).insert(pq.RX(q[1], np.pi / 5))
    cir.insert(pq.CU(1, 2, 3, 4, q[1], q[0])).insert(pq.H(q[1])).insert(
        pq.X(q[2])).insert(pq.RZ(q[1], np.pi / 2)).insert(pq.Y(q[2]))
    cir.insert(pq.CR(q[0], q[3], np.pi / 2)).insert(pq.S(q[2])).insert(
        pq.S(q[1])).insert(pq.RZ(q[1],
                                 np.pi / 2)).insert(pq.RZ(q[1], np.pi / 2))
    cir.insert(pq.RZ(q[1], np.pi / 2)).insert(pq.RZ(q[1], np.pi / 2)).insert(
        pq.Y(q[0])).insert(pq.SWAP(q[3], q[1]))
    cir.insert(pq.CU(1, 2, 3, 4, q[1], q[0])).insert(pq.H(q[1])).insert(
        pq.X(q[2])).insert(pq.RX(q[1], np.pi / 2)).insert(
            pq.RX(q[1], np.pi / 2)).insert(pq.Y(q[2]))
    cir.insert(pq.CR(q[2], q[3],
                     np.pi / 2)).insert(pq.CU(1, 2, 3, 4, q[1], q[0])).insert(
                         pq.H(q[1])).insert(pq.X(q[2])).insert(
                             pq.RZ(q[1], np.pi / 2)).insert(pq.Y(q[2]))

    cir2 = pq.QCircuit()
    cir2.insert(pq.H(q[1])).insert(pq.X(q[2])).insert(pq.X(q[2])).insert(
        pq.H(q[1])).insert(pq.X(q[3])).insert(pq.X(q[3]))

    cir3 = pq.QCircuit()
    cir3.insert(pq.H(q[1])).insert(pq.H(q[2])).insert(pq.CNOT(
        q[2], q[1])).insert(pq.H(q[1])).insert(pq.H(q[2]))

    theta_1 = np.pi / 3.0
    cir5 = pq.QCircuit()
    cir5.insert(pq.RZ(q[3], np.pi / 2.0)).insert(pq.CZ(q[3], q[0])).insert(
        pq.RX(q[3], np.pi / 2.0)).insert(pq.RZ(q[3], theta_1))
    cir5.insert(pq.RX(q[3], -np.pi / 2.0)).insert(pq.CZ(q[3], q[0])).insert(
        pq.RZ(q[3], -np.pi / 2.0))

    prog.insert(cir).insert(cir2).insert(pq.Reset(
        q[1])).insert(cir3).insert(cir5).insert(pq.measure_all(q, c))
    print("befort optimizered QProg:")
    print(prog)

    # 线路替换优化,会自动读配置文件,从配置文件加载线路替换信息
    #new_prog = pq.circuit_optimizer_by_config(prog)

    # 线路替换优化,mode参数用于优化类型,默认是Merge_H_X(合并抵消连续的H门和x门)
    #new_prog = pq.circuit_optimizer_by_config(prog, mode = pq.QCircuitOPtimizerMode.Merge_RX)

    # u3门转换
    new_prog = pq.circuit_optimizer(prog,
                                    mode_list=[
                                        pq.QCircuitOPtimizerMode.Merge_H_X,
                                        pq.QCircuitOPtimizerMode.Merge_U3
                                    ])

    print("The optimizered QProg:")
    print(new_prog)
Beispiel #7
0
def test_get_matrix(q, c):
    prog = pq.QProg()
    prog.insert(pq.H(q[0])).insert(pq.S(q[2])).insert(pq.CNOT(
        q[0], q[1])).insert(pq.CZ(q[1],
                                  q[2])).insert(pq.CR(q[1], q[2], math.pi / 2))
    iter_start = prog.begin()
    iter_end = iter_start.get_next()
    iter_end = iter_end.get_next()
    result_mat = pq.get_matrix(prog, iter_start, iter_end)
    pq.print_mat(result_mat)
Beispiel #8
0
def Bell_State():
    machine=pq.init_quantum_machine(pq.QMachineType.CPU)
    qlist=machine.qAlloc_many(2)
    clist=machine.cAlloc_many(2)
    qprog=pq.QProg()
    qprog.insert(pq.H(qlist[0]))\
         .insert(pq.CNOT(qlist[0],qlist[1]))
    qprog.insert(pq.meas_all(qubit_list=qlist,cbit_list=clist))
    machine.load(qprog)
    machine.run()
    result=machine.getResultMap()
    return result
Beispiel #9
0
 def test_get_matrix(self):
     init_machine = InitQMachine(8, 8)
     q = init_machine.m_qlist
     c = init_machine.m_clist
     machine = init_machine.m_machine
     prog = pq.QProg()
     prog.insert(pq.H(q[0])).insert(pq.S(q[2])).insert(pq.CNOT(
         q[0],
         q[1])).insert(pq.CZ(q[1],
                             q[2])).insert(pq.CR(q[1], q[2], math.pi / 2))
     iter_start = prog.begin()
     iter_end = iter_start.get_next()
     iter_end = iter_end.get_next()
Beispiel #10
0
def QProg():
    """
    `QPanda Basic API` \n
    Create an empty QProg object \n
    
    None -> QProg\n

    Comment: A QProg can insert any kind of QNode, such as QProg,
    QCircuit, QGate, QMeasure  QIfNode or QWhileNode. 
    This can be done by: \n
    `some_qprog.insert(another_qnode)`
    
    """
    return pyQPanda.QProg()
Beispiel #11
0
 def test_layer1(self):
     init_machine = InitQMachine()
     machine = init_machine.m_machine
     q = machine.qAlloc_many(6)
     c = machine.cAlloc_many(6)
     prog = pq.QProg()
     cir = pq.QCircuit()
     cir.insert(pq.T(q[0])).insert(pq.iSWAP(q[1], q[5], 3.2233233)).insert(pq.S(q[1])).insert(pq.CNOT(q[1], q[0]))
     cir.insert(pq.CU(np.pi/3, 3, 4, 5, q[1], q[2]))
     cir.insert(pq.CR(q[2], q[1], 0.00000334))
     cir.insert(pq.RX(q[2], np.pi/3)).insert(pq.RZ(q[2], np.pi/3)).insert(pq.RY(q[2], np.pi/3))
     cir.insert(pq.CZ(q[0], q[2])).insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2])).insert(pq.SWAP(q[1], q[0]))
     cir.set_control([q[4],q[3]])
     cir.set_dagger(True)
     prog.insert(cir)
Beispiel #12
0
 def test_get_adjacent_qgate_type(self):
     init_machine = InitQMachine(8, 8)
     qlist = init_machine.m_qlist
     clist = init_machine.m_clist
     prog = pq.QProg()
     prog.insert(pq.T(qlist[0])).insert(pq.CNOT(qlist[1], qlist[2])).insert(
         pq.H(qlist[3])).insert(pq.H(qlist[4])).insert(
             pq.measure_all(qlist, clist))
     iter = prog.begin()
     iter = iter.get_next()
     type = iter.get_node_type()
     if pq.NodeType.GATE_NODE == type:
         gate = pq.QGate(iter)
         print(gate.gate_type())
     list = pq.get_adjacent_qgate_type(prog, iter)
Beispiel #13
0
    def test_layer1(self):
        init_machine = InitQMachine()
        machine = init_machine.m_machine
        q = machine.qAlloc_many(6)
        c = machine.cAlloc_many(6)
        prog = pq.QProg()
        cir = pq.QCircuit()
        cir.insert(pq.T(q[0])).insert(pq.iSWAP(q[1], q[5])).insert(pq.S(q[1])).insert(pq.CNOT(q[1], q[0]))
        cir.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
        cir.insert(pq.CZ(q[0], q[2])).insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2])).insert(pq.SWAP(q[1], q[0]))
        cir.insert(pq.iSWAP(q[1], q[5])).insert(pq.iSWAP(q[1], q[5], 0.12345)).insert(pq.SqiSWAP(q[1], q[5]))
        cir.set_control([q[4],q[3]])
        cir.set_dagger(True)
        prog.insert(cir)

        # 按时序分层
        text = pq.draw_qprog_text_with_clock(prog)
Beispiel #14
0
    def test_grover2(self):
        init_machine = InitQMachine()
        machine = init_machine.m_machine
        x = machine.cAlloc()

        # data=[8, 7, 6, 0, 6, 3, 6, 4, 21, 15, 11, 11, 3, 9, 7]
        data = [2, 7, 5, 1]
        measure_qubits = pq.QVec()
        grover_cir = pq.Grover(data, x == 5, machine, measure_qubits, 1)
        grover_prog = pq.QProg()
        grover_prog.insert(grover_cir)
        measure_qubit_num = len(measure_qubits)
        c = machine.cAlloc_many(measure_qubit_num)
        for i in range(0, measure_qubit_num):
            grover_prog.insert(pq.Measure(measure_qubits[i], c[i]))

        # draw_qprog(grover_prog, 'pic', filename='D:/prog_grover_1.jpg', verbose=True)
        result = pq.run_with_configuration(grover_prog, c, shots=1000)
Beispiel #15
0
def test_get_adjacent_qgate_type(qlist, clist):
    prog = pq.QProg()
    prog.insert(pq.T(qlist[0])).insert(pq.CNOT(qlist[1], qlist[2])).insert(
        pq.H(qlist[3])).insert(pq.H(qlist[4])).insert(
            pq.measure_all(qlist, clist))
    iter = prog.begin()
    iter = iter.get_next()
    type = iter.get_node_type()
    if pq.NodeType.GATE_NODE == type:
        gate = pq.QGate(iter)
        print(gate.gate_type())
    list = pq.get_adjacent_qgate_type(prog, iter)
    print(len(list))

    gateFront = pq.QGate(list[0])
    print(gateFront.gate_type())
    gateBack = pq.QGate(list[1])
    print(gateBack.gate_type())
def cal_circuit(thetas):
    pq.init(pq.QMachineType.CPU)
    qubitlist = pq.qAlloc_many(1)
    prog = pq.QProg()
    for theta, qubit in zip(thetas, qubitlist):
        prog.insert(pq.H(qubit))
        prog.insert(pq.RY(qubit, theta))
    result = pq.prob_run_dict(prog, qubitlist)
    states = []
    probabilities = []
    for key, val in result.items():
        states.append(int(key, 2))
        probabilities.append(val)
    states = np.array(states, 'float')
    probabilities = np.array(probabilities)
    expectation = np.sum(states * probabilities)
    pq.finalize()
    return np.array([expectation])
    def test_base_qgate_transform(self):
        init_machine = InitQMachine()
        machine = init_machine.m_machine
        q = machine.qAlloc_many(6)
        c = machine.cAlloc_many(6)
        prog = pq.QProg()
        cir = pq.QCircuit()
        cir.insert(pq.T(q[0])).insert(pq.iSWAP(q[1], q[5])).insert(pq.S(q[1])).insert(pq.CNOT(q[1], q[0]))
        cir.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
        cir.insert(pq.CZ(q[0], q[2])).insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2])).insert(pq.SWAP(q[1], q[0]))
        cir.insert(pq.iSWAP(q[1], q[5])).insert(pq.iSWAP(q[1], q[5], 0.12345)).insert(pq.SqiSWAP(q[1], q[5]))
        #cir.set_control([q[4],q[3]])
        cir.set_dagger(True)
        prog.insert(cir)

        #输出原始线路
        # draw_qprog(prog, 'pic', filename='D:/src_prog.jpg')

        #基础逻辑门转换
        base_gate_prog = pq.transform_to_base_qgate(prog, machine)
Beispiel #18
0
 def __init__(self, quBitCnt, cBitCnt, machineType=pq.QMachineType.CPU):
     self.m_machine = pq.init_quantum_machine(machineType)
     self.m_qlist = self.m_machine.qAlloc_many(quBitCnt)
     self.m_clist = self.m_machine.cAlloc_many(cBitCnt)
     self.m_prog = pq.QProg()
Beispiel #19
0
    def test_layer1(self):
        init_machine = InitQMachine()
        machine = init_machine.m_machine
        q = machine.qAlloc_many(6)
        c = machine.cAlloc_many(6)
        prog = pq.QProg()
        cir = pq.QCircuit()
        cir.insert(pq.T(q[0])).insert(pq.SWAP(q[1],
                                              q[5])).insert(pq.S(q[1])).insert(
                                                  pq.CNOT(q[1], q[0]))
        cir.insert(pq.CZ(q[0],
                         q[2])).insert(pq.CU(np.pi / 3, 3, 4, 5, q[5], q[2]))
        cir.set_control([q[4], q[3]])
        cir.set_dagger(True)

        # prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
        # prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
        # prog.insert(pq.S(q[3])).insert(pq.CNOT(q[1], q[4]))
        # prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
        # prog.insert(pq.CR(q[5], q[2], np.pi/3))
        # prog.insert(pq.CR(q[2], q[3], np.pi/5))
        # prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
        # prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
        # prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
        # prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
        # prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
        # prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
        # prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
        # prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
        # prog.insert(pq.S(q[3]))
        # prog.insert(cir)
        # prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
        # prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
        # prog.insert(pq.CR(q[5], q[2], np.pi/3))
        # prog.insert(pq.CR(q[2], q[3], np.pi/5))
        # prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
        # prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
        # prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
        # prog.insert(pq.CR(q[5], q[2], np.pi/3))
        # prog.insert(pq.CR(q[2], q[3], np.pi/5))
        # prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
        # prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
        # prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
        # prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
        # prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
        # prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
        # prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
        # prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
        # prog.insert(pq.S(q[3]))
        # prog.insert(cir)
        # prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
        # prog.insert(pq.S(q[3]))
        # prog.insert(cir)
        # prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
        # prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
        # prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
        # prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
        # prog.insert(pq.S(q[3]))
        prog.insert(cir)
Beispiel #20
0
def test_to_originir(qlist, clist, machine):
    prog = pq.QProg()
    prog.insert(pq.H(qlist[2])).insert(pq.measure_all(qlist, clist))
    print(pq.to_originir(prog, machine))
Beispiel #21
0
def test_layer1():
    init_machine = InitQMachine()
    machine = init_machine.m_machine
    q = machine.qAlloc_many(6)
    c = machine.cAlloc_many(6)
    prog = pq.QProg()
    cir = pq.QCircuit()
    cir.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[5])).insert(pq.S(q[1])).insert(pq.CNOT(q[1], q[0]))
    cir.insert(pq.CZ(q[0], q[2])).insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
    cir.set_control([q[4],q[3]])
    cir.set_dagger(True)
    
    prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
    prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
    prog.insert(pq.S(q[3])).insert(pq.CNOT(q[1], q[4]))
    prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
    prog.insert(pq.CR(q[5], q[2], np.pi/3))
    prog.insert(pq.CR(q[2], q[3], np.pi/5))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
    prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
    prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
    prog.insert(pq.S(q[3]))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
    prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
    prog.insert(pq.CR(q[5], q[2], np.pi/3))
    prog.insert(pq.CR(q[2], q[3], np.pi/5))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
    prog.insert(pq.CR(q[5], q[2], np.pi/3))
    prog.insert(pq.CR(q[2], q[3], np.pi/5))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
    prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
    prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
    prog.insert(pq.S(q[3]))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
    prog.insert(pq.S(q[3]))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
    prog.insert(pq.T(q[0])).insert(pq.SWAP(q[1], q[2])).insert(pq.X1(q[3]))
    prog.insert(pq.X(q[0])).insert(pq.CZ(q[1], q[2])).insert(pq.Y(q[3])).insert(pq.Z(q[3]))
    prog.insert(pq.S(q[3]))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[1]))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[3], q[2]))
    prog.insert(pq.S(q[3]))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[5]))
    prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
    prog.insert(pq.CR(q[5], q[2], np.pi/3))
    prog.insert(pq.CR(q[2], q[3], np.pi/5))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(cir)
    prog.insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[5]))
    prog.insert(pq.CR(q[0], q[2], 2.3)).insert(pq.CR(q[0], q[1], np.pi/2.3)).insert(pq.Y1(q[4])).insert(pq.Z1(q[5]))
    prog.insert(pq.CR(q[5], q[2], np.pi/3))
    prog.insert(pq.CR(q[2], q[3], np.pi/5))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[2], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[5], 1, np.pi/2)).insert(pq.U3(q[5], 1.2, 2, np.pi/3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.U4(1.5, 2.2, np.pi/3, np.pi/4, q[3]))
    prog.insert(pq.RX(q[2], np.pi/6.2)).insert(pq.RY(q[2], 6.6)).insert(pq.RZ(q[5], np.pi/3))
    prog.insert(pq.U1(q[0], np.pi/4)).insert(pq.U2(q[1], 1, np.pi/2)).insert(pq.U3(q[2], 1.2, 2, np.pi/3))
    prog.insert(pq.CU(np.pi/3, 3, 4, 5, q[5], q[2]))
    prog.insert(pq.H(q[0])).insert(pq.iSWAP(q[5], q[2], np.pi/2.3)).insert(pq.iSWAP(q[4], q[1]))
    prog.insert(pq.H(q[0])).insert(pq.H(q[1])).insert(pq.H(q[2])).insert(pq.H(q[3])).insert(pq.H(q[4])).insert(pq.H(q[5])).insert(pq.measure_all(q, c))
    prog.insert(pq.H(q[0])).insert(pq.H(q[1])).insert(pq.Measure(q[0], c[0]))
    
    print(prog)
    draw_circuit_pic(prog, 'D:/test_cir_my_draw.jpg', verbose=True)