test_conversion.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. import pytest
  4. from pytz import UTC
  5. from pandas._libs.tslib import iNaT
  6. from pandas._libs.tslibs import conversion, timezones
  7. from pandas import date_range
  8. import pandas.util.testing as tm
  9. def _compare_utc_to_local(tz_didx):
  10. def f(x):
  11. return conversion.tz_convert_single(x, UTC, tz_didx.tz)
  12. result = conversion.tz_convert(tz_didx.asi8, UTC, tz_didx.tz)
  13. expected = np.vectorize(f)(tz_didx.asi8)
  14. tm.assert_numpy_array_equal(result, expected)
  15. def _compare_local_to_utc(tz_didx, utc_didx):
  16. def f(x):
  17. return conversion.tz_convert_single(x, tz_didx.tz, UTC)
  18. result = conversion.tz_convert(utc_didx.asi8, tz_didx.tz, UTC)
  19. expected = np.vectorize(f)(utc_didx.asi8)
  20. tm.assert_numpy_array_equal(result, expected)
  21. def test_tz_convert_single_matches_tz_convert_hourly(tz_aware_fixture):
  22. tz = tz_aware_fixture
  23. tz_didx = date_range("2014-03-01", "2015-01-10", freq="H", tz=tz)
  24. utc_didx = date_range("2014-03-01", "2015-01-10", freq="H")
  25. _compare_utc_to_local(tz_didx)
  26. _compare_local_to_utc(tz_didx, utc_didx)
  27. @pytest.mark.parametrize("freq", ["D", "A"])
  28. def test_tz_convert_single_matches_tz_convert(tz_aware_fixture, freq):
  29. tz = tz_aware_fixture
  30. tz_didx = date_range("2000-01-01", "2020-01-01", freq=freq, tz=tz)
  31. utc_didx = date_range("2000-01-01", "2020-01-01", freq=freq)
  32. _compare_utc_to_local(tz_didx)
  33. _compare_local_to_utc(tz_didx, utc_didx)
  34. @pytest.mark.parametrize("arr", [
  35. pytest.param(np.array([], dtype=np.int64), id="empty"),
  36. pytest.param(np.array([iNaT], dtype=np.int64), id="all_nat")])
  37. def test_tz_convert_corner(arr):
  38. result = conversion.tz_convert(arr,
  39. timezones.maybe_get_tz("US/Eastern"),
  40. timezones.maybe_get_tz("Asia/Tokyo"))
  41. tm.assert_numpy_array_equal(result, arr)
  42. @pytest.mark.parametrize("copy", [True, False])
  43. @pytest.mark.parametrize("dtype", ["M8[ns]", "M8[s]"])
  44. def test_length_zero_copy(dtype, copy):
  45. arr = np.array([], dtype=dtype)
  46. result = conversion.ensure_datetime64ns(arr, copy=copy)
  47. assert result.base is (None if copy else arr)