Pull Request已成功合入, 合并人@ascend-robot
(感谢 zzll 的贡献)变更摘要
本次 PR 主要修复了多项式表达式中符号化除数和模运算的分析逻辑。在 analyze_floordiv_expression 和 analyze_modular_expression 两个函数中,新增了对 sympy.Symbol 类型除数 / 模数的支持:当 max_remainder_sum == 0 且除数或模数为符号变量(且在 V.kernel.symbol_range_map 中有对应的下界信息)时,允许表达式进行拆分。同时修复了 analyze_modular_expression 中 FloorDiv 项的转换处理,将 FloorDiv 正确转换为乘法形式,并在成功拆分后重新构造 ModularIndexing 表达式。测试类从 TestUnifiedAxis 重命名为 TestLinearDynamic,并新增了针对符号化表达式的三个单元测试用例。
主要改动
-
analyze_floordiv_expression新增符号化除数分支:当max_remainder_sum == 0且divisor为sympy.Symbol且在V.kernel.symbol_range_map中存在时,利用符号下界(lower_value)判定表达式是否可拆分,并生成对应的split_form。 -
analyze_modular_expression新增符号化模数分支:类似地,当max_remainder_sum == 0且mod为sympy.Symbol且在符号范围映射中存在时,通过比较下界值判定是否可拆分,并生成拆分后的ModularIndexing形式。 -
analyze_modular_expression中FloorDiv类型项的转换:对于add_terms中的FloorDiv类型项,新增将其转换为sympy.Mul(numerator, sympy.Pow(denominator, -1))的逻辑,确保后续系数提取能正确处理。 -
analyze_modular_expression中成功拆分后重构表达式:当FloorDiv形式的子表达式经analyze_floordiv_expression判定可拆分后,重新构造ModularIndexing(dividen_expression, lower=1, upper)表达式并更新结果中的details字段。 -
测试文件重构与新增用例:将测试类
TestUnifiedAxis重命名为TestLinearDynamic,新增MockRangeNode辅助类和make_range_tree_nodes工具函数,并补充了三个针对符号化表达式场景的测试方法(test_analyze_floordiv_expression、test_analyze_modular_expression、test_analyze_modular_expression_mod_is_symbol)。


代码审查
审查完成 — 关闭摘要
| 优先级 | 数量 | 说明 |
|---|---|---|
| P0 | 1 | TestUnifiedAxis 类名未同步更新,导入期 NameError |
| P2 | 1 | analyze_modular_expression 在 FloorDiv 分析不可拆分时返回错误的 result type |
| P3 | 1 | 测试文件中未使用的 import |
| 合计 | 3 |
已审查文件:
test/_inductor/test_linear_dynamic.py— 检出 P0(NameError)+ P3(未使用 import)torch_npu/_inductor/codegen/ir.py— 检出 P2(result type 错乱)
总体风险:中高。 P0 问题会导致测试模块在导入期崩溃(CI 必现),建议优先修复。P2 问题在特定条件下触发(符号 lower 的 ModularIndexing 在 FloorDiv 拆分失败时),会返回 type 字段错误的 dict,可能误导下游消费者。其余为低风险的代码清理项。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 1 |
⛔ 需要修改


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




#3945
【合入来源】
【修改方案】
【资料变更】
【接口变更】
【功能验证】
【CheckList】