alex-anast opened a new pull request, #49845:
URL: https://github.com/apache/arrow/pull/49845

   ### Rationale for this change
   
   In pyarrow 24.0.0, `Scalar` and `Array` gained arithmetic dunder methods 
(#32007) that unconditionally dispatch to `pyarrow.compute.call_function`. When 
the other operand is an unrecognized type, `_pack_compute_args` raises 
`TypeError` instead of returning `NotImplemented`. This prevents Python from 
falling back to the other operand's reflected methods (`__radd__`, `__rsub__`, 
etc.), breaking downstream libraries that relied on this protocol.
   
   ### What changes are included in this PR?
   
   - Adds a `_compute_binary_op` helper in `scalar.pxi` that wraps 
`call_function` in a `try/except TypeError` and returns `NotImplemented` on 
failure. This follows the same pattern already used by `Scalar.__eq__` and 
`Array.__eq__`.
   - Updates all binary arithmetic and bitwise dunders on both `Scalar` 
(`scalar.pxi`) and `Array` (`array.pxi`) to use this helper.
   - Adds parametrized tests in `test_scalars.py` and `test_array.py` verifying 
that reflected operators on custom types are correctly invoked.
   
   ### Are these changes tested?
   
   Yes. New parametrized tests 
(`test_dunders_return_notimplemented_for_unknown_types`) cover all 10 binary 
operators for both `Scalar` and `Array`. The bug was also manually reproduced 
against pyarrow 24.0.0 to confirm the tests exercise the right code path.
   
   ### Are there any user-facing changes?
   
   Yes. `Scalar` and `Array` arithmetic dunders now return `NotImplemented` 
instead of raising `TypeError` when the other operand is not a recognized 
Arrow/NumPy type. This restores the pre-24.0.0 behavior where Python would fall 
back to the other operand's reflected method.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to