-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Follow-Up: Unify apply and onOffset implementations #18329
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
jreback
merged 9 commits into
pandas-dev:master
from
jbrockmendel:tslibs-offsets-followup
Nov 19, 2017
Merged
Changes from 3 commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
b53f0f9
Define _day_opt attributes to unify apply and onOffset implementations
jbrockmendel fa57b66
whitespace fixup; remove unused imports
jbrockmendel 30991ba
comment typo fixup
jbrockmendel 85a3deb
raise notimplementerror if calling _get_day_opt from base class
jbrockmendel 8b6f1fd
test for un-overriden _get_offset_day
jbrockmendel 8906d21
move comment
jbrockmendel f28d245
Merge branch 'master' of https://github.com/pandas-dev/pandas into ts…
jbrockmendel e00414f
dummy commit to force CI
jbrockmendel 1f3c76e
Merge branch 'master' of https://github.com/pandas-dev/pandas into ts…
jbrockmendel File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -394,6 +394,10 @@ class _BaseOffset(object): | |
out = '<%s' % n_str + className + plural + self._repr_attrs() + '>' | ||
return out | ||
|
||
def _get_offset_day(self, datetime other): | ||
# subclass must implement `_day_opt` | ||
return get_day_of_month(other, self._day_opt) | ||
|
||
|
||
class BaseOffset(_BaseOffset): | ||
# Here we add __rfoo__ methods that don't play well with cdef classes | ||
|
@@ -468,7 +472,7 @@ cpdef datetime shift_month(datetime stamp, int months, object day_opt=None): | |
return stamp.replace(year=year, month=month, day=day) | ||
|
||
|
||
cdef int get_day_of_month(datetime other, day_opt) except? -1: | ||
cpdef int get_day_of_month(datetime other, day_opt) except? -1: | ||
""" | ||
Find the day in `other`'s month that satisfies a DateOffset's onOffset | ||
policy, as described by the `day_opt` argument. | ||
|
@@ -493,11 +497,26 @@ cdef int get_day_of_month(datetime other, day_opt) except? -1: | |
30 | ||
|
||
""" | ||
cdef: | ||
int wkday, days_in_month | ||
|
||
if day_opt == 'start': | ||
return 1 | ||
elif day_opt == 'end': | ||
return monthrange(other.year, other.month)[1] | ||
|
||
wkday, days_in_month = monthrange(other.year, other.month) | ||
if day_opt == 'end': | ||
return days_in_month | ||
elif day_opt == 'business_start': | ||
# first business day of month | ||
return get_firstbday(wkday, days_in_month) | ||
elif day_opt == 'business_end': | ||
# last business day of month | ||
return get_lastbday(wkday, days_in_month) | ||
elif is_integer_object(day_opt): | ||
day = min(day_opt, days_in_month) | ||
else: | ||
# Note: unlike `shift_month`, get_day_of_month does not | ||
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. can you add a test with a sub-class of BaseOffset (e.g. a dummy class) that checks this |
||
# allow day_opt = None | ||
raise ValueError(day_opt) | ||
|
||
|
||
|
Oops, something went wrong.
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.
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.
so in the Base class add a NotImplementedError for this