Skip to content

Commit 93c11c2

Browse files
jbrockmendeljreback
authored andcommitted
Misc cleanups, test parametrization (pandas-dev#21690)
1 parent d105ce2 commit 93c11c2

File tree

6 files changed

+102
-99
lines changed

6 files changed

+102
-99
lines changed

pandas/_libs/src/inference.pyx

+1-2
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,7 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
12251225
ndarray[int64_t] idatetimes
12261226
ndarray[int64_t] itimedeltas
12271227
Seen seen = Seen()
1228-
object val, onan
1228+
object val
12291229
float64_t fval, fnan
12301230

12311231
n = len(objects)
@@ -1244,7 +1244,6 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
12441244
timedeltas = np.empty(n, dtype='m8[ns]')
12451245
itimedeltas = timedeltas.view(np.int64)
12461246

1247-
onan = np.nan
12481247
fnan = np.nan
12491248

12501249
for i from 0 <= i < n:

pandas/_libs/tslibs/conversion.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1002,7 +1002,7 @@ cdef inline bisect_right_i8(int64_t *data, int64_t val, Py_ssize_t n):
10021002

10031003
cdef inline str _render_tstamp(int64_t val):
10041004
""" Helper function to render exception messages"""
1005-
from pandas._libs.tslib import Timestamp
1005+
from timestamps import Timestamp
10061006
return str(Timestamp(val))
10071007

10081008

pandas/_libs/tslibs/period.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ from libc.stdlib cimport free, malloc
1515
from libc.time cimport strftime, tm
1616
from libc.string cimport strlen, memset
1717

18-
from pandas.compat import PY2
19-
2018
cimport cython
2119

2220
from cpython.datetime cimport (PyDateTime_Check, PyDelta_Check,
@@ -59,6 +57,8 @@ from offsets cimport to_offset
5957

6058
from pandas.tseries import offsets
6159

60+
cdef bint PY2 = str == bytes
61+
6262

6363
cdef extern from "period_helper.h":
6464
int FR_ANN

pandas/_libs/tslibs/resolution.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ from conversion import tz_convert
2626
from conversion cimport tz_convert_utc_to_tzlocal
2727
from ccalendar import MONTH_ALIASES, int_to_weekday
2828
from ccalendar cimport get_days_in_month
29+
from timestamps import Timestamp
2930

3031
from pandas._libs.properties import cache_readonly
31-
from pandas._libs.tslib import Timestamp
3232

3333
from pandas.core.algorithms import unique # TODO: Avoid this non-cython import
3434

pandas/tests/indexes/datetimes/test_tools.py

+79-93
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import dateutil
88
import numpy as np
99
from dateutil.parser import parse
10-
from datetime import datetime, date, time
10+
from datetime import datetime, time
1111
from distutils.version import LooseVersion
1212

1313
import pandas as pd
@@ -1251,92 +1251,90 @@ def test_day_not_in_month_ignore(self, cache):
12511251

12521252
class TestDatetimeParsingWrappers(object):
12531253

1254+
@pytest.mark.parametrize('date_str,expected', list({
1255+
'2011-01-01': datetime(2011, 1, 1),
1256+
'2Q2005': datetime(2005, 4, 1),
1257+
'2Q05': datetime(2005, 4, 1),
1258+
'2005Q1': datetime(2005, 1, 1),
1259+
'05Q1': datetime(2005, 1, 1),
1260+
'2011Q3': datetime(2011, 7, 1),
1261+
'11Q3': datetime(2011, 7, 1),
1262+
'3Q2011': datetime(2011, 7, 1),
1263+
'3Q11': datetime(2011, 7, 1),
1264+
1265+
# quarterly without space
1266+
'2000Q4': datetime(2000, 10, 1),
1267+
'00Q4': datetime(2000, 10, 1),
1268+
'4Q2000': datetime(2000, 10, 1),
1269+
'4Q00': datetime(2000, 10, 1),
1270+
'2000q4': datetime(2000, 10, 1),
1271+
'2000-Q4': datetime(2000, 10, 1),
1272+
'00-Q4': datetime(2000, 10, 1),
1273+
'4Q-2000': datetime(2000, 10, 1),
1274+
'4Q-00': datetime(2000, 10, 1),
1275+
'00q4': datetime(2000, 10, 1),
1276+
'2005': datetime(2005, 1, 1),
1277+
'2005-11': datetime(2005, 11, 1),
1278+
'2005 11': datetime(2005, 11, 1),
1279+
'11-2005': datetime(2005, 11, 1),
1280+
'11 2005': datetime(2005, 11, 1),
1281+
'200511': datetime(2020, 5, 11),
1282+
'20051109': datetime(2005, 11, 9),
1283+
'20051109 10:15': datetime(2005, 11, 9, 10, 15),
1284+
'20051109 08H': datetime(2005, 11, 9, 8, 0),
1285+
'2005-11-09 10:15': datetime(2005, 11, 9, 10, 15),
1286+
'2005-11-09 08H': datetime(2005, 11, 9, 8, 0),
1287+
'2005/11/09 10:15': datetime(2005, 11, 9, 10, 15),
1288+
'2005/11/09 08H': datetime(2005, 11, 9, 8, 0),
1289+
"Thu Sep 25 10:36:28 2003": datetime(2003, 9, 25, 10, 36, 28),
1290+
"Thu Sep 25 2003": datetime(2003, 9, 25),
1291+
"Sep 25 2003": datetime(2003, 9, 25),
1292+
"January 1 2014": datetime(2014, 1, 1),
1293+
1294+
# GHE10537
1295+
'2014-06': datetime(2014, 6, 1),
1296+
'06-2014': datetime(2014, 6, 1),
1297+
'2014-6': datetime(2014, 6, 1),
1298+
'6-2014': datetime(2014, 6, 1),
1299+
1300+
'20010101 12': datetime(2001, 1, 1, 12),
1301+
'20010101 1234': datetime(2001, 1, 1, 12, 34),
1302+
'20010101 123456': datetime(2001, 1, 1, 12, 34, 56)}.items()))
12541303
@pytest.mark.parametrize('cache', [True, False])
1255-
def test_parsers(self, cache):
1304+
def test_parsers(self, date_str, expected, cache):
12561305

12571306
# dateutil >= 2.5.0 defaults to yearfirst=True
12581307
# https://github.com/dateutil/dateutil/issues/217
12591308
yearfirst = True
12601309

1261-
cases = {'2011-01-01': datetime(2011, 1, 1),
1262-
'2Q2005': datetime(2005, 4, 1),
1263-
'2Q05': datetime(2005, 4, 1),
1264-
'2005Q1': datetime(2005, 1, 1),
1265-
'05Q1': datetime(2005, 1, 1),
1266-
'2011Q3': datetime(2011, 7, 1),
1267-
'11Q3': datetime(2011, 7, 1),
1268-
'3Q2011': datetime(2011, 7, 1),
1269-
'3Q11': datetime(2011, 7, 1),
1270-
1271-
# quarterly without space
1272-
'2000Q4': datetime(2000, 10, 1),
1273-
'00Q4': datetime(2000, 10, 1),
1274-
'4Q2000': datetime(2000, 10, 1),
1275-
'4Q00': datetime(2000, 10, 1),
1276-
'2000q4': datetime(2000, 10, 1),
1277-
'2000-Q4': datetime(2000, 10, 1),
1278-
'00-Q4': datetime(2000, 10, 1),
1279-
'4Q-2000': datetime(2000, 10, 1),
1280-
'4Q-00': datetime(2000, 10, 1),
1281-
'00q4': datetime(2000, 10, 1),
1282-
'2005': datetime(2005, 1, 1),
1283-
'2005-11': datetime(2005, 11, 1),
1284-
'2005 11': datetime(2005, 11, 1),
1285-
'11-2005': datetime(2005, 11, 1),
1286-
'11 2005': datetime(2005, 11, 1),
1287-
'200511': datetime(2020, 5, 11),
1288-
'20051109': datetime(2005, 11, 9),
1289-
'20051109 10:15': datetime(2005, 11, 9, 10, 15),
1290-
'20051109 08H': datetime(2005, 11, 9, 8, 0),
1291-
'2005-11-09 10:15': datetime(2005, 11, 9, 10, 15),
1292-
'2005-11-09 08H': datetime(2005, 11, 9, 8, 0),
1293-
'2005/11/09 10:15': datetime(2005, 11, 9, 10, 15),
1294-
'2005/11/09 08H': datetime(2005, 11, 9, 8, 0),
1295-
"Thu Sep 25 10:36:28 2003": datetime(2003, 9, 25, 10,
1296-
36, 28),
1297-
"Thu Sep 25 2003": datetime(2003, 9, 25),
1298-
"Sep 25 2003": datetime(2003, 9, 25),
1299-
"January 1 2014": datetime(2014, 1, 1),
1300-
1301-
# GH 10537
1302-
'2014-06': datetime(2014, 6, 1),
1303-
'06-2014': datetime(2014, 6, 1),
1304-
'2014-6': datetime(2014, 6, 1),
1305-
'6-2014': datetime(2014, 6, 1),
1306-
1307-
'20010101 12': datetime(2001, 1, 1, 12),
1308-
'20010101 1234': datetime(2001, 1, 1, 12, 34),
1309-
'20010101 123456': datetime(2001, 1, 1, 12, 34, 56),
1310-
}
1311-
1312-
for date_str, expected in compat.iteritems(cases):
1313-
result1, _, _ = parsing.parse_time_string(date_str,
1314-
yearfirst=yearfirst)
1315-
result2 = to_datetime(date_str, yearfirst=yearfirst)
1316-
result3 = to_datetime([date_str], yearfirst=yearfirst)
1317-
# result5 is used below
1318-
result4 = to_datetime(np.array([date_str], dtype=object),
1319-
yearfirst=yearfirst, cache=cache)
1320-
result6 = DatetimeIndex([date_str], yearfirst=yearfirst)
1321-
# result7 is used below
1322-
result8 = DatetimeIndex(Index([date_str]), yearfirst=yearfirst)
1323-
result9 = DatetimeIndex(Series([date_str]), yearfirst=yearfirst)
1324-
1325-
for res in [result1, result2]:
1326-
assert res == expected
1327-
for res in [result3, result4, result6, result8, result9]:
1328-
exp = DatetimeIndex([pd.Timestamp(expected)])
1329-
tm.assert_index_equal(res, exp)
1330-
1331-
# these really need to have yearfirst, but we don't support
1332-
if not yearfirst:
1333-
result5 = Timestamp(date_str)
1334-
assert result5 == expected
1335-
result7 = date_range(date_str, freq='S', periods=1,
1336-
yearfirst=yearfirst)
1337-
assert result7 == expected
1338-
1339-
# NaT
1310+
result1, _, _ = parsing.parse_time_string(date_str,
1311+
yearfirst=yearfirst)
1312+
result2 = to_datetime(date_str, yearfirst=yearfirst)
1313+
result3 = to_datetime([date_str], yearfirst=yearfirst)
1314+
# result5 is used below
1315+
result4 = to_datetime(np.array([date_str], dtype=object),
1316+
yearfirst=yearfirst, cache=cache)
1317+
result6 = DatetimeIndex([date_str], yearfirst=yearfirst)
1318+
# result7 is used below
1319+
result8 = DatetimeIndex(Index([date_str]), yearfirst=yearfirst)
1320+
result9 = DatetimeIndex(Series([date_str]), yearfirst=yearfirst)
1321+
1322+
for res in [result1, result2]:
1323+
assert res == expected
1324+
for res in [result3, result4, result6, result8, result9]:
1325+
exp = DatetimeIndex([pd.Timestamp(expected)])
1326+
tm.assert_index_equal(res, exp)
1327+
1328+
# these really need to have yearfirst, but we don't support
1329+
if not yearfirst:
1330+
result5 = Timestamp(date_str)
1331+
assert result5 == expected
1332+
result7 = date_range(date_str, freq='S', periods=1,
1333+
yearfirst=yearfirst)
1334+
assert result7 == expected
1335+
1336+
def test_parsers_nat(self):
1337+
# Test that each of several string-accepting methods return pd.NaT
13401338
result1, _, _ = parsing.parse_time_string('NaT')
13411339
result2 = to_datetime('NaT')
13421340
result3 = Timestamp('NaT')
@@ -1516,18 +1514,6 @@ def test_parsers_timezone_minute_offsets_roundtrip(self, cache):
15161514
assert dt_string_repr == repr(converted_time)
15171515

15181516

1519-
def test_normalize_date():
1520-
value = date(2012, 9, 7)
1521-
1522-
result = tslib.normalize_date(value)
1523-
assert (result == datetime(2012, 9, 7))
1524-
1525-
value = datetime(2012, 9, 7, 12)
1526-
1527-
result = tslib.normalize_date(value)
1528-
assert (result == datetime(2012, 9, 7))
1529-
1530-
15311517
@pytest.fixture(params=['D', 's', 'ms', 'us', 'ns'])
15321518
def units(request):
15331519
return request.param

pandas/tests/tslibs/test_tslib.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# -*- coding: utf-8 -*-
2+
"""Tests for functions from pandas._libs.tslibs"""
3+
4+
from datetime import datetime, date
5+
6+
from pandas._libs import tslib
7+
8+
9+
def test_normalize_date():
10+
value = date(2012, 9, 7)
11+
12+
result = tslib.normalize_date(value)
13+
assert (result == datetime(2012, 9, 7))
14+
15+
value = datetime(2012, 9, 7, 12)
16+
17+
result = tslib.normalize_date(value)
18+
assert (result == datetime(2012, 9, 7))

0 commit comments

Comments
 (0)