Skip to content

【Bug】QmRMR 星号导入报错、8/11 示例无法运行,以及若干文档与残留代码问题 #38

Description

@CREVIOS

环境develop @ 5f973ef,Python 3.12,pyqpanda3 0.4.0,macOS arm64
队伍:DU_Fanta(关联 #13

在系统性验证 pyqpanda_alg 的过程中发现以下问题,均可稳定复现。按严重程度排列。已在 #36 中修复的 requirements.txtpytest.ini 问题不在此列。


1【Bug】from pyqpanda_alg.QmRMR import * 直接抛出 TypeError

pyqpanda_alg/QmRMR/__init__.py:8__all__ 存放的是类对象而非字符串:

from .QmRMR_core import Feature_Selection
__all__ = [Feature_Selection]        # 应为 ['Feature_Selection']

复现:

>>> from pyqpanda_alg.QmRMR import *
TypeError: Item in pyqpanda_alg.QmRMR.__all__ must be str, not type

包内其余 12 个 __init__.py 均正确使用字符串,仅此处不一致。


2【Bug】example/QAlgBase/ 下 11 个示例中有 8 个无法运行

在干净环境中逐个执行:

示例 结果
newtest.py ModuleNotFoundError: No module named 'pyqpanda'
testeg_QUBO.py ModuleNotFoundError: No module named 'pyqpanda_alg.QFinance'
testeg_QmRMR.py ImportError: cannot import name 'all_code' from 'pyqpanda_alg.QmRMR'
testeg_class_qsvr.py ModuleNotFoundError: ... 'pyqpanda_alg.QFinance'
testeg_comparator.py ModuleNotFoundError: ... 'pyqpanda_alg.QFinance'
testeg_grover_markdata.py ModuleNotFoundError: No module named 'pyqpanda'
testeg_t_spare.py ModuleNotFoundError: ... 'pyqpanda_alg.QFinance'
QmRMR/testeg_QmRMR.py ModuleNotFoundError: No module named 'pyqpanda'
testeg_GAS.py / testeg_QAE.py / testeg_grover.py OK

两类原因:

  • pyqpanda_alg.QFinance 包已不存在,相关模块已拆分为 QUBO / QCmp / QSVR / QSEncode
  • 示例仍在 import pyqpanda as pq,即 pyqpanda v2,而本项目已迁移至 pyqpanda3,且 pyqpanda 并不在 requirements.txt 中。

testeg_QmRMR.py 引用的 all_codeQmRMR 中不存在,实际导出的是 Feature_Selection


3【文档】5 处 docstring 示例使用已移除的 pyqpanda v2 接口

pyqpanda (v2) 并非本项目依赖,用户照抄示例必然报 ModuleNotFoundError

位置 内容
plugin.py:188-189qft pq.QMachine(pq.QMachineType.CPU)pq.QProg()
plugin.py:263-264QFT 同上
plugin.py:334-335bind_nonnegative_data 同上
QSVM/quantum_kernel_svm.py:212 import pyqpanda as pq
QAOA/qaoa.py:485 import pyqpanda as pq

pyqpanda3 中对应写法为 CPUQVM()QProg()


4【文档】parse_quantum_result_dict 示例调用了不存在的函数

plugin.py:405-418 的示例三次调用 parse_quantum_result(...),但包内只有 parse_quantum_result_dictparse_quantum_result_list,疑似函数改名后示例未同步:

>>> parse_quantum_result(raw_result, qubit_list)
NameError: name 'parse_quantum_result' is not defined

5【文档】Grover.cir 示例缺少 QProg 导入

Grover/Grover_core.pycir 的示例导入了 CPUQVM, QCircuit, Z, TOFFOLI,随后却使用 QProg()

>>> prog = QProg()
NameError: name 'QProg' is not defined

6【文档】两个模块的 __init__ docstring 描述了错误的模块

Grover/__init__.pyQmRMR/__init__.py 的模块说明均为「The QFinance module provides tools related to comparator, Quantum amplitude estimation...」,与实际模块内容不符,应为复制粘贴遗留。


7【清理】5 处已赋值但从未使用的局部变量

ruff check --select F841 结果:

位置 变量
QAE/QAE.py:352 clist
QKmeans/QuantumKmeans.py:163 n
QSVD/QSVD.py:156 machine
QSVM/quantum_kernel_svm.py:354 measurement
QUBO/QUBO.py:123 bounds

复现方式

git checkout develop
pip install -e pyqpanda-algorithm
python -c "from pyqpanda_alg.QmRMR import *"          # 问题 1
cd pyqpanda-algorithm/example/QAlgBase
for f in *.py; do python "$f"; done                    # 问题 2
ruff check pyqpanda_alg --select F841                  # 问题 7

已验证正确的部分

为避免误导,以下模块经过验证未发现问题,一并说明:

  • QCmp.int_comparator:对 n = 2, 3 的全部输入、4 种比较模式、416 个用例穷举验证,全部正确;
  • QUBO.QuadraticBinary.function_value / qubobytraversal:与经典穷举逐点比对,dict 与 sympy 两条输入路径均正确;
  • plugin.qft / plugin.QFT:与 DFT 矩阵比对,二者均酉且正确(qft 输出为比特反序,QFT 含末尾交换);
  • plugin.bind_nonnegative_datan = 1..4 全部取值穷举正确,越界与负数均正确报错。

如果维护者认可,我可以提交 PR 修复以上问题(问题 1–7)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions