-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
TST: Period with Timestamp overflow #34755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
3f05de1
3c33ec8
9765d1d
37f03d6
0ed2fdc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,7 @@ | |
|
||
from pandas._libs.tslibs import iNaT, period as libperiod | ||
from pandas._libs.tslibs.ccalendar import DAYS, MONTHS | ||
from pandas._libs.tslibs.np_datetime import OutOfBoundsDatetime | ||
from pandas._libs.tslibs.parsing import DateParseError | ||
from pandas._libs.tslibs.period import INVALID_FREQ_ERR_MSG, IncompatibleFrequency | ||
from pandas._libs.tslibs.timezones import dateutil_gettz, maybe_get_tz | ||
|
@@ -767,6 +768,40 @@ def test_period_deprecated_freq(self): | |
assert isinstance(p1, Period) | ||
assert isinstance(p2, Period) | ||
|
||
def period_constructor(bound, offset): | ||
return Period( | ||
year=bound.year, | ||
month=bound.month, | ||
day=bound.day, | ||
hour=bound.hour, | ||
minute=bound.minute, | ||
second=bound.second + offset, | ||
freq="us", | ||
) | ||
|
||
@pytest.mark.parametrize("bound, offset", [(Timestamp.min, -1), (Timestamp.max, 1)]) | ||
def test_start_time_and_end_time_bounds(self, bound, offset): | ||
# GH #13346 | ||
period = TestPeriodProperties.period_constructor(bound, -offset) | ||
assert period.start_time.round(freq="S") == period.to_timestamp().round( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you parameterize over There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The tests were splitted in two tests |
||
freq="S" | ||
) | ||
assert period.end_time.round(freq="S") == period.to_timestamp().round(freq="S") | ||
|
||
result = period.start_time.floor("S") | ||
expected = (bound - offset * Timedelta(1, unit="S")).floor("S") | ||
assert result == expected | ||
|
||
result = period.end_time.floor("S") | ||
expected = (bound - offset * Timedelta(1, unit="S")).floor("S") | ||
assert result == expected | ||
|
||
period = TestPeriodProperties.period_constructor(bound, offset) | ||
with pytest.raises(OutOfBoundsDatetime, match="Out of bounds nanosecond"): | ||
period.start_time | ||
with pytest.raises(OutOfBoundsDatetime, match="Out of bounds nanosecond"): | ||
period.end_time | ||
|
||
def test_start_time(self): | ||
freq_lst = ["A", "Q", "M", "D", "H", "T", "S"] | ||
xp = datetime(2012, 1, 1) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe just define this in the test since it's only used there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK done