Skip to content

CLN: introduce test decorator skip_if_np_lt(ver_string) #26901

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from Jun 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions pandas/compat/numpy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
""" support numpy compatiblitiy across versions """

import re
import numpy as np
from distutils.version import LooseVersion
import re

import numpy as np

# numpy versioning
_np_version = np.__version__
Expand Down Expand Up @@ -62,6 +62,7 @@ def np_array_datetime64_compat(arr, *args, **kwargs):


__all__ = ['np',
'_np_version',
'_np_version_under1p14',
'_np_version_under1p15',
'_np_version_under1p16',
Expand Down
9 changes: 4 additions & 5 deletions pandas/tests/arrays/sparse/test_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import pytest

from pandas._libs.sparse import IntIndex
from pandas.compat.numpy import _np_version_under1p16
import pandas.util._test_decorators as td

import pandas as pd
Expand Down Expand Up @@ -175,8 +174,8 @@ def test_constructor_inferred_fill_value(self, data, fill_value):
@pytest.mark.parametrize('format', ['coo', 'csc', 'csr'])
@pytest.mark.parametrize('size', [
pytest.param(0,
marks=pytest.mark.skipif(_np_version_under1p16,
reason='NumPy-11383')),
marks=td.skip_if_np_lt("1.16",
reason='NumPy-11383')),
10
])
@td.skip_if_no_scipy
Expand Down Expand Up @@ -870,7 +869,7 @@ def test_all(self, data, pos, neg):
([1, 2, 1], 1, 0),
([1.0, 2.0, 1.0], 1.0, 0.0)
])
@td.skip_if_np_lt_115 # prior didn't dispatch
@td.skip_if_np_lt("1.15") # prior didn't dispatch
def test_numpy_all(self, data, pos, neg):
# GH 17570
out = np.all(SparseArray(data))
Expand Down Expand Up @@ -916,7 +915,7 @@ def test_any(self, data, pos, neg):
([0, 2, 0], 2, 0),
([0.0, 2.0, 0.0], 2.0, 0.0)
])
@td.skip_if_np_lt_115 # prior didn't dispatch
@td.skip_if_np_lt("1.15") # prior didn't dispatch
def test_numpy_any(self, data, pos, neg):
# GH 17570
out = np.any(SparseArray(data))
Expand Down
16 changes: 8 additions & 8 deletions pandas/tests/frame/test_analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -1565,21 +1565,21 @@ def test_any_all_bool_only(self):
(np.all, {'A': pd.Series([0, 1], dtype=int)}, False),
(np.any, {'A': pd.Series([0, 1], dtype=int)}, True),
pytest.param(np.all, {'A': pd.Series([0, 1], dtype='M8[ns]')}, False,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.any, {'A': pd.Series([0, 1], dtype='M8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.all, {'A': pd.Series([1, 2], dtype='M8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.any, {'A': pd.Series([1, 2], dtype='M8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.all, {'A': pd.Series([0, 1], dtype='m8[ns]')}, False,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.any, {'A': pd.Series([0, 1], dtype='m8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.all, {'A': pd.Series([1, 2], dtype='m8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
pytest.param(np.any, {'A': pd.Series([1, 2], dtype='m8[ns]')}, True,
marks=[td.skip_if_np_lt_115]),
marks=[td.skip_if_np_lt("1.15")]),
(np.all, {'A': pd.Series([0, 1], dtype='category')}, False),
(np.any, {'A': pd.Series([0, 1], dtype='category')}, True),
(np.all, {'A': pd.Series([1, 2], dtype='category')}, True),
Expand Down
6 changes: 3 additions & 3 deletions pandas/tests/series/test_analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -1105,7 +1105,7 @@ def test_value_counts_categorical_not_ordered(self):
dict(keepdims=True),
dict(out=object()),
])
@td.skip_if_np_lt_115
@td.skip_if_np_lt("1.15")
def test_validate_any_all_out_keepdims_raises(self, kwargs, func):
s = pd.Series([1, 2])
param = list(kwargs)[0]
Expand All @@ -1117,7 +1117,7 @@ def test_validate_any_all_out_keepdims_raises(self, kwargs, func):
with pytest.raises(ValueError, match=msg):
func(s, **kwargs)

@td.skip_if_np_lt_115
@td.skip_if_np_lt("1.15")
def test_validate_sum_initial(self):
s = pd.Series([1, 2])
msg = (r"the 'initial' parameter is not "
Expand All @@ -1136,7 +1136,7 @@ def test_validate_median_initial(self):
# method instead of the ufunc.
s.median(overwrite_input=True)

@td.skip_if_np_lt_115
@td.skip_if_np_lt("1.15")
def test_validate_stat_keepdims(self):
s = pd.Series([1, 2])
msg = (r"the 'keepdims' parameter is not "
Expand Down
12 changes: 9 additions & 3 deletions pandas/util/_test_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ def test_foo():

For more information, refer to the ``pytest`` documentation on ``skipif``.
"""
from distutils.version import LooseVersion
import locale
from typing import Optional

from _pytest.mark.structures import MarkDecorator
import pytest

from pandas.compat import is_platform_32bit, is_platform_windows
from pandas.compat.numpy import _np_version_under1p15
from pandas.compat.numpy import _np_version

from pandas.core.computation.expressions import (
_NUMEXPR_INSTALLED, _USE_NUMEXPR)
Expand Down Expand Up @@ -142,8 +143,6 @@ def skip_if_no(

skip_if_no_mpl = pytest.mark.skipif(_skip_if_no_mpl(),
reason="Missing matplotlib dependency")
skip_if_np_lt_115 = pytest.mark.skipif(_np_version_under1p15,
reason="NumPy 1.15 or greater required")
skip_if_mpl = pytest.mark.skipif(not _skip_if_no_mpl(),
reason="matplotlib is present")
skip_if_32bit = pytest.mark.skipif(is_platform_32bit(),
Expand All @@ -168,6 +167,13 @@ def skip_if_no(
installed=_NUMEXPR_INSTALLED))


def skip_if_np_lt(ver_str, reason=None, *args, **kwds):
if reason is None:
reason = "NumPy %s or greater required" % ver_str
return pytest.mark.skipif(_np_version < LooseVersion(ver_str),
reason=reason, *args, **kwds)


def parametrize_fixture_doc(*args):
"""
Intended for use as a decorator for parametrized fixture,
Expand Down