Skip to content

BUG: pd.DateOffset handle milliseconds #50020

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

Merged
merged 23 commits into from
Dec 22, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
48d9dfa
BUG: fix milliseconds and add test
markopacak Dec 1, 2022
65cd5da
BUG: move condition-check outside main if-block
markopacak Dec 2, 2022
f989674
DOC: update whatsnew
markopacak Dec 3, 2022
b3a5ef1
DOC: update whatsnew
markopacak Dec 3, 2022
37427dd
Merge branch 'main' into bug-dateoffset-milliseconds
markopacak Dec 4, 2022
705d2d6
CLN: reduce docstring
markopacak Dec 4, 2022
c1be7c6
CLN: remove return statement
markopacak Dec 4, 2022
1788491
Merge branch 'main' into bug-dateoffset-milliseconds
markopacak Dec 4, 2022
ae0b529
Merge branch 'pandas-dev:main' into bug-dateoffset-milliseconds
markopacak Dec 8, 2022
64c9ee3
TST: update assertions
markopacak Dec 8, 2022
65015c8
CLN: rework _determine_offset and add tests
markopacak Dec 8, 2022
ef7f118
CLN: def to cdef
markopacak Dec 8, 2022
b2b7473
BUG: GH49897 raise for invalid arguments + test
markopacak Dec 15, 2022
c2cf081
TST: GH 49897 remove useless test
markopacak Dec 19, 2022
3981b04
TST: BUG49897 convert millis to micros so relativedelta can use them
markopacak Dec 19, 2022
d80e780
Merge branch 'main' into bug-dateoffset-milliseconds
markopacak Dec 20, 2022
27109a7
TST: GH49897 test millis + micros
markopacak Dec 22, 2022
76fafe2
Merge remote-tracking branch 'upstream/main' into bug-dateoffset-mill…
markopacak Dec 22, 2022
2ad8c60
CLN: GH49897 remove comment
markopacak Dec 22, 2022
2f913a8
Merge branch 'bug-dateoffset-milliseconds' of github.com:markopacak/p…
markopacak Dec 22, 2022
8eb83d0
DOC: GH49897 update rst
markopacak Dec 22, 2022
309e296
CLN: re-order if-conditions
markopacak Dec 22, 2022
0d85a74
TST: GH49897 test raise
markopacak Dec 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/source/whatsnew/v2.0.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,7 @@ Datetimelike
- Bug in subtracting a ``datetime`` scalar from :class:`DatetimeIndex` failing to retain the original ``freq`` attribute (:issue:`48818`)
- Bug in ``pandas.tseries.holiday.Holiday`` where a half-open date interval causes inconsistent return types from :meth:`USFederalHolidayCalendar.holidays` (:issue:`49075`)
- Bug in rendering :class:`DatetimeIndex` and :class:`Series` and :class:`DataFrame` with timezone-aware dtypes with ``dateutil`` or ``zoneinfo`` timezones near daylight-savings transitions (:issue:`49684`)
- Bug in :class:`DateOffset` when constructing with milliseconds in combination with another argument (:issue:`49897`)
Copy link
Member

Choose a reason for hiding this comment

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

can we be more specific? like Bug in :class:DateOffset` was throwing ``TypeError```..., or whatever it was

-

Timedelta
Expand Down
4 changes: 3 additions & 1 deletion pandas/_libs/tslibs/offsets.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,9 @@ cdef _determine_offset(kwds):

use_relativedelta = False
if len(kwds_no_nanos) > 0:
if "milliseconds" in kwds_no_nanos:
return timedelta(**kwds_no_nanos), use_relativedelta
Copy link
Member

Choose a reason for hiding this comment

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

Can you assign to offset and use_relativedelta and just let the function return naturally? I think flows better with the other branching


if any(k in _kwds_use_relativedelta for k in kwds_no_nanos):
if "millisecond" in kwds_no_nanos:
raise NotImplementedError(
Expand Down Expand Up @@ -1163,7 +1166,6 @@ cdef class RelativeDeltaOffset(BaseOffset):

def __init__(self, n=1, normalize=False, **kwds):
BaseOffset.__init__(self, n, normalize)

off, use_rd = _determine_offset(kwds)
object.__setattr__(self, "_offset", off)
object.__setattr__(self, "_use_relativedelta", use_rd)
Expand Down
8 changes: 8 additions & 0 deletions pandas/tests/tseries/offsets/test_offsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,14 @@ def test_eq(self):

assert DateOffset(milliseconds=3) != DateOffset(milliseconds=7)

def test_milliseconds_combination(self):
"""
The combination of 'milliseconds' (plural) and another parameter
should not raise an error.
See https://github.com/pytest-dev/pytest/issues/10525
"""
DateOffset(days=1, milliseconds=1)
Copy link
Member

Choose a reason for hiding this comment

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

Can you add an assertion that the object has been properly constructed?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

fixed



class TestOffsetNames:
def test_get_offset_name(self):
Expand Down