Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 825a48a

Browse files
committed
Add pandas-based test.
1 parent cbab622 commit 825a48a

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

lib/matplotlib/tests/test_dates.py

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
except ImportError:
1818
import mock
1919
from nose.tools import assert_raises, assert_equal
20+
from nose.plugins.skip import SkipTest
2021

2122
from matplotlib.testing.decorators import image_comparison, cleanup
2223
import matplotlib.pyplot as plt
@@ -357,6 +358,27 @@ def test_date_inverted_limit():
357358
fig.subplots_adjust(left=0.25)
358359

359360

361+
def _test_date2num_dst(date_range, tz_convert):
362+
# Timezones
363+
BRUSSELS = pytz.timezone('Europe/Brussels')
364+
UTC = pytz.UTC
365+
366+
# Create a list of timezone-aware datetime objects in UTC
367+
# Interval is 0b0.0000011 days, to prevent float rounding issues
368+
dtstart = datetime.datetime(2014, 3, 30, 0, 0, tzinfo=UTC)
369+
interval = datetime.timedelta(minutes=33, seconds=45)
370+
interval_days = 0.0234375 # 2025 / 86400 seconds
371+
N = 8
372+
373+
dt_utc = date_range(start=dtstart, freq=interval, periods=N)
374+
dt_bxl = tz_convert(dt_utc, BRUSSELS)
375+
376+
expected_ordinalf = [735322.0 + (i * interval_days) for i in range(N)]
377+
actual_ordinalf = list(mdates.date2num(dt_bxl))
378+
379+
assert_equal(actual_ordinalf, expected_ordinalf)
380+
381+
360382
def test_date2num_dst():
361383
# Test for github issue #3896, but in date2num around DST transitions
362384
# with a timezone-aware pandas date_range object.
@@ -408,25 +430,31 @@ def mk_tzaware(cls, datetime_obj):
408430

409431
return cls(**kwargs)
410432

411-
# Timezones
412-
BRUSSELS = pytz.timezone('Europe/Brussels')
413-
UTC = pytz.UTC
433+
# Define a date_range function similar to pandas.date_range
434+
def date_range(start, freq, periods):
435+
dtstart = dt_tzaware.mk_tzaware(start)
414436

415-
# Create a list of timezone-aware datetime objects in UTC
416-
# Interval is 0b0.0000011 days, to prevent float rounding issues
417-
dtstart = dt_tzaware(2014, 3, 30, 0, 0, tzinfo=UTC)
418-
interval = datetime.timedelta(minutes=33, seconds=45)
419-
interval_days = 0.0234375 # 2025 / 86400 seconds
420-
N = 8
437+
return [dtstart + (i * freq) for i in range(periods)]
421438

422-
dt_utc = [dtstart + i * interval for i in range(N)]
423-
dt_bxl = [d.astimezone(BRUSSELS) for d in dt_utc]
439+
# Define a tz_convert function that converts a list to a new time zone.
440+
def tz_convert(dt_list, tzinfo):
441+
return [d.astimezone(tzinfo) for d in dt_list]
424442

425-
expected_ordinalf = [735322.0 + (i * interval_days) for i in range(N)]
443+
_test_date2num_dst(date_range, tz_convert)
426444

427-
actual_ordinalf = list(mdates.date2num(dt_bxl))
428445

429-
assert_equal(actual_ordinalf, expected_ordinalf)
446+
def test_date2num_dst_pandas():
447+
# Test for github issue #3896, but in date2num around DST transitions
448+
# with a timezone-aware pandas date_range object.
449+
try:
450+
import pandas as pd
451+
except ImportError:
452+
raise SkipTest('pandas not installed')
453+
454+
def tz_convert(*args):
455+
return pd.DatetimeIndex.tz_convert(*args).astype(datetime.datetime)
456+
457+
_test_date2num_dst(pd.date_range, tz_convert)
430458

431459

432460
if __name__ == '__main__':

0 commit comments

Comments
 (0)