已合并
test: add torch.__getattribute__ API validation #41414
test: add torch.__getattribute__ API validation #41414
已合并
zhouzirui1234创建于 7月12日
zhouzirui1234
7月12日

【合入来源】

  • 需求
  • 问题单
  • issue/工单
  • 重构优化
  • 资料更新

关联 issue:

【修改方案】

本 PR 新增 test/test_torch_getattribute_api.py,补充 torch.__getattribute__ 在 torch-npu 环境下的 API 一致性验证用例。

该 API 是 Python module 对象的属性访问入口,用于从 torch module 上按名称读取属性。经检查,PyTorch 官方未提供 torch.__getattribute__ 的独立专项测试,torch-npu 当前 testtest_upstream 目录中也未发现该 API 的专项测试。按照指导规范,本场景属于“PyTorch 官方社区无用例”,因此在 torch-npu test 目录补充自写测试。

任务 API 功能、上游社区用例情况与本 PR 处理方式如下:

API 功能说明 上游社区用例 / 覆盖情况 本 PR 处理
torch.__getattribute__ Python module 属性访问入口,用于按名称读取 torch module 上的属性。 未检索到 PyTorch 官方直接专项测试;torch-npu 现有 test / test_upstream 目录中也未发现专项测试。 新增 test/test_torch_getattribute_api.py,验证已有属性读取、动态属性读取和异常路径。

主要开发思路:

  1. 先确认 torch.__getattribute__ 在当前多版本 torch-npu 环境中存在,且基础行为与 Python module 属性访问语义一致。
  2. 复查 PyTorch 官方测试目录,未发现直接覆盖 torch.__getattribute__ 的独立专项测试。
  3. 复查 torch-npu 当前仓库 testtest_upstream 目录,未发现该 API 的现有专项测试。
  4. 该 API 不涉及 Tensor 输入,不存在需要迁移到 NPU Tensor 的适配点,因此不需要 test_upstream patch。
  5. 该 API 属于顶层 torch module 属性访问能力,不属于 npufxnn 等子模块,因此测试文件放在 torch-npu 根测试目录 test/test_torch_getattribute_api.py
  6. 本 PR 仅补充测试,不修改 API 实现,不改变现有接口行为。

新增测试文件:

test/test_torch_getattribute_api.py

新增测试方法:

test_get_existing_attributes
test_get_dynamic_attribute
test_get_missing_attribute_raises

各测试核心验证点如下:

测试方法 核心验证点
test_get_existing_attributes 使用 types.ModuleType.__getattribute__(torch, "__dict__") 获取模块字典作为独立 oracle,验证 torch.__config__torch.Tensortorch.nntorch.empty 等已存在属性通过 torch.__getattribute__ 读取时返回模块字典中的同一对象。
test_get_dynamic_attribute torch module 上临时设置动态属性,验证 torch.__getattribute__ 可读取该属性,且返回对象与模块字典中记录的对象一致;测试结束后清理动态属性。
test_get_missing_attribute_raises 验证读取不存在属性时,保持 Python module 语义并抛出包含属性名的 AttributeError

【资料变更】

不涉及资料 PR。

已检查 PyTorch 官方公开文档与 Ascend native API 文档,未发现 torch.__getattribute__ 独立条目。该 API 属于 Python module 固有属性访问机制,不是计算类公开 API,因此不新增 docs.md,不提交资料 PR。

【接口变更】

不涉及。

本 PR 不修改 API 实现,不改变现有接口行为,不新增 torch-npu 对外接口。

【功能验证】

运行环境:

操作系统:Ubuntu 22.04.5 LTS (aarch64)
内核版本:5.10.0-182.0.0.95.oe2203sp3.aarch64
NPU 型号:Ascend 910B4
Driver / npu-smi:25.2.0
CANN Toolkit:9.0.0
CANN 路径:/usr/local/Ascend/cann-9.0.0
Python:3.10.12

分支验证环境:

