ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-13684: [C++][Compute] Strftime kernel follow-up - #10998

Closed
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684
Closed

ARROW-13684: [C++][Compute] Strftime kernel follow-up#10998
rok wants to merge 7 commits into
apache:masterfrom
rok:ARROW-13684

Conversation

@rok

@rokrok commented Aug 25, 2021

Copy link
Copy Markdown
Member

This is to resolve ARROW-13684.

  1. Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?
  2. Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
  3. Document %S behavior. What would be a good location to do that?

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche

@github-actions

Copy link
Copy Markdown

@jorisvandenbossche

Copy link
Copy Markdown
Member

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

Default strftime string is now %Y-%m-%dT%H:%M:%S. Perhaps %Y-%m-%dT%H:%M:%S%z would be better?

Not fully sure about this one. In #10647 (comment) I mentioned the options of showing no timezone information (what you did now), include a numeric offset (so adding %z) or erroring. And for UTC it's also an option to use the literal "Z".

Including a numeric offset of using literal Z (for UTC) both mean that the default format depends on the type (because for timestamp without timezone we shouldn't add an offset).

Right. And for the option where we would have UTC timestamps having "Z" at the end would require something like:

if (timezone == "UTC" && self.options.format == "") {
self.options.format = "%Y-%m-%dT%H:%M:%SZ";
} else {
self.options.format = "%Y-%m-%dT%H:%M:%S";
}

Where we would have self.options.format = "" by default.
I'm not sure this is really worth it. I'd keep the timezone out of the default format.

Timestamps without timezone are now strftime-ed as if they were in UTC. Not sure this is the way to go. What if the local time is really invalid but we can't tell?

Timestamps without timezone should be formatted as is, showing the wall clock time they represent. So I think formatting as if they are in UTC but without any timezone indication is correct. Although we should not allow adding timezone information with %Z or %z in those cases.
I don't think we need to care about invalid local times when printing, that's a user responsibility (and anyway, you only know if a time is invalid once you assume a certain timezone, which we don't do in strftime).

Ok, let's return invalid when detecting %z/%Z and a timezone-less timestamp then?

Document %S behavior. What would be a good location to do that?

You could start with the compute.rst table notes, but personally I would also include it in the docstring.

Sounds good.

@rok
rokforce-pushed the ARROW-13684 branch 3 times, most recently from da3581a to de9fa8bCompareAugust 25, 2021 21:04
@rok

rok commented Aug 25, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche I've pushed changes for second and third (printing timezoneless timestamps and docs) point. I left the first as was (not timezone data by default).
Please see if this looks ok.

@rok
rok marked this pull request as ready for review August 25, 2021 21:12

@westonpacewestonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Some minor wording nits but overall the change seems good.

Comment threadpython/pyarrow/tests/test_compute.py Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: I don't know if cannot print is quite right. The user might be running strftime to store or display on a GUI or send to some other tool. Perhaps cannot convert to string? Or cannot format?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah, good point. I went with your first proposal.

Comment on lines 843 to 845

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This comment seems to suggest that only microsecond and second are supported. I like the wording down below which makes it more clear that seconds through nanoseconds are supported.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Indeed. Changed the language. Could you check if it's good now?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very clear. Thanks.

@rok

rok commented Aug 26, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the comments @westonpace !

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threaddocs/source/cpp/compute.rst Outdated
@rok

rok commented Aug 27, 2021

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche@westonpace I've made a minor change in the text (decimal points -> decimal places).
Other than that I think this is done.

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates!

Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated
Comment threadcpp/src/arrow/compute/kernels/scalar_temporal.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would also add something about "To obtain integer seconds, cast to timestamp with second resolution" to be explicit about the workaround.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is no longer up to date

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

It seems error description is outdated for all extract kernels. Thanks for pointing it out! Fixing.

Comment threaddocs/source/cpp/compute.rst Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this is accurate? It doesn't depend on the number of seconds present, but solely on the unit of the timestamp type?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems you used some explanation about this from https://howardhinnant.github.io/date/date.html#to_stream_formatting, but I would maybe use the same text as you added above in strftime_doc, as I think that's clearer / more relevant from Arrow's perspective.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Makes sense yeah. Done.

@rok

rok commented Aug 31, 2021

Copy link
Copy Markdown
MemberAuthor

Thanks for the review @jorisvandenbossche@pitrou.
I addressed the comments and pushed the changes.

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the updates @rok. I will merge now if CI is green.

@pitroupitrou closed this in 02343c8Sep 6, 2021
@rok

rok commented Sep 6, 2021

Copy link
Copy Markdown
MemberAuthor

ViniciusSouzaRoque pushed a commit to s1mbi0se/arrow that referenced this pull request Oct 20, 2021
This is to resolve [ARROW-13684](https://issues.apache.org/jira/browse/ARROW-13684).
1. Default strftime string is now `%Y-%m-%dT%H:%M:%S`. Perhaps `%Y-%m-%dT%H:%M:%S%z` would be better?
2. Timestamps without timezone are now strftime-ed as if they were in `UTC`. Not sure this is the way to go. What if the local time is really invalid but we can't tell?
3. Document `%S` behavior. What would be a good location to do that?
Closesapache#10998 from rok/ARROW-13684
Lead-authored-by: Rok <rok@mihevc.org>
Co-authored-by: Rok Mihevc <rok@mihevc.org>
Co-authored-by: Antoine Pitrou <antoine@python.org>
Signed-off-by: Antoine Pitrou <antoine@python.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@rok@jorisvandenbossche@westonpace@pitrou