Paddle icon indicating copy to clipboard operation
Paddle copied to clipboard

[API Compatibility No.6] Add parameter alias support for bitwise_xor_ -part

Open Manfredss opened this issue 1 month ago • 12 comments

PR Category

Environment Adaptation

PR Types

Improvements

Description

paddle.Tensor.bitwise_xor_ 添加参数别名支持,实现与 PyTorch API 的完全兼容。

修改内容

  1. python/paddle/tensor/logic.py 中为 bitwise_xor_ 函数添加 @ParamAliasDecorator
  2. 支持参数别名:
    • input 作为 x 的别名
    • other 作为 y 的别名
  3. test/legacy_test/test_inplace.py 中添加参数别名测试用例

实现方案

  • 采用装饰器方案,与 bitwise_or_ 保持一致
  • 完全向后兼容

测试验证

  • 添加了 2 个新测试类验证参数别名功能:
    • TestDygraphInplacBitwiseXorAlias1: 测试 other 参数
    • TestDygraphInplaceBitwiseXorAlias2: 测试 inputother 参数
  • 所有现有测试保持向后兼容

兼容性效果

修改前 (不兼容):

# PyTorch 风格调用会报错
x.bitwise_xor_(other=y)   # 参数错误

修改后 (完全兼容):

# 以下所有方式均支持
x.bitwise_xor_(y)              # 原始方式
x.bitwise_xor_(other=y)        # PyTorch 风格
paddle.bitwise_xor_(input=x, other=y)  # 完整别名

Manfredss avatar Nov 11 '25 02:11 Manfredss

你的PR提交成功,感谢你对开源项目的贡献! 请关注后续CI自动化测试结果,详情请参考Paddle-CI手册。 Your PR has been submitted. Thanks for your contribution! Please wait for the result of CI firstly. See Paddle CI Manual for details.

paddle-bot[bot] avatar Nov 11 '25 02:11 paddle-bot[bot]

/re-run all-failed

Manfredss avatar Nov 12 '25 08:11 Manfredss

/re-run all-failed

Manfredss avatar Nov 12 '25 20:11 Manfredss

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests. :warning: Please upload report for BASE (develop@4df7c64). Learn more about missing BASE report.

Additional details and impacted files
@@             Coverage Diff             @@
##             develop    #76341   +/-   ##
===========================================
  Coverage           ?   100.00%           
===========================================
  Files              ?         2           
  Lines              ?         3           
  Branches           ?         0           
===========================================
  Hits               ?         3           
  Misses             ?         0           
  Partials           ?         0           

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

:rocket: New features to boost your workflow:
  • :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

codecov-commenter avatar Nov 13 '25 14:11 codecov-commenter

@luotao1 @zhwesky2010

Hi, 我注意到有两个 CI 失败:

  • CI / Distribute-stable-formers / formers-Test
  • CI-Build / Slice / Slice test

经过分析,这两个失败应该与本 PR 的改动无关,原因如下:

  1. 本 PR 仅修改了 bitwise_xor_ API 的参数别名支持,不涉及:

    • 分布式训练相关功能
    • 张量切片相关功能
    • 任何模型训练逻辑
  2. 改动范围极小且独立:只在 logic.py 添加了装饰器,以及对应的单元测试

  3. 从其他类似的 API 兼容性 PR(如 bitwise_or_)来看,应该不会影响这些无关的测试

Manfredss avatar Nov 14 '25 00:11 Manfredss

CI / Distribute-stable-formers / formers-Test

非required流水线不用管,目前还在调试中

CI-Build / Slice / Slice test

等研发review过后,我会进行豁免

luotao1 avatar Nov 14 '25 03:11 luotao1

/re-run all-failed

Manfredss avatar Nov 17 '25 04:11 Manfredss

我觉得不能删去 logic.pybitwise_xor 的定义,因为测试代码 test_bitwise_op.py 中

self.python_api = paddle.tensor.logic.bitwise_xor

框架会使用 inspect.getfullargspec() 来获取函数签名信息,如果直接导入会报错

ValueError: no signature found for builtin <built-in function bitwise_xor>
TypeError: unsupported callable

bitwise_xor 需要支持参数别名 (input, other),这要使用 @param_two_alias;要支持 out 参数,这需要 python 层的处理器;要支持静态图模式,这需要调用 _bitwise_op 辅助函数。以上

如果直接从 _C_op 导入,这些功能会无法实现。

最后需要确认一下,API 兼容性增强 No.6 针对的是 bitwise_xor 还是 bitwise_xor_?多谢解答! @luotao1 @zhwesky2010

Manfredss avatar Nov 20 '25 07:11 Manfredss

/re-run all-failed

Manfredss avatar Nov 22 '25 01:11 Manfredss

@Manfredss 以表格中的字符串为准。与表格一一对应就行。

zhwesky2010 avatar Nov 24 '25 12:11 zhwesky2010

@zhwesky2010 已根据意见完成修改,烦请再 review 一下,谢谢!

Manfredss avatar Nov 27 '25 07:11 Manfredss

我觉得不能删去 logic.pybitwise_xor 的定义,因为测试代码 test_bitwise_op.py 中

self.python_api = paddle.tensor.logic.bitwise_xor

框架会使用 inspect.getfullargspec() 来获取函数签名信息,如果直接导入会报错

ValueError: no signature found for builtin <built-in function bitwise_xor>
TypeError: unsupported callable

bitwise_xor 需要支持参数别名 (input, other),这要使用 @param_two_alias;要支持 out 参数,这需要 python 层的处理器;要支持静态图模式,这需要调用 _bitwise_op 辅助函数。以上

如果直接从 _C_op 导入,这些功能会无法实现。

最后需要确认一下,API 兼容性增强 No.6 针对的是 bitwise_xor 还是 bitwise_xor_?多谢解答! @luotao1 @zhwesky2010

这些都不是问题。除非_C_ops前有很复杂的逻辑,或者组合实现的API,都可以下沉。 直接在logic.py从_C_ops导入bitwise_xor,老静态图模式可以移除,凡是下沉的都没有维护这个分支。 不确定是bitwise_xor还是bitwise_xor_,不如两个都直接改了。

zhwesky2010 avatar Dec 03 '25 11:12 zhwesky2010

/re-run all-failed

Manfredss avatar Dec 16 '25 07:12 Manfredss