Skip to content

Commit

Permalink
Change tests away from classes; reorder conftest.py
Browse files Browse the repository at this point in the history
  • Loading branch information
h-vetinari committed Jul 14, 2018
1 parent 92d708c commit 12d2888
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 145 deletions.
33 changes: 15 additions & 18 deletions pandas/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,19 @@ def tz_aware_fixture(request):
return request.param


@pytest.fixture(params=[str, 'str', 'U'])
UNSIGNED_INT_DTYPES = ["uint8", "uint16", "uint32", "uint64"]
SIGNED_INT_DTYPES = [int, "int8", "int16", "int32", "int64"]
ALL_INT_DTYPES = UNSIGNED_INT_DTYPES + SIGNED_INT_DTYPES

FLOAT_DTYPES = [float, "float32", "float64"]
COMPLEX_DTYPES = [complex, "complex64", "complex128"]
STRING_DTYPES = [str, 'str', 'U']

ALL_REAL_DTYPES = FLOAT_DTYPES + ALL_INT_DTYPES
ALL_NUMPY_DTYPES = ALL_REAL_DTYPES + STRING_DTYPES + COMPLEX_DTYPES


@pytest.fixture(params=STRING_DTYPES)
def string_dtype(request):
"""Parametrized fixture for string dtypes.
Expand All @@ -259,9 +271,6 @@ def string_dtype(request):
return request.param


FLOAT_DTYPES = [float, "float32", "float64"]


@pytest.fixture(params=FLOAT_DTYPES)
def float_dtype(request):
"""
Expand All @@ -274,7 +283,7 @@ def float_dtype(request):
return request.param


@pytest.fixture(params=[complex, "complex64", "complex128"])
@pytest.fixture(params=COMPLEX_DTYPES)
def complex_dtype(request):
"""
Parameterized fixture for complex dtypes.
Expand All @@ -286,11 +295,6 @@ def complex_dtype(request):
return request.param


UNSIGNED_INT_DTYPES = ["uint8", "uint16", "uint32", "uint64"]
SIGNED_INT_DTYPES = [int, "int8", "int16", "int32", "int64"]
ALL_INT_DTYPES = UNSIGNED_INT_DTYPES + SIGNED_INT_DTYPES


@pytest.fixture(params=SIGNED_INT_DTYPES)
def sint_dtype(request):
"""
Expand Down Expand Up @@ -337,13 +341,6 @@ def any_int_dtype(request):
return request.param


FLOAT_DTYPES = [float, "float32", "float64"]
COMPLEX_DTYPES = [complex, "complex64", "complex128"]
STRING_DTYPES = [str, 'str', 'U']
ALL_REAL_DTYPES = FLOAT_DTYPES + ALL_INT_DTYPES
ALL_NUMPY_DTYPES = ALL_REAL_DTYPES + STRING_DTYPES + COMPLEX_DTYPES


@pytest.fixture(params=ALL_REAL_DTYPES)
def any_real_dtype(request):
"""
Expand All @@ -367,7 +364,7 @@ def any_real_dtype(request):
@pytest.fixture(params=ALL_NUMPY_DTYPES)
def any_numpy_dtype(request):
"""
Parameterized fixture for any integer dtypes.
Parameterized fixture for any numpy dtypes.
* int8
* uint8
Expand Down
257 changes: 130 additions & 127 deletions pandas/tests/series/test_duplicates.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,133 +10,136 @@

from pandas.util.testing import assert_series_equal
import pandas.util.testing as tm
from .common import TestData


class TestSeriesDuplicates(TestData):

def test_value_counts_nunique(self):

# basics.rst doc example
series = Series(np.random.randn(500))
series[20:500] = np.nan
series[10:20] = 5000
result = series.nunique()
assert result == 11

# GH 18051
s = pd.Series(pd.Categorical([]))
assert s.nunique() == 0
s = pd.Series(pd.Categorical([np.nan]))
assert s.nunique() == 0

