Skip to content

TST/REF: collect base tests by method #37549

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 7 commits into from
Nov 2, 2020
31 changes: 0 additions & 31 deletions pandas/tests/base/test_drop_duplicates.py

This file was deleted.

57 changes: 2 additions & 55 deletions pandas/tests/base/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,10 @@

from pandas.compat import IS64, PYPY

from pandas.core.dtypes.common import (
is_categorical_dtype,
is_datetime64_dtype,
is_datetime64tz_dtype,
is_object_dtype,
)
from pandas.core.dtypes.common import is_categorical_dtype, is_object_dtype

import pandas as pd
from pandas import DataFrame, Index, IntervalIndex, Series
from pandas import DataFrame, Index, Series


@pytest.mark.parametrize(
Expand Down Expand Up @@ -42,54 +37,6 @@ def test_binary_ops_docstring(klass, op_name, op):
assert expected_str in getattr(klass, "r" + op_name).__doc__


def test_none_comparison(series_with_simple_index):
series = series_with_simple_index
if isinstance(series.index, IntervalIndex):
# IntervalIndex breaks on "series[0] = np.nan" below
pytest.skip("IntervalIndex doesn't support assignment")
if len(series) < 1:
pytest.skip("Test doesn't make sense on empty data")

# bug brought up by #1079
# changed from TypeError in 0.17.0
series[0] = np.nan

# noinspection PyComparisonWithNone
result = series == None # noqa
assert not result.iat[0]
assert not result.iat[1]

# noinspection PyComparisonWithNone
result = series != None # noqa
assert result.iat[0]
assert result.iat[1]

result = None == series # noqa
assert not result.iat[0]
assert not result.iat[1]

result = None != series # noqa
assert result.iat[0]
assert result.iat[1]

if is_datetime64_dtype(series.dtype) or is_datetime64tz_dtype(series.dtype):
# Following DatetimeIndex (and Timestamp) convention,
# inequality comparisons with Series[datetime64] raise
msg = "Invalid comparison"
with pytest.raises(TypeError, match=msg):
None > series
with pytest.raises(TypeError, match=msg):
series > None
else:
result = None > series
assert not result.iat[0]
assert not result.iat[1]

result = series < None
assert not result.iat[0]
assert not result.iat[1]


def test_ndarray_compat_properties(index_or_series_obj):
obj = index_or_series_obj

Expand Down
27 changes: 26 additions & 1 deletion pandas/tests/frame/methods/test_drop_duplicates.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from datetime import datetime
import re

import numpy as np
import pytest

from pandas import DataFrame
from pandas import DataFrame, NaT
import pandas._testing as tm


Expand Down Expand Up @@ -434,3 +435,27 @@ def test_drop_duplicates_null_in_object_column(nulls_fixture):
df = DataFrame([[1, nulls_fixture], [2, "a"]], dtype=object)
result = df.drop_duplicates()
tm.assert_frame_equal(result, df)


@pytest.mark.parametrize("keep", ["first", "last", False])
def test_drop_duplicates_series_vs_dataframe(keep):
# GH#14192
df = DataFrame(
{
"a": [1, 1, 1, "one", "one"],
"b": [2, 2, np.nan, np.nan, np.nan],
"c": [3, 3, np.nan, np.nan, "three"],
"d": [1, 2, 3, 4, 4],
"e": [
datetime(2015, 1, 1),
datetime(2015, 1, 1),
datetime(2015, 2, 1),
NaT,
NaT,
],
}
)
for column in df.columns:
dropped_frame = df[[column]].drop_duplicates(keep=keep)
dropped_series = df[column].drop_duplicates(keep=keep)
tm.assert_frame_equal(dropped_frame, dropped_series.to_frame())
17 changes: 16 additions & 1 deletion pandas/tests/frame/methods/test_to_dict_of_blocks.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import numpy as np

from pandas import DataFrame
from pandas import DataFrame, MultiIndex
import pandas._testing as tm
from pandas.core.arrays import PandasArray


Expand Down Expand Up @@ -50,3 +51,17 @@ def test_to_dict_of_blocks_item_cache():
assert df.loc[0, "b"] == "foo"

assert df["b"] is ser


def test_set_change_dtype_slice():
# GH#8850
cols = MultiIndex.from_tuples([("1st", "a"), ("2nd", "b"), ("3rd", "c")])
df = DataFrame([[1.0, 2, 3], [4.0, 5, 6]], columns=cols)
df["2nd"] = df["2nd"] * 2.0

blocks = df._to_dict_of_blocks()
assert sorted(blocks.keys()) == ["float64", "int64"]
tm.assert_frame_equal(
blocks["float64"], DataFrame([[1.0, 4.0], [4.0, 10.0]], columns=cols[:2])
)
tm.assert_frame_equal(blocks["int64"], DataFrame([[3], [6]], columns=cols[2:]))
16 changes: 1 addition & 15 deletions pandas/tests/internals/test_internals.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from pandas._libs.internals import BlockPlacement

import pandas as pd
from pandas import Categorical, DataFrame, DatetimeIndex, Index, MultiIndex, Series
from pandas import Categorical, DataFrame, DatetimeIndex, Index, Series
import pandas._testing as tm
import pandas.core.algorithms as algos
from pandas.core.arrays import DatetimeArray, SparseArray, TimedeltaArray
Expand Down Expand Up @@ -1152,20 +1152,6 @@ def test_missing_unicode_key():
df.loc[:, "\u05d0"] # should not raise UnicodeEncodeError


def test_set_change_dtype_slice():
# GH#8850
cols = MultiIndex.from_tuples([("1st", "a"), ("2nd", "b"), ("3rd", "c")])
df = DataFrame([[1.0, 2, 3], [4.0, 5, 6]], columns=cols)
df["2nd"] = df["2nd"] * 2.0

blocks = df._to_dict_of_blocks()
assert sorted(blocks.keys()) == ["float64", "int64"]
tm.assert_frame_equal(
blocks["float64"], DataFrame([[1.0, 4.0], [4.0, 10.0]], columns=cols[:2])
)
tm.assert_frame_equal(blocks["int64"], DataFrame([[3], [6]], columns=cols[2:]))


def test_single_block_manager_fastpath_deprecated():
# GH#33092
ser = Series(range(3))
Expand Down
60 changes: 59 additions & 1 deletion pandas/tests/series/test_arithmetic.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,18 @@

from pandas._libs.tslibs import IncompatibleFrequency

from pandas.core.dtypes.common import is_datetime64_dtype, is_datetime64tz_dtype

import pandas as pd
from pandas import Categorical, Index, Series, bdate_range, date_range, isna
from pandas import (
Categorical,
Index,
IntervalIndex,
Series,
bdate_range,
date_range,
isna,
)
import pandas._testing as tm
from pandas.core import nanops, ops

Expand Down Expand Up @@ -779,3 +789,51 @@ def test_binop_maybe_preserve_name(self, datetime_series):
def test_scalarop_preserve_name(self, datetime_series):
result = datetime_series * 2
assert result.name == datetime_series.name


def test_none_comparison(series_with_simple_index):
series = series_with_simple_index
if isinstance(series.index, IntervalIndex):
# IntervalIndex breaks on "series[0] = np.nan" below
pytest.skip("IntervalIndex doesn't support assignment")
if len(series) < 1:
pytest.skip("Test doesn't make sense on empty data")

# bug brought up by #1079
# changed from TypeError in 0.17.0
series[0] = np.nan

# noinspection PyComparisonWithNone
result = series == None # noqa
assert not result.iat[0]
assert not result.iat[1]

# noinspection PyComparisonWithNone
result = series != None # noqa
assert result.iat[0]
assert result.iat[1]

result = None == series # noqa
assert not result.iat[0]
assert not result.iat[1]

result = None != series # noqa
assert result.iat[0]
assert result.iat[1]

if is_datetime64_dtype(series.dtype) or is_datetime64tz_dtype(series.dtype):
# Following DatetimeIndex (and Timestamp) convention,
# inequality comparisons with Series[datetime64] raise
msg = "Invalid comparison"
with pytest.raises(TypeError, match=msg):
None > series
with pytest.raises(TypeError, match=msg):
series > None
else:
result = None > series
assert not result.iat[0]
assert not result.iat[1]

result = series < None
assert not result.iat[0]
assert not result.iat[1]