跳转至

DeepQuantum 项目中 Qiskit 使用分析报告

生成日期: 2026-01-14 项目: DeepQuantum v4.4.0 分析范围: 整个项目中 qiskit 相关功能的使用情况


目录

  1. 概述
  2. 核心使用位置
  3. 功能详细分析
  4. 代码位置索引
  5. 依赖关系
  6. 关键发现

概述

DeepQuantum 项目中 qiskit 的主要作用是量子电路可视化。项目通过生成 OpenQASM 2.0 格式的字符串,然后利用 qiskit 的 QuantumCircuit 类解析并绘制电路图。

主要特点: - ✅ qiskit 仅用于可视化功能,核心计算不依赖 qiskit - ✅ 通过 QASM 字符串作为中间格式实现解耦 - ✅ 在基准测试中用作性能对比框架 - ⚠️ 存在部分未使用的 qiskit 导入(冗余代码)


核心使用位置

1. 电路可视化 (circuit.py)

文件路径: src/deepquantum/circuit.py

导入语句 (第14行):

from qiskit import QuantumCircuit

主要功能: 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 解析

# Qiskit 解析 QASM 字符串
qc = QuantumCircuit.from_qasm_str(qasm_str)

架构图:

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 的具体作用: - 🎨 电路可视化 (主要用途) - 📊 性能基准测试 (对比框架)


关键发现

✅ 设计优势

  1. 解耦合设计
  2. DeepQuantum 核心功能完全独立于 qiskit
  3. 通过标准 QASM 格式实现互操作性
  4. 可以轻松替换其他可视化工具

  5. 可选依赖

  6. 理论上可以移除 qiskit 依赖(如果不需要可视化)
  7. 核心计算功能不受影响

  8. 标准化接口

  9. 使用 OpenQASM 2.0 标准格式
  10. 保证与其他量子计算框架的兼容性

⚠️ 代码质量问题

  1. 冗余导入
  2. src/deepquantum/ansatz.py 中有未使用的 qiskit 导入
  3. 建议清理以提高代码质量

  4. 依赖过重

  5. 仅用于可视化却依赖整个 qiskit 库
  6. 可以考虑使用更轻量级的可视化方案

📊 性能考虑

  1. 字符串转换开销
  2. DeepQuantum → QASM 字符串 → Qiskit Circuit
  3. 每次可视化都需要解析 QAML 字符串
  4. 对于大型电路可能有性能影响

  5. 基准测试价值

  6. 提供了与其他框架的性能对比
  7. 帮助用户了解各框架的优缺点

使用建议

对于开发者

  1. 如果只需要核心功能
  2. 可以考虑移除 qiskit 依赖以减小安装包大小
  3. 实现自己的轻量级可视化方案

  4. 如果需要可视化

  5. 当前实现足够使用
  6. 支持多种输出格式,灵活性高

  7. 代码清理建议

  8. 移除 ansatz.py 中未使用的 qiskit 导入
  9. 添加条件导入,仅在需要 draw() 功能时导入 qiskit

对于用户

  1. 可视化使用

    import deepquantum as dq
    
    cir = dq.QubitCircuit(2)
    cir.h(0)
    cir.cnot(0, 1)
    cir.draw()  # 使用 qiskit 可视化
    

  2. 基准测试使用

    cd examples/benchmarks
    python gradient_benchmark.py
    

  3. 如果不需要可视化

  4. 可以安装时不装 qiskit(需修改依赖配置)
  5. 或使用最小化安装选项

附录

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 自动生成