1
+ import re
2
+
1
3
import numpy as np
2
4
import pytest
3
5
import test_aide as ta
4
6
5
7
import tests .test_data as d
8
+ from tests .base_tests import (
9
+ ColumnStrListInitTests ,
10
+ DropOriginalInitMixinTests ,
11
+ DropOriginalTransformMixinTests ,
12
+ GenericTransformTests ,
13
+ NewColumnNameInitMixintests ,
14
+ OtherBaseBehaviourTests ,
15
+ )
16
+ from tests .dates .test_BaseDatetimeTransformer import (
17
+ DatetimeMixinTransformTests ,
18
+ )
6
19
from tubular .dates import SeriesDtMethodTransformer
7
20
8
21
9
- class TestInit :
22
+ class TestInit (
23
+ ColumnStrListInitTests ,
24
+ DropOriginalInitMixinTests ,
25
+ NewColumnNameInitMixintests ,
26
+ ):
10
27
"""Tests for SeriesDtMethodTransformer.init()."""
11
28
29
+ @classmethod
30
+ def setup_class (cls ):
31
+ cls .transformer_name = "SeriesDtMethodTransformer"
32
+
12
33
def test_invalid_input_type_errors (self ):
13
34
"""Test that an exceptions are raised for invalid input types."""
35
+ bad_columns = ["b" , "c" ]
14
36
with pytest .raises (
15
- TypeError ,
16
- match = r "SeriesDtMethodTransformer: column should be a str but got \<class 'list'\> " ,
37
+ ValueError ,
38
+ match = rf "SeriesDtMethodTransformer: column should be a str or list of len 1, got { re . escape ( str ( bad_columns )) } " ,
17
39
):
18
40
SeriesDtMethodTransformer (
19
41
new_column_name = "a" ,
20
42
pd_method_name = 1 ,
21
- column = [ "b" , "c" ] ,
43
+ columns = bad_columns ,
22
44
)
23
45
24
46
with pytest .raises (
25
47
TypeError ,
26
48
match = r"SeriesDtMethodTransformer: unexpected type \(\<class 'int'\>\) for pd_method_name, expecting str" ,
27
- ):
28
- SeriesDtMethodTransformer (new_column_name = "a" , pd_method_name = 1 , column = "b" )
29
-
30
- with pytest .raises (
31
- TypeError ,
32
- match = r"SeriesDtMethodTransformer: new_column_name should be str" ,
33
49
):
34
50
SeriesDtMethodTransformer (
35
- new_column_name = 1.0 ,
36
- pd_method_name = "year" ,
37
- column = "b" ,
51
+ new_column_name = "a" ,
52
+ pd_method_name = 1 ,
53
+ columns = "b" ,
38
54
)
39
55
40
56
with pytest .raises (
@@ -44,7 +60,7 @@ def test_invalid_input_type_errors(self):
44
60
SeriesDtMethodTransformer (
45
61
new_column_name = "a" ,
46
62
pd_method_name = "year" ,
47
- column = "b" ,
63
+ columns = "b" ,
48
64
pd_method_kwargs = 1 ,
49
65
)
50
66
@@ -55,7 +71,7 @@ def test_invalid_input_type_errors(self):
55
71
SeriesDtMethodTransformer (
56
72
new_column_name = "a" ,
57
73
pd_method_name = "year" ,
58
- column = "b" ,
74
+ columns = "b" ,
59
75
pd_method_kwargs = {"a" : 1 , 2 : "b" },
60
76
)
61
77
@@ -68,52 +84,21 @@ def test_exception_raised_non_pandas_method_passed(self):
68
84
SeriesDtMethodTransformer (
69
85
new_column_name = "a" ,
70
86
pd_method_name = "b" ,
71
- column = "b" ,
87
+ columns = "b" ,
72
88
)
73
89
74
- def test_attributes_set (self ):
75
- """Test that the values passed for new_column_name, pd_method_name are saved to attributes on the object."""
76
- x = SeriesDtMethodTransformer (
77
- new_column_name = "a" ,
78
- pd_method_name = "year" ,
79
- column = "b" ,
80
- pd_method_kwargs = {"d" : 1 },
81
- )
82
-
83
- ta .classes .test_object_attributes (
84
- obj = x ,
85
- expected_attributes = {
86
- "column" : "b" ,
87
- "new_column_name" : "a" ,
88
- "pd_method_name" : "year" ,
89
- "pd_method_kwargs" : {"d" : 1 },
90
- },
91
- msg = "Attributes for SeriesDtMethodTransformer set in init" ,
92
- )
93
90
94
- @pytest .mark .parametrize (
95
- ("pd_method_name" , "callable_attr" ),
96
- [("year" , False ), ("to_period" , True )],
97
- )
98
- def test_callable_attribute_set (self , pd_method_name , callable_attr ):
99
- """Test the _callable attribute is set to True if pd.Series.dt.pd_method_name is callable."""
100
- x = SeriesDtMethodTransformer (
101
- new_column_name = "a" ,
102
- pd_method_name = pd_method_name ,
103
- column = "b" ,
104
- pd_method_kwargs = {"d" : 1 },
105
- )
106
-
107
- ta .classes .test_object_attributes (
108
- obj = x ,
109
- expected_attributes = {"_callable" : callable_attr },
110
- msg = "_callable attribute for SeriesDtMethodTransformer set in init" ,
111
- )
112
-
113
-
114
- class TestTransform :
91
+ class TestTransform (
92
+ DatetimeMixinTransformTests ,
93
+ DropOriginalTransformMixinTests ,
94
+ GenericTransformTests ,
95
+ ):
115
96
"""Tests for SeriesDtMethodTransformer.transform()."""
116
97
98
+ @classmethod
99
+ def setup_class (cls ):
100
+ cls .transformer_name = "SeriesDtMethodTransformer"
101
+
117
102
def expected_df_1 ():
118
103
"""Expected output of test_expected_output_no_overwrite."""
119
104
df = d .create_datediff_test_df ()
@@ -144,31 +129,6 @@ def expected_df_3():
144
129
145
130
return df
146
131
147
- @pytest .mark .parametrize (
148
- ("bad_column" , "bad_type" ),
149
- [
150
- ("numeric_col" , "int64" ),
151
- ("string_col" , "object" ),
152
- ("bool_col" , "bool" ),
153
- ("empty_col" , "object" ),
154
- ("date_col" , "date" ),
155
- ],
156
- )
157
- def test_input_data_check_column_errors (self , bad_column , bad_type ):
158
- """Check that errors are raised on a variety of different non datatypes"""
159
- x = SeriesDtMethodTransformer (
160
- new_column_name = "a2" ,
161
- pd_method_name = "year" ,
162
- column = bad_column ,
163
- )
164
-
165
- df = d .create_date_diff_incorrect_dtypes ()
166
-
167
- msg = rf"{ x .classname ()} : { x .columns [0 ]} type should be in \['datetime64'\] but got { bad_type } "
168
-
169
- with pytest .raises (TypeError , match = msg ):
170
- x .transform (df )
171
-
172
132
@pytest .mark .parametrize (
173
133
("df" , "expected" ),
174
134
ta .pandas .adjusted_dataframe_params (
@@ -181,7 +141,7 @@ def test_expected_output_no_overwrite(self, df, expected):
181
141
x = SeriesDtMethodTransformer (
182
142
new_column_name = "a_year" ,
183
143
pd_method_name = "year" ,
184
- column = "a" ,
144
+ columns = "a" ,
185
145
pd_method_kwargs = None ,
186
146
)
187
147
@@ -205,7 +165,7 @@ def test_expected_output_overwrite(self, df, expected):
205
165
x = SeriesDtMethodTransformer (
206
166
new_column_name = "a" ,
207
167
pd_method_name = "year" ,
208
- column = "a" ,
168
+ columns = "a" ,
209
169
pd_method_kwargs = None ,
210
170
)
211
171
@@ -229,7 +189,7 @@ def test_expected_output_callable(self, df, expected):
229
189
x = SeriesDtMethodTransformer (
230
190
new_column_name = "b_new" ,
231
191
pd_method_name = "to_period" ,
232
- column = "b" ,
192
+ columns = "b" ,
233
193
pd_method_kwargs = {"freq" : "M" },
234
194
)
235
195
@@ -241,35 +201,14 @@ def test_expected_output_callable(self, df, expected):
241
201
msg_tag = "Unexpected values in SeriesDtMethodTransformer.transform with to_period" ,
242
202
)
243
203
244
- def test_attributes_unchanged_by_transform (self ):
245
- """Test that attributes set in init are unchanged by the transform method."""
246
- df = d .create_datediff_test_df ()
247
204
248
- x = SeriesDtMethodTransformer (
249
- new_column_name = "b_new" ,
250
- pd_method_name = "to_period" ,
251
- column = "b" ,
252
- pd_method_kwargs = {"freq" : "M" },
253
- )
205
+ class TestOtherBaseBehaviour (OtherBaseBehaviourTests ):
206
+ """
207
+ Class to run tests for BaseTransformerBehaviour outside the three standard methods.
254
208
255
- x2 = SeriesDtMethodTransformer (
256
- new_column_name = "b_new" ,
257
- pd_method_name = "to_period" ,
258
- column = "b" ,
259
- pd_method_kwargs = {"freq" : "M" },
260
- )
209
+ May need to overwite specific tests in this class if the tested transformer modifies this behaviour.
210
+ """
261
211
262
- x .transform (df )
263
-
264
- assert (
265
- x .new_column_name == x2 .new_column_name
266
- ), "new_column_name changed by SeriesDtMethodTransformer.transform"
267
- assert (
268
- x .pd_method_name == x2 .pd_method_name
269
- ), "pd_method_name changed by SeriesDtMethodTransformer.transform"
270
- assert (
271
- x .columns == x2 .columns
272
- ), "columns changed by SeriesDtMethodTransformer.transform"
273
- assert (
274
- x .pd_method_kwargs == x2 .pd_method_kwargs
275
- ), "pd_method_kwargs changed by SeriesDtMethodTransformer.transform"
212
+ @classmethod
213
+ def setup_class (cls ):
214
+ cls .transformer_name = "SeriesDtMethodTransformer"
0 commit comments