Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)
, '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); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions python/pyarrow/tests/test_compute.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@
import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.lib import ArrowNotImplementedError
from pyarrow.tests import util


all_array_types = [
('bool', [True, False, False, True, True]),
Expand DownExpand Up@@ -180,17 +182,19 @@ def test_option_class_equality():
pc.WeekOptions(week_starts_monday=True, count_from_zero=False,
first_week_is_fully_in_year=False),
]
# TODO: We should test on windows once ARROW-13168 is resolved.
# Timezone database is not available on Windows yet
if sys.platform != 'win32':
# Timezone database might not be installed on Windows
if sys.platform != "win32" or util.windows_has_tzdata():
options.append(pc.AssumeTimezoneOptions("Europe/Ljubljana"))

classes = {type(option) for option in options}

for cls in exported_option_classes:
# Timezone database is not available on Windows yet
if cls not in classes and sys.platform != 'win32' and \
cls != pc.AssumeTimezoneOptions:
# Timezone database might not be installed on Windows
if (
cls not in classes
and (sys.platform != "win32" or util.windows_has_tzdata())
and cls != pc.AssumeTimezoneOptions
):
try:
options.append(cls())
except TypeError:
Expand DownExpand Up@@ -1846,17 +1850,18 @@ def test_strptime():
assert got == pa.array([None, None, None], type=pa.timestamp('s'))


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]

formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
"%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
if sys.platform != "win32":
# Locale-dependent formats don't match on Windows
formats.extend(["%c", "%x", "%X"])
Comment on lines +1862 to +1864

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.

The error on Appveyor we got was:

 @pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_strftime():
times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
timezones = ["CET", "UTC", "Europe/Ljubljana"]
formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H",
"%I", "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%c", "%x",
"%X", "%%", "%G", "%V", "%u"]
for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
for unit in ["s", "ms", "us", "ns"]:
tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
for fmt in formats:
options = pc.StrftimeOptions(fmt)
result = pc.strftime(tsa, options=options)
expected = pa.array(ts.strftime(fmt))
> assert result.equals(expected)
E assert False
E + where False = <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600>(<pyarrow.lib.StringArray object at 0x0000023767338830>\n[\n "Sat Mar 10 09:00:00 2018",\n "Sun Jan 31 12:23:00 2038",\n null\n])
E + where <built-in method equals of pyarrow.lib.StringArray object at 0x0000023767338600> = <pyarrow.lib.StringArray object at 0x0000023767338600>\n[\n "03/10/18 09:00:00",\n "01/31/38 12:23:00",\n null\n].equals
pyarrow\tests\test_compute.py:1872: AssertionError

So it seems that we create a string like "Sat Mar 10 09:00:00 2018", but the python version we compare with gives "03/10/18 09:00:00". According to docs for %c, the former (our result) is actually correct.
But since we are checking matching results in Python in this test, just skipping the ones where those don't match.


for timezone in timezones:
ts = pd.to_datetime(times).tz_localize(timezone)
Expand DownExpand Up@@ -2029,18 +2034,16 @@ def test_extract_datetime_components():
_check_datetime_components(timestamps)

# Test timezone aware timestamp array
if sys.platform == 'win32':
# TODO: We should test on windows once ARROW-13168 is resolved.
pytest.skip('Timezone database is not available on Windows yet')
if sys.platform == "win32" and not util.windows_has_tzdata():
pytest.skip('Timezone database is not installed on Windows')
else:
for timezone in timezones:
_check_datetime_components(timestamps, timezone)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.pandas
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_assume_timezone():
ts_type = pa.timestamp("ns")
timestamps = pd.to_datetime(["1970-01-01T00:00:59.123456789",
Expand DownExpand Up@@ -2235,9 +2238,8 @@ def _check_temporal_rounding(ts, values, unit):
np.testing.assert_array_equal(result, expected)


# TODO: We should test on windows once ARROW-13168 is resolved.
@pytest.mark.skipif(sys.platform == 'win32',
reason="Timezone database is not available on Windows yet")
@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
@pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond",
"second", "minute", "hour", "day"))
@pytest.mark.pandas
Expand Down
4 changes: 4 additions & 0 deletions python/pyarrow/tests/test_scalars.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,12 +19,14 @@
import decimal
import pickle
import pytest
import sys
import weakref

import numpy as np

import pyarrow as pa
import pyarrow.compute as pc
from pyarrow.tests import util


@pytest.mark.parametrize(['value', 'ty', 'klass'], [
Expand DownExpand Up@@ -304,6 +306,8 @@ def test_cast():
pa.scalar('foo').cast('int32')


@pytest.mark.skipif(sys.platform == "win32" and not util.windows_has_tzdata(),
reason="Timezone database is not installed on Windows")
def test_cast_timestamp_to_string():
# GH-35370
pytest.importorskip("pytz")
Expand Down
9 changes: 9 additions & 0 deletions python/pyarrow/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,3 +448,12 @@ def _configure_s3_limited_user(s3_server, policy):

except FileNotFoundError:
pytest.skip("Configuring limited s3 user failed")


def windows_has_tzdata():
"""
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
"""
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata")
return os.path.exists(tzdata_path)