1616import pytest
1717
1818import bigframes .series
19- from tests .system .utils import assert_series_equal
19+ from tests .system .utils import assert_series_equal , skip_legacy_pandas
2020
2121DATETIME_COL_NAMES = [("datetime_col" ,), ("timestamp_col" ,)]
22+ DATE_COLUMNS = [
23+ ("datetime_col" ,),
24+ ("timestamp_col" ,),
25+ ("date_col" ,),
26+ ]
2227
2328
2429@pytest .mark .parametrize (
2530 ("col_name" ,),
26- DATETIME_COL_NAMES ,
31+ DATE_COLUMNS ,
2732)
28- def test_day (scalars_dfs , col_name ):
29- if pd .__version__ .startswith ("1." ):
30- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
33+ @skip_legacy_pandas
34+ def test_dt_day (scalars_dfs , col_name ):
3135 scalars_df , scalars_pandas_df = scalars_dfs
3236 bf_series : bigframes .series .Series = scalars_df [col_name ]
3337 bf_result = bf_series .dt .day .to_pandas ()
@@ -43,9 +47,8 @@ def test_day(scalars_dfs, col_name):
4347 ("col_name" ,),
4448 DATETIME_COL_NAMES ,
4549)
46- def test_date (scalars_dfs , col_name ):
47- if pd .__version__ .startswith ("1." ):
48- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
50+ @skip_legacy_pandas
51+ def test_dt_date (scalars_dfs , col_name ):
4952 scalars_df , scalars_pandas_df = scalars_dfs
5053 bf_series : bigframes .series .Series = scalars_df [col_name ]
5154 bf_result = bf_series .dt .date .to_pandas ()
@@ -59,11 +62,10 @@ def test_date(scalars_dfs, col_name):
5962
6063@pytest .mark .parametrize (
6164 ("col_name" ,),
62- DATETIME_COL_NAMES ,
65+ DATE_COLUMNS ,
6366)
64- def test_dayofweek (scalars_dfs , col_name ):
65- if pd .__version__ .startswith ("1." ):
66- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
67+ @skip_legacy_pandas
68+ def test_dt_dayofweek (scalars_dfs , col_name ):
6769 scalars_df , scalars_pandas_df = scalars_dfs
6870 bf_series : bigframes .series .Series = scalars_df [col_name ]
6971 bf_result = bf_series .dt .dayofweek .to_pandas ()
@@ -76,9 +78,8 @@ def test_dayofweek(scalars_dfs, col_name):
7678 ("col_name" ,),
7779 DATETIME_COL_NAMES ,
7880)
79- def test_hour (scalars_dfs , col_name ):
80- if pd .__version__ .startswith ("1." ):
81- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
81+ @skip_legacy_pandas
82+ def test_dt_hour (scalars_dfs , col_name ):
8283 scalars_df , scalars_pandas_df = scalars_dfs
8384 bf_series : bigframes .series .Series = scalars_df [col_name ]
8485 bf_result = bf_series .dt .hour .to_pandas ()
@@ -94,9 +95,8 @@ def test_hour(scalars_dfs, col_name):
9495 ("col_name" ,),
9596 DATETIME_COL_NAMES ,
9697)
97- def test_minute (scalars_dfs , col_name ):
98- if pd .__version__ .startswith ("1." ):
99- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
98+ @skip_legacy_pandas
99+ def test_dt_minute (scalars_dfs , col_name ):
100100 scalars_df , scalars_pandas_df = scalars_dfs
101101 bf_series : bigframes .series .Series = scalars_df [col_name ]
102102 bf_result = bf_series .dt .minute .to_pandas ()
@@ -110,11 +110,10 @@ def test_minute(scalars_dfs, col_name):
110110
111111@pytest .mark .parametrize (
112112 ("col_name" ,),
113- DATETIME_COL_NAMES ,
113+ DATE_COLUMNS ,
114114)
115- def test_month (scalars_dfs , col_name ):
116- if pd .__version__ .startswith ("1." ):
117- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
115+ @skip_legacy_pandas
116+ def test_dt_month (scalars_dfs , col_name ):
118117 scalars_df , scalars_pandas_df = scalars_dfs
119118 bf_series : bigframes .series .Series = scalars_df [col_name ]
120119 bf_result = bf_series .dt .month .to_pandas ()
@@ -128,11 +127,10 @@ def test_month(scalars_dfs, col_name):
128127
129128@pytest .mark .parametrize (
130129 ("col_name" ,),
131- DATETIME_COL_NAMES ,
130+ DATE_COLUMNS ,
132131)
133- def test_quarter (scalars_dfs , col_name ):
134- if pd .__version__ .startswith ("1." ):
135- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
132+ @skip_legacy_pandas
133+ def test_dt_quarter (scalars_dfs , col_name ):
136134 scalars_df , scalars_pandas_df = scalars_dfs
137135 bf_series : bigframes .series .Series = scalars_df [col_name ]
138136 bf_result = bf_series .dt .quarter .to_pandas ()
@@ -148,9 +146,8 @@ def test_quarter(scalars_dfs, col_name):
148146 ("col_name" ,),
149147 DATETIME_COL_NAMES ,
150148)
151- def test_second (scalars_dfs , col_name ):
152- if pd .__version__ .startswith ("1." ):
153- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
149+ @skip_legacy_pandas
150+ def test_dt_second (scalars_dfs , col_name ):
154151 scalars_df , scalars_pandas_df = scalars_dfs
155152 bf_series : bigframes .series .Series = scalars_df [col_name ]
156153 bf_result = bf_series .dt .second .to_pandas ()
@@ -166,9 +163,8 @@ def test_second(scalars_dfs, col_name):
166163 ("col_name" ,),
167164 DATETIME_COL_NAMES ,
168165)
169- def test_time (scalars_dfs , col_name ):
170- if pd .__version__ .startswith ("1." ):
171- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
166+ @skip_legacy_pandas
167+ def test_dt_time (scalars_dfs , col_name ):
172168 scalars_df , scalars_pandas_df = scalars_dfs
173169 bf_series : bigframes .series .Series = scalars_df [col_name ]
174170 bf_result = bf_series .dt .time .to_pandas ()
@@ -182,11 +178,10 @@ def test_time(scalars_dfs, col_name):
182178
183179@pytest .mark .parametrize (
184180 ("col_name" ,),
185- DATETIME_COL_NAMES ,
181+ DATE_COLUMNS ,
186182)
187- def test_year (scalars_dfs , col_name ):
188- if pd .__version__ .startswith ("1." ):
189- pytest .skip ("Pyarrow datetime objects not support in pandas 1.x." )
183+ @skip_legacy_pandas
184+ def test_dt_year (scalars_dfs , col_name ):
190185 scalars_df , scalars_pandas_df = scalars_dfs
191186 bf_series : bigframes .series .Series = scalars_df [col_name ]
192187 bf_result = bf_series .dt .year .to_pandas ()
@@ -196,3 +191,31 @@ def test_year(scalars_dfs, col_name):
196191 pd_result .astype (pd .Int64Dtype ()),
197192 bf_result ,
198193 )
194+
195+
196+ @pytest .mark .parametrize (
197+ ("col_name" ,),
198+ DATETIME_COL_NAMES ,
199+ )
200+ @skip_legacy_pandas
201+ def test_dt_tz (scalars_dfs , col_name ):
202+ scalars_df , scalars_pandas_df = scalars_dfs
203+ bf_series : bigframes .series .Series = scalars_df [col_name ]
204+ bf_result = bf_series .dt .tz
205+ pd_result = scalars_pandas_df [col_name ].dt .tz
206+
207+ assert bf_result == pd_result
208+
209+
210+ @pytest .mark .parametrize (
211+ ("col_name" ,),
212+ DATETIME_COL_NAMES ,
213+ )
214+ @skip_legacy_pandas
215+ def test_dt_unit (scalars_dfs , col_name ):
216+ scalars_df , scalars_pandas_df = scalars_dfs
217+ bf_series : bigframes .series .Series = scalars_df [col_name ]
218+ bf_result = bf_series .dt .unit
219+ pd_result = scalars_pandas_df [col_name ].dt .unit
220+
221+ assert bf_result == pd_result
0 commit comments