71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
|
""" support numpy compatibility across versions """
|
||
|
|
||
|
from distutils.version import LooseVersion
|
||
|
import re
|
||
|
|
||
|
import numpy as np
|
||
|
|
||
|
# numpy versioning
|
||
|
_np_version = np.__version__
|
||
|
_nlv = LooseVersion(_np_version)
|
||
|
np_version_under1p17 = _nlv < LooseVersion("1.17")
|
||
|
np_version_under1p18 = _nlv < LooseVersion("1.18")
|
||
|
_np_version_under1p19 = _nlv < LooseVersion("1.19")
|
||
|
_np_version_under1p20 = _nlv < LooseVersion("1.20")
|
||
|
is_numpy_dev = ".dev" in str(_nlv)
|
||
|
_min_numpy_ver = "1.16.5"
|
||
|
|
||
|
|
||
|
if _nlv < _min_numpy_ver:
|
||
|
raise ImportError(
|
||
|
f"this version of pandas is incompatible with numpy < {_min_numpy_ver}\n"
|
||
|
f"your numpy version is {_np_version}.\n"
|
||
|
f"Please upgrade numpy to >= {_min_numpy_ver} to use this pandas version"
|
||
|
)
|
||
|
|
||
|
|
||
|
_tz_regex = re.compile("[+-]0000$")
|
||
|
|
||
|
|
||
|
def tz_replacer(s):
|
||
|
if isinstance(s, str):
|
||
|
if s.endswith("Z"):
|
||
|
s = s[:-1]
|
||
|
elif _tz_regex.search(s):
|
||
|
s = s[:-5]
|
||
|
return s
|
||
|
|
||
|
|
||
|
def np_datetime64_compat(s, *args, **kwargs):
|
||
|
"""
|
||
|
provide compat for construction of strings to numpy datetime64's with
|
||
|
tz-changes in 1.11 that make '2015-01-01 09:00:00Z' show a deprecation
|
||
|
warning, when need to pass '2015-01-01 09:00:00'
|
||
|
"""
|
||
|
s = tz_replacer(s)
|
||
|
return np.datetime64(s, *args, **kwargs)
|
||
|
|
||
|
|
||
|
def np_array_datetime64_compat(arr, *args, **kwargs):
|
||
|
"""
|
||
|
provide compat for construction of an array of strings to a
|
||
|
np.array(..., dtype=np.datetime64(..))
|
||
|
tz-changes in 1.11 that make '2015-01-01 09:00:00Z' show a deprecation
|
||
|
warning, when need to pass '2015-01-01 09:00:00'
|
||
|
"""
|
||
|
# is_list_like
|
||
|
if hasattr(arr, "__iter__") and not isinstance(arr, (str, bytes)):
|
||
|
arr = [tz_replacer(s) for s in arr]
|
||
|
else:
|
||
|
arr = tz_replacer(arr)
|
||
|
|
||
|
return np.array(arr, *args, **kwargs)
|
||
|
|
||
|
|
||
|
__all__ = [
|
||
|
"np",
|
||
|
"_np_version",
|
||
|
"np_version_under1p17",
|
||
|
"is_numpy_dev",
|
||
|
]
|