分支:2.7.1
torch:2.7.1
torch-npu:2.7.1
Python 环境:/workspace/a3-zzr-env/envs/venv_torch2.7.1_torchnpu2.7.1_py310

执行命令:

cd /root
python /workspace/a3-zzr-env/repos/pytorch-v2.7.1/test/test_torch_getattribute_api.py

执行结果:

...
----------------------------------------------------------------------
Ran 3 tests in 0.023s

OK

最终验证结论:

  1. 本 PR 补充 3 个 API 一致性测试,覆盖 torch.__getattribute__ 的正常属性读取、动态属性读取和异常路径。
  2. 补充测试不仅验证 API 可调用,也使用模块字典作为独立 oracle 验证已有属性读取、运行时动态属性访问能力和缺失属性异常语义。
  3. 该 API 不涉及 Tensor 输入,不需要 NPU Tensor 迁移适配。
  4. 补充测试已在 2.7.1 环境验证通过。
  5. 目标 API 当前行为符合预期,未发现需要 API 功能补齐的问题。
  6. 本 PR 不修改 API 实现,不涉及接口变更。

【CheckList】

  • 代码注释完备,正确记录错误日志
  • 代码实现进行了返回值、空指针等校验
  • PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等
  • PR持续集成流水线(CI)执行通过,代码检查无异常
likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 zhouzirui1234 的贡献)
Zzhouzirui1234
7月12日 创建了 pull request,commit 3585138e
Zzhouzirui1234
7月12日 关联了issue:【社区任务】7月社区任务第一期-Ascend for PyTorch API 一致性开发(12)
atomgit-bot
atomgit-bot
7月12日 评论:

变更摘要

本 PR 新增 test/test_torch_getattribute_api.py 测试文件,补充 torch.__getattribute__ 在 torch-npu 环境下的 API 一致性验证用例。由于 PyTorch 官方社区未提供该 API 的独立专项测试,且 torch-npu 现有测试目录中也未覆盖,因此按规范在 test 目录下新增自写测试,覆盖正常属性读取、动态属性访问及异常路径三种场景。

主要改动

  • 新增测试类 TestTorchGetattributeApi:继承自 TestCase,对 torch.__getattribute__ 进行专项验证,包含三个测试用例。
  • 已有属性一致性验证 (test_get_existing_attributes):对 __config__Tensornnempty 等模块属性,断言 torch.__getattribute__getattr 返回结果一致。
  • 动态属性可见性验证 (test_get_dynamic_attribute):通过 setattr 在运行时注入临时属性,验证 __getattribute__ 能正确读取,并在 finally 中清理,确保测试不污染 torch 模块。
  • 缺失属性异常验证 (test_get_missing_attribute_raises):对不存在的属性名,断言 torch.__getattribute__ 抛出 AttributeError,保持与 Python module 属性访问语义一致。
likedislike
atomgit-bot
atomgit-bot
7月12日 评论:

代码审查

经过仔细审查,该测试文件 test/test_torch_getattribute_api.py 没有发现任何逻辑错误、安全漏洞、可靠性问题或破坏性变更。

审查结论:

  • 文件: test/test_torch_getattribute_api.py
  • 状态: 无问题

三个测试用例覆盖了 torch.__getattribute__ 的核心场景——已有属性读取、动态属性读写、缺失属性异常路径,测试结构清晰,try/finally 清理逻辑正确,assertIs 的使用符合 Python 模块属性访问的语义。该文件为纯 Python 测试,不涉及 NPU 特定逻辑,无需导入 torch_npu

总结:

  • 按优先级统计:P0: 0, P1: 0, P2: 0, P3: 0
  • 整体风险判断:低风险,此变更为新增的 API 一致性测试用例,代码质量良好,无待修复问题。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
此处折叠了56条消息 查看更多
li_jing_hw成员
26 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
26 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
26 天前 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
26 天前 合入了pull request
ascend-robot
ascend-robot成员
26 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13061 [ commitID:f82900bd ] 已完成
likedislike