已合并
test(refs): add test cases for torch._refs._maybe_broadcast #42122
木路折创建于 7月19日
test(refs): add test cases for torch._refs._maybe_broadcast #42122
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 木路折 的贡献)7月19日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(8)
atomgit-bot
7月19日 评论:
7月19日 评论:
变更摘要
此 PR 新增测试文件 test/test_library_refs.py,为 PyTorch 私有 API torch._refs._maybe_broadcast 补充官方测试套件中缺失的直接测试用例。测试类 TestLibraryRefs 覆盖了该辅助函数的核心广播行为(相同形状、兼容形状、不兼容形状)以及对 Number、None、CPU scalar 张量、NPU scalar 张量等不同参数类型的处理逻辑,并验证了 preserve_cpu_scalar_tensors 参数的两种行为模式。非 scalar 张量均放置在 NPU 设备上以验证设备正确性。
主要改动
- 新增
TestLibraryRefs测试类:继承自TestCase,封装了_npu_device()辅助方法用于获取默认 NPU 设备,所有测试方法均基于此设备运行。 - 新增形状广播测试:
test_maybe_broadcast_same_shape_npu验证相同形状张量直接返回原对象(assertIs),test_maybe_broadcast_different_shapes_npu验证兼容形状张量被正确扩展到共同形状,test_maybe_broadcast_incompatible_shapes验证不兼容形状抛出RuntimeError。 - 新增非张量参数测试:
test_maybe_broadcast_number和test_maybe_broadcast_none验证Number和None类型参数被原样返回,不被广播逻辑影响。 - 新增
preserve_cpu_scalar_tensors行为测试:test_maybe_broadcast_cpu_scalar_preserved验证参数为True(默认)时 CPU scalar 张量保持原状;test_maybe_broadcast_cpu_scalar_expanded验证参数为False时 CPU scalar 张量被展开到广播后的形状。 - 新增 NPU scalar 张量测试:
test_maybe_broadcast_npu_scalar验证 0 维 NPU scalar 张量与 CPU scalar 不同,会被广播到非 scalar 张量的共同形状。


ascend-robot
7月19日 评论:
7月19日 评论:
atomgit-bot
7月19日 评论:
7月19日 评论:
代码审查
审查总结
- P3(1 个):
test_maybe_broadcast_cpu_scalar_preserved未显式传递preserve_cpu_scalar_tensors=True,依赖默认值,与对称测试不一致,存在测试脆弱性风险。 - 总体风险评估:低风险。该文件是纯测试新增,所有 8 个测试用例逻辑正确,已在 NPU 环境验证通过(
Ran 8 tests in 0.771s, OK)。发现的问题仅为测试健壮性改进建议,不影响功能正确性。
已审查文件:
test/test_library_refs.py:已审查,发现 1 个 P3 问题。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


此处折叠了223条消息 查看更多
ascend-robot
19 天前 评论:
19 天前 评论:
流水线 PR-pipeline_pytorch#53253 [ commitID:eec592d6 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | codecheck_pre-commit | ✅ | >>> |
| check_error | ✅ | >>> | |
| lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_ARM_A3_Part_01 | ✅ | >>> |
| UT_ARM_A3_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | 🛑 | >>> | |
| UT_inductor_Part_02 | 🛑 | >>> | |
| UT_inductor_Part_03 | 🛑 | >>> | |
| UT_inductor_Part_04 | 🛑 | >>> | |
| UT_DIST_ARM_Part_01 | 🛑 | >>> | |
| UT_DIST_ARM_Part_02 | 🛑 | >>> | |
| UT_DIST_ARM_Part_03 | 🛑 | >>> | |
| UT_DIST_ARM_Part_04 | 🛑 | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


li_jing_hw
17 天前 评论:
17 天前 评论:
/approve


17 天前 添加了label:approvedlgtm
17 天前 合入了pull request
ascend-robot
17 天前 评论:
17 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13579 [ commitID:eec592d6 ] 已完成


【合入来源】
关联 issue: https://gitcode.com/Ascend/pytorch/issues/2911
任务分类:1.3(PyTorch 官方缺少对
torch._refs._maybe_broadcast的直接测试)pytorch 社区没有针对
torch._refs._maybe_broadcast的独立测试用例,故新增该测试文件,用于验证该 API 的正确性。【修改方案】
一、API 功能说明
torch._refs._maybe_broadcast(*args, preserve_cpu_scalar_tensors=True)是 PyTorch 内部辅助函数,用于将一组TensorLike/Number/None参数广播到共同形状。它计算各 Tensor 输入的公共广播形状,对兼容形状的张量调用.expand(),对 CPU scalar 张量根据preserve_cpu_scalar_tensors决定是否保留,对不兼容形状抛出RuntimeError。该 API 为 PyTorch 私有接口。二、测试用例完备性说明
PyTorch 官方
test/目录中没有直接调用torch._refs._maybe_broadcast的测试用例,现有测试仅通过elementwise_meta等内部路径间接使用,无法验证广播行为、CPU scalar 保留/展开策略及异常路径。本次新增test/test_library_refs.py,直接验证:Number参数原样返回;None参数原样返回;preserve_cpu_scalar_tensors=True时 CPU scalar 张量被保留;preserve_cpu_scalar_tensors=False时 CPU scalar 张量被展开;preserve_cpu_scalar_tensors=False时被广播到共同形状;RuntimeError。三、版本适用范围
torch._refs._maybe_broadcast为 PyTorch 内部私有接口,在 PyTorch v2.7.1、v2.9.0、v2.10.0、v2.11.0、v2.12.0、master 各目标分支均存在且函数签名一致,因此本测试用例需提交到上述全部分支。四、NPU 适配
测试涉及 Tensor 创建与广播,非 scalar 参与计算的 Tensor 均通过
device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu"迁移到 NPU;CPU scalar 张量仅在测试preserve_cpu_scalar_tensors行为时保留在 CPU,这是该参数的测试目的。【资料变更】
【接口变更】
【功能验证】
TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_refs.pyRan 8 tests in 0.771s, OK【CheckList】