/
test_utils_datetime.py
96 lines (79 loc) · 3.44 KB
/
test_utils_datetime.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
"""Module to test the datetime utility functions
"""
import numpy as np # type: ignore
import pandas as pd # type: ignore
from pycaret.datasets import get_data
from pycaret.utils.datetime import (
coerce_datetime_to_period_index,
coerce_period_to_datetime_index,
)
def test_coerce_period_to_datetime_index():
"""Tests coercion of PeriodIndex to DatetimeIndex"""
# TODO: Get both Series and DataFrame with Period Index later
data = get_data("airline")
orig_freq = data.index.freq
# Basic coercion ----
new_data = coerce_period_to_datetime_index(data=data)
assert isinstance(new_data.index, pd.DatetimeIndex)
assert new_data.index.freq == orig_freq
# Passing Freq parameter ----
data_diff_freq = data.copy()
data_diff_freq = data_diff_freq.asfreq("D")
new_data = coerce_period_to_datetime_index(data=data_diff_freq, freq=orig_freq)
assert isinstance(new_data.index, pd.DatetimeIndex)
assert new_data.index.freq == orig_freq
# In place coercion ----
assert isinstance(data.index, pd.PeriodIndex)
coerce_period_to_datetime_index(data=data, inplace=True)
assert isinstance(data.index, pd.DatetimeIndex)
assert data.index.freq == orig_freq
# No Coercion (numpy - no index) ----
data_np = np.array(data.values)
assert isinstance(data_np, np.ndarray)
data_np_new = coerce_period_to_datetime_index(data=data_np)
assert isinstance(data_np_new, np.ndarray)
# No Coercion (Pandas Int Index)
data = get_data("uschange")
original_index_type = type(data.index)
new_data = coerce_period_to_datetime_index(data=data)
assert isinstance(new_data.index, original_index_type)
# Corner condition (Q-DEC with only 2 data points)----
orig_freq = "Q-DEC"
data = pd.DataFrame(
[1, 2], index=pd.PeriodIndex(["2018Q2", "2018Q3"], freq=orig_freq)
)
new_data = coerce_period_to_datetime_index(data=data)
assert isinstance(new_data.index, pd.DatetimeIndex)
assert new_data.index.freq == orig_freq
def test_coerce_datetime_to_period_index():
"""Tests coercion of DatetimeIndex to PeriodIndex
Note since we are converting from a period to Datetime,
there is no guarantee of the frequency unless we explicitly
pass it. e.g. DateTime could be MonthStart, but Period will
represent Month.
"""
# TODO: Get both Series and DataFrame with Period Index later
data = get_data("airline")
data.index = data.index.to_timestamp()
# Basic coercion ----
new_data = coerce_datetime_to_period_index(data=data)
assert isinstance(new_data.index, pd.PeriodIndex)
# Passing Freq parameter ----
# Convert Monthly data to Daily data
new_data = coerce_datetime_to_period_index(data=data, freq="D")
assert isinstance(new_data.index, pd.PeriodIndex)
assert new_data.index.freq == "D"
# In place coercion ----
assert isinstance(data.index, pd.DatetimeIndex)
coerce_datetime_to_period_index(data=data, inplace=True)
assert isinstance(data.index, pd.PeriodIndex)
# No Coercion (numpy - no index) ----
data_np = np.array(data.values)
assert isinstance(data_np, np.ndarray)
data_np_new = coerce_datetime_to_period_index(data=data_np)
assert isinstance(data_np_new, np.ndarray)
# No Coercion (Pandas Int Index)
data = get_data("uschange")
original_index_type = type(data.index)
new_data = coerce_datetime_to_period_index(data=data)
assert isinstance(new_data.index, original_index_type)