Fix equivalent() for NumPy scalar NaN comparison #10838
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #10833
Problem
equivalent()returnedFalsefor NumPy scalar NaN comparisons likenp.float64(np.nan), causing NaN attributes to be incorrectly dropped when usingcombine_attrs="drop_conflicts"after NetCDF roundtrip.Root Cause
np.float64(np.nan) == np.float64(np.nan)returnsnp.bool_(False)(not Pythonbool). The old code converted this to Python bool and returnedFalseimmediately, preventing the NaN equivalence check from running.Fix
Check for NaN equivalence before the equality comparison, avoiding the
np.bool_type issue entirely.Changes
xarray/core/utils.py: Moved NaN check before equality comparisonxarray/tests/test_utils.py: Added tests for Python float & NumPy scalar NaNxarray/tests/test_concat.py: Added integration test for NetCDF roundtrip scenario🤖 Generated with Claude Code