From 46af199856b03c5af22063d276ee283dadc1acab Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Tue, 24 Mar 2020 18:31:14 -0700 Subject: [PATCH 1/2] REF: indexing tests --- .../tests/indexes/datetimes/test_datetime.py | 8 +++++- pandas/tests/indexing/test_indexers.py | 25 ++++++++++++++++++- pandas/tests/indexing/test_indexing.py | 25 ------------------- pandas/tests/series/indexing/test_datetime.py | 21 ---------------- pandas/tests/series/indexing/test_setitem.py | 19 ++++++++++++++ 5 files changed, 50 insertions(+), 48 deletions(-) create mode 100644 pandas/tests/series/indexing/test_setitem.py diff --git a/pandas/tests/indexes/datetimes/test_datetime.py b/pandas/tests/indexes/datetimes/test_datetime.py index 1529a259c49af..1628b9af9dacd 100644 --- a/pandas/tests/indexes/datetimes/test_datetime.py +++ b/pandas/tests/indexes/datetimes/test_datetime.py @@ -1,4 +1,4 @@ -from datetime import date +from datetime import date, datetime import dateutil import numpy as np @@ -426,3 +426,9 @@ def test_split_non_utc(self): expected = indices.copy() expected._set_freq(None) tm.assert_index_equal(result, expected) + + +def test_dti_contains_with_duplicates(): + d = datetime(2011, 12, 5, 20, 30) + ix = DatetimeIndex([d, d]) + assert d in ix diff --git a/pandas/tests/indexing/test_indexers.py b/pandas/tests/indexing/test_indexers.py index 35c0c06e86099..744f9441e7376 100644 --- a/pandas/tests/indexing/test_indexers.py +++ b/pandas/tests/indexing/test_indexers.py @@ -1,7 +1,8 @@ # Tests aimed at pandas.core.indexers import numpy as np +import pytest -from pandas.core.indexers import is_scalar_indexer, length_of_indexer +from pandas.core.indexers import is_scalar_indexer, length_of_indexer, validate_indices def test_length_of_indexer(): @@ -26,3 +27,25 @@ def test_is_scalar_indexer(): assert not is_scalar_indexer(indexer, 2) assert not is_scalar_indexer(slice(None), 1) + + +class TestValidateIndices: + def test_validate_indices_ok(self): + indices = np.asarray([0, 1]) + validate_indices(indices, 2) + validate_indices(indices[:0], 0) + validate_indices(np.array([-1, -1]), 0) + + def test_validate_indices_low(self): + indices = np.asarray([0, -2]) + with pytest.raises(ValueError, match="'indices' contains"): + validate_indices(indices, 2) + + def test_validate_indices_high(self): + indices = np.asarray([0, 1, 2]) + with pytest.raises(IndexError, match="indices are out"): + validate_indices(indices, 2) + + def test_validate_indices_empty(self): + with pytest.raises(IndexError, match="indices are out"): + validate_indices(np.array([0, 1]), 0) diff --git a/pandas/tests/indexing/test_indexing.py b/pandas/tests/indexing/test_indexing.py index a8a21b0610c14..7f892611281bc 100644 --- a/pandas/tests/indexing/test_indexing.py +++ b/pandas/tests/indexing/test_indexing.py @@ -12,7 +12,6 @@ import pandas as pd from pandas import DataFrame, Index, NaT, Series import pandas._testing as tm -from pandas.core.indexers import validate_indices from pandas.core.indexing import _maybe_numeric_slice, _non_reducing_slice from pandas.tests.indexing.common import _mklbl @@ -1051,30 +1050,6 @@ def test_none_coercion_mixed_dtypes(self): tm.assert_frame_equal(start_dataframe, exp) -def test_validate_indices_ok(): - indices = np.asarray([0, 1]) - validate_indices(indices, 2) - validate_indices(indices[:0], 0) - validate_indices(np.array([-1, -1]), 0) - - -def test_validate_indices_low(): - indices = np.asarray([0, -2]) - with pytest.raises(ValueError, match="'indices' contains"): - validate_indices(indices, 2) - - -def test_validate_indices_high(): - indices = np.asarray([0, 1, 2]) - with pytest.raises(IndexError, match="indices are out"): - validate_indices(indices, 2) - - -def test_validate_indices_empty(): - with pytest.raises(IndexError, match="indices are out"): - validate_indices(np.array([0, 1]), 0) - - def test_extension_array_cross_section(): # A cross-section of a homogeneous EA should be an EA df = pd.DataFrame( diff --git a/pandas/tests/series/indexing/test_datetime.py b/pandas/tests/series/indexing/test_datetime.py index b5d04fd499c08..397a583ff6f46 100644 --- a/pandas/tests/series/indexing/test_datetime.py +++ b/pandas/tests/series/indexing/test_datetime.py @@ -464,12 +464,6 @@ def test_index_unique(dups): assert idx.nunique(dropna=False) == 21 -def test_index_dupes_contains(): - d = datetime(2011, 12, 5, 20, 30) - ix = DatetimeIndex([d, d]) - assert d in ix - - def test_duplicate_dates_indexing(dups): ts = dups @@ -690,21 +684,6 @@ def test_indexing(): """ -def test_set_none_nan(): - series = Series(date_range("1/1/2000", periods=10)) - series[3] = None - assert series[3] is NaT - - series[3:5] = None - assert series[4] is NaT - - series[5] = np.nan - assert series[5] is NaT - - series[5:7] = np.nan - assert series[6] is NaT - - def test_nat_operations(): # GH 8617 s = Series([0, pd.NaT], dtype="m8[ns]") diff --git a/pandas/tests/series/indexing/test_setitem.py b/pandas/tests/series/indexing/test_setitem.py new file mode 100644 index 0000000000000..3463de25ad91b --- /dev/null +++ b/pandas/tests/series/indexing/test_setitem.py @@ -0,0 +1,19 @@ +import numpy as np + +from pandas import NaT, Series, date_range + + +class TestSetitemDT64Values: + def test_setitem_none_nan(self): + series = Series(date_range("1/1/2000", periods=10)) + series[3] = None + assert series[3] is NaT + + series[3:5] = None + assert series[4] is NaT + + series[5] = np.nan + assert series[5] is NaT + + series[5:7] = np.nan + assert series[6] is NaT From d3443b8225152bd491194c2518400e5338d3de04 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Wed, 25 Mar 2020 14:55:50 -0700 Subject: [PATCH 2/2] REF: misplaced DTI.contains test --- pandas/tests/indexes/datetimes/test_datetime.py | 8 +------- pandas/tests/indexes/datetimes/test_indexing.py | 7 +++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pandas/tests/indexes/datetimes/test_datetime.py b/pandas/tests/indexes/datetimes/test_datetime.py index 1628b9af9dacd..1529a259c49af 100644 --- a/pandas/tests/indexes/datetimes/test_datetime.py +++ b/pandas/tests/indexes/datetimes/test_datetime.py @@ -1,4 +1,4 @@ -from datetime import date, datetime +from datetime import date import dateutil import numpy as np @@ -426,9 +426,3 @@ def test_split_non_utc(self): expected = indices.copy() expected._set_freq(None) tm.assert_index_equal(result, expected) - - -def test_dti_contains_with_duplicates(): - d = datetime(2011, 12, 5, 20, 30) - ix = DatetimeIndex([d, d]) - assert d in ix diff --git a/pandas/tests/indexes/datetimes/test_indexing.py b/pandas/tests/indexes/datetimes/test_indexing.py index 5882f5c77428b..0df8f7f47f617 100644 --- a/pandas/tests/indexes/datetimes/test_indexing.py +++ b/pandas/tests/indexes/datetimes/test_indexing.py @@ -476,6 +476,13 @@ def test_get_loc_reasonable_key_error(self): index.get_loc("1/1/2000") +class TestContains: + def test_dti_contains_with_duplicates(self): + d = datetime(2011, 12, 5, 20, 30) + ix = DatetimeIndex([d, d]) + assert d in ix + + class TestDatetimeIndex: @pytest.mark.parametrize( "null", [None, np.nan, np.datetime64("NaT"), pd.NaT, pd.NA]