-
Notifications
You must be signed in to change notification settings - Fork 123
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
feat: add datetime
selector
#1822
Conversation
self: Self, | ||
time_unit: TimeUnit | Collection[TimeUnit] | None, | ||
time_zone: str | timezone | Collection[str | timezone | None] | None, | ||
) -> DaskSelector: # pragma: no cover |
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.
For dask, the selector works, but the cast fails with:
TypeError: Cannot use .astype to convert from timezone-aware dtype to timezone-naive dtype. Use obj.tz_localize(None) or obj.tz_convert('UTC').tz_localize(None) instead.
(dtype == dtypes.Datetime) | ||
and (dtype.time_unit in time_units) # type: ignore[attr-defined] | ||
and ( | ||
dtype.time_zone in time_zones # type: ignore[attr-defined] | ||
or ("*" in time_zones and dtype.time_zone is not None) # type: ignore[attr-defined] | ||
) |
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.
@MarcoGorelli this might make the trick you were looking for :)
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.
yup, nice!
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.
nice, thanks @FBruzzesi ! sorry didn't quite get round to reviewing everything in time for today, we can always include in next week's release (in fact, that's one reason to have regular and short release cycles, so we don't feel like we need to rush things in - if something doesn't make it, the next release is just next week)
(dtype == dtypes.Datetime) | ||
and (dtype.time_unit in time_units) # type: ignore[attr-defined] | ||
and ( | ||
dtype.time_zone in time_zones # type: ignore[attr-defined] | ||
or ("*" in time_zones and dtype.time_zone is not None) # type: ignore[attr-defined] | ||
) |
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.
yup, nice!
{None} | ||
if time_zone is None | ||
else {str(time_zone)} | ||
if isinstance(time_zone, (str, timezone)) |
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.
do we have any test for when it's an instance of timezone
? can we check that timezone.utc
and ZoneInfo.UTC
both work?
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.
Well.. ZoneInfo
does not work for polars 😱
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.
nice one, implementation looks good!
couple of comments:
- as this is new functionality, shall we make the docstring concise (like the ones in
narwhals/expr.py
) to begin with? - got a comment about
time_unit
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.
thanks!
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.
thanks @FBruzzesi
sorry, just some more merge conflicts |
What type of PR is this? (check all applicable)
Related issues
Checklist
If you have comments or can explain your changes, please do so below
@MarcoGorelli you might have a better idea for how to test this. I checked how polars does it and it is definitly brute forcing 😂
I took the opportunity to:
TimeUnit
alias to use around the codebaseThe actual changes are not too large