环境:develop @ 5f973ef,Python 3.12,pyqpanda3 0.4.0,macOS arm64
队伍:DU_Fanta(关联 #13)
在系统性验证 pyqpanda_alg 的过程中发现以下问题,均可稳定复现。按严重程度排列。已在 #36 中修复的 requirements.txt 与 pytest.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_code 在 QmRMR 中不存在,实际导出的是 Feature_Selection。
3【文档】5 处 docstring 示例使用已移除的 pyqpanda v2 接口
pyqpanda (v2) 并非本项目依赖,用户照抄示例必然报 ModuleNotFoundError。
| 位置 |
内容 |
plugin.py:188-189(qft) |
pq.QMachine(pq.QMachineType.CPU)、pq.QProg() |
plugin.py:263-264(QFT) |
同上 |
plugin.py:334-335(bind_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_dict 与 parse_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.py 中 cir 的示例导入了 CPUQVM, QCircuit, Z, TOFFOLI,随后却使用 QProg():
>>> prog = QProg()
NameError: name 'QProg' is not defined
6【文档】两个模块的 __init__ docstring 描述了错误的模块
Grover/__init__.py 与 QmRMR/__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_data:n = 1..4 全部取值穷举正确,越界与负数均正确报错。
如果维护者认可,我可以提交 PR 修复以上问题(问题 1–7)。
环境:
develop@ 5f973ef,Python 3.12,pyqpanda3 0.4.0,macOS arm64队伍:DU_Fanta(关联 #13)
在系统性验证
pyqpanda_alg的过程中发现以下问题,均可稳定复现。按严重程度排列。已在 #36 中修复的requirements.txt与pytest.ini问题不在此列。1【Bug】
from pyqpanda_alg.QmRMR import *直接抛出 TypeErrorpyqpanda_alg/QmRMR/__init__.py:8中__all__存放的是类对象而非字符串:复现:
包内其余 12 个
__init__.py均正确使用字符串,仅此处不一致。2【Bug】
example/QAlgBase/下 11 个示例中有 8 个无法运行在干净环境中逐个执行:
newtest.pyModuleNotFoundError: No module named 'pyqpanda'testeg_QUBO.pyModuleNotFoundError: No module named 'pyqpanda_alg.QFinance'testeg_QmRMR.pyImportError: cannot import name 'all_code' from 'pyqpanda_alg.QmRMR'testeg_class_qsvr.pyModuleNotFoundError: ... 'pyqpanda_alg.QFinance'testeg_comparator.pyModuleNotFoundError: ... 'pyqpanda_alg.QFinance'testeg_grover_markdata.pyModuleNotFoundError: No module named 'pyqpanda'testeg_t_spare.pyModuleNotFoundError: ... 'pyqpanda_alg.QFinance'QmRMR/testeg_QmRMR.pyModuleNotFoundError: No module named 'pyqpanda'testeg_GAS.py/testeg_QAE.py/testeg_grover.py两类原因:
pyqpanda_alg.QFinance包已不存在,相关模块已拆分为QUBO/QCmp/QSVR/QSEncode;import pyqpanda as pq,即 pyqpanda v2,而本项目已迁移至 pyqpanda3,且pyqpanda并不在requirements.txt中。testeg_QmRMR.py引用的all_code在QmRMR中不存在,实际导出的是Feature_Selection。3【文档】5 处 docstring 示例使用已移除的 pyqpanda v2 接口
pyqpanda(v2) 并非本项目依赖,用户照抄示例必然报ModuleNotFoundError。plugin.py:188-189(qft)pq.QMachine(pq.QMachineType.CPU)、pq.QProg()plugin.py:263-264(QFT)plugin.py:334-335(bind_nonnegative_data)QSVM/quantum_kernel_svm.py:212import pyqpanda as pqQAOA/qaoa.py:485import pyqpanda as pqpyqpanda3 中对应写法为
CPUQVM()与QProg()。4【文档】
parse_quantum_result_dict示例调用了不存在的函数plugin.py:405-418的示例三次调用parse_quantum_result(...),但包内只有parse_quantum_result_dict与parse_quantum_result_list,疑似函数改名后示例未同步:5【文档】
Grover.cir示例缺少QProg导入Grover/Grover_core.py中cir的示例导入了CPUQVM, QCircuit, Z, TOFFOLI,随后却使用QProg():6【文档】两个模块的
__init__docstring 描述了错误的模块Grover/__init__.py与QmRMR/__init__.py的模块说明均为「The QFinance module provides tools related to comparator, Quantum amplitude estimation...」,与实际模块内容不符,应为复制粘贴遗留。7【清理】5 处已赋值但从未使用的局部变量
ruff check --select F841结果:QAE/QAE.py:352clistQKmeans/QuantumKmeans.py:163nQSVD/QSVD.py:156machineQSVM/quantum_kernel_svm.py:354measurementQUBO/QUBO.py:123bounds复现方式
已验证正确的部分
为避免误导,以下模块经过验证未发现问题,一并说明:
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_data:n = 1..4全部取值穷举正确,越界与负数均正确报错。如果维护者认可,我可以提交 PR 修复以上问题(问题 1–7)。