Skip to content

Commit 4def8e4

Browse files
committed
TST: fixes stata datetimelike comparisons for pandas-dev#10606
1 parent 26ee43e commit 4def8e4

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

pandas/core/common.py

+10
Original file line numberDiff line numberDiff line change
@@ -2553,6 +2553,16 @@ def is_datetimelike_v_numeric(a, b):
25532553
return (needs_i8_conversion(a) and f(b)) or (
25542554
needs_i8_conversion(b) and f(a))
25552555

2556+
def is_datetimelike_v_object(a, b):
2557+
# return if we have an i8 convertible and object comparision
2558+
if not hasattr(a,'dtype'):
2559+
a = np.asarray(a)
2560+
if not hasattr(b, 'dtype'):
2561+
b = np.asarray(b)
2562+
f = lambda x: is_object_dtype(x)
2563+
return (needs_i8_conversion(a) and f(b)) or (
2564+
needs_i8_conversion(b) and f(a))
2565+
25562566
needs_i8_conversion = is_datetime_or_timedelta_dtype
25572567

25582568
def i8_boxer(arr_or_dtype):

pandas/io/tests/test_stata.py

-2
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,6 @@ def test_read_chunks_117(self):
904904
self.dta16_117, self.dta17_117, self.dta18_117,
905905
self.dta19_117, self.dta20_117]
906906

907-
raise nose.SkipTest("buggy test: #10606")
908907
for fname in files_117:
909908
for chunksize in 1,2:
910909
for convert_categoricals in False, True:
@@ -962,7 +961,6 @@ def test_read_chunks_115(self):
962961
self.dta17_115, self.dta18_115, self.dta19_115,
963962
self.dta20_115]
964963

965-
raise nose.SkipTest("buggy test: #10606")
966964
for fname in files_115:
967965
for chunksize in 1,2:
968966
for convert_categoricals in False, True:

pandas/util/testing.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
from numpy.testing import assert_array_equal
2525

2626
import pandas as pd
27-
from pandas.core.common import is_sequence, array_equivalent, is_list_like, is_number, is_datetimelike_v_numeric
27+
from pandas.core.common import (is_sequence, array_equivalent, is_list_like, is_number,
28+
is_datetimelike_v_numeric, is_datetimelike_v_object)
2829
import pandas.compat as compat
2930
from pandas.compat import(
3031
filter, map, zip, range, unichr, lrange, lmap, lzip, u, callable, Counter,
@@ -688,10 +689,10 @@ def assert_series_equal(left, right, check_dtype=True,
688689
elif check_datetimelike_compat:
689690
# we want to check only if we have compat dtypes
690691
# e.g. integer and M|m are NOT compat, but we can simply check the values in that case
691-
if is_datetimelike_v_numeric(left, right):
692-
# datetime.datetime and pandas.tslib.Timestamp may hold
693-
# equivalent values but fail assert_frame_equal
694-
if not all([x == y for x, y in zip(left, right)]):
692+
if is_datetimelike_v_numeric(left, right) or is_datetimelike_v_object(left, right):
693+
694+
# datetimelike may have different objects (e.g. datetime.datetime vs Timestamp) but will compare equal
695+
if not Index(left.values).equals(Index(right.values)):
695696
raise AssertionError(
696697
'[datetimelike_compat=True] {0} is not equal to {1}.'.format(left.values,
697698
right.values))

0 commit comments

Comments
 (0)