Pull Request已成功合入, 合并人@ascend-robot
(感谢 zhaoziyi-2026 的贡献)变更摘要
本 PR 在 test/npu/test_tensor.py 中为 torch._C._TensorMeta 补充了专项 API 一致性验证用例。_TensorMeta 是 PyTorch C 扩展内部的元类,负责管理 torch.Tensor、torch.nn.Parameter 及 Tensor 子类的元类行为,上游社区缺乏对该 API 的直接专项测试。本次新增三个测试方法,覆盖 Tensor 类元信息校验、NPU Tensor 实例与元类的关系验证,以及自定义 Tensor 子类和非法直接构造路径的断言。
主要改动
-
新增
test_tensor_meta_matches_tensor_classes测试:验证torch._C._TensorMeta是torch.Tensor的元类(type(torch.Tensor)即为_TensorMeta),并校验其模块名torch._C、类名_TensorMeta,同时确认torch.Tensor和torch.nn.Parameter均为其实例,且torch.nn.Parameter是torch.Tensor的子类。 -
新增
test_tensor_meta_with_npu_tensor_instance测试:验证 NPU 设备上的 Tensor 实例属于torch.Tensor但不属于_TensorMeta(实例本身不是元类的实例),而其类型type(npu_tensor)才是_TensorMeta的实例,同时确认设备类型为"npu"。 -
新增
test_tensor_meta_subclass_and_direct_construction测试:验证自定义 Tensor 子类(CustomTensor)的元类为_TensorMeta,且CustomTensor是torch.Tensor的子类;同时断言直接调用tensor_meta("DirectTensor", (), {})构造会抛出RuntimeError: "Cannot subclass _TensorBase directly"。 -
补充模块级文档字符串:在
test/npu/test_tensor.py文件头部添加了模块说明,标明该测试文件涵盖 NPU Tensor 行为及torch._C._TensorMeta元类一致性检查。


代码审查
审查总结
对 test/npu/test_tensor.py 的变更进行了全面审查,共审查了 3 个新增测试方法。
发现的问题
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 1 |
| P3 | 0 |
P2 问题: test_tensor_meta_subclass_and_direct_construction 第 48 行 — assertRaisesRegex 期望 RuntimeError("Cannot subclass _TensorBase directly"),但调用 tensor_meta("DirectTensor", (), {}) 时传入的是空 bases 元组 ()。在 PyTorch C++ 源码中,空 bases 会先命中 PyTuple_GET_SIZE(bases) != 1 检查,抛出 "multiple base classes not supported" 而非 "Cannot subclass …" 错误。此外,错误信息中 _TensorBase 的下划线也与上游 PyTorch 的 TensorBase(无下划线)不一致。这可能导致测试因异常信息不匹配而失败。
整体风险评估
该变更为纯测试补充,不涉及生产代码路径,风险较低。三个测试方法中两个(test_tensor_meta_matches_tensor_classes 和 test_tensor_meta_with_npu_tensor_instance)逻辑正确、无问题。第三个测试方法存在一处断言可能与实际异常信息不匹配的风险,建议修正后合入。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.




【合入来源】
关联 issue:
【修改方案】
本 PR 在已有 Tensor 测试文件
test/npu/test_tensor.py中补充torch._C._TensorMeta的 API 一致性验证用例。torch._C._TensorMeta是 PyTorchtorch._C内部元类,负责管理torch.Tensor、torch.nn.Parameter以及torch.Tensor子类等 Tensor 类对象的元类行为。经检查,PyTorch 上游仅在 JIT 报错路径中出现_TensorMeta字符串,不是目标 API 的直接专项测试;torch-npu 当前test目录中也未发现该 API 的专项测试。因此本 PR 按指导规范在已有 Tensor 测试文件中补充自写测试。任务 API 功能、上游社区用例情况与本 PR 处理方式如下:
torch._C._TensorMetatype(torch.Tensor)对应_TensorMeta。test/test_jit.py中存在错误信息包含_TensorMeta的间接覆盖,但不是目标 API 的直接专项测试。test/npu/test_tensor.py中补充专项测试,验证 Tensor 类元信息、NPU Tensor 实例关系、自定义 Tensor 子类和非法直接构造路径。主要开发思路:
torch._C._TensorMeta在当前 torch-npu 环境中存在。_TensorMeta的直接专项测试。test/npu/test_tensor.py覆盖 Tensor 基础行为,因此本 PR 将新增用例放入该文件。_TensorMeta与torch.Tensor、torch.nn.Parameter、NPU Tensor 实例、自定义 Tensor 子类之间的关系,并验证_TensorBasebase 直接构造的异常路径。修改测试文件:
同步清理该文件中未使用的
import itertools。` ext
test/npu/test_tensor.py
各测试核心验证点如下:
test_tensor_meta_matches_tensor_classes_TensorMeta是torch.Tensor的元类,并验证torch.Tensor、torch.nn.Parameter的类对象关系。test_tensor_meta_with_npu_tensor_instancetorch.Tensor实例,但不是_TensorMeta实例,同时其类对象由_TensorMeta管理。test_tensor_meta_subclass_and_direct_constructiontorch.Tensor子类使用_TensorMeta,并验证以torch._C._TensorBase作为 base 直接调用_TensorMeta(...)会抛出预期异常。【资料变更】
不涉及资料 PR。
已检查 PyTorch 官方公开文档与 Ascend native API 文档,未发现
torch._C._TensorMeta独立条目。该 API 属于torch._C私有接口,按指导文档不需要补充资料,因此不新增docs.md,不提交资料 PR。【接口变更】
不涉及。
本 PR 不修改 API 实现,不改变现有接口行为,不新增 torch-npu 对外接口。
【功能验证】
运行环境:
执行命令:
cd /root python /root/pytorch/test/npu/test_tensor.py -k tensor_meta -v执行结果:
最终验证结论:
torch._C._TensorMeta的 Tensor 类元信息、NPU Tensor 实例关系、自定义 Tensor 子类和异常路径。_TensorMeta与torch.Tensor、torch.nn.Parameter、NPU Tensor 实例之间的类型关系。【CheckList】