Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GH-35040: [Python] Pyarrow scalar cast should use compute kernel by danepitkin · Pull Request #35395 · apache/arrow · GitHub
Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-35040: [Python] Pyarrow scalar cast should use compute kernel by danepitkin · Pull Request #35395 · apache/arrow · GitHub
Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

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

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GH-35040: [Python] Pyarrow scalar cast should use compute kernel by danepitkin · Pull Request #35395 · apache/arrow · GitHub
Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-35040: [Python] Pyarrow scalar cast should use compute kernel by danepitkin · Pull Request #35395 · apache/arrow · GitHub
Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-35040: [Python] Pyarrow scalar cast should use compute kernel by danepitkin · Pull Request #35395 · apache/arrow · GitHub
Skip to content

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

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

GH-35040: [Python] Pyarrow scalar cast should use compute kernel - #35395

Merged
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040
May 11, 2023
Merged

GH-35040: [Python] Pyarrow scalar cast should use compute kernel#35395
AlenkaF merged 4 commits into
apache:mainfrom
danepitkin:danepitkin/gh-35040

Conversation

@danepitkin

@danepitkindanepitkin commented May 2, 2023

Copy link
Copy Markdown
Member

Rationale for this change

Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.

Are these changes tested?

Added test cases for GH-35370, GH-34901, and GH-35040

Are there any user-facing changes?

The Scalar.cast() API is enhanced and backwards compatible.

@danepitkin
danepitkin requested a review from AlenkaF as a code ownerMay 2, 2023 21:13
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #35040has been automatically assigned in GitHub to PR creator.

@danepitkin

Copy link
Copy Markdown
MemberAuthor

Build error is unrelated. The error exists on main (and in other PRs).

@AlenkaFAlenkaF 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.

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels May 8, 2023
@danepitkin

Copy link
Copy Markdown
MemberAuthor

LGTM +1

Just a small nit though: I would also add a test for casting float to int, using default safe option and an unsafe casting option. Not sure about the memory pool though.

Yes, the failing tests are not related, I have created an issue for it: #35490

Great idea! I will add this test.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 23f54a8 to 689fe59CompareMay 10, 2023 20:46
Comment threadpython/pyarrow/tests/test_scalars.py Outdated
@AlenkaF

Copy link
Copy Markdown
Member

The failure in the MacOS build could now be corrected with a rebase.

@danepitkin
danepitkinforce-pushed the danepitkin/gh-35040 branch from 689fe59 to 8de3749CompareMay 11, 2023 16:04
@AlenkaF

Copy link
Copy Markdown
Member

Thank you for the update Dane!
I think this is ready, will merge 👍

@AlenkaFAlenkaF changed the title GH-35040: [Python] Pyarrow scalar cast uses compute kernelGH-35040: [Python] Pyarrow scalar cast should use compute kernelMay 11, 2023
@AlenkaF
AlenkaF merged commit 053b5ee into apache:mainMay 11, 2023
@danepitkin

danepitkin commented May 11, 2023

Copy link
Copy Markdown
MemberAuthor

We can also close #34901 and #35370 now!

I'll take care of this.

@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = e7a885d and contender = 053b5ee. 053b5ee is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.15% ⬆️0.0%] test-mac-arm
[Finished ⬇️1.27% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️1.72% ⬆️0.27%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 053b5eec ec2-t3-xlarge-us-east-2
[Finished] 053b5eec test-mac-arm
[Finished] 053b5eec ursa-i9-9960x
[Finished] 053b5eec ursa-thinkcentre-m75q
[Finished] e7a885d8 ec2-t3-xlarge-us-east-2
[Finished] e7a885d8 test-mac-arm
[Finished] e7a885d8 ursa-i9-9960x
[Finished] e7a885d8 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
apache#35395)
### Rationale for this change
Scalar cast should use the computer kernel just like Arrays, instead of its own custom implementation.
### Are these changes tested?
Added test cases for apacheGH-35370, apacheGH-34901, and apacheGH-35040
### Are there any user-facing changes?
The Scalar.cast() API is enhanced and backwards compatible. * Closes: apache#35040
Authored-by: Dane Pitkin <dane@voltrondata.com>
Signed-off-by: Alenka Frim <frim.alenka@gmail.com>
jorisvandenbossche added a commit that referenced this pull request Jun 6, 2023
…use it requires tz database (#35735)
### Rationale for this change
Fix up of #35395, skipping one of the tests added in that PR on Windows, because the test requires access to a tz database.
Authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
@mroeschke

Copy link
Copy Markdown
Contributor

xref #36677

I don't think the new safe keyword fully covers past cases where numeric scalars could be cast to temporal scalars

>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"))
<pyarrow.Time32Scalar: datetime.time(0, 0, 1)>
>>> pa.__version__
'12.0.1'
>>> import pyarrow as pa
>>> pa.scalar(1.1).cast(pa.time32("s"), safe=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pyarrow/scalar.pxi", line 91, in pyarrow.lib.Scalar.cast
File "/opt/miniconda3/envs/pyarrow-pandas-dev/lib/python3.11/site-packages/pyarrow/compute.py", line 403, in cast
return call_function("cast", [arr], options, memory_pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_compute.pyx", line 572, in pyarrow._compute.call_function
File "pyarrow/_compute.pyx", line 367, in pyarrow._compute.Function.call
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 121, in pyarrow.lib.check_status
pyarrow.lib.ArrowNotImplementedError: Unsupported cast from double to time32 using function cast_time32
>>> pa.__version__
'13.0.0.dev497'

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++] Change Scalar::CastTo to do safe cast by default and allow to specify cast options ?

4 participants

@danepitkin@AlenkaF@ursabot@mroeschke