Period constructed from invalid high-resolution Timestamp should raise OutOfBoundsDatetime #63326
+53
−1
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
Constructing a
Periodfrom aTimestampwhose underlying integer becomes out-of-range when interpreted at a higher-resolution frequency (e.g., treatingTimestamp.min.valueas microseconds) previously triggered a low-levelOverflowErrorinsideget_period_ordinal, which is declarednoexcept. This resulted in an unraisable exception andPeriod(...)silently returning an incorrect ordinal instead of raisingOutOfBoundsDatetime.What this PR changes
A new internal helper
_period_ordinal_safe(...)is introduced. It mirrors the logic ofget_period_ordinalbut is allowed to raise Python exceptions.cpdef period_ordinal(...), which feeds the Python-facingPeriod(...)API, now delegates to this safe helper.This ensures:
get_period_ordinalunchanged,Period(Timestamp, "us")correctly raiseOutOfBoundsDatetimewhen the timestamp cannot be represented at the target frequency,OverflowErrorleaks into pytest as an unraisable exception.Test
The regression test:
Fixes #63278