forked from dask/dask
-
Notifications
You must be signed in to change notification settings - Fork 0
/
_compat.py
99 lines (74 loc) · 2.59 KB
/
_compat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import contextlib
import string
import warnings
import numpy as np
import pandas as pd
from packaging.version import Version
PANDAS_VERSION = Version(pd.__version__)
PANDAS_GT_104 = PANDAS_VERSION >= Version("1.0.4")
PANDAS_GT_110 = PANDAS_VERSION >= Version("1.1.0")
PANDAS_GT_120 = PANDAS_VERSION >= Version("1.2.0")
PANDAS_GT_121 = PANDAS_VERSION >= Version("1.2.1")
PANDAS_GT_130 = PANDAS_VERSION >= Version("1.3.0")
PANDAS_GT_131 = PANDAS_VERSION >= Version("1.3.1")
PANDAS_GT_133 = PANDAS_VERSION >= Version("1.3.3")
PANDAS_GT_140 = PANDAS_VERSION >= Version("1.4.0")
PANDAS_GT_150 = PANDAS_VERSION >= Version("1.5.0")
PANDAS_GT_200 = PANDAS_VERSION.major >= 2
import pandas.testing as tm
def assert_categorical_equal(left, right, *args, **kwargs):
tm.assert_extension_array_equal(left, right, *args, **kwargs)
assert pd.api.types.is_categorical_dtype(
left.dtype
), f"{left} is not categorical dtype"
assert pd.api.types.is_categorical_dtype(
right.dtype
), f"{right} is not categorical dtype"
def assert_numpy_array_equal(left, right):
left_na = pd.isna(left)
right_na = pd.isna(right)
np.testing.assert_array_equal(left_na, right_na)
left_valid = left[~left_na]
right_valid = right[~right_na]
np.testing.assert_array_equal(left_valid, right_valid)
def makeDataFrame():
data = np.random.randn(30, 4)
index = list(string.ascii_letters)[:30]
return pd.DataFrame(data, index=index, columns=list("ABCD"))
def makeTimeDataFrame():
data = makeDataFrame()
data.index = makeDateIndex()
return data
def makeTimeSeries():
return makeTimeDataFrame()["A"]
def makeDateIndex(k=30, freq="B"):
return pd.date_range("2000", periods=k, freq=freq)
def makeTimedeltaIndex(k=30, freq="D"):
return pd.timedelta_range("1 day", periods=k, freq=freq)
def makeMissingDataframe():
df = makeDataFrame()
data = df.values
data = np.where(data > 1, np.nan, data)
return pd.DataFrame(data, index=df.index, columns=df.columns)
def makeMixedDataFrame():
df = pd.DataFrame(
{
"A": [0.0, 1, 2, 3, 4],
"B": [0.0, 1, 0, 1, 0],
"C": [f"foo{i}" for i in range(5)],
"D": pd.date_range("2009-01-01", periods=5),
}
)
return df
@contextlib.contextmanager
def check_numeric_only_deprecation():
if PANDAS_GT_150:
with warnings.catch_warnings():
warnings.filterwarnings(
"ignore",
message="The default value of numeric_only in",
category=FutureWarning,
)
yield
else:
yield