DeepQuantum 项目中 Qiskit 使用分析报告¶
生成日期: 2026-01-14 项目: DeepQuantum v4.4.0 分析范围: 整个项目中 qiskit 相关功能的使用情况
目录¶
概述¶
DeepQuantum 项目中 qiskit 的主要作用是量子电路可视化。项目通过生成 OpenQASM 2.0 格式的字符串,然后利用 qiskit 的 QuantumCircuit 类解析并绘制电路图。
主要特点: - ✅ qiskit 仅用于可视化功能,核心计算不依赖 qiskit - ✅ 通过 QASM 字符串作为中间格式实现解耦 - ✅ 在基准测试中用作性能对比框架 - ⚠️ 存在部分未使用的 qiskit 导入(冗余代码)
核心使用位置¶
1. 电路可视化 (circuit.py)¶
文件路径: src/deepquantum/circuit.py
导入语句 (第14行):
主要功能: draw() 方法
实现位置: 第 737-740 行
def draw(self, output: str = 'mpl', **kwargs):
"""Visualize the quantum circuit."""
qc = QuantumCircuit.from_qasm_str(self._qasm())
return qc.draw(output=output, **kwargs)
工作流程:
1. 调用 self._qasm() 生成 QASM 2.0 字符串
2. 使用 QuantumCircuit.from_qasm_str() 将 QASM 字符串转换为 qiskit 电路对象
3. 调用 qiskit 的 draw() 方法进行可视化
4. 支持多种输出格式:'mpl'(matplotlib), 'text', 'latex' 等
使用示例:
import deepquantum as dq
# 创建电路
cir = dq.QubitCircuit(nqubit=2)
cir.h(0)
cir.cnot(0, 1)
# 使用 qiskit 进行可视化
cir.draw(output='mpl') # matplotlib 输出
cir.draw(output='text') # 文本输出
2. 性能基准测试 (gradient_benchmark.py)¶
文件路径: examples/benchmarks/gradient_benchmark.py
导入语句 (第12-14行):
from qiskit.opflow import X, StateFn
from qiskit.circuit import QuantumCircuit, ParameterVector
from qiskit.opflow.gradients import Gradient, Hessian
主要功能:
1. 梯度计算基准测试 - grad_qiskit() 函数
2. Hessian 计算基准测试 - hessian_qiskit() 函数
梯度计算函数¶
位置: 第 45-68 行
def grad_qiskit(n, l, trials=2):
"""使用 qiskit 计算参数化量子电路的梯度
Args:
n: 量子比特数
l: 层数
trials: 试验次数
Returns:
平均计算时间(秒)
"""
hamiltonian = reduce(xor, [X for _ in range(n)])
wavefunction = QuantumCircuit(n)
params = ParameterVector('theta', length=3 * n * l)
# 构建参数化量子电路
for _ in range(l):
for i in range(n):
wavefunction.ry(params[3 * i], i)
for i in range(n):
wavefunction.rz(params[3 * i + 1], i)
for i in range(n - 1):
wavefunction.cnot(i, i + 1)
# 使用 qiskit 的梯度计算功能
op = ~StateFn(hamiltonian) @ StateFn(wavefunction)
grad = Gradient().convert(operator=op, params=params)
# 测量计算时间
import time
times = []
for _ in range(trials):
t = time.time()
grad.assign_parameters({p: np.random.random() for p in params})
times.append(time.time() - t)
return np.mean(times)
Hessian 计算函数¶
位置: 第 71-94 行
def hessian_qiskit(n, l, trials=0):
"""使用 qiskit 计算参数化量子电路的 Hessian 矩阵"""
# 类似结构,但使用 Hessian 类
hess = Hessian().convert(operator=op, params=params)
# ...
基准测试主循环¶
位置: 第 199-225 行
测试配置:
- 量子比特数: n = 4, 6, 8, 10, 12
- 层数: l = 2, 4, 6
- 对比框架: qiskit, tensorcircuit, deepquantum, pyvqnet
- 结果保存: gradient_results.data
目的: 比较不同量子计算框架在梯度和 Hessian 计算上的性能表现
3. 冗余导入 (ansatz.py)¶
文件路径: src/deepquantum/ansatz.py
导入语句 (第12-14行):
from qiskit.opflow import X, StateFn
from qiskit.circuit import QuantumCircuit, ParameterVector
from qiskit.opflow.gradients import Gradient, Hessian
状态: ⚠️ 导入但未使用
说明: 这些导入可能是: - 遗留代码 - 为未来功能预留 - 从基准测试代码复制过来的
建议: 可以安全移除这些未使用的导入。
功能详细分析¶
QASM 接口¶
DeepQuantum 通过 QASM (Quantum Assembly Language) 字符串与 qiskit 进行交互。
QASM 生成¶
位置: src/deepquantum/circuit.py 第 537-572 行
def _qasm(self):
"""生成 OpenQASM 2.0 格式的电路描述
Returns:
QASM 2.0 字符串
"""
qasm_str = 'OPENQASM 2.0;\n'
qasm_str += 'include "qelib1.inc";\n'
qasm_str += f'qreg q[{self.nqubit}];\n'
qasm_str += f'creg c[{self.nqubit}];\n'
for op in self.elements:
qasm_str += op._qasm() + '\n'
return qasm_str
QASM 解析¶
架构图:
DeepQuantum Circuit
↓
_qasm() 方法
↓
QASM 2.0 字符串
↓
QuantumCircuit.from_qasm_str()
↓
Qiskit Circuit
↓
draw() 方法
↓
可视化输出
代码位置索引¶
核心文件¶
| 文件路径 | 行号 | 类型 | 说明 |
|---|---|---|---|
src/deepquantum/circuit.py |
14 | 导入 | from qiskit import QuantumCircuit |
src/deepquantum/circuit.py |
537-572 | 方法 | _qasm() 生成 QASM 字符串 |
src/deepquantum/circuit.py |
737-740 | 方法 | draw() 使用 qiskit 可视化 |
src/deepquantum/ansatz.py |
12-14 | 导入 | qiskit 模块导入(未使用) |
基准测试文件¶
| 文件路径 | 行号 | 类型 | 说明 |
|---|---|---|---|
examples/benchmarks/gradient_benchmark.py |
12-14 | 导入 | qiskit 模块导入 |
examples/benchmarks/gradient_benchmark.py |
45-68 | 函数 | grad_qiskit() 梯度计算 |
examples/benchmarks/gradient_benchmark.py |
71-94 | 函数 | hessian_qiskit() Hessian 计算 |
examples/benchmarks/gradient_benchmark.py |
199-225 | 主循环 | 基准测试执行 |
配置文件¶
| 文件路径 | 行号 | 类型 | 说明 |
|---|---|---|---|
pyproject.toml |
12 | 依赖 | qiskit 依赖声明 |
TECHNICAL_DOCUMENTATION.md |
85 | 文档 | 说明 qiskit 用于 QASM 转换 |
相关支持文件¶
这些文件不直接使用 qiskit,但为 QASM 生成提供支持:
| 文件路径 | 说明 |
|---|---|
src/deepquantum/qasm3.py |
OpenQASM 3.0 转换器(独立实现) |
src/deepquantum/gate.py |
各个量子门的 _qasm() 方法 |
src/deepquantum/operation.py |
操作类的 QASM 生成方法 |
依赖关系¶
依赖树¶
deepquantum (v4.4.0)
└── qiskit (最新版)
├── qiskit.opflow
│ ├── X, StateFn
│ └── gradients (Gradient, Hessian)
└── qiskit.circuit
└── QuantumCircuit
pip 依赖信息¶
Name: deepquantum
Version: 4.4.0
Requires: bayesian-optimization, matplotlib, networkx, numpy,
psutil, pylatexenc, qiskit, scipy, svgwrite,
sympy, torch, tqdm
qiskit 的具体作用: - 🎨 电路可视化 (主要用途) - 📊 性能基准测试 (对比框架)
关键发现¶
✅ 设计优势¶
- 解耦合设计
- DeepQuantum 核心功能完全独立于 qiskit
- 通过标准 QASM 格式实现互操作性
-
可以轻松替换其他可视化工具
-
可选依赖
- 理论上可以移除 qiskit 依赖(如果不需要可视化)
-
核心计算功能不受影响
-
标准化接口
- 使用 OpenQASM 2.0 标准格式
- 保证与其他量子计算框架的兼容性
⚠️ 代码质量问题¶
- 冗余导入
src/deepquantum/ansatz.py中有未使用的 qiskit 导入-
建议清理以提高代码质量
-
依赖过重
- 仅用于可视化却依赖整个 qiskit 库
- 可以考虑使用更轻量级的可视化方案
📊 性能考虑¶
- 字符串转换开销
- DeepQuantum → QASM 字符串 → Qiskit Circuit
- 每次可视化都需要解析 QAML 字符串
-
对于大型电路可能有性能影响
-
基准测试价值
- 提供了与其他框架的性能对比
- 帮助用户了解各框架的优缺点
使用建议¶
对于开发者¶
- 如果只需要核心功能
- 可以考虑移除 qiskit 依赖以减小安装包大小
-
实现自己的轻量级可视化方案
-
如果需要可视化
- 当前实现足够使用
-
支持多种输出格式,灵活性高
-
代码清理建议
- 移除
ansatz.py中未使用的 qiskit 导入 - 添加条件导入,仅在需要
draw()功能时导入 qiskit
对于用户¶
-
可视化使用
-
基准测试使用
-
如果不需要可视化
- 可以安装时不装 qiskit(需修改依赖配置)
- 或使用最小化安装选项
附录¶
A. Qiskit 模块说明¶
| 模块 | 用途 | DeepQuantum 中的使用 |
|---|---|---|
QuantumCircuit |
量子电路类 | 解析 QAML 字符串并可视化 |
QuantumCircuit.from_qasm_str() |
从 QAML 字符串创建电路 | 主要接口方法 |
QuantumCircuit.draw() |
绘制电路图 | 可视化输出 |
ParameterVector |
参数向量 | 基准测试中构建参数化电路 |
opflow |
算符流框架 | 基准测试中使用 |
Gradient |
梯度计算 | 基准测试中使用 |
Hessian |
Hessian 计算 | 基准测试中使用 |
B. 相关资源¶
- Qiskit 文档: https://qiskit.org/documentation/
- OpenQASM 规范: https://openqasm.com/
- DeepQuantum 文档: https://deepquantum.turingq.com/
C. 版本信息¶
- DeepQuantum: v4.4.0
- Python: 3.12.12
- Qiskit: 最新版(具体版本需运行
pip show qiskit查看)
报告结束
此报告由 Claude Code 自动生成