Skip to content

电路可视化 ​

电路绘制、统计和汇总函数的 API 参考。提供量子电路的文本、图像和 LaTeX 输出,以及门/层分布分析。

circuit_summary ​

生成量子电路的统计摘要,包括按类别分类的门计数和层计数。

签名 ​

python
circuit_summary(prog, show: bool = True) -> CircuitSummary

参数 ​

参数类型说明
progQProg 或 QCircuit要分析的量子电路
showbool是否立即显示饼图可视化(默认 True)

返回值 ​

CircuitSummary -- 包含电路统计信息和可视化方法的对象。

示例 ​

python
from pyqpanda3 import core as pq
from pyqpanda3.visualization import circuit_summary

q = pq.Qubit(0)
prog = pq.QProg()
prog << pq.H(q) << pq.CNOT(q, pq.Qubit(1))

summary = circuit_summary(prog, show=False)
print(summary)
print(f"Total gates: {summary.info.node_num}")
print(f"Total layers: {summary.info.layer_num}")

运行结果:

ProgInfo(single_gate_num=1, double_gate_num=1, multi_control_gate_num=0, node_num=2, single_gate_layer_num=1, double_gate_layer_num=1, layer_num=2)
Total gates: 2
Total layers: 2

CircuitSummary ​

由 circuit_summary 返回的电路统计信息容器。包含一个 ProgInfo 数据类并提供显示方法。

签名 ​

python
class CircuitSummary

属性 ​

属性类型说明
infoProgInfo包含门和层统计数据的数据类

ProgInfo 字段 ​

字段类型说明
single_gate_numint单量子比特门的数量
double_gate_numint双量子比特门的数量
multi_control_gate_numint多控制门的数量
node_numint门节点的总数
single_gate_layer_numint单门层的数量
double_gate_layer_numint双门层的数量
layer_numint层的总数

方法 ​

show() ​

显示门和层分布的饼图。

python
summary.show()

__str__() ​

返回 ProgInfo 数据类的字符串表示形式,显示按类别分类的门和层计数。

python
print(summary)

show_prog_info_count ​

显示量子电路中门节点和层分布的饼图。

签名 ​

python
show_prog_info_count(prog) -> None

参数 ​

参数类型说明
progQProg 或 QCircuit要分析的量子电路

说明 ​

使用 matplotlib 渲染两个饼图:

  • 上方图表 -- 节点分布:单门节点、双门节点、多控制门节点、其他节点
  • 下方图表 -- 层分布:单门层、双门层、其他层

示例 ​

python
from pyqpanda3 import core as pq
from pyqpanda3.visualization import show_prog_info_count

q = pq.Qubit(0)
prog = pq.QProg()
prog << pq.H(q) << pq.CNOT(q, pq.Qubit(1))

show_prog_info_count(prog)

运行结果:

显示两个饼图:上方图表显示节点分布(单门节点、双门节点、多控制门节点、其他节点),下方图表显示层分布(单门层、双门层、其他层)。

draw(QProg / QCircuit 方法) ​

以文本、图像或 LaTeX 格式绘制量子电路。在导入时注入到 QProg 和 QCircuit 上。

签名 ​

python
prog.draw(output='text', filename=None, scale=0.7, fold=30,
          with_logo=False, with_gate_params=False, line_length=100,
          NodeIter_first=None, NodeIter_second=None,
          console_encode_type='utf8') -> str | None

参数 ​

参数类型默认值说明
outputstr'text'输出格式:'text'(ASCII)、'pic'(matplotlib 图像)或 'latex'
filenamestr 或 NoneNone输出文件路径。对于 'pic' 默认为 QCircuit_pic.jpg。对于 'latex' 默认为 QCircuit_latex.tex。对于 'text',如果指定则将文本保存到文件
scalefloat0.7图像缩放因子(仅用于 'pic' 输出)
foldint30以门为单位的图像最大宽度(仅用于 'pic' 输出)
with_logoboolFalse是否包含 logo(仅用于 'latex' 输出)
with_gate_paramsboolFalse是否显示门参数
line_lengthint100'text' 输出的行长度
NodeIter_first迭代器或 NoneNone部分绘制的电路起始位置
NodeIter_second迭代器或 NoneNone部分绘制的电路结束位置
console_encode_typestr'utf8''text' 输出的控制台编码类型。支持的值:'utf8'、'gbk'

返回值 ​

  • 'text' 和 'latex' -- 返回 str
  • 'pic' -- 返回 None(图像保存到文件)

示例 ​

python
from pyqpanda3 import core as pq

q = pq.Qubit(0)
prog = pq.QProg()
prog << pq.H(q) << pq.CNOT(q, pq.Qubit(1))

# ASCII text output
text = prog.draw()
print(text)

# Save to image file
prog.draw('pic', filename='my_circuit.png')

# LaTeX source
latex = prog.draw('latex')
print(latex)

# Show gate parameters in text output
prog.draw('text', with_gate_params=True)

文本输出(可能因控制台编码略有不同):


          ┌─┐        
q_0:  |0>─┤H├ ───*── 
          └─┘ ┌──┬──┐ 
q_1:  |0>──── ┤CNOT├ 
              └──┴──┘ 
 c :   / ═══════════

LaTeX 输出:

latex
\documentclass[border=2px]{standalone}
\usepackage[braket, qm]{qcircuit}
\usepackage{graphicx}
\begin{document}

\scalebox{1.0}{
\Qcircuit @C = 1.0em @R = 0.5em @!R { \\
\nghost{} & \lstick{\ket{q_0}} & \gate{\mathrm{H}} & \ctrl{1} & \rstick{}\qw & \nghost{} \\
\nghost{} & \lstick{\ket{q_1}} & \qw & \targ\qw & \rstick{}\qw & \nghost{} \\
}}
\end{document}

另见 ​

Released under the MIT License.