已关闭
[Bug|缺陷反馈]: deformable_conv2d / BatchNormGatherStatsWithCounts 的 ST executor 在 __call__ 里调用了本文件并不存在的 run()(应为 self.run() 还是删掉这一行?) #6348
eieiei创建于 23 天前关闭于 12 天前
yuning_chen
19 天前 评论:
19 天前 评论:
19 天前 将 liujie12345678 设为负责人
陈海杰
12 天前 评论:
12 天前 评论:
else分支不会走,self.output is None恒为true,else分支属于冗余代码,可以删除if...else...,只保留out = self.get_golden(...)


12 天前 关闭了 issue
12 天前 添加了label:resolved
Describe the current behavior / 问题描述 (Mandatory / 必填)
这两个 ST executor 的
__call__里都有else分支,分支第一行是一个裸的run():两个文件里都没有叫
run的名字 —— 没有导入、没有赋值、grep -n "\brun\b"在每个文件里都只有这一行命中。run不是全局名也不是内建名,所以一旦self.output is not None走进else,这一行就是NameError: name 'run' is not defined。55 if self.output is None: 56 out = self.get_golden(...) 57 else: 58 run() # <- 本文件没有这个名字 59 if isinstance(self.output, int): 60 output = input_data.args[self.output]Environment Information / 环境信息 (Mandatory / 必填)
atk未安装,见下面「备注」里的桩)。.pre-commit-config.yaml:46-53pin 了ruff-pre-commit rev: v0.14.14,ruff-check没有--ignore、F821 在默认规则集里,所以这不是我一个人的判据:Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
# 用 ruff 单扫这两个文件(见上面的输出) python3 -m ruff check --isolated --select F821 <上面两个文件> # 或者:给 atk 打一个最小桩,实例化这两个 executor、把 self.output 置成非 None 再调 __call__, # 就会停在上面那两行报 NameError: name 'run' is not definedDescribe the expected behavior / 预期结果 (Mandatory / 必填)
想请维护者先定性该改成什么,所以我没有直接开 PR。 把本仓所有
executor_*.py的这一段(if self.output is None: … else: …)都翻了一遍,仓里同时存在三种写法:else分支里什么都不调,直接取input_data.args/kwargs[self.output]conv/convolution_forward/tests/st/aclnnQuantConvolution/executor_aclnnQuantConvolution.py:331-339else分支里先self.run()再取 outputmatmul/flat_quant/tests/st/aclnnFlatQuant/executor_aclnnFlatQuant.py:60else分支里写裸run()self.run()才是BaseApi提供的正确入口(flat_quant那份就是这么写的),那这两个文件只需把run()改成self.run();两种改法在语义上不等价(前者会在取输出前先跑一次算子,后者不跑),所以我不好替你们选。告诉我哪一种,我立刻按它提 PR。 目前这行无论走哪条分支都是
NameError,也就是说这两个 ST 的「拿实际输出跟 golden 比」这条路径现在是断的。Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
上面 ruff 的输出即日志。这两个文件其余部分(
get_golden/get_cpp_func_signature_type/_pgacl子类)都没有引用run。Special notes for this issue/备注 (Optional / 选填)
顺带一条同目录线的发现,供一起参考:
optim/advance_step/tests/st/aclnnAdvanceStep/executor_aclnnAdvanceStep.py也是「引用了本文件从未绑定的名字」,它用的是logging(L38-L41、L68-L70 共 7 次)却少了logging = Logger().get_logger()这一行绑定 —— 本仓另外 4 个executor_*.py(rms_norm / rms_norm_grad / QuantMatmulV4 / gru_grad)都有这一行。这一处修法没有歧义,我已经单独开了 PR。发现方式:对 82 个仓的 Python 文件做了「引用的全局名在整个文件里从未被绑定」的 AST 扫描,并用仓自己 pin 的 ruff F821 逐条复核(能过 ruff 的才提)。