def test_unique(self):

# 714 also, dtype=float
s = Series([1.2345] * 100)
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

s = Series([1.2345] * 100, dtype='f4')
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

# NAs in object arrays #714
s = Series(['foo'] * 100, dtype='O')
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

# decision about None
s = Series([1, 2, 3, None, None, None], dtype=object)
result = s.unique()
expected = np.array([1, 2, 3, None], dtype=object)
tm.assert_numpy_array_equal(result, expected)

# GH 18051
s = pd.Series(pd.Categorical([]))
tm.assert_categorical_equal(s.unique(), pd.Categorical([]),
check_dtype=False)
s = pd.Series(pd.Categorical([np.nan]))
tm.assert_categorical_equal(s.unique(), pd.Categorical([np.nan]),
check_dtype=False)

def test_unique_data_ownership(self):
# it works! #1807
Series(Series(["a", "c", "b"]).unique()).sort_values()

def test_is_unique(self):
# GH11946
s = Series(np.random.randint(0, 10, size=1000))
assert not s.is_unique
s = Series(np.arange(1000))
assert s.is_unique

def test_is_unique_class_ne(self, capsys):
# GH 20661
class Foo(object):
def __init__(self, val):
self._value = val

def __ne__(self, other):
raise Exception("NEQ not supported")

li = [Foo(i) for i in range(5)]
s = pd.Series(li, index=[i for i in range(5)])
_, err = capsys.readouterr()
s.is_unique
_, err = capsys.readouterr()
assert len(err) == 0

@pytest.mark.parametrize(
'keep, expected',
[
('first', Series([False, False, False, False, True, True, False])),
('last', Series([False, True, True, False, False, False, False])),
(False, Series([False, True, True, False, True, True, False]))
])
def test_drop_duplicates_non_bool(self, any_numpy_dtype, keep, expected):
tc = Series([1, 2, 3, 5, 3, 2, 4], dtype=np.dtype(any_numpy_dtype))

assert_series_equal(tc.duplicated(keep=keep), expected)
assert_series_equal(tc.drop_duplicates(keep=keep), tc[~expected])
sc = tc.copy()
sc.drop_duplicates(keep=keep, inplace=True)
assert_series_equal(sc, tc[~expected])

@pytest.mark.parametrize('keep, expected',
[('first', Series([False, False, True, True])),
('last', Series([True, True, False, False])),
(False, Series([True, True, True, True]))])
def test_drop_duplicates_bool(self, keep, expected):
tc = Series([True, False, True, False])

assert_series_equal(tc.duplicated(keep=keep), expected)
assert_series_equal(tc.drop_duplicates(keep=keep), tc[~expected])
sc = tc.copy()
sc.drop_duplicates(keep=keep, inplace=True)
assert_series_equal(sc, tc[~expected])

@pytest.mark.parametrize('keep, expected', [
('first', Series([False, False, True, False, True], name='name')),
('last', Series([True, True, False, False, False], name='name')),
(False, Series([True, True, True, False, True], name='name'))
])
def test_duplicated_keep(self, keep, expected):
s = Series(['a', 'b', 'b', 'c', 'a'], name='name')

result = s.duplicated(keep=keep)
tm.assert_series_equal(result, expected)

