fix: BaseFloat._check_scalar rejects invalid string values (#3586)#3762
Merged
d-v-b merged 2 commits intozarr-developers:mainfrom Mar 11, 2026
Merged
Conversation
…lopers#3586) BaseFloat._check_scalar returned True for all strings because the FloatLike type union includes str. This allowed invalid strings like 'not valid' to pass the check and then raise a confusing ValueError in _cast_scalar_unchecked instead of the expected TypeError. Fix _check_scalar to validate string inputs by attempting conversion: - Valid float strings (e.g. 'NaN', 'inf', '-inf', '1.5') return True - Invalid strings (e.g. 'not valid') return False, causing cast_scalar to raise TypeError as expected Add test cases for invalid string inputs to invalid_scalar_params. Fixes zarr-developers#3586
d-v-b
approved these changes
Mar 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Fixes #3586.
BaseFloat._check_scalarreturnedTruefor all strings becauseFloatLikeincludesstr. This caused invalid strings like'not valid'to pass the scalar check, then raise a confusingValueErrorin_cast_scalar_uncheckedinstead of the expectedTypeError.Root Cause
FloatLike = SupportsIndex | SupportsFloat | bytes | str, soisinstance('not valid', FloatLike)isTrue. When_cast_scalar_uncheckedcallsnp.float32('not valid')it raisesValueError, notTypeError.Changes
BaseFloat._check_scalarnow validates string inputs by attempting conversion:'NaN','inf','-inf') → returnsTrue(existing behaviour preserved)'not valid', etc.) → returnsFalse, causingcast_scalarto raiseTypeErrorTesting
Added invalid string test cases to
invalid_scalar_paramsforFloat16,Float32, andFloat64.