Skip to content

Commit 3afa730

Browse files
committed
TST: skip comparisons on incompat bottleneck functions, xref 9422
1 parent e0e8bf1 commit 3afa730

File tree

5 files changed

+63
-39
lines changed

5 files changed

+63
-39
lines changed

pandas/tests/test_frame.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -12471,7 +12471,9 @@ def test_stat_operators_attempt_obj_array(self):
1247112471
self.assertEqual(df.values.dtype, np.object_)
1247212472
result = getattr(df, meth)(1)
1247312473
expected = getattr(df.astype('f8'), meth)(1)
12474-
assert_series_equal(result, expected)
12474+
12475+
if not tm._incompat_bottleneck_version(meth):
12476+
assert_series_equal(result, expected)
1247512477

1247612478
def test_mean(self):
1247712479
self._check_stat_op('mean', np.mean, check_dates=True)
@@ -12696,9 +12698,10 @@ def wrapper(x):
1269612698
assert_series_equal(result0, frame.apply(skipna_wrapper),
1269712699
check_dtype=check_dtype,
1269812700
check_less_precise=check_less_precise)
12699-
assert_series_equal(result1, frame.apply(skipna_wrapper, axis=1),
12700-
check_dtype=False,
12701-
check_less_precise=check_less_precise)
12701+
if not tm._incompat_bottleneck_version(name):
12702+
assert_series_equal(result1, frame.apply(skipna_wrapper, axis=1),
12703+
check_dtype=False,
12704+
check_less_precise=check_less_precise)
1270212705

1270312706
# check dtypes
1270412707
if check_dtype:
@@ -12727,8 +12730,9 @@ def wrapper(x):
1272712730
all_na = self.frame * np.NaN
1272812731
r0 = getattr(all_na, name)(axis=0)
1272912732
r1 = getattr(all_na, name)(axis=1)
12730-
self.assertTrue(np.isnan(r0).all())
12731-
self.assertTrue(np.isnan(r1).all())
12733+
if not tm._incompat_bottleneck_version(name):
12734+
self.assertTrue(np.isnan(r0).all())
12735+
self.assertTrue(np.isnan(r1).all())
1273212736

1273312737
def test_mode(self):
1273412738
df = pd.DataFrame({"A": [12, 12, 11, 12, 19, 11],

pandas/tests/test_groupby.py

+17-13
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,10 @@ def test_cythonized_aggers(self):
20142014
df = DataFrame(data)
20152015
df.loc[2:10:2,'C'] = nan
20162016

2017-
def _testit(op):
2017+
def _testit(name):
2018+
2019+
op = lambda x: getattr(x,name)()
2020+
20182021
# single column
20192022
grouped = df.drop(['B'], axis=1).groupby('A')
20202023
exp = {}
@@ -2035,18 +2038,19 @@ def _testit(op):
20352038
exp.name = 'C'
20362039

20372040
result = op(grouped)['C']
2038-
assert_series_equal(result, exp)
2039-
2040-
_testit(lambda x: x.count())
2041-
_testit(lambda x: x.sum())
2042-
_testit(lambda x: x.std())
2043-
_testit(lambda x: x.var())
2044-
_testit(lambda x: x.sem())
2045-
_testit(lambda x: x.mean())
2046-
_testit(lambda x: x.median())
2047-
_testit(lambda x: x.prod())
2048-
_testit(lambda x: x.min())
2049-
_testit(lambda x: x.max())
2041+
if not tm._incompat_bottleneck_version(name):
2042+
assert_series_equal(result, exp)
2043+
2044+
_testit('count')
2045+
_testit('sum')
2046+
_testit('std')
2047+
_testit('var')
2048+
_testit('sem')
2049+
_testit('mean')
2050+
_testit('median')
2051+
_testit('prod')
2052+
_testit('min')
2053+
_testit('max')
20502054

20512055
def test_max_min_non_numeric(self):
20522056
# #2700

pandas/tests/test_panel.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ def wrapper(x):
168168

169169
for i in range(obj.ndim):
170170
result = f(axis=i)
171-
assert_frame_equal(result, obj.apply(skipna_wrapper, axis=i))
171+
if not tm._incompat_bottleneck_version(name):
172+
assert_frame_equal(result, obj.apply(skipna_wrapper, axis=i))
172173

173174
self.assertRaises(Exception, f, axis=obj.ndim)
174175

pandas/tests/test_panel4d.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ def wrapper(x):
144144

145145
for i in range(obj.ndim):
146146
result = f(axis=i)
147-
assert_panel_equal(result, obj.apply(skipna_wrapper, axis=i))
147+
if not tm._incompat_bottleneck_version(name):
148+
assert_panel_equal(result, obj.apply(skipna_wrapper, axis=i))
148149

149150
self.assertRaises(Exception, f, axis=obj.ndim)
150151

pandas/util/testing.py

+32-18
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,38 @@ def _skip_if_python26():
246246
import nose
247247
raise nose.SkipTest("skipping on python2.6")
248248

249+
def _incompat_bottleneck_version(method):
250+
""" skip if we have bottleneck installed
251+
and its >= 1.0
252+
as we don't match the nansum/nanprod behavior for all-nan
253+
ops, see GH9422
254+
"""
255+
if method not in ['sum','prod']:
256+
return False
257+
try:
258+
import bottleneck as bn
259+
return bn.__version__ >= LooseVersion('1.0')
260+
except ImportError:
261+
return False
262+
263+
def skip_if_no_ne(engine='numexpr'):
264+
import nose
265+
_USE_NUMEXPR = pd.computation.expressions._USE_NUMEXPR
266+
267+
if engine == 'numexpr':
268+
try:
269+
import numexpr as ne
270+
except ImportError:
271+
raise nose.SkipTest("numexpr not installed")
272+
273+
if not _USE_NUMEXPR:
274+
raise nose.SkipTest("numexpr disabled")
275+
276+
if ne.__version__ < LooseVersion('2.0'):
277+
raise nose.SkipTest("numexpr version too low: "
278+
"%s" % ne.__version__)
279+
280+
249281

250282
#------------------------------------------------------------------------------
251283
# locale utilities
@@ -1986,24 +2018,6 @@ def assert_produces_warning(expected_warning=Warning, filter_level="always",
19862018
% extra_warnings)
19872019

19882020

1989-
def skip_if_no_ne(engine='numexpr'):
1990-
import nose
1991-
_USE_NUMEXPR = pd.computation.expressions._USE_NUMEXPR
1992-
1993-
if engine == 'numexpr':
1994-
try:
1995-
import numexpr as ne
1996-
except ImportError:
1997-
raise nose.SkipTest("numexpr not installed")
1998-
1999-
if not _USE_NUMEXPR:
2000-
raise nose.SkipTest("numexpr disabled")
2001-
2002-
if ne.__version__ < LooseVersion('2.0'):
2003-
raise nose.SkipTest("numexpr version too low: "
2004-
"%s" % ne.__version__)
2005-
2006-
20072021
def disabled(t):
20082022
t.disabled = True
20092023
return t

0 commit comments

Comments
 (0)