@pytest.mark.parametrize('keep, expected', [
('first', Series([False, False, True, False, True])),
('last', Series([True, True, False, False, False])),
(False, Series([True, True, True, False, True]))
def test_value_counts_nunique():
# basics.rst doc example
series = Series(np.random.randn(500))
series[20:500] = np.nan
series[10:20] = 5000
result = series.nunique()
assert result == 11

# GH 18051
s = pd.Series(pd.Categorical([]))
assert s.nunique() == 0
s = pd.Series(pd.Categorical([np.nan]))
assert s.nunique() == 0


def test_unique():
# GH714 also, dtype=float
s = Series([1.2345] * 100)
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

s = Series([1.2345] * 100, dtype='f4')
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

# NAs in object arrays #714
s = Series(['foo'] * 100, dtype='O')
s[::2] = np.nan
result = s.unique()
assert len(result) == 2

# decision about None
s = Series([1, 2, 3, None, None, None], dtype=object)
result = s.unique()
expected = np.array([1, 2, 3, None], dtype=object)
tm.assert_numpy_array_equal(result, expected)

# GH 18051
s = pd.Series(pd.Categorical([]))
tm.assert_categorical_equal(s.unique(), pd.Categorical([]),
check_dtype=False)
s = pd.Series(pd.Categorical([np.nan]))
tm.assert_categorical_equal(s.unique(), pd.Categorical([np.nan]),
check_dtype=False)


def test_unique_data_ownership():
# it works! #1807
Series(Series(["a", "c", "b"]).unique()).sort_values()


def test_is_unique():
# GH11946
s = Series(np.random.randint(0, 10, size=1000))
assert not s.is_unique
s = Series(np.arange(1000))
assert s.is_unique


def test_is_unique_class_ne(capsys):
# GH 20661
class Foo(object):
def __init__(self, val):
self._value = val

def __ne__(self, other):
raise Exception("NEQ not supported")

li = [Foo(i) for i in range(5)]
s = pd.Series(li, index=[i for i in range(5)])
_, err = capsys.readouterr()
s.is_unique
_, err = capsys.readouterr()
assert len(err) == 0


@pytest.mark.parametrize(
'keep, expected',
[
('first', Series([False, False, False, False, True, True, False])),
('last', Series([False, True, True, False, False, False, False])),
(False, Series([False, True, True, False, True, True, False]))
])
def test_duplicated_nan_none(self, keep, expected):
s = Series([np.nan, 3, 3, None, np.nan], dtype=object)

result = s.duplicated(keep=keep)
tm.assert_series_equal(result, expected)
def test_drop_duplicates_non_bool(any_numpy_dtype, keep, expected):
tc = Series([1, 2, 3, 5, 3, 2, 4], dtype=np.dtype(any_numpy_dtype))

assert_series_equal(tc.duplicated(keep=keep), expected)
assert_series_equal(tc.drop_duplicates(keep=keep), tc[~expected])
sc = tc.copy()
sc.drop_duplicates(keep=keep, inplace=True)
assert_series_equal(sc, tc[~expected])


@pytest.mark.parametrize('keep, expected',
[('first', Series([False, False, True, True])),
('last', Series([True, True, False, False])),
(False, Series([True, True, True, True]))])
def test_drop_duplicates_bool(keep, expected):
tc = Series([True, False, True, False])

assert_series_equal(tc.duplicated(keep=keep), expected)
assert_series_equal(tc.drop_duplicates(keep=keep), tc[~expected])
sc = tc.copy()
sc.drop_duplicates(keep=keep, inplace=True)
assert_series_equal(sc, tc[~expected])


@pytest.mark.parametrize('keep, expected', [
('first', Series([False, False, True, False, True], name='name')),
('last', Series([True, True, False, False, False], name='name')),
(False, Series([True, True, True, False, True], name='name'))
])
def test_duplicated_keep(keep, expected):
s = Series(['a', 'b', 'b', 'c', 'a'], name='name')

result = s.duplicated(keep=keep)
tm.assert_series_equal(result, expected)


@pytest.mark.parametrize('keep, expected', [
('first', Series([False, False, True, False, True])),
('last', Series([True, True, False, False, False])),
(False, Series([True, True, True, False, True]))
])
def test_duplicated_nan_none(keep, expected):
s = Series([np.nan, 3, 3, None, np.nan], dtype=object)

result = s.duplicated(keep=keep)
tm.assert_series_equal(result, expected)

0 comments on commit 12d2888

Please sign in to comment.