量子线路字符画¶
目前PyQPanda提供了三种量子线路可视化方式,具体使用方式参考如下示例。
实例¶
import pyqpanda.pyQPanda as pq
from pyqpanda.Visualization.circuit_draw import *
import math
class InitQMachine:
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)
def __del__(self):
pq.destroy_quantum_machine(self.m_machine)
def test_print_qcircuit(q, c):
# 构建量子程序
prog = pq.QCircuit()
prog << pq.CU(1, 2, 3, 4, q[0], q[5]) << pq.H(q[0]) << pq.S(q[2]) << pq.CNOT(q[0], q[1]) << pq.CZ(q[1], q[2]) << pq.CR(q[2], q[1], math.pi/2)
prog.set_dagger(True)
print('draw_qprog:')
# 通过print直接输出量子线路字符画,该方法会在控制台输出量子线路,输出格式为utf8编码,所以在非utf8编码的控制台下,输出字符画会出现乱码情况。
# 同时,该方法会将当前量子线路字符画信息保存到文件,文件名为 “QCircuitTextPic.txt”,文件用utf8编码,并保存在当面路径下面,
# 所以用户也可以通过该文件查看量子线路信息,注意该文件要以uft8格式打开,否则会出现乱码。
print(prog)
# 通过draw_qprog接口输出量子线路字符画,该方法功能和print方法一样,区别在于该接口可以指定控制台编码类型,以保证在控制台输出的量子线路字符画能正常显示。
# 参数“console_encode_type” 用于指定控制台类型,目前支持两种编码方式:utf8和gbk,默认为utf8
draw_qprog(prog, 'text', console_encode_type='gbk')
# draw_qprog接口还可以将量子线路保存成图片,调用方式如下。参数“filename”用于指定保存的文件名。
draw_qprog(prog, 'pic', filename='D:/test_cir_draw.png')
if __name__=="__main__":
init_machine = InitQMachine(16, 16)
qlist = init_machine.m_qlist
clist = init_machine.m_clist
machine = init_machine.m_machine
test_print_qcircuit(qlist, clist)
以上示例分别演示了draw_qprog接口的使用方法,上述代码的输出结果如下:
- q_0: |0>─────────────────── ──── ───■─── ┤H├ ──────────────────────■──────────────────────
┌────────────────┐ ┌──┴─┐ └─┘ │
- q_1: |0>─┤CR(1.570796).dag├ ──■─ ┤CNOT├─ ─── ──────────────────────┼──────────────────────
└────────┬───────┘ ┌─┴┐ ├────┴┐ │
- q_2: |0>──────────■──────── ┤CZ├ ┤S.dag├ ─── ──────────────────────┼──────────────────────
└──┘ └─────┘ ┌─────────────────────┴─────────────────────┐
- q_5: |0>─────────────────── ──── ─────── ─── ┤CU(1.000000,2.000000,3.000000,4.000000).dag├
└───────────────────────────────────────────┘
输出的量子线路图片效果如下:

接口draw_qprog()的详细参数说明如下:
"""Draw a quantum circuit to different formats (set by output parameter):
**text**: ASCII art TextDrawing that can be printed in the console.
**pic**: images with color rendered purely in Python.
Args:
prog : the quantum circuit to draw
scale (float): scale of image to draw (shrink if < 1). Only used by the ``pic`` outputs.
filename (str): file path to save image to
NodeIter_first: circuit printing start position.
NodeIter_second: circuit printing end position.
console_encode_type(str): Target console encoding type.
Mismatching of encoding types may result in character confusion, 'utf8' and 'gbk' are supported.
Only used by the ``pic`` outputs.
line_length (int): Sets the length of the lines generated by `text` output type.
Returns: no return
"""
def draw_qprog(prog, output=None, scale=0.7, filename=None, line_length=None, NodeIter_first=None, \
NodeIter_second=None, console_encode_type = 'utf8'):
这里作为演示,我们将上述示例代码中的test_print_qcircuit()接口实现改成如下代码:
prog = pq.QCircuit()
prog << pq.CU(1, 2, 3, 4, q[0], q[5]) << pq.H(q[0]) << pq.S(q[2]) << pq.CNOT(q[0], q[1]) << pq.CZ(q[1], q[2]) << pq.CR(q[2], q[1], math.pi/2)
iter_start = prog.begin()
iter_end = iter_start.get_next()
iter_end = iter_end.get_next()
iter_end = iter_end.get_next()
prog.set_dagger(True)
draw_qprog(prog, 'text', NodeIter_first=iter_start, NodeIter_second=iter_end, console_encode_type='gbk')
draw_qprog(prog, 'pic', NodeIter_first=iter_start, NodeIter_second=iter_end, filename='D:/test_cir_draw.jpg')
上面这段示例代码只会输出prog的前4个逻辑门节点,用户可自行替换上述代码段到前面的示例程序中,运行查看结果,这里不再赘述。