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)
def iSWAP(qubit1,qubit2,theta=None): """ QPanda Basic API` \n Create an iSWAP(theta) gate \n theta is optional \n Qubit,Qubit,double(Optional) -> QGate """ if theta is None: return pyQPanda.iSWAP(qubit1,qubit2) else: return pyQPanda.iSWAP(qubit1,qubit2,theta)
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)
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)
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)
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)
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)