电路可视化
电路绘制、统计和汇总函数的 API 参考。提供量子电路的文本、图像和 LaTeX 输出,以及门/层分布分析。
circuit_summary
生成量子电路的统计摘要,包括按类别分类的门计数和层计数。
签名
python
circuit_summary(prog, show: bool = True) -> CircuitSummary参数
| 参数 | 类型 | 说明 |
|---|---|---|
| prog | QProg 或 QCircuit | 要分析的量子电路 |
| show | bool | 是否立即显示饼图可视化(默认 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}")CircuitSummary
由 circuit_summary 返回的电路统计信息容器。包含一个 ProgInfo 数据类并提供显示方法。
签名
python
class CircuitSummary属性
| 属性 | 类型 | 说明 |
|---|---|---|
| info | ProgInfo | 包含门和层统计数据的数据类 |
ProgInfo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| single_gate_num | int | 单量子比特门的数量 |
| double_gate_num | int | 双量子比特门的数量 |
| multi_control_gate_num | int | 多控制门的数量 |
| node_num | int | 门节点的总数 |
| single_gate_layer_num | int | 单门层的数量 |
| double_gate_layer_num | int | 双门层的数量 |
| layer_num | int | 层的总数 |
方法
show()
显示门和层分布的饼图。
python
summary.show()__str__()
返回包含详细电路信息的格式化字符串,包括量子比特数量、门映射、参数化门数量和参数数量。
python
print(summary)show_prog_info_count
显示量子电路中门节点和层分布的饼图。
签名
python
show_prog_info_count(prog) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| prog | QProg 或 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参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| output | str | 'text' | 输出格式:'text'(ASCII)、'pic'(matplotlib 图像)或 'latex' |
| filename | str 或 None | None | 输出文件路径。对于 'pic' 默认为 QCircuit_pic.jpg。对于 'latex' 默认为 QCircuit_latex.tex。对于 'text',如果指定则将文本保存到文件 |
| scale | float | 0.7 | 图像缩放因子(仅用于 'pic' 输出) |
| fold | int | 30 | 以门为单位的图像最大宽度(仅用于 'pic' 输出) |
| with_logo | bool | False | 是否包含 logo(仅用于 'latex' 输出) |
| with_gate_params | bool | False | 是否显示门参数 |
| line_length | int | 100 | 'text' 输出的行长度 |
| NodeIter_first | 迭代器或 None | None | 部分绘制的电路起始位置 |
| NodeIter_second | 迭代器或 None | None | 部分绘制的电路结束位置 |
| console_encode_type | str | '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 = prog.draw()
print(text)
# 保存为图像文件
prog.draw('pic', filename='my_circuit.png')
# LaTeX 源码
latex = prog.draw('latex')
print(latex)
# 在文本输出中显示门参数
prog.draw('text', with_gate_params=True)
# 使用迭代器进行部分绘制
prog.draw('text', NodeIter_first=prog.begin(), NodeIter_second=prog.end())