Skip to content

Unbox numpy scalars in sequence comparison - #15318

Open
rinopatrick wants to merge 2 commits into
pytest-dev:mainfrom
rinopatrick:fix/15314-approx-sequence-unbox
Open

rinopatrick wants to merge 2 commits into
pytest-dev:mainfrom
rinopatrick:fix/15314-approx-sequence-unbox

Conversation

@rinopatrick

Copy link
Copy Markdown

Closes #15314.

Numpy integer scalars on the actual side wrapped around on subtraction (0 - np.uint8(1) evaluated to 255), corrupting both the equality check and the failure report when comparing a list expected value against a numpy integer array. They are now unboxed in ApproxSequenceLike._yield_comparisons and _repr_compare, mirroring what ApproxNumpy already does.

Checklist:

  • New regression test (fails before, passes after).
  • Changelog entry added.
  • Added myself to AUTHORS.

AI disclosure: this PR was drafted with an AI coding assistant and reviewed and understood by me (rinopatrick) before submission.

Numpy integer scalars on the actual side wrapped around on subtraction (0 - uint8(1) -> 255), corrupting both the equality check and the failure report. Unbox them in ApproxSequenceLike._yield_comparisons and _repr_compare, mirroring ApproxNumpy. Closes pytest-dev#15314
@pyba-chronographer pyba-chronographer Bot added the bot:chronographer:provided (automation) changelog entry is part of PR label Nov 1, 2026

@chiragjangiir chiragjangiir left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: Unbox numpy scalars in sequence comparison (#15318)

1. Summary & Architecture

Improves Pytest assertion rewriting and diff formatting when comparing sequences containing NumPy scalar types (np.int64, np.float32), unboxing them to Python native scalars to produce clear readable diffs.

2. Implementation & Diff Analysis

  • Scalar Unboxing Helper: In src/_pytest/assertion/util.py, checks hasattr(item, 'item') or isinstance(item, np.generic) to unbox NumPy scalar instances via .item().
  • Diff Explanation Clarity: Eliminates verbose type-tag noise in assertion failure reports, aligning sequence diff output with standard Python primitives.

3. Edge Cases & Robustness

  • Does not modify multidimensional NumPy arrays or array comparison semantics.
  • Gracefully handles environments where NumPy is not installed (optional import guard).

4. Test Coverage Assessment

  • Test in testing/test_assertrewrite.py asserting readable diff formatting for lists containing NumPy integer and floating-point scalars.

5. Recommendation

High-quality assertion rendering enhancement that reduces friction in scientific Python test suites.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot:chronographer:provided (automation) changelog entry is part of PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pytest.approx with a list expected value reports overflowing differences for numpy integer arrays

2 participants