Best JavaScript code snippet using ng-mocks
test_base.py
Source:test_base.py  
...57            tuples=MultiIndex.from_tuples(zip(["foo", "bar", "baz"], [1, 2, 3])),58            repeats=Index([0, 0, 1, 1, 2, 2]),59        )60        self.setup_indices()61    def create_index(self):62        return Index(list("abcde"))63    def generate_index_types(self, skip_index_keys=[]):64        """65        Return a generator of the various index types, leaving66        out the ones with a key in skip_index_keys67        """68        for key, index in self.indices.items():69            if key not in skip_index_keys:70                yield key, index71    def test_can_hold_identifiers(self):72        index = self.create_index()73        key = index[0]74        assert index._can_hold_identifiers_and_holds_name(key) is True75    def test_new_axis(self):76        new_index = self.dateIndex[None, :]77        assert new_index.ndim == 278        assert isinstance(new_index, np.ndarray)79    def test_copy_and_deepcopy(self):80        new_copy2 = self.intIndex.copy(dtype=int)81        assert new_copy2.dtype.kind == "i"82    @pytest.mark.parametrize("attr", ["strIndex", "dateIndex"])83    def test_constructor_regular(self, attr):84        # regular instance creation85        index = getattr(self, attr)86        tm.assert_contains_all(index, index)87    def test_constructor_casting(self):88        # casting89        arr = np.array(self.strIndex)90        index = Index(arr)91        tm.assert_contains_all(arr, index)92        tm.assert_index_equal(self.strIndex, index)93    def test_constructor_copy(self):94        # copy95        arr = np.array(self.strIndex)96        index = Index(arr, copy=True, name="name")97        assert isinstance(index, Index)98        assert index.name == "name"99        tm.assert_numpy_array_equal(arr, index.values)100        arr[0] = "SOMEBIGLONGSTRING"101        assert index[0] != "SOMEBIGLONGSTRING"102        # what to do here?103        # arr = np.array(5.)104        # pytest.raises(Exception, arr.view, Index)105    def test_constructor_corner(self):106        # corner case107        msg = (108            r"Index\(\.\.\.\) must be called with a collection of some"109            " kind, 0 was passed"110        )111        with pytest.raises(TypeError, match=msg):112            Index(0)113    @pytest.mark.parametrize("index_vals", [[("A", 1), "B"], ["B", ("A", 1)]])114    def test_construction_list_mixed_tuples(self, index_vals):115        # see gh-10697: if we are constructing from a mixed list of tuples,116        # make sure that we are independent of the sorting order.117        index = Index(index_vals)118        assert isinstance(index, Index)119        assert not isinstance(index, MultiIndex)120    @pytest.mark.parametrize("na_value", [None, np.nan])121    @pytest.mark.parametrize("vtype", [list, tuple, iter])122    def test_construction_list_tuples_nan(self, na_value, vtype):123        # GH 18505 : valid tuples containing NaN124        values = [(1, "two"), (3.0, na_value)]125        result = Index(vtype(values))126        expected = MultiIndex.from_tuples(values)127        tm.assert_index_equal(result, expected)128    @pytest.mark.parametrize("cast_as_obj", [True, False])129    @pytest.mark.parametrize(130        "index",131        [132            pd.date_range(133                "2015-01-01 10:00",134                freq="D",135                periods=3,136                tz="US/Eastern",137                name="Green Eggs & Ham",138            ),  # DTI with tz139            pd.date_range("2015-01-01 10:00", freq="D", periods=3),  # DTI no tz140            pd.timedelta_range("1 days", freq="D", periods=3),  # td141            pd.period_range("2015-01-01", freq="D", periods=3),  # period142        ],143    )144    def test_constructor_from_index_dtlike(self, cast_as_obj, index):145        if cast_as_obj:146            result = pd.Index(index.astype(object))147        else:148            result = pd.Index(index)149        tm.assert_index_equal(result, index)150        if isinstance(index, pd.DatetimeIndex):151            assert result.tz == index.tz152            if cast_as_obj:153                # GH#23524 check that Index(dti, dtype=object) does not154                #  incorrectly raise ValueError, and that nanoseconds are not155                #  dropped156                index += pd.Timedelta(nanoseconds=50)157                result = pd.Index(index, dtype=object)158                assert result.dtype == np.object_159                assert list(result) == list(index)160    @pytest.mark.parametrize(161        "index,has_tz",162        [163            (164                pd.date_range("2015-01-01 10:00", freq="D", periods=3, tz="US/Eastern"),165                True,166            ),  # datetimetz167            (pd.timedelta_range("1 days", freq="D", periods=3), False),  # td168            (pd.period_range("2015-01-01", freq="D", periods=3), False),  # period169        ],170    )171    def test_constructor_from_series_dtlike(self, index, has_tz):172        result = pd.Index(pd.Series(index))173        tm.assert_index_equal(result, index)174        if has_tz:175            assert result.tz == index.tz176    @pytest.mark.parametrize("klass", [Index, DatetimeIndex])177    def test_constructor_from_series(self, klass):178        expected = DatetimeIndex(179            [Timestamp("20110101"), Timestamp("20120101"), Timestamp("20130101")]180        )181        s = Series(182            [Timestamp("20110101"), Timestamp("20120101"), Timestamp("20130101")]183        )184        result = klass(s)185        tm.assert_index_equal(result, expected)186    def test_constructor_from_series_freq(self):187        # GH 6273188        # create from a series, passing a freq189        dts = ["1-1-1990", "2-1-1990", "3-1-1990", "4-1-1990", "5-1-1990"]190        expected = DatetimeIndex(dts, freq="MS")191        s = Series(pd.to_datetime(dts))192        result = DatetimeIndex(s, freq="MS")193        tm.assert_index_equal(result, expected)194    def test_constructor_from_frame_series_freq(self):195        # GH 6273196        # create from a series, passing a freq197        dts = ["1-1-1990", "2-1-1990", "3-1-1990", "4-1-1990", "5-1-1990"]198        expected = DatetimeIndex(dts, freq="MS")199        df = pd.DataFrame(np.random.rand(5, 3))200        df["date"] = dts201        result = DatetimeIndex(df["date"], freq="MS")202        assert df["date"].dtype == object203        expected.name = "date"204        tm.assert_index_equal(result, expected)205        expected = pd.Series(dts, name="date")206        tm.assert_series_equal(df["date"], expected)207        # GH 6274208        # infer freq of same209        freq = pd.infer_freq(df["date"])210        assert freq == "MS"211    @pytest.mark.parametrize(212        "array",213        [214            np.arange(5),215            np.array(["a", "b", "c"]),216            date_range("2000-01-01", periods=3).values,217        ],218    )219    def test_constructor_ndarray_like(self, array):220        # GH 5460#issuecomment-44474502221        # it should be possible to convert any object that satisfies the numpy222        # ndarray interface directly into an Index223        class ArrayLike:224            def __init__(self, array):225                self.array = array226            def __array__(self, dtype=None):227                return self.array228        expected = pd.Index(array)229        result = pd.Index(ArrayLike(array))230        tm.assert_index_equal(result, expected)231    @pytest.mark.parametrize(232        "dtype",233        [int, "int64", "int32", "int16", "int8", "uint64", "uint32", "uint16", "uint8"],234    )235    def test_constructor_int_dtype_float(self, dtype):236        # GH 18400237        if is_unsigned_integer_dtype(dtype):238            index_type = UInt64Index239        else:240            index_type = Int64Index241        expected = index_type([0, 1, 2, 3])242        result = Index([0.0, 1.0, 2.0, 3.0], dtype=dtype)243        tm.assert_index_equal(result, expected)244    def test_constructor_int_dtype_nan(self):245        # see gh-15187246        data = [np.nan]247        expected = Float64Index(data)248        result = Index(data, dtype="float")249        tm.assert_index_equal(result, expected)250    @pytest.mark.parametrize("dtype", ["int64", "uint64"])251    def test_constructor_int_dtype_nan_raises(self, dtype):252        # see gh-15187253        data = [np.nan]254        msg = "cannot convert"255        with pytest.raises(ValueError, match=msg):256            Index(data, dtype=dtype)257    def test_constructor_no_pandas_array(self):258        ser = pd.Series([1, 2, 3])259        result = pd.Index(ser.array)260        expected = pd.Index([1, 2, 3])261        tm.assert_index_equal(result, expected)262    @pytest.mark.parametrize(263        "klass,dtype,na_val",264        [265            (pd.Float64Index, np.float64, np.nan),266            (pd.DatetimeIndex, "datetime64[ns]", pd.NaT),267        ],268    )269    def test_index_ctor_infer_nan_nat(self, klass, dtype, na_val):270        # GH 13467271        na_list = [na_val, na_val]272        expected = klass(na_list)273        assert expected.dtype == dtype274        result = Index(na_list)275        tm.assert_index_equal(result, expected)276        result = Index(np.array(na_list))277        tm.assert_index_equal(result, expected)278    @pytest.mark.parametrize("pos", [0, 1])279    @pytest.mark.parametrize(280        "klass,dtype,ctor",281        [282            (pd.DatetimeIndex, "datetime64[ns]", np.datetime64("nat")),283            (pd.TimedeltaIndex, "timedelta64[ns]", np.timedelta64("nat")),284        ],285    )286    def test_index_ctor_infer_nat_dt_like(self, pos, klass, dtype, ctor, nulls_fixture):287        expected = klass([pd.NaT, pd.NaT])288        assert expected.dtype == dtype289        data = [ctor]290        data.insert(pos, nulls_fixture)291        result = Index(data)292        tm.assert_index_equal(result, expected)293        result = Index(np.array(data, dtype=object))294        tm.assert_index_equal(result, expected)295    @pytest.mark.parametrize("swap_objs", [True, False])296    def test_index_ctor_nat_result(self, swap_objs):297        # mixed np.datetime64/timedelta64 nat results in object298        data = [np.datetime64("nat"), np.timedelta64("nat")]299        if swap_objs:300            data = data[::-1]301        expected = pd.Index(data, dtype=object)302        tm.assert_index_equal(Index(data), expected)303        tm.assert_index_equal(Index(np.array(data, dtype=object)), expected)304    def test_index_ctor_infer_periodindex(self):305        xp = period_range("2012-1-1", freq="M", periods=3)306        rs = Index(xp)307        tm.assert_index_equal(rs, xp)308        assert isinstance(rs, PeriodIndex)309    @pytest.mark.parametrize(310        "vals,dtype",311        [312            ([1, 2, 3, 4, 5], "int"),313            ([1.1, np.nan, 2.2, 3.0], "float"),314            (["A", "B", "C", np.nan], "obj"),315        ],316    )317    def test_constructor_simple_new(self, vals, dtype):318        index = Index(vals, name=dtype)319        result = index._simple_new(index.values, dtype)320        tm.assert_index_equal(result, index)321    @pytest.mark.parametrize(322        "vals",323        [324            [1, 2, 3],325            np.array([1, 2, 3]),326            np.array([1, 2, 3], dtype=int),327            # below should coerce328            [1.0, 2.0, 3.0],329            np.array([1.0, 2.0, 3.0], dtype=float),330        ],331    )332    def test_constructor_dtypes_to_int64(self, vals):333        index = Index(vals, dtype=int)334        assert isinstance(index, Int64Index)335    @pytest.mark.parametrize(336        "vals",337        [338            [1, 2, 3],339            [1.0, 2.0, 3.0],340            np.array([1.0, 2.0, 3.0]),341            np.array([1, 2, 3], dtype=int),342            np.array([1.0, 2.0, 3.0], dtype=float),343        ],344    )345    def test_constructor_dtypes_to_float64(self, vals):346        index = Index(vals, dtype=float)347        assert isinstance(index, Float64Index)348    @pytest.mark.parametrize("cast_index", [True, False])349    @pytest.mark.parametrize(350        "vals", [[True, False, True], np.array([True, False, True], dtype=bool)]351    )352    def test_constructor_dtypes_to_object(self, cast_index, vals):353        if cast_index:354            index = Index(vals, dtype=bool)355        else:356            index = Index(vals)357        assert isinstance(index, Index)358        assert index.dtype == object359    @pytest.mark.parametrize(360        "vals",361        [362            [1, 2, 3],363            np.array([1, 2, 3], dtype=int),364            np.array(365                [np_datetime64_compat("2011-01-01"), np_datetime64_compat("2011-01-02")]366            ),367            [datetime(2011, 1, 1), datetime(2011, 1, 2)],368        ],369    )370    def test_constructor_dtypes_to_categorical(self, vals):371        index = Index(vals, dtype="category")372        assert isinstance(index, CategoricalIndex)373    @pytest.mark.parametrize("cast_index", [True, False])374    @pytest.mark.parametrize(375        "vals",376        [377            Index(378                np.array(379                    [380                        np_datetime64_compat("2011-01-01"),381                        np_datetime64_compat("2011-01-02"),382                    ]383                )384            ),385            Index([datetime(2011, 1, 1), datetime(2011, 1, 2)]),386        ],387    )388    def test_constructor_dtypes_to_datetime(self, cast_index, vals):389        if cast_index:390            index = Index(vals, dtype=object)391            assert isinstance(index, Index)392            assert index.dtype == object393        else:394            index = Index(vals)395            assert isinstance(index, DatetimeIndex)396    @pytest.mark.parametrize("cast_index", [True, False])397    @pytest.mark.parametrize(398        "vals",399        [400            np.array([np.timedelta64(1, "D"), np.timedelta64(1, "D")]),401            [timedelta(1), timedelta(1)],402        ],403    )404    def test_constructor_dtypes_to_timedelta(self, cast_index, vals):405        if cast_index:406            index = Index(vals, dtype=object)407            assert isinstance(index, Index)408            assert index.dtype == object409        else:410            index = Index(vals)411            assert isinstance(index, TimedeltaIndex)412    @pytest.mark.parametrize("attr, utc", [["values", False], ["asi8", True]])413    @pytest.mark.parametrize("klass", [pd.Index, pd.DatetimeIndex])414    def test_constructor_dtypes_datetime(self, tz_naive_fixture, attr, utc, klass):415        # Test constructing with a datetimetz dtype416        # .values produces numpy datetimes, so these are considered naive417        # .asi8 produces integers, so these are considered epoch timestamps418        # ^the above will be true in a later version. Right now we `.view`419        # the i8 values as NS_DTYPE, effectively treating them as wall times.420        index = pd.date_range("2011-01-01", periods=5)421        arg = getattr(index, attr)422        index = index.tz_localize(tz_naive_fixture)423        dtype = index.dtype424        if (425            tz_naive_fixture426            and attr == "asi8"427            and str(tz_naive_fixture) not in ("UTC", "tzutc()", "UTC+00:00")428        ):429            ex_warn = FutureWarning430        else:431            ex_warn = None432        # stacklevel is checked elsewhere. We don't do it here since433        # Index will have an frame, throwing off the expected.434        with tm.assert_produces_warning(ex_warn, check_stacklevel=False):435            result = klass(arg, tz=tz_naive_fixture)436        tm.assert_index_equal(result, index)437        with tm.assert_produces_warning(ex_warn, check_stacklevel=False):438            result = klass(arg, dtype=dtype)439        tm.assert_index_equal(result, index)440        with tm.assert_produces_warning(ex_warn, check_stacklevel=False):441            result = klass(list(arg), tz=tz_naive_fixture)442        tm.assert_index_equal(result, index)443        with tm.assert_produces_warning(ex_warn, check_stacklevel=False):444            result = klass(list(arg), dtype=dtype)445        tm.assert_index_equal(result, index)446    @pytest.mark.parametrize("attr", ["values", "asi8"])447    @pytest.mark.parametrize("klass", [pd.Index, pd.TimedeltaIndex])448    def test_constructor_dtypes_timedelta(self, attr, klass):449        index = pd.timedelta_range("1 days", periods=5)450        dtype = index.dtype451        values = getattr(index, attr)452        result = klass(values, dtype=dtype)453        tm.assert_index_equal(result, index)454        result = klass(list(values), dtype=dtype)455        tm.assert_index_equal(result, index)456    @pytest.mark.parametrize("value", [[], iter([]), (x for x in [])])457    @pytest.mark.parametrize(458        "klass",459        [460            Index,461            Float64Index,462            Int64Index,463            UInt64Index,464            CategoricalIndex,465            DatetimeIndex,466            TimedeltaIndex,467        ],468    )469    def test_constructor_empty(self, value, klass):470        empty = klass(value)471        assert isinstance(empty, klass)472        assert not len(empty)473    @pytest.mark.parametrize(474        "empty,klass",475        [476            (PeriodIndex([], freq="B"), PeriodIndex),477            (PeriodIndex(iter([]), freq="B"), PeriodIndex),478            (PeriodIndex((x for x in []), freq="B"), PeriodIndex),479            (RangeIndex(step=1), pd.RangeIndex),480            (MultiIndex(levels=[[1, 2], ["blue", "red"]], codes=[[], []]), MultiIndex),481        ],482    )483    def test_constructor_empty_special(self, empty, klass):484        assert isinstance(empty, klass)485        assert not len(empty)486    def test_constructor_overflow_int64(self):487        # see gh-15832488        msg = (489            "The elements provided in the data cannot "490            "all be casted to the dtype int64"491        )492        with pytest.raises(OverflowError, match=msg):493            Index([np.iinfo(np.uint64).max - 1], dtype="int64")494    @pytest.mark.xfail(reason="see GH#21311: Index doesn't enforce dtype argument")495    def test_constructor_cast(self):496        msg = "could not convert string to float"497        with pytest.raises(ValueError, match=msg):498            Index(["a", "b", "c"], dtype=float)499    def test_view_with_args(self):500        restricted = ["unicodeIndex", "strIndex", "catIndex", "boolIndex", "empty"]501        for i in list(set(self.indices.keys()) - set(restricted)):502            ind = self.indices[i]503            ind.view("i8")504    @pytest.mark.parametrize(505        "index_type",506        [507            "unicodeIndex",508            "strIndex",509            pytest.param("catIndex", marks=pytest.mark.xfail(reason="gh-25464")),510            "boolIndex",511            "empty",512        ],513    )514    def test_view_with_args_object_array_raises(self, index_type):515        ind = self.indices[index_type]516        msg = "Cannot change data-type for object array"517        with pytest.raises(TypeError, match=msg):518            ind.view("i8")519    def test_astype(self):520        casted = self.intIndex.astype("i8")521        # it works!522        casted.get_loc(5)523        # pass on name524        self.intIndex.name = "foobar"525        casted = self.intIndex.astype("i8")526        assert casted.name == "foobar"527    def test_equals_object(self):528        # same529        assert Index(["a", "b", "c"]).equals(Index(["a", "b", "c"]))530    @pytest.mark.parametrize(531        "comp", [Index(["a", "b"]), Index(["a", "b", "d"]), ["a", "b", "c"]]532    )533    def test_not_equals_object(self, comp):534        assert not Index(["a", "b", "c"]).equals(comp)535    def test_insert(self):536        # GH 7256537        # validate neg/pos inserts538        result = Index(["b", "c", "d"])539        # test 0th element540        tm.assert_index_equal(Index(["a", "b", "c", "d"]), result.insert(0, "a"))541        # test Nth element that follows Python list behavior542        tm.assert_index_equal(Index(["b", "c", "e", "d"]), result.insert(-1, "e"))543        # test loc +/- neq (0, -1)544        tm.assert_index_equal(result.insert(1, "z"), result.insert(-2, "z"))545        # test empty546        null_index = Index([])547        tm.assert_index_equal(Index(["a"]), null_index.insert(0, "a"))548    def test_insert_missing(self, nulls_fixture):549        # GH 22295550        # test there is no mangling of NA values551        expected = Index(["a", nulls_fixture, "b", "c"])552        result = Index(list("abc")).insert(1, nulls_fixture)553        tm.assert_index_equal(result, expected)554    @pytest.mark.parametrize(555        "pos,expected",556        [557            (0, Index(["b", "c", "d"], name="index")),558            (-1, Index(["a", "b", "c"], name="index")),559        ],560    )561    def test_delete(self, pos, expected):562        index = Index(["a", "b", "c", "d"], name="index")563        result = index.delete(pos)564        tm.assert_index_equal(result, expected)565        assert result.name == expected.name566    def test_delete_raises(self):567        index = Index(["a", "b", "c", "d"], name="index")568        msg = "index 5 is out of bounds for axis 0 with size 4"569        with pytest.raises(IndexError, match=msg):570            index.delete(5)571    def test_identical(self):572        # index573        i1 = Index(["a", "b", "c"])574        i2 = Index(["a", "b", "c"])575        assert i1.identical(i2)576        i1 = i1.rename("foo")577        assert i1.equals(i2)578        assert not i1.identical(i2)579        i2 = i2.rename("foo")580        assert i1.identical(i2)581        i3 = Index([("a", "a"), ("a", "b"), ("b", "a")])582        i4 = Index([("a", "a"), ("a", "b"), ("b", "a")], tupleize_cols=False)583        assert not i3.identical(i4)584    def test_is_(self):585        ind = Index(range(10))586        assert ind.is_(ind)587        assert ind.is_(ind.view().view().view().view())588        assert not ind.is_(Index(range(10)))589        assert not ind.is_(ind.copy())590        assert not ind.is_(ind.copy(deep=False))591        assert not ind.is_(ind[:])592        assert not ind.is_(np.array(range(10)))593        # quasi-implementation dependent594        assert ind.is_(ind.view())595        ind2 = ind.view()596        ind2.name = "bob"597        assert ind.is_(ind2)598        assert ind2.is_(ind)599        # doesn't matter if Indices are *actually* views of underlying data,600        assert not ind.is_(Index(ind.values))601        arr = np.array(range(1, 11))602        ind1 = Index(arr, copy=False)603        ind2 = Index(arr, copy=False)604        assert not ind1.is_(ind2)605    def test_asof(self):606        d = self.dateIndex[0]607        assert self.dateIndex.asof(d) == d608        assert isna(self.dateIndex.asof(d - timedelta(1)))609        d = self.dateIndex[-1]610        assert self.dateIndex.asof(d + timedelta(1)) == d611        d = self.dateIndex[0].to_pydatetime()612        assert isinstance(self.dateIndex.asof(d), Timestamp)613    def test_asof_datetime_partial(self):614        index = pd.date_range("2010-01-01", periods=2, freq="m")615        expected = Timestamp("2010-02-28")616        result = index.asof("2010-02")617        assert result == expected618        assert not isinstance(result, Index)619    def test_nanosecond_index_access(self):620        s = Series([Timestamp("20130101")]).values.view("i8")[0]621        r = DatetimeIndex([s + 50 + i for i in range(100)])622        x = Series(np.random.randn(100), index=r)623        first_value = x.asof(x.index[0])624        # this does not yet work, as parsing strings is done via dateutil625        # assert first_value == x['2013-01-01 00:00:00.000000050+0000']626        expected_ts = np_datetime64_compat("2013-01-01 00:00:00.000000050+0000", "ns")627        assert first_value == x[Timestamp(expected_ts)]628    def test_booleanindex(self):629        boolIndex = np.repeat(True, len(self.strIndex)).astype(bool)630        boolIndex[5:30:2] = False631        subIndex = self.strIndex[boolIndex]632        for i, val in enumerate(subIndex):633            assert subIndex.get_loc(val) == i634        subIndex = self.strIndex[list(boolIndex)]635        for i, val in enumerate(subIndex):636            assert subIndex.get_loc(val) == i637    def test_fancy(self):638        sl = self.strIndex[[1, 2, 3]]639        for i in sl:640            assert i == sl[sl.get_loc(i)]641    @pytest.mark.parametrize("attr", ["strIndex", "intIndex", "floatIndex"])642    @pytest.mark.parametrize("dtype", [np.int_, np.bool_])643    def test_empty_fancy(self, attr, dtype):644        empty_arr = np.array([], dtype=dtype)645        index = getattr(self, attr)646        empty_index = index.__class__([])647        assert index[[]].identical(empty_index)648        assert index[empty_arr].identical(empty_index)649    @pytest.mark.parametrize("attr", ["strIndex", "intIndex", "floatIndex"])650    def test_empty_fancy_raises(self, attr):651        # pd.DatetimeIndex is excluded, because it overrides getitem and should652        # be tested separately.653        empty_farr = np.array([], dtype=np.float_)654        index = getattr(self, attr)655        empty_index = index.__class__([])656        assert index[[]].identical(empty_index)657        # np.ndarray only accepts ndarray of int & bool dtypes, so should Index658        msg = r"arrays used as indices must be of integer \(or boolean\) type"659        with pytest.raises(IndexError, match=msg):660            index[empty_farr]661    @pytest.mark.parametrize("sort", [None, False])662    def test_intersection(self, sort):663        first = self.strIndex[:20]664        second = self.strIndex[:10]665        intersect = first.intersection(second, sort=sort)666        if sort is None:667            tm.assert_index_equal(intersect, second.sort_values())668        assert tm.equalContents(intersect, second)669        # Corner cases670        inter = first.intersection(first, sort=sort)671        assert inter is first672    @pytest.mark.parametrize(673        "index2,keeps_name",674        [675            (Index([3, 4, 5, 6, 7], name="index"), True),  # preserve same name676            (Index([3, 4, 5, 6, 7], name="other"), False),  # drop diff names677            (Index([3, 4, 5, 6, 7]), False),678        ],679    )680    @pytest.mark.parametrize("sort", [None, False])681    def test_intersection_name_preservation(self, index2, keeps_name, sort):682        index1 = Index([1, 2, 3, 4, 5], name="index")683        expected = Index([3, 4, 5])684        result = index1.intersection(index2, sort)685        if keeps_name:686            expected.name = "index"687        assert result.name == expected.name688        tm.assert_index_equal(result, expected)689    @pytest.mark.parametrize(690        "first_name,second_name,expected_name",691        [("A", "A", "A"), ("A", "B", None), (None, "B", None)],692    )693    @pytest.mark.parametrize("sort", [None, False])694    def test_intersection_name_preservation2(695        self, first_name, second_name, expected_name, sort696    ):697        first = self.strIndex[5:20]698        second = self.strIndex[:10]699        first.name = first_name700        second.name = second_name701        intersect = first.intersection(second, sort=sort)702        assert intersect.name == expected_name703    @pytest.mark.parametrize(704        "index2,keeps_name",705        [706            (Index([4, 7, 6, 5, 3], name="index"), True),707            (Index([4, 7, 6, 5, 3], name="other"), False),708        ],709    )710    @pytest.mark.parametrize("sort", [None, False])711    def test_intersection_monotonic(self, index2, keeps_name, sort):712        index1 = Index([5, 3, 2, 4, 1], name="index")713        expected = Index([5, 3, 4])714        if keeps_name:715            expected.name = "index"716        result = index1.intersection(index2, sort=sort)717        if sort is None:718            expected = expected.sort_values()719        tm.assert_index_equal(result, expected)720    @pytest.mark.parametrize(721        "index2,expected_arr",722        [(Index(["B", "D"]), ["B"]), (Index(["B", "D", "A"]), ["A", "B", "A"])],723    )724    @pytest.mark.parametrize("sort", [None, False])725    def test_intersection_non_monotonic_non_unique(self, index2, expected_arr, sort):726        # non-monotonic non-unique727        index1 = Index(["A", "B", "A", "C"])728        expected = Index(expected_arr, dtype="object")729        result = index1.intersection(index2, sort=sort)730        if sort is None:731            expected = expected.sort_values()732        tm.assert_index_equal(result, expected)733    @pytest.mark.parametrize("sort", [None, False])734    def test_intersect_str_dates(self, sort):735        dt_dates = [datetime(2012, 2, 9), datetime(2012, 2, 22)]736        i1 = Index(dt_dates, dtype=object)737        i2 = Index(["aa"], dtype=object)738        result = i2.intersection(i1, sort=sort)739        assert len(result) == 0740    def test_intersect_nosort(self):741        result = pd.Index(["c", "b", "a"]).intersection(["b", "a"])742        expected = pd.Index(["b", "a"])743        tm.assert_index_equal(result, expected)744    def test_intersection_equal_sort(self):745        idx = pd.Index(["c", "a", "b"])746        tm.assert_index_equal(idx.intersection(idx, sort=False), idx)747        tm.assert_index_equal(idx.intersection(idx, sort=None), idx)748    @pytest.mark.xfail(reason="Not implemented")749    def test_intersection_equal_sort_true(self):750        # TODO decide on True behaviour751        idx = pd.Index(["c", "a", "b"])752        sorted_ = pd.Index(["a", "b", "c"])753        tm.assert_index_equal(idx.intersection(idx, sort=True), sorted_)754    @pytest.mark.parametrize("sort", [None, False])755    def test_chained_union(self, sort):756        # Chained unions handles names correctly757        i1 = Index([1, 2], name="i1")758        i2 = Index([5, 6], name="i2")759        i3 = Index([3, 4], name="i3")760        union = i1.union(i2.union(i3, sort=sort), sort=sort)761        expected = i1.union(i2, sort=sort).union(i3, sort=sort)762        tm.assert_index_equal(union, expected)763        j1 = Index([1, 2], name="j1")764        j2 = Index([], name="j2")765        j3 = Index([], name="j3")766        union = j1.union(j2.union(j3, sort=sort), sort=sort)767        expected = j1.union(j2, sort=sort).union(j3, sort=sort)768        tm.assert_index_equal(union, expected)769    @pytest.mark.parametrize("sort", [None, False])770    def test_union(self, sort):771        # TODO: Replace with fixturesult772        first = self.strIndex[5:20]773        second = self.strIndex[:10]774        everything = self.strIndex[:20]775        union = first.union(second, sort=sort)776        if sort is None:777            tm.assert_index_equal(union, everything.sort_values())778        assert tm.equalContents(union, everything)779    @pytest.mark.parametrize("slice_", [slice(None), slice(0)])780    def test_union_sort_other_special(self, slice_):781        # https://github.com/pandas-dev/pandas/issues/24959782        idx = pd.Index([1, 0, 2])783        # default, sort=None784        other = idx[slice_]785        tm.assert_index_equal(idx.union(other), idx)786        tm.assert_index_equal(other.union(idx), idx)787        # sort=False788        tm.assert_index_equal(idx.union(other, sort=False), idx)789    @pytest.mark.xfail(reason="Not implemented")790    @pytest.mark.parametrize("slice_", [slice(None), slice(0)])791    def test_union_sort_special_true(self, slice_):792        # TODO decide on True behaviour793        # sort=True794        idx = pd.Index([1, 0, 2])795        # default, sort=None796        other = idx[slice_]797        result = idx.union(other, sort=True)798        expected = pd.Index([0, 1, 2])799        tm.assert_index_equal(result, expected)800    def test_union_sort_other_incomparable(self):801        # https://github.com/pandas-dev/pandas/issues/24959802        idx = pd.Index([1, pd.Timestamp("2000")])803        # default (sort=None)804        with tm.assert_produces_warning(RuntimeWarning):805            result = idx.union(idx[:1])806        tm.assert_index_equal(result, idx)807        # sort=None808        with tm.assert_produces_warning(RuntimeWarning):809            result = idx.union(idx[:1], sort=None)810        tm.assert_index_equal(result, idx)811        # sort=False812        result = idx.union(idx[:1], sort=False)813        tm.assert_index_equal(result, idx)814    @pytest.mark.xfail(reason="Not implemented")815    def test_union_sort_other_incomparable_true(self):816        # TODO decide on True behaviour817        # sort=True818        idx = pd.Index([1, pd.Timestamp("2000")])819        with pytest.raises(TypeError, match=".*"):820            idx.union(idx[:1], sort=True)821    @pytest.mark.parametrize("klass", [np.array, Series, list])822    @pytest.mark.parametrize("sort", [None, False])823    def test_union_from_iterables(self, klass, sort):824        # GH 10149825        # TODO: Replace with fixturesult826        first = self.strIndex[5:20]827        second = self.strIndex[:10]828        everything = self.strIndex[:20]829        case = klass(second.values)830        result = first.union(case, sort=sort)831        if sort is None:832            tm.assert_index_equal(result, everything.sort_values())833        assert tm.equalContents(result, everything)834    @pytest.mark.parametrize("sort", [None, False])835    def test_union_identity(self, sort):836        # TODO: replace with fixturesult837        first = self.strIndex[5:20]838        union = first.union(first, sort=sort)839        # i.e. identity is not preserved when sort is True840        assert (union is first) is (not sort)841        # This should no longer be the same object, since [] is not consistent,842        # both objects will be recast to dtype('O')843        union = first.union([], sort=sort)844        assert (union is first) is (not sort)845        union = Index([]).union(first, sort=sort)846        assert (union is first) is (not sort)847    @pytest.mark.parametrize("first_list", [list("ba"), list()])848    @pytest.mark.parametrize("second_list", [list("ab"), list()])849    @pytest.mark.parametrize(850        "first_name, second_name, expected_name",851        [("A", "B", None), (None, "B", None), ("A", None, None)],852    )853    @pytest.mark.parametrize("sort", [None, False])854    def test_union_name_preservation(855        self, first_list, second_list, first_name, second_name, expected_name, sort856    ):857        first = Index(first_list, name=first_name)858        second = Index(second_list, name=second_name)859        union = first.union(second, sort=sort)860        vals = set(first_list).union(second_list)861        if sort is None and len(first_list) > 0 and len(second_list) > 0:862            expected = Index(sorted(vals), name=expected_name)863            tm.assert_index_equal(union, expected)864        else:865            expected = Index(vals, name=expected_name)866            assert tm.equalContents(union, expected)867    @pytest.mark.parametrize("sort", [None, False])868    def test_union_dt_as_obj(self, sort):869        # TODO: Replace with fixturesult870        firstCat = self.strIndex.union(self.dateIndex)871        secondCat = self.strIndex.union(self.strIndex)872        if self.dateIndex.dtype == np.object_:873            appended = np.append(self.strIndex, self.dateIndex)874        else:875            appended = np.append(self.strIndex, self.dateIndex.astype("O"))876        assert tm.equalContents(firstCat, appended)877        assert tm.equalContents(secondCat, self.strIndex)878        tm.assert_contains_all(self.strIndex, firstCat)879        tm.assert_contains_all(self.strIndex, secondCat)880        tm.assert_contains_all(self.dateIndex, firstCat)881    @pytest.mark.parametrize(882        "method", ["union", "intersection", "difference", "symmetric_difference"]883    )884    def test_setops_disallow_true(self, method):885        idx1 = pd.Index(["a", "b"])886        idx2 = pd.Index(["b", "c"])887        with pytest.raises(ValueError, match="The 'sort' keyword only takes"):888            getattr(idx1, method)(idx2, sort=True)889    def test_map_identity_mapping(self):890        # GH 12766891        # TODO: replace with fixture892        for name, cur_index in self.indices.items():893            tm.assert_index_equal(cur_index, cur_index.map(lambda x: x))894    def test_map_with_tuples(self):895        # GH 12766896        # Test that returning a single tuple from an Index897        #   returns an Index.898        index = tm.makeIntIndex(3)899        result = tm.makeIntIndex(3).map(lambda x: (x,))900        expected = Index([(i,) for i in index])901        tm.assert_index_equal(result, expected)902        # Test that returning a tuple from a map of a single index903        #   returns a MultiIndex object.904        result = index.map(lambda x: (x, x == 1))905        expected = MultiIndex.from_tuples([(i, i == 1) for i in index])906        tm.assert_index_equal(result, expected)907    def test_map_with_tuples_mi(self):908        # Test that returning a single object from a MultiIndex909        #   returns an Index.910        first_level = ["foo", "bar", "baz"]911        multi_index = MultiIndex.from_tuples(zip(first_level, [1, 2, 3]))912        reduced_index = multi_index.map(lambda x: x[0])913        tm.assert_index_equal(reduced_index, Index(first_level))914    @pytest.mark.parametrize(915        "attr", ["makeDateIndex", "makePeriodIndex", "makeTimedeltaIndex"]916    )917    def test_map_tseries_indices_return_index(self, attr):918        index = getattr(tm, attr)(10)919        expected = Index([1] * 10)920        result = index.map(lambda x: 1)921        tm.assert_index_equal(expected, result)922    def test_map_tseries_indices_accsr_return_index(self):923        date_index = tm.makeDateIndex(24, freq="h", name="hourly")924        expected = Index(range(24), name="hourly")925        tm.assert_index_equal(expected, date_index.map(lambda x: x.hour))926    @pytest.mark.parametrize(927        "mapper",928        [929            lambda values, index: {i: e for e, i in zip(values, index)},930            lambda values, index: pd.Series(values, index),931        ],932    )933    def test_map_dictlike(self, mapper):934        # GH 12756935        expected = Index(["foo", "bar", "baz"])936        index = tm.makeIntIndex(3)937        result = index.map(mapper(expected.values, index))938        tm.assert_index_equal(result, expected)939        # TODO: replace with fixture940        for name in self.indices.keys():941            if name == "catIndex":942                # Tested in test_categorical943                continue944            elif name == "repeats":945                # Cannot map duplicated index946                continue947            index = self.indices[name]948            expected = Index(np.arange(len(index), 0, -1))949            # to match proper result coercion for uints950            if name == "empty":951                expected = Index([])952            result = index.map(mapper(expected, index))953            tm.assert_index_equal(result, expected)954    @pytest.mark.parametrize(955        "mapper",956        [Series(["foo", 2.0, "baz"], index=[0, 2, -1]), {0: "foo", 2: 2.0, -1: "baz"}],957    )958    def test_map_with_non_function_missing_values(self, mapper):959        # GH 12756960        expected = Index([2.0, np.nan, "foo"])961        result = Index([2, 1, 0]).map(mapper)962        tm.assert_index_equal(expected, result)963    def test_map_na_exclusion(self):964        index = Index([1.5, np.nan, 3, np.nan, 5])965        result = index.map(lambda x: x * 2, na_action="ignore")966        expected = index * 2967        tm.assert_index_equal(result, expected)968    def test_map_defaultdict(self):969        index = Index([1, 2, 3])970        default_dict = defaultdict(lambda: "blank")971        default_dict[1] = "stuff"972        result = index.map(default_dict)973        expected = Index(["stuff", "blank", "blank"])974        tm.assert_index_equal(result, expected)975    def test_append_multiple(self):976        index = Index(["a", "b", "c", "d", "e", "f"])977        foos = [index[:2], index[2:4], index[4:]]978        result = foos[0].append(foos[1:])979        tm.assert_index_equal(result, index)980        # empty981        result = index.append([])982        tm.assert_index_equal(result, index)983    @pytest.mark.parametrize("name,expected", [("foo", "foo"), ("bar", None)])984    def test_append_empty_preserve_name(self, name, expected):985        left = Index([], name="foo")986        right = Index([1, 2, 3], name=name)987        result = left.append(right)988        assert result.name == expected989    @pytest.mark.parametrize("second_name,expected", [(None, None), ("name", "name")])990    @pytest.mark.parametrize("sort", [None, False])991    def test_difference_name_preservation(self, second_name, expected, sort):992        # TODO: replace with fixturesult993        first = self.strIndex[5:20]994        second = self.strIndex[:10]995        answer = self.strIndex[10:20]996        first.name = "name"997        second.name = second_name998        result = first.difference(second, sort=sort)999        assert tm.equalContents(result, answer)1000        if expected is None:1001            assert result.name is None1002        else:1003            assert result.name == expected1004    @pytest.mark.parametrize("sort", [None, False])1005    def test_difference_empty_arg(self, sort):1006        first = self.strIndex[5:20]1007        first.name == "name"1008        result = first.difference([], sort)1009        assert tm.equalContents(result, first)1010        assert result.name == first.name1011    @pytest.mark.parametrize("sort", [None, False])1012    def test_difference_identity(self, sort):1013        first = self.strIndex[5:20]1014        first.name == "name"1015        result = first.difference(first, sort)1016        assert len(result) == 01017        assert result.name == first.name1018    @pytest.mark.parametrize("sort", [None, False])1019    def test_difference_sort(self, sort):1020        first = self.strIndex[5:20]1021        second = self.strIndex[:10]1022        result = first.difference(second, sort)1023        expected = self.strIndex[10:20]1024        if sort is None:1025            expected = expected.sort_values()1026        tm.assert_index_equal(result, expected)1027    @pytest.mark.parametrize("sort", [None, False])1028    def test_symmetric_difference(self, sort):1029        # smoke1030        index1 = Index([5, 2, 3, 4], name="index1")1031        index2 = Index([2, 3, 4, 1])1032        result = index1.symmetric_difference(index2, sort=sort)1033        expected = Index([5, 1])1034        assert tm.equalContents(result, expected)1035        assert result.name is None1036        if sort is None:1037            expected = expected.sort_values()1038        tm.assert_index_equal(result, expected)1039        # __xor__ syntax1040        expected = index1 ^ index21041        assert tm.equalContents(result, expected)1042        assert result.name is None1043    @pytest.mark.parametrize("opname", ["difference", "symmetric_difference"])1044    def test_difference_incomparable(self, opname):1045        a = pd.Index([3, pd.Timestamp("2000"), 1])1046        b = pd.Index([2, pd.Timestamp("1999"), 1])1047        op = operator.methodcaller(opname, b)1048        # sort=None, the default1049        result = op(a)1050        expected = pd.Index([3, pd.Timestamp("2000"), 2, pd.Timestamp("1999")])1051        if opname == "difference":1052            expected = expected[:2]1053        tm.assert_index_equal(result, expected)1054        # sort=False1055        op = operator.methodcaller(opname, b, sort=False)1056        result = op(a)1057        tm.assert_index_equal(result, expected)1058    @pytest.mark.xfail(reason="Not implemented")1059    @pytest.mark.parametrize("opname", ["difference", "symmetric_difference"])1060    def test_difference_incomparable_true(self, opname):1061        # TODO decide on True behaviour1062        # # sort=True, raises1063        a = pd.Index([3, pd.Timestamp("2000"), 1])1064        b = pd.Index([2, pd.Timestamp("1999"), 1])1065        op = operator.methodcaller(opname, b, sort=True)1066        with pytest.raises(TypeError, match="Cannot compare"):1067            op(a)1068    @pytest.mark.parametrize("sort", [None, False])1069    def test_symmetric_difference_mi(self, sort):1070        index1 = MultiIndex.from_tuples(self.tuples)1071        index2 = MultiIndex.from_tuples([("foo", 1), ("bar", 3)])1072        result = index1.symmetric_difference(index2, sort=sort)1073        expected = MultiIndex.from_tuples([("bar", 2), ("baz", 3), ("bar", 3)])1074        if sort is None:1075            expected = expected.sort_values()1076        tm.assert_index_equal(result, expected)1077        assert tm.equalContents(result, expected)1078    @pytest.mark.parametrize(1079        "index2,expected",1080        [1081            (Index([0, 1, np.nan]), Index([2.0, 3.0, 0.0])),1082            (Index([0, 1]), Index([np.nan, 2.0, 3.0, 0.0])),1083        ],1084    )1085    @pytest.mark.parametrize("sort", [None, False])1086    def test_symmetric_difference_missing(self, index2, expected, sort):1087        # GH 13514 change: {nan} - {nan} == {}1088        # (GH 6444, sorting of nans, is no longer an issue)1089        index1 = Index([1, np.nan, 2, 3])1090        result = index1.symmetric_difference(index2, sort=sort)1091        if sort is None:1092            expected = expected.sort_values()1093        tm.assert_index_equal(result, expected)1094    @pytest.mark.parametrize("sort", [None, False])1095    def test_symmetric_difference_non_index(self, sort):1096        index1 = Index([1, 2, 3, 4], name="index1")1097        index2 = np.array([2, 3, 4, 5])1098        expected = Index([1, 5])1099        result = index1.symmetric_difference(index2, sort=sort)1100        assert tm.equalContents(result, expected)1101        assert result.name == "index1"1102        result = index1.symmetric_difference(index2, result_name="new_name", sort=sort)1103        assert tm.equalContents(result, expected)1104        assert result.name == "new_name"1105    @pytest.mark.parametrize("sort", [None, False])1106    def test_difference_type(self, sort):1107        # GH 200401108        # If taking difference of a set and itself, it1109        # needs to preserve the type of the index1110        skip_index_keys = ["repeats"]1111        for key, index in self.generate_index_types(skip_index_keys):1112            result = index.difference(index, sort=sort)1113            expected = index.drop(index)1114            tm.assert_index_equal(result, expected)1115    @pytest.mark.parametrize("sort", [None, False])1116    def test_intersection_difference(self, sort):1117        # GH 200401118        # Test that the intersection of an index with an1119        # empty index produces the same index as the difference1120        # of an index with itself.  Test for all types1121        skip_index_keys = ["repeats"]1122        for key, index in self.generate_index_types(skip_index_keys):1123            inter = index.intersection(index.drop(index))1124            diff = index.difference(index, sort=sort)1125            tm.assert_index_equal(inter, diff)1126    @pytest.mark.parametrize(1127        "attr,expected",1128        [1129            ("strIndex", False),1130            ("boolIndex", False),1131            ("catIndex", False),1132            ("intIndex", True),1133            ("dateIndex", False),1134            ("floatIndex", True),1135        ],1136    )1137    def test_is_numeric(self, attr, expected):1138        assert getattr(self, attr).is_numeric() == expected1139    @pytest.mark.parametrize(1140        "attr,expected",1141        [1142            ("strIndex", True),1143            ("boolIndex", True),1144            ("catIndex", False),1145            ("intIndex", False),1146            ("dateIndex", False),1147            ("floatIndex", False),1148        ],1149    )1150    def test_is_object(self, attr, expected):1151        assert getattr(self, attr).is_object() == expected1152    @pytest.mark.parametrize(1153        "attr,expected",1154        [1155            ("strIndex", False),1156            ("boolIndex", False),1157            ("catIndex", False),1158            ("intIndex", False),1159            ("dateIndex", True),1160            ("floatIndex", False),1161        ],1162    )1163    def test_is_all_dates(self, attr, expected):1164        assert getattr(self, attr).is_all_dates == expected1165    def test_summary(self):1166        self._check_method_works(Index._summary)1167        # GH38691168        ind = Index(["{other}%s", "~:{range}:0"], name="A")1169        result = ind._summary()1170        # shouldn't be formatted accidentally.1171        assert "~:{range}:0" in result1172        assert "{other}%s" in result1173    # GH182171174    def test_summary_deprecated(self):1175        ind = Index(["{other}%s", "~:{range}:0"], name="A")1176        with tm.assert_produces_warning(FutureWarning):1177            ind.summary()1178    def test_format(self):1179        self._check_method_works(Index.format)1180        # GH 146261181        # windows has different precision on datetime.datetime.now (it doesn't1182        # include us since the default for Timestamp shows these but Index1183        # formatting does not we are skipping)1184        now = datetime.now()1185        if not str(now).endswith("000"):1186            index = Index([now])1187            formatted = index.format()1188            expected = [str(index[0])]1189            assert formatted == expected1190        self.strIndex[:0].format()1191    @pytest.mark.parametrize("vals", [[1, 2.0 + 3.0j, 4.0], ["a", "b", "c"]])1192    def test_format_missing(self, vals, nulls_fixture):1193        # 28451194        vals = list(vals)  # Copy for each iteration1195        vals.append(nulls_fixture)1196        index = Index(vals)1197        formatted = index.format()1198        expected = [str(index[0]), str(index[1]), str(index[2]), "NaN"]1199        assert formatted == expected1200        assert index[3] is nulls_fixture1201    def test_format_with_name_time_info(self):1202        # bug I fixed 12/20/20111203        inc = timedelta(hours=4)1204        dates = Index([dt + inc for dt in self.dateIndex], name="something")1205        formatted = dates.format(name=True)1206        assert formatted[0] == "something"1207    def test_format_datetime_with_time(self):1208        t = Index([datetime(2012, 2, 7), datetime(2012, 2, 7, 23)])1209        result = t.format()1210        expected = ["2012-02-07 00:00:00", "2012-02-07 23:00:00"]1211        assert len(result) == 21212        assert result == expected1213    @pytest.mark.parametrize("op", ["any", "all"])1214    def test_logical_compat(self, op):1215        index = self.create_index()1216        assert getattr(index, op)() == getattr(index.values, op)()1217    def _check_method_works(self, method):1218        # TODO: make this a dedicated test with parametrized methods1219        method(self.empty)1220        method(self.dateIndex)1221        method(self.unicodeIndex)1222        method(self.strIndex)1223        method(self.intIndex)1224        method(self.tuples)1225        method(self.catIndex)1226    def test_get_indexer(self):1227        index1 = Index([1, 2, 3, 4, 5])1228        index2 = Index([2, 4, 6])1229        r1 = index1.get_indexer(index2)1230        e1 = np.array([1, 3, -1], dtype=np.intp)1231        assert_almost_equal(r1, e1)1232    @pytest.mark.parametrize("reverse", [True, False])1233    @pytest.mark.parametrize(1234        "expected,method",1235        [1236            (np.array([-1, 0, 0, 1, 1], dtype=np.intp), "pad"),1237            (np.array([-1, 0, 0, 1, 1], dtype=np.intp), "ffill"),1238            (np.array([0, 0, 1, 1, 2], dtype=np.intp), "backfill"),1239            (np.array([0, 0, 1, 1, 2], dtype=np.intp), "bfill"),1240        ],1241    )1242    def test_get_indexer_methods(self, reverse, expected, method):1243        index1 = Index([1, 2, 3, 4, 5])1244        index2 = Index([2, 4, 6])1245        if reverse:1246            index1 = index1[::-1]1247            expected = expected[::-1]1248        result = index2.get_indexer(index1, method=method)1249        assert_almost_equal(result, expected)1250    def test_get_indexer_invalid(self):1251        # GH104111252        index = Index(np.arange(10))1253        with pytest.raises(ValueError, match="tolerance argument"):1254            index.get_indexer([1, 0], tolerance=1)1255        with pytest.raises(ValueError, match="limit argument"):1256            index.get_indexer([1, 0], limit=1)1257    @pytest.mark.parametrize(1258        "method, tolerance, indexer, expected",1259        [1260            ("pad", None, [0, 5, 9], [0, 5, 9]),1261            ("backfill", None, [0, 5, 9], [0, 5, 9]),1262            ("nearest", None, [0, 5, 9], [0, 5, 9]),1263            ("pad", 0, [0, 5, 9], [0, 5, 9]),1264            ("backfill", 0, [0, 5, 9], [0, 5, 9]),1265            ("nearest", 0, [0, 5, 9], [0, 5, 9]),1266            ("pad", None, [0.2, 1.8, 8.5], [0, 1, 8]),1267            ("backfill", None, [0.2, 1.8, 8.5], [1, 2, 9]),1268            ("nearest", None, [0.2, 1.8, 8.5], [0, 2, 9]),1269            ("pad", 1, [0.2, 1.8, 8.5], [0, 1, 8]),1270            ("backfill", 1, [0.2, 1.8, 8.5], [1, 2, 9]),1271            ("nearest", 1, [0.2, 1.8, 8.5], [0, 2, 9]),1272            ("pad", 0.2, [0.2, 1.8, 8.5], [0, -1, -1]),1273            ("backfill", 0.2, [0.2, 1.8, 8.5], [-1, 2, -1]),1274            ("nearest", 0.2, [0.2, 1.8, 8.5], [0, 2, -1]),1275        ],1276    )1277    def test_get_indexer_nearest(self, method, tolerance, indexer, expected):1278        index = Index(np.arange(10))1279        actual = index.get_indexer(indexer, method=method, tolerance=tolerance)1280        tm.assert_numpy_array_equal(actual, np.array(expected, dtype=np.intp))1281    @pytest.mark.parametrize("listtype", [list, tuple, Series, np.array])1282    @pytest.mark.parametrize(1283        "tolerance, expected",1284        list(1285            zip(1286                [[0.3, 0.3, 0.1], [0.2, 0.1, 0.1], [0.1, 0.5, 0.5]],1287                [[0, 2, -1], [0, -1, -1], [-1, 2, 9]],1288            )1289        ),1290    )1291    def test_get_indexer_nearest_listlike_tolerance(1292        self, tolerance, expected, listtype1293    ):1294        index = Index(np.arange(10))1295        actual = index.get_indexer(1296            [0.2, 1.8, 8.5], method="nearest", tolerance=listtype(tolerance)1297        )1298        tm.assert_numpy_array_equal(actual, np.array(expected, dtype=np.intp))1299    def test_get_indexer_nearest_error(self):1300        index = Index(np.arange(10))1301        with pytest.raises(ValueError, match="limit argument"):1302            index.get_indexer([1, 0], method="nearest", limit=1)1303        with pytest.raises(ValueError, match="tolerance size must match"):1304            index.get_indexer([1, 0], method="nearest", tolerance=[1, 2, 3])1305    @pytest.mark.parametrize(1306        "method,expected",1307        [("pad", [8, 7, 0]), ("backfill", [9, 8, 1]), ("nearest", [9, 7, 0])],1308    )1309    def test_get_indexer_nearest_decreasing(self, method, expected):1310        index = Index(np.arange(10))[::-1]1311        actual = index.get_indexer([0, 5, 9], method=method)1312        tm.assert_numpy_array_equal(actual, np.array([9, 4, 0], dtype=np.intp))1313        actual = index.get_indexer([0.2, 1.8, 8.5], method=method)1314        tm.assert_numpy_array_equal(actual, np.array(expected, dtype=np.intp))1315    @pytest.mark.parametrize(1316        "method,expected",1317        [1318            ("pad", np.array([-1, 0, 1, 1], dtype=np.intp)),1319            ("backfill", np.array([0, 0, 1, -1], dtype=np.intp)),1320        ],1321    )1322    def test_get_indexer_strings(self, method, expected):1323        index = pd.Index(["b", "c"])1324        actual = index.get_indexer(["a", "b", "c", "d"], method=method)1325        tm.assert_numpy_array_equal(actual, expected)1326    def test_get_indexer_strings_raises(self):1327        index = pd.Index(["b", "c"])1328        msg = r"unsupported operand type\(s\) for -: 'str' and 'str'"1329        with pytest.raises(TypeError, match=msg):1330            index.get_indexer(["a", "b", "c", "d"], method="nearest")1331        with pytest.raises(TypeError, match=msg):1332            index.get_indexer(["a", "b", "c", "d"], method="pad", tolerance=2)1333        with pytest.raises(TypeError, match=msg):1334            index.get_indexer(1335                ["a", "b", "c", "d"], method="pad", tolerance=[2, 2, 2, 2]1336            )1337    @pytest.mark.parametrize("idx_class", [Int64Index, RangeIndex, Float64Index])1338    def test_get_indexer_numeric_index_boolean_target(self, idx_class):1339        # GH 168771340        numeric_index = idx_class(RangeIndex((4)))1341        result = numeric_index.get_indexer([True, False, True])1342        expected = np.array([-1, -1, -1], dtype=np.intp)1343        tm.assert_numpy_array_equal(result, expected)1344    def test_get_indexer_with_NA_values(1345        self, unique_nulls_fixture, unique_nulls_fixture21346    ):1347        # GH 223321348        # check pairwise, that no pair of na values1349        # is mangled1350        if unique_nulls_fixture is unique_nulls_fixture2:1351            return  # skip it, values are not unique1352        arr = np.array([unique_nulls_fixture, unique_nulls_fixture2], dtype=np.object)1353        index = pd.Index(arr, dtype=np.object)1354        result = index.get_indexer(1355            [unique_nulls_fixture, unique_nulls_fixture2, "Unknown"]1356        )1357        expected = np.array([0, 1, -1], dtype=np.intp)1358        tm.assert_numpy_array_equal(result, expected)1359    @pytest.mark.parametrize("method", [None, "pad", "backfill", "nearest"])1360    def test_get_loc(self, method):1361        index = pd.Index([0, 1, 2])1362        assert index.get_loc(1, method=method) == 11363        if method:1364            assert index.get_loc(1, method=method, tolerance=0) == 11365    @pytest.mark.parametrize("method", [None, "pad", "backfill", "nearest"])1366    def test_get_loc_raises_bad_label(self, method):1367        index = pd.Index([0, 1, 2])1368        if method:1369            # Messages vary across versions1370            if PY36:1371                msg = "not supported between"1372            else:1373                msg = "unorderable types"1374        else:1375            msg = "invalid key"1376        with pytest.raises(TypeError, match=msg):1377            index.get_loc([1, 2], method=method)1378    @pytest.mark.parametrize(1379        "method,loc", [("pad", 1), ("backfill", 2), ("nearest", 1)]1380    )1381    def test_get_loc_tolerance(self, method, loc):1382        index = pd.Index([0, 1, 2])1383        assert index.get_loc(1.1, method) == loc1384        assert index.get_loc(1.1, method, tolerance=1) == loc1385    @pytest.mark.parametrize("method", ["pad", "backfill", "nearest"])1386    def test_get_loc_outside_tolerance_raises(self, method):1387        index = pd.Index([0, 1, 2])1388        with pytest.raises(KeyError, match="1.1"):1389            index.get_loc(1.1, method, tolerance=0.05)1390    def test_get_loc_bad_tolerance_raises(self):1391        index = pd.Index([0, 1, 2])1392        with pytest.raises(ValueError, match="must be numeric"):1393            index.get_loc(1.1, "nearest", tolerance="invalid")1394    def test_get_loc_tolerance_no_method_raises(self):1395        index = pd.Index([0, 1, 2])1396        with pytest.raises(ValueError, match="tolerance .* valid if"):1397            index.get_loc(1.1, tolerance=1)1398    def test_get_loc_raises_missized_tolerance(self):1399        index = pd.Index([0, 1, 2])1400        with pytest.raises(ValueError, match="tolerance size must match"):1401            index.get_loc(1.1, "nearest", tolerance=[1, 1])1402    def test_get_loc_raises_object_nearest(self):1403        index = pd.Index(["a", "c"])1404        with pytest.raises(TypeError, match="unsupported operand type"):1405            index.get_loc("a", method="nearest")1406    def test_get_loc_raises_object_tolerance(self):1407        index = pd.Index(["a", "c"])1408        with pytest.raises(TypeError, match="unsupported operand type"):1409            index.get_loc("a", method="pad", tolerance="invalid")1410    @pytest.mark.parametrize("dtype", [int, float])1411    def test_slice_locs(self, dtype):1412        index = Index(np.array([0, 1, 2, 5, 6, 7, 9, 10], dtype=dtype))1413        n = len(index)1414        assert index.slice_locs(start=2) == (2, n)1415        assert index.slice_locs(start=3) == (3, n)1416        assert index.slice_locs(3, 8) == (3, 6)1417        assert index.slice_locs(5, 10) == (3, n)1418        assert index.slice_locs(end=8) == (0, 6)1419        assert index.slice_locs(end=9) == (0, 7)1420        # reversed1421        index2 = index[::-1]1422        assert index2.slice_locs(8, 2) == (2, 6)1423        assert index2.slice_locs(7, 3) == (2, 5)1424    @pytest.mark.parametrize("dtype", [int, float])1425    def test_slice_float_locs(self, dtype):1426        index = Index(np.array([0, 1, 2, 5, 6, 7, 9, 10], dtype=dtype))1427        n = len(index)1428        assert index.slice_locs(5.0, 10.0) == (3, n)1429        assert index.slice_locs(4.5, 10.5) == (3, 8)1430        index2 = index[::-1]1431        assert index2.slice_locs(8.5, 1.5) == (2, 6)1432        assert index2.slice_locs(10.5, -1) == (0, n)1433    def test_slice_locs_dup(self):1434        index = Index(["a", "a", "b", "c", "d", "d"])1435        assert index.slice_locs("a", "d") == (0, 6)1436        assert index.slice_locs(end="d") == (0, 6)1437        assert index.slice_locs("a", "c") == (0, 4)1438        assert index.slice_locs("b", "d") == (2, 6)1439        index2 = index[::-1]1440        assert index2.slice_locs("d", "a") == (0, 6)1441        assert index2.slice_locs(end="a") == (0, 6)1442        assert index2.slice_locs("d", "b") == (0, 4)1443        assert index2.slice_locs("c", "a") == (2, 6)1444    @pytest.mark.parametrize("dtype", [int, float])1445    def test_slice_locs_dup_numeric(self, dtype):1446        index = Index(np.array([10, 12, 12, 14], dtype=dtype))1447        assert index.slice_locs(12, 12) == (1, 3)1448        assert index.slice_locs(11, 13) == (1, 3)1449        index2 = index[::-1]1450        assert index2.slice_locs(12, 12) == (1, 3)1451        assert index2.slice_locs(13, 11) == (1, 3)1452    def test_slice_locs_na(self):1453        index = Index([np.nan, 1, 2])1454        assert index.slice_locs(1) == (1, 3)1455        assert index.slice_locs(np.nan) == (0, 3)1456        index = Index([0, np.nan, np.nan, 1, 2])1457        assert index.slice_locs(np.nan) == (1, 5)1458    def test_slice_locs_na_raises(self):1459        index = Index([np.nan, 1, 2])1460        with pytest.raises(KeyError, match=""):1461            index.slice_locs(start=1.5)1462        with pytest.raises(KeyError, match=""):1463            index.slice_locs(end=1.5)1464    @pytest.mark.parametrize(1465        "in_slice,expected",1466        [1467            (pd.IndexSlice[::-1], "yxdcb"),1468            (pd.IndexSlice["b":"y":-1], ""),1469            (pd.IndexSlice["b"::-1], "b"),1470            (pd.IndexSlice[:"b":-1], "yxdcb"),1471            (pd.IndexSlice[:"y":-1], "y"),1472            (pd.IndexSlice["y"::-1], "yxdcb"),1473            (pd.IndexSlice["y"::-4], "yb"),1474            # absent labels1475            (pd.IndexSlice[:"a":-1], "yxdcb"),1476            (pd.IndexSlice[:"a":-2], "ydb"),1477            (pd.IndexSlice["z"::-1], "yxdcb"),1478            (pd.IndexSlice["z"::-3], "yc"),1479            (pd.IndexSlice["m"::-1], "dcb"),1480            (pd.IndexSlice[:"m":-1], "yx"),1481            (pd.IndexSlice["a":"a":-1], ""),1482            (pd.IndexSlice["z":"z":-1], ""),1483            (pd.IndexSlice["m":"m":-1], ""),1484        ],1485    )1486    def test_slice_locs_negative_step(self, in_slice, expected):1487        index = Index(list("bcdxy"))1488        s_start, s_stop = index.slice_locs(in_slice.start, in_slice.stop, in_slice.step)1489        result = index[s_start : s_stop : in_slice.step]1490        expected = pd.Index(list(expected))1491        tm.assert_index_equal(result, expected)1492    def test_drop_by_str_label(self):1493        # TODO: Parametrize these after replacing self.strIndex with fixture1494        n = len(self.strIndex)1495        drop = self.strIndex[list(range(5, 10))]1496        dropped = self.strIndex.drop(drop)1497        expected = self.strIndex[list(range(5)) + list(range(10, n))]1498        tm.assert_index_equal(dropped, expected)1499        dropped = self.strIndex.drop(self.strIndex[0])1500        expected = self.strIndex[1:]1501        tm.assert_index_equal(dropped, expected)1502    @pytest.mark.parametrize("keys", [["foo", "bar"], ["1", "bar"]])1503    def test_drop_by_str_label_raises_missing_keys(self, keys):1504        with pytest.raises(KeyError, match=""):1505            self.strIndex.drop(keys)1506    def test_drop_by_str_label_errors_ignore(self):1507        # TODO: Parametrize these after replacing self.strIndex with fixture1508        # errors='ignore'1509        n = len(self.strIndex)1510        drop = self.strIndex[list(range(5, 10))]1511        mixed = drop.tolist() + ["foo"]1512        dropped = self.strIndex.drop(mixed, errors="ignore")1513        expected = self.strIndex[list(range(5)) + list(range(10, n))]1514        tm.assert_index_equal(dropped, expected)1515        dropped = self.strIndex.drop(["foo", "bar"], errors="ignore")1516        expected = self.strIndex[list(range(n))]1517        tm.assert_index_equal(dropped, expected)1518    def test_drop_by_numeric_label_loc(self):1519        # TODO: Parametrize numeric and str tests after self.strIndex fixture1520        index = Index([1, 2, 3])1521        dropped = index.drop(1)1522        expected = Index([2, 3])1523        tm.assert_index_equal(dropped, expected)1524    def test_drop_by_numeric_label_raises_missing_keys(self):1525        index = Index([1, 2, 3])1526        with pytest.raises(KeyError, match=""):1527            index.drop([3, 4])1528    @pytest.mark.parametrize(1529        "key,expected", [(4, Index([1, 2, 3])), ([3, 4, 5], Index([1, 2]))]1530    )1531    def test_drop_by_numeric_label_errors_ignore(self, key, expected):1532        index = Index([1, 2, 3])1533        dropped = index.drop(key, errors="ignore")1534        tm.assert_index_equal(dropped, expected)1535    @pytest.mark.parametrize(1536        "values",1537        [["a", "b", ("c", "d")], ["a", ("c", "d"), "b"], [("c", "d"), "a", "b"]],1538    )1539    @pytest.mark.parametrize("to_drop", [[("c", "d"), "a"], ["a", ("c", "d")]])1540    def test_drop_tuple(self, values, to_drop):1541        # GH 183041542        index = pd.Index(values)1543        expected = pd.Index(["b"])1544        result = index.drop(to_drop)1545        tm.assert_index_equal(result, expected)1546        removed = index.drop(to_drop[0])1547        for drop_me in to_drop[1], [to_drop[1]]:1548            result = removed.drop(drop_me)1549            tm.assert_index_equal(result, expected)1550        removed = index.drop(to_drop[1])1551        msg = r"\"\[{}\] not found in axis\"".format(re.escape(to_drop[1].__repr__()))1552        for drop_me in to_drop[1], [to_drop[1]]:1553            with pytest.raises(KeyError, match=msg):1554                removed.drop(drop_me)1555    @pytest.mark.parametrize(1556        "method,expected,sort",1557        [1558            (1559                "intersection",1560                np.array(1561                    [(1, "A"), (2, "A"), (1, "B"), (2, "B")],1562                    dtype=[("num", int), ("let", "a1")],1563                ),1564                False,1565            ),1566            (1567                "intersection",1568                np.array(1569                    [(1, "A"), (1, "B"), (2, "A"), (2, "B")],1570                    dtype=[("num", int), ("let", "a1")],1571                ),1572                None,1573            ),1574            (1575                "union",1576                np.array(1577                    [(1, "A"), (1, "B"), (1, "C"), (2, "A"), (2, "B"), (2, "C")],1578                    dtype=[("num", int), ("let", "a1")],1579                ),1580                None,1581            ),1582        ],1583    )1584    def test_tuple_union_bug(self, method, expected, sort):1585        index1 = Index(1586            np.array(1587                [(1, "A"), (2, "A"), (1, "B"), (2, "B")],1588                dtype=[("num", int), ("let", "a1")],1589            )1590        )1591        index2 = Index(1592            np.array(1593                [(1, "A"), (2, "A"), (1, "B"), (2, "B"), (1, "C"), (2, "C")],1594                dtype=[("num", int), ("let", "a1")],1595            )1596        )1597        result = getattr(index1, method)(index2, sort=sort)1598        assert result.ndim == 11599        expected = Index(expected)1600        tm.assert_index_equal(result, expected)1601    @pytest.mark.parametrize(1602        "attr",1603        [1604            "is_monotonic_increasing",1605            "is_monotonic_decreasing",1606            "_is_strictly_monotonic_increasing",1607            "_is_strictly_monotonic_decreasing",1608        ],1609    )1610    def test_is_monotonic_incomparable(self, attr):1611        index = Index([5, datetime.now(), 7])1612        assert not getattr(index, attr)1613    def test_get_set_value(self):1614        # TODO: Remove function? GH 197281615        values = np.random.randn(100)1616        date = self.dateIndex[67]1617        assert_almost_equal(self.dateIndex.get_value(values, date), values[67])1618        self.dateIndex.set_value(values, date, 10)1619        assert values[67] == 101620    @pytest.mark.parametrize("values", [["foo", "bar", "quux"], {"foo", "bar", "quux"}])1621    @pytest.mark.parametrize(1622        "index,expected",1623        [1624            (Index(["qux", "baz", "foo", "bar"]), np.array([False, False, True, True])),1625            (Index([]), np.array([], dtype=bool)),  # empty1626        ],1627    )1628    def test_isin(self, values, index, expected):1629        result = index.isin(values)1630        tm.assert_numpy_array_equal(result, expected)1631    def test_isin_nan_common_object(self, nulls_fixture, nulls_fixture2):1632        # Test cartesian product of null fixtures and ensure that we don't1633        # mangle the various types (save a corner case with PyPy)1634        # all nans are the same1635        if (1636            isinstance(nulls_fixture, float)1637            and isinstance(nulls_fixture2, float)1638            and math.isnan(nulls_fixture)1639            and math.isnan(nulls_fixture2)1640        ):1641            tm.assert_numpy_array_equal(1642                Index(["a", nulls_fixture]).isin([nulls_fixture2]),1643                np.array([False, True]),1644            )1645        elif nulls_fixture is nulls_fixture2:  # should preserve NA type1646            tm.assert_numpy_array_equal(1647                Index(["a", nulls_fixture]).isin([nulls_fixture2]),1648                np.array([False, True]),1649            )1650        else:1651            tm.assert_numpy_array_equal(1652                Index(["a", nulls_fixture]).isin([nulls_fixture2]),1653                np.array([False, False]),1654            )1655    def test_isin_nan_common_float64(self, nulls_fixture):1656        if nulls_fixture is pd.NaT:1657            pytest.skip("pd.NaT not compatible with Float64Index")1658        # Float64Index overrides isin, so must be checked separately1659        tm.assert_numpy_array_equal(1660            Float64Index([1.0, nulls_fixture]).isin([np.nan]), np.array([False, True])1661        )1662        # we cannot compare NaT with NaN1663        tm.assert_numpy_array_equal(1664            Float64Index([1.0, nulls_fixture]).isin([pd.NaT]), np.array([False, False])1665        )1666    @pytest.mark.parametrize("level", [0, -1])1667    @pytest.mark.parametrize(1668        "index",1669        [1670            Index(["qux", "baz", "foo", "bar"]),1671            # Float64Index overrides isin, so must be checked separately1672            Float64Index([1.0, 2.0, 3.0, 4.0]),1673        ],1674    )1675    def test_isin_level_kwarg(self, level, index):1676        values = index.tolist()[-2:] + ["nonexisting"]1677        expected = np.array([False, False, True, True])1678        tm.assert_numpy_array_equal(expected, index.isin(values, level=level))1679        index.name = "foobar"1680        tm.assert_numpy_array_equal(expected, index.isin(values, level="foobar"))1681    @pytest.mark.parametrize("level", [2, 10, -3])1682    def test_isin_level_kwarg_bad_level_raises(self, level, indices):1683        index = indices1684        with pytest.raises(IndexError, match="Too many levels"):1685            index.isin([], level=level)1686    @pytest.mark.parametrize("label", [1.0, "foobar", "xyzzy", np.nan])1687    def test_isin_level_kwarg_bad_label_raises(self, label, indices):1688        index = indices1689        if isinstance(index, MultiIndex):1690            index = index.rename(["foo", "bar"])1691            msg = "'Level {} not found'"1692        else:1693            index = index.rename("foo")1694            msg = r"'Level {} must be same as name \(foo\)'"1695        with pytest.raises(KeyError, match=msg.format(label)):1696            index.isin([], level=label)1697    @pytest.mark.parametrize("empty", [[], Series(), np.array([])])1698    def test_isin_empty(self, empty):1699        # see gh-169911700        index = Index(["a", "b"])1701        expected = np.array([False, False])1702        result = index.isin(empty)1703        tm.assert_numpy_array_equal(expected, result)1704    @pytest.mark.parametrize(1705        "values",1706        [1707            [1, 2, 3, 4],1708            [1.0, 2.0, 3.0, 4.0],1709            [True, True, True, True],1710            ["foo", "bar", "baz", "qux"],1711            pd.date_range("2018-01-01", freq="D", periods=4),1712        ],1713    )1714    def test_boolean_cmp(self, values):1715        index = Index(values)1716        result = index == values1717        expected = np.array([True, True, True, True], dtype=bool)1718        tm.assert_numpy_array_equal(result, expected)1719    @pytest.mark.parametrize("name,level", [(None, 0), ("a", "a")])1720    def test_get_level_values(self, name, level):1721        expected = self.strIndex.copy()1722        if name:1723            expected.name = name1724        result = expected.get_level_values(level)1725        tm.assert_index_equal(result, expected)1726    def test_slice_keep_name(self):1727        index = Index(["a", "b"], name="asdf")1728        assert index.name == index[1:].name1729    # instance attributes of the form self.<name>Index1730    @pytest.mark.parametrize("index_kind", ["unicode", "str", "date", "int", "float"])1731    def test_join_self(self, join_type, index_kind):1732        res = getattr(self, "{0}Index".format(index_kind))1733        joined = res.join(res, how=join_type)1734        assert res is joined1735    @pytest.mark.parametrize("method", ["strip", "rstrip", "lstrip"])1736    def test_str_attribute(self, method):1737        # GH90681738        index = Index([" jack", "jill ", " jesse ", "frank"])1739        expected = Index([getattr(str, method)(x) for x in index.values])1740        result = getattr(index.str, method)()1741        tm.assert_index_equal(result, expected)1742    @pytest.mark.parametrize(1743        "index",1744        [1745            Index(range(5)),1746            tm.makeDateIndex(10),1747            MultiIndex.from_tuples([("foo", "1"), ("bar", "3")]),1748            period_range(start="2000", end="2010", freq="A"),1749        ],1750    )1751    def test_str_attribute_raises(self, index):1752        with pytest.raises(AttributeError, match="only use .str accessor"):1753            index.str.repeat(2)1754    @pytest.mark.parametrize(1755        "expand,expected",1756        [1757            (None, Index([["a", "b", "c"], ["d", "e"], ["f"]])),1758            (False, Index([["a", "b", "c"], ["d", "e"], ["f"]])),1759            (1760                True,1761                MultiIndex.from_tuples(1762                    [("a", "b", "c"), ("d", "e", np.nan), ("f", np.nan, np.nan)]1763                ),1764            ),1765        ],1766    )1767    def test_str_split(self, expand, expected):1768        index = Index(["a b c", "d e", "f"])1769        if expand is not None:1770            result = index.str.split(expand=expand)1771        else:1772            result = index.str.split()1773        tm.assert_index_equal(result, expected)1774    def test_str_bool_return(self):1775        # test boolean case, should return np.array instead of boolean Index1776        index = Index(["a1", "a2", "b1", "b2"])1777        result = index.str.startswith("a")1778        expected = np.array([True, True, False, False])1779        tm.assert_numpy_array_equal(result, expected)1780        assert isinstance(result, np.ndarray)1781    def test_str_bool_series_indexing(self):1782        index = Index(["a1", "a2", "b1", "b2"])1783        s = Series(range(4), index=index)1784        result = s[s.index.str.startswith("a")]1785        expected = Series(range(2), index=["a1", "a2"])1786        tm.assert_series_equal(result, expected)1787    @pytest.mark.parametrize(1788        "index,expected", [(Index(list("abcd")), True), (Index(range(4)), False)]1789    )1790    def test_tab_completion(self, index, expected):1791        # GH 99101792        result = "str" in dir(index)1793        assert result == expected1794    def test_indexing_doesnt_change_class(self):1795        index = Index([1, 2, 3, "a", "b", "c"])1796        assert index[1:3].identical(pd.Index([2, 3], dtype=np.object_))1797        assert index[[0, 1]].identical(pd.Index([1, 2], dtype=np.object_))1798    def test_outer_join_sort(self):1799        left_index = Index(np.random.permutation(15))1800        right_index = tm.makeDateIndex(10)1801        with tm.assert_produces_warning(RuntimeWarning):1802            result = left_index.join(right_index, how="outer")1803        # right_index in this case because DatetimeIndex has join precedence1804        # over Int64Index1805        with tm.assert_produces_warning(RuntimeWarning):1806            expected = right_index.astype(object).union(left_index.astype(object))1807        tm.assert_index_equal(result, expected)1808    def test_nan_first_take_datetime(self):1809        index = Index([pd.NaT, Timestamp("20130101"), Timestamp("20130102")])1810        result = index.take([-1, 0, 1])1811        expected = Index([index[-1], index[0], index[1]])1812        tm.assert_index_equal(result, expected)1813    def test_take_fill_value(self):1814        # GH 126311815        index = pd.Index(list("ABC"), name="xxx")1816        result = index.take(np.array([1, 0, -1]))1817        expected = pd.Index(list("BAC"), name="xxx")1818        tm.assert_index_equal(result, expected)1819        # fill_value1820        result = index.take(np.array([1, 0, -1]), fill_value=True)1821        expected = pd.Index(["B", "A", np.nan], name="xxx")1822        tm.assert_index_equal(result, expected)1823        # allow_fill=False1824        result = index.take(np.array([1, 0, -1]), allow_fill=False, fill_value=True)1825        expected = pd.Index(["B", "A", "C"], name="xxx")1826        tm.assert_index_equal(result, expected)1827    def test_take_fill_value_none_raises(self):1828        index = pd.Index(list("ABC"), name="xxx")1829        msg = (1830            "When allow_fill=True and fill_value is not None, "1831            "all indices must be >= -1"1832        )1833        with pytest.raises(ValueError, match=msg):1834            index.take(np.array([1, 0, -2]), fill_value=True)1835        with pytest.raises(ValueError, match=msg):1836            index.take(np.array([1, 0, -5]), fill_value=True)1837    def test_take_bad_bounds_raises(self):1838        index = pd.Index(list("ABC"), name="xxx")1839        with pytest.raises(IndexError, match="out of bounds"):1840            index.take(np.array([1, -5]))1841    @pytest.mark.parametrize("name", [None, "foobar"])1842    @pytest.mark.parametrize(1843        "labels",1844        [1845            [],1846            np.array([]),1847            ["A", "B", "C"],1848            ["C", "B", "A"],1849            np.array(["A", "B", "C"]),1850            np.array(["C", "B", "A"]),1851            # Must preserve name even if dtype changes1852            pd.date_range("20130101", periods=3).values,1853            pd.date_range("20130101", periods=3).tolist(),1854        ],1855    )1856    def test_reindex_preserves_name_if_target_is_list_or_ndarray(self, name, labels):1857        # GH65521858        index = pd.Index([0, 1, 2])1859        index.name = name1860        assert index.reindex(labels)[0].name == name1861    @pytest.mark.parametrize("labels", [[], np.array([]), np.array([], dtype=np.int64)])1862    def test_reindex_preserves_type_if_target_is_empty_list_or_array(self, labels):1863        # GH77741864        index = pd.Index(list("abc"))1865        assert index.reindex(labels)[0].dtype.type == np.object_1866    @pytest.mark.parametrize(1867        "labels,dtype",1868        [1869            (pd.Int64Index([]), np.int64),1870            (pd.Float64Index([]), np.float64),1871            (pd.DatetimeIndex([]), np.datetime64),1872        ],1873    )1874    def test_reindex_doesnt_preserve_type_if_target_is_empty_index(self, labels, dtype):1875        # GH77741876        index = pd.Index(list("abc"))1877        assert index.reindex(labels)[0].dtype.type == dtype1878    def test_reindex_no_type_preserve_target_empty_mi(self):1879        index = pd.Index(list("abc"))1880        result = index.reindex(1881            pd.MultiIndex([pd.Int64Index([]), pd.Float64Index([])], [[], []])1882        )[0]1883        assert result.levels[0].dtype.type == np.int641884        assert result.levels[1].dtype.type == np.float641885    def test_groupby(self):1886        index = Index(range(5))1887        result = index.groupby(np.array([1, 1, 2, 2, 2]))1888        expected = {1: pd.Index([0, 1]), 2: pd.Index([2, 3, 4])}1889        tm.assert_dict_equal(result, expected)1890    @pytest.mark.parametrize(1891        "mi,expected",1892        [1893            (MultiIndex.from_tuples([(1, 2), (4, 5)]), np.array([True, True])),1894            (MultiIndex.from_tuples([(1, 2), (4, 6)]), np.array([True, False])),1895        ],1896    )1897    def test_equals_op_multiindex(self, mi, expected):1898        # GH97851899        # test comparisons of multiindex1900        df = pd.read_csv(StringIO("a,b,c\n1,2,3\n4,5,6"), index_col=[0, 1])1901        result = df.index == mi1902        tm.assert_numpy_array_equal(result, expected)1903    def test_equals_op_multiindex_identify(self):1904        df = pd.read_csv(StringIO("a,b,c\n1,2,3\n4,5,6"), index_col=[0, 1])1905        result = df.index == df.index1906        expected = np.array([True, True])1907        tm.assert_numpy_array_equal(result, expected)1908    @pytest.mark.parametrize(1909        "index",1910        [1911            MultiIndex.from_tuples([(1, 2), (4, 5), (8, 9)]),1912            Index(["foo", "bar", "baz"]),1913        ],1914    )1915    def test_equals_op_mismatched_multiindex_raises(self, index):1916        df = pd.read_csv(StringIO("a,b,c\n1,2,3\n4,5,6"), index_col=[0, 1])1917        with pytest.raises(ValueError, match="Lengths must match"):1918            df.index == index1919    def test_equals_op_index_vs_mi_same_length(self):1920        mi = MultiIndex.from_tuples([(1, 2), (4, 5), (8, 9)])1921        index = Index(["foo", "bar", "baz"])1922        result = mi == index1923        expected = np.array([False, False, False])1924        tm.assert_numpy_array_equal(result, expected)1925    @pytest.mark.parametrize("dt_conv", [pd.to_datetime, pd.to_timedelta])1926    def test_dt_conversion_preserves_name(self, dt_conv):1927        # GH 108751928        index = pd.Index(["01:02:03", "01:02:04"], name="label")1929        assert index.name == dt_conv(index).name1930    @pytest.mark.parametrize(1931        "index,expected",1932        [1933            # ASCII1934            # short1935            (1936                pd.Index(["a", "bb", "ccc"]),1937                """Index(['a', 'bb', 'ccc'], dtype='object')""",1938            ),1939            # multiple lines1940            (1941                pd.Index(["a", "bb", "ccc"] * 10),1942                """\1943Index(['a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc',1944       'a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc',1945       'a', 'bb', 'ccc', 'a', 'bb', 'ccc'],1946      dtype='object')""",1947            ),1948            # truncated1949            (1950                pd.Index(["a", "bb", "ccc"] * 100),1951                """\1952Index(['a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a',1953       ...1954       'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc', 'a', 'bb', 'ccc'],1955      dtype='object', length=300)""",1956            ),1957            # Non-ASCII1958            # short1959            (1960                pd.Index(["ã", "ãã", "ããã"]),1961                """Index(['ã', 'ãã', 'ããã'], dtype='object')""",1962            ),1963            # multiple lines1964            (1965                pd.Index(["ã", "ãã", "ããã"] * 10),1966                (1967                    "Index(['ã', 'ãã', 'ããã', 'ã', 'ãã', 'ããã', "1968                    "'ã', 'ãã', 'ããã', 'ã', 'ãã', 'ããã',\n"1969                    "       'ã', 'ãã', 'ããã', 'ã', 'ãã', 'ããã', "1970                    "'ã', 'ãã', 'ããã', 'ã', 'ãã', 'ããã',\n"1971                    "       'ã', 'ãã', 'ããã', 'ã', 'ãã', "1972                    "'ããã'],\n"1973                    "      dtype='object')"1974                ),1975            ),1976            # truncated1977            (1978                pd.Index(["ã", "ãã", "ããã"] * 100),1979                (1980                    "Index(['ã', 'ãã', 'ããã', 'ã', 'ãã', 'ããã', "1981                    "'ã', 'ãã', 'ããã', 'ã',\n"1982                    "       ...\n"1983                    "       'ããã', 'ã', 'ãã', 'ããã', 'ã', 'ãã', "1984                    "'ããã', 'ã', 'ãã', 'ããã'],\n"1985                    "      dtype='object', length=300)"1986                ),1987            ),1988        ],1989    )1990    def test_string_index_repr(self, index, expected):1991        result = repr(index)1992        assert result == expected1993    @pytest.mark.parametrize(1994        "index,expected",1995        [1996            # short1997            (1998                pd.Index(["ã", "ãã", "ããã"]),1999                ("Index(['ã', 'ãã', 'ããã'], dtype='object')"),2000            ),2001            # multiple lines2002            (2003                pd.Index(["ã", "ãã", "ããã"] * 10),2004                (2005                    "Index(['ã', 'ãã', 'ããã', 'ã', 'ãã', "2006                    "'ããã', 'ã', 'ãã', 'ããã',\n"2007                    "       'ã', 'ãã', 'ããã', 'ã', 'ãã', "2008                    "'ããã', 'ã', 'ãã', 'ããã',\n"2009                    "       'ã', 'ãã', 'ããã', 'ã', 'ãã', "2010                    "'ããã', 'ã', 'ãã', 'ããã',\n"2011                    "       'ã', 'ãã', 'ããã'],\n"2012                    "      dtype='object')"2013                    ""2014                ),2015            ),2016            # truncated2017            (2018                pd.Index(["ã", "ãã", "ããã"] * 100),2019                (2020                    "Index(['ã', 'ãã', 'ããã', 'ã', 'ãã', "2021                    "'ããã', 'ã', 'ãã', 'ããã',\n"2022                    "       'ã',\n"2023                    "       ...\n"2024                    "       'ããã', 'ã', 'ãã', 'ããã', 'ã', "2025                    "'ãã', 'ããã', 'ã', 'ãã',\n"2026                    "       'ããã'],\n"2027                    "      dtype='object', length=300)"2028                ),2029            ),2030        ],2031    )2032    def test_string_index_repr_with_unicode_option(self, index, expected):2033        # Enable Unicode option -----------------------------------------2034        with cf.option_context("display.unicode.east_asian_width", True):2035            result = repr(index)2036            assert result == expected2037    def test_cached_properties_not_settable(self):2038        index = pd.Index([1, 2, 3])2039        with pytest.raises(AttributeError, match="Can't set attribute"):2040            index.is_unique = False2041    def test_get_duplicates_deprecated(self):2042        index = pd.Index([1, 2, 3])2043        with tm.assert_produces_warning(FutureWarning):2044            index.get_duplicates()2045    def test_tab_complete_warning(self, ip):2046        # https://github.com/pandas-dev/pandas/issues/164092047        pytest.importorskip("IPython", minversion="6.0.0")2048        from IPython.core.completer import provisionalcompleter2049        code = "import pandas as pd; idx = pd.Index([1, 2])"2050        ip.run_code(code)2051        with tm.assert_produces_warning(None):2052            with provisionalcompleter("ignore"):2053                list(ip.Completer.completions("idx.", 4))2054    def test_deprecated_contains(self):2055        for index in self.indices.values():2056            with tm.assert_produces_warning(FutureWarning):2057                index.contains(1)2058class TestMixedIntIndex(Base):2059    # Mostly the tests from common.py for which the results differ2060    # in py2 and py3 because ints and strings are uncomparable in py32061    # (GH 13514)2062    _holder = Index2063    def setup_method(self, method):2064        self.indices = dict(mixedIndex=Index([0, "a", 1, "b", 2, "c"]))2065        self.setup_indices()2066    def create_index(self):2067        return self.mixedIndex2068    def test_argsort(self):2069        index = self.create_index()2070        if PY36:2071            with pytest.raises(TypeError, match="'>|<' not supported"):2072                index.argsort()2073        else:2074            with pytest.raises(TypeError, match="unorderable types"):2075                index.argsort()2076    def test_numpy_argsort(self):2077        index = self.create_index()2078        if PY36:2079            with pytest.raises(TypeError, match="'>|<' not supported"):2080                np.argsort(index)2081        else:2082            with pytest.raises(TypeError, match="unorderable types"):2083                np.argsort(index)2084    def test_copy_name(self):2085        # Check that "name" argument passed at initialization is honoured2086        # GH123092087        index = self.create_index()2088        first = index.__class__(index, copy=True, name="mario")2089        second = first.__class__(first, copy=False)2090        # Even though "copy=False", we want a new object.2091        assert first is not second2092        tm.assert_index_equal(first, second)2093        assert first.name == "mario"2094        assert second.name == "mario"2095        s1 = Series(2, index=first)2096        s2 = Series(3, index=second[:-1])2097        s3 = s1 * s22098        assert s3.index.name == "mario"2099    def test_copy_name2(self):2100        # Check that adding a "name" parameter to the copy is honored2101        # GH143022102        index = pd.Index([1, 2], name="MyName")2103        index1 = index.copy()2104        tm.assert_index_equal(index, index1)2105        index2 = index.copy(name="NewName")2106        tm.assert_index_equal(index, index2, check_names=False)2107        assert index.name == "MyName"2108        assert index2.name == "NewName"2109        index3 = index.copy(names=["NewName"])2110        tm.assert_index_equal(index, index3, check_names=False)2111        assert index.name == "MyName"2112        assert index.names == ["MyName"]2113        assert index3.name == "NewName"2114        assert index3.names == ["NewName"]2115    def test_union_base(self):2116        index = self.create_index()2117        first = index[3:]2118        second = index[:5]2119        result = first.union(second)2120        expected = Index([0, 1, 2, "a", "b", "c"])2121        tm.assert_index_equal(result, expected)2122    @pytest.mark.parametrize("klass", [np.array, Series, list])2123    def test_union_different_type_base(self, klass):2124        # GH 101492125        index = self.create_index()2126        first = index[3:]2127        second = index[:5]2128        result = first.union(klass(second.values))2129        assert tm.equalContents(result, index)2130    def test_unique_na(self):2131        idx = pd.Index([2, np.nan, 2, 1], name="my_index")2132        expected = pd.Index([2, np.nan, 1], name="my_index")2133        result = idx.unique()2134        tm.assert_index_equal(result, expected)2135    @pytest.mark.parametrize("sort", [None, False])2136    def test_intersection_base(self, sort):2137        # (same results for py2 and py3 but sortedness not tested elsewhere)2138        index = self.create_index()2139        first = index[:5]2140        second = index[:3]2141        expected = Index([0, 1, "a"]) if sort is None else Index([0, "a", 1])2142        result = first.intersection(second, sort=sort)2143        tm.assert_index_equal(result, expected)2144    @pytest.mark.parametrize("klass", [np.array, Series, list])2145    @pytest.mark.parametrize("sort", [None, False])2146    def test_intersection_different_type_base(self, klass, sort):2147        # GH 101492148        index = self.create_index()2149        first = index[:5]2150        second = index[:3]2151        result = first.intersection(klass(second.values), sort=sort)2152        assert tm.equalContents(result, second)2153    @pytest.mark.parametrize("sort", [None, False])2154    def test_difference_base(self, sort):2155        # (same results for py2 and py3 but sortedness not tested elsewhere)2156        index = self.create_index()2157        first = index[:4]2158        second = index[3:]2159        result = first.difference(second, sort)2160        expected = Index([0, "a", 1])2161        if sort is None:2162            expected = Index(safe_sort(expected))2163        tm.assert_index_equal(result, expected)2164    def test_symmetric_difference(self):2165        # (same results for py2 and py3 but sortedness not tested elsewhere)2166        index = self.create_index()2167        first = index[:4]2168        second = index[3:]2169        result = first.symmetric_difference(second)2170        expected = Index([0, 1, 2, "a", "c"])2171        tm.assert_index_equal(result, expected)2172    def test_logical_compat(self):2173        index = self.create_index()2174        assert index.all() == index.values.all()2175        assert index.any() == index.values.any()2176    @pytest.mark.parametrize("how", ["any", "all"])2177    @pytest.mark.parametrize("dtype", [None, object, "category"])2178    @pytest.mark.parametrize(2179        "vals,expected",2180        [2181            ([1, 2, 3], [1, 2, 3]),2182            ([1.0, 2.0, 3.0], [1.0, 2.0, 3.0]),2183            ([1.0, 2.0, np.nan, 3.0], [1.0, 2.0, 3.0]),2184            (["A", "B", "C"], ["A", "B", "C"]),2185            (["A", np.nan, "B", "C"], ["A", "B", "C"]),2186        ],2187    )2188    def test_dropna(self, how, dtype, vals, expected):2189        # GH 61942190        index = pd.Index(vals, dtype=dtype)2191        result = index.dropna(how=how)2192        expected = pd.Index(expected, dtype=dtype)2193        tm.assert_index_equal(result, expected)2194    @pytest.mark.parametrize("how", ["any", "all"])2195    @pytest.mark.parametrize(2196        "index,expected",2197        [2198            (2199                pd.DatetimeIndex(["2011-01-01", "2011-01-02", "2011-01-03"]),2200                pd.DatetimeIndex(["2011-01-01", "2011-01-02", "2011-01-03"]),2201            ),2202            (2203                pd.DatetimeIndex(["2011-01-01", "2011-01-02", "2011-01-03", pd.NaT]),2204                pd.DatetimeIndex(["2011-01-01", "2011-01-02", "2011-01-03"]),2205            ),2206            (2207                pd.TimedeltaIndex(["1 days", "2 days", "3 days"]),2208                pd.TimedeltaIndex(["1 days", "2 days", "3 days"]),2209            ),2210            (2211                pd.TimedeltaIndex([pd.NaT, "1 days", "2 days", "3 days", pd.NaT]),2212                pd.TimedeltaIndex(["1 days", "2 days", "3 days"]),2213            ),2214            (2215                pd.PeriodIndex(["2012-02", "2012-04", "2012-05"], freq="M"),2216                pd.PeriodIndex(["2012-02", "2012-04", "2012-05"], freq="M"),2217            ),2218            (2219                pd.PeriodIndex(["2012-02", "2012-04", "NaT", "2012-05"], freq="M"),2220                pd.PeriodIndex(["2012-02", "2012-04", "2012-05"], freq="M"),2221            ),2222        ],2223    )2224    def test_dropna_dt_like(self, how, index, expected):2225        result = index.dropna(how=how)2226        tm.assert_index_equal(result, expected)2227    def test_dropna_invalid_how_raises(self):2228        msg = "invalid how option: xxx"2229        with pytest.raises(ValueError, match=msg):2230            pd.Index([1, 2, 3]).dropna(how="xxx")2231    def test_get_combined_index(self):2232        result = _get_combined_index([])2233        expected = Index([])2234        tm.assert_index_equal(result, expected)2235    def test_repeat(self):2236        repeats = 22237        index = pd.Index([1, 2, 3])2238        expected = pd.Index([1, 1, 2, 2, 3, 3])2239        result = index.repeat(repeats)2240        tm.assert_index_equal(result, expected)2241    @pytest.mark.parametrize(2242        "index",2243        [2244            pd.Index([np.nan]),2245            pd.Index([np.nan, 1]),2246            pd.Index([1, 2, np.nan]),2247            pd.Index(["a", "b", np.nan]),2248            pd.to_datetime(["NaT"]),2249            pd.to_datetime(["NaT", "2000-01-01"]),2250            pd.to_datetime(["2000-01-01", "NaT", "2000-01-02"]),2251            pd.to_timedelta(["1 day", "NaT"]),2252        ],2253    )2254    def test_is_monotonic_na(self, index):2255        assert index.is_monotonic_increasing is False2256        assert index.is_monotonic_decreasing is False2257        assert index._is_strictly_monotonic_increasing is False2258        assert index._is_strictly_monotonic_decreasing is False2259    def test_repr_summary(self):2260        with cf.option_context("display.max_seq_items", 10):2261            result = repr(pd.Index(np.arange(1000)))2262            assert len(result) < 2002263            assert "..." in result2264    @pytest.mark.parametrize("klass", [Series, DataFrame])2265    def test_int_name_format(self, klass):2266        index = Index(["a", "b", "c"], name=0)2267        result = klass(list(range(3)), index=index)2268        assert "0" in repr(result)2269    def test_print_unicode_columns(self):2270        df = pd.DataFrame({"\u05d0": [1, 2, 3], "\u05d1": [4, 5, 6], "c": [7, 8, 9]})2271        repr(df.columns)  # should not raise UnicodeDecodeError2272    def test_str_to_bytes_raises(self):2273        # GH 264472274        index = Index([str(x) for x in range(10)])2275        msg = "^'str' object cannot be interpreted as an integer$"2276        with pytest.raises(TypeError, match=msg):2277            bytes(index)2278    def test_intersect_str_dates(self):2279        dt_dates = [datetime(2012, 2, 9), datetime(2012, 2, 22)]2280        index1 = Index(dt_dates, dtype=object)2281        index2 = Index(["aa"], dtype=object)2282        result = index2.intersection(index1)2283        expected = Index([], dtype=object)2284        tm.assert_index_equal(result, expected)2285class TestIndexUtils:2286    @pytest.mark.parametrize(2287        "data, names, expected",2288        [2289            ([[1, 2, 3]], None, Index([1, 2, 3])),2290            ([[1, 2, 3]], ["name"], Index([1, 2, 3], name="name")),2291            (2292                [["a", "a"], ["c", "d"]],2293                None,2294                MultiIndex([["a"], ["c", "d"]], [[0, 0], [0, 1]]),2295            ),2296            (2297                [["a", "a"], ["c", "d"]],2298                ["L1", "L2"],2299                MultiIndex([["a"], ["c", "d"]], [[0, 0], [0, 1]], names=["L1", "L2"]),2300            ),2301        ],2302    )2303    def test_ensure_index_from_sequences(self, data, names, expected):2304        result = ensure_index_from_sequences(data, names)2305        tm.assert_index_equal(result, expected)2306    def test_ensure_index_mixed_closed_intervals(self):2307        # GH271722308        intervals = [2309            pd.Interval(0, 1, closed="left"),2310            pd.Interval(1, 2, closed="right"),2311            pd.Interval(2, 3, closed="neither"),2312            pd.Interval(3, 4, closed="both"),2313        ]2314        result = ensure_index(intervals)2315        expected = Index(intervals, dtype=object)2316        tm.assert_index_equal(result, expected)2317@pytest.mark.parametrize(2318    "opname",2319    [2320        "eq",2321        "ne",2322        "le",2323        "lt",2324        "ge",2325        "gt",2326        "add",2327        "radd",2328        "sub",...test_alter_axes.py
Source:test_alter_axes.py  
...30        df.index = idx31        tm.assert_index_equal(df.index, idx)32        with pytest.raises(ValueError, match="Length mismatch"):33            df.index = idx[::2]34    def test_set_index(self, float_string_frame):35        df = float_string_frame36        idx = Index(np.arange(len(df))[::-1])37        df = df.set_index(idx)38        tm.assert_index_equal(df.index, idx)39        with pytest.raises(ValueError, match="Length mismatch"):40            df.set_index(idx[::2])41    def test_set_index_cast(self):42        # issue casting an index then set_index43        df = DataFrame(44            {"A": [1.1, 2.2, 3.3], "B": [5.0, 6.1, 7.2]}, index=[2010, 2011, 2012]45        )46        df2 = df.set_index(df.index.astype(np.int32))47        tm.assert_frame_equal(df, df2)48    # A has duplicate values, C does not49    @pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])50    @pytest.mark.parametrize("inplace", [True, False])51    @pytest.mark.parametrize("drop", [True, False])52    def test_set_index_drop_inplace(self, frame_of_index_cols, drop, inplace, keys):53        df = frame_of_index_cols54        if isinstance(keys, list):55            idx = MultiIndex.from_arrays([df[x] for x in keys], names=keys)56        else:57            idx = Index(df[keys], name=keys)58        expected = df.drop(keys, axis=1) if drop else df59        expected.index = idx60        if inplace:61            result = df.copy()62            result.set_index(keys, drop=drop, inplace=True)63        else:64            result = df.set_index(keys, drop=drop)65        tm.assert_frame_equal(result, expected)66    # A has duplicate values, C does not67    @pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])68    @pytest.mark.parametrize("drop", [True, False])69    def test_set_index_append(self, frame_of_index_cols, drop, keys):70        df = frame_of_index_cols71        keys = keys if isinstance(keys, list) else [keys]72        idx = MultiIndex.from_arrays(73            [df.index] + [df[x] for x in keys], names=[None] + keys74        )75        expected = df.drop(keys, axis=1) if drop else df.copy()76        expected.index = idx77        result = df.set_index(keys, drop=drop, append=True)78        tm.assert_frame_equal(result, expected)79    # A has duplicate values, C does not80    @pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])81    @pytest.mark.parametrize("drop", [True, False])82    def test_set_index_append_to_multiindex(self, frame_of_index_cols, drop, keys):83        # append to existing multiindex84        df = frame_of_index_cols.set_index(["D"], drop=drop, append=True)85        keys = keys if isinstance(keys, list) else [keys]86        expected = frame_of_index_cols.set_index(["D"] + keys, drop=drop, append=True)87        result = df.set_index(keys, drop=drop, append=True)88        tm.assert_frame_equal(result, expected)89    def test_set_index_after_mutation(self):90        # GH159091        df = DataFrame({"val": [0, 1, 2], "key": ["a", "b", "c"]})92        expected = DataFrame({"val": [1, 2]}, Index(["b", "c"], name="key"))93        df2 = df.loc[df.index.map(lambda indx: indx >= 1)]94        result = df2.set_index("key")95        tm.assert_frame_equal(result, expected)96    # MultiIndex constructor does not work directly on Series -> lambda97    # Add list-of-list constructor because list is ambiguous -> lambda98    # also test index name if append=True (name is duplicate here for B)99    @pytest.mark.parametrize(100        "box",101        [102            Series,103            Index,104            np.array,105            list,106            lambda x: [list(x)],107            lambda x: MultiIndex.from_arrays([x]),108        ],109    )110    @pytest.mark.parametrize(111        "append, index_name", [(True, None), (True, "B"), (True, "test"), (False, None)]112    )113    @pytest.mark.parametrize("drop", [True, False])114    def test_set_index_pass_single_array(115        self, frame_of_index_cols, drop, append, index_name, box116    ):117        df = frame_of_index_cols118        df.index.name = index_name119        key = box(df["B"])120        if box == list:121            # list of strings gets interpreted as list of keys122            msg = "['one', 'two', 'three', 'one', 'two']"123            with pytest.raises(KeyError, match=msg):124                df.set_index(key, drop=drop, append=append)125        else:126            # np.array/list-of-list "forget" the name of B127            name_mi = getattr(key, "names", None)128            name = [getattr(key, "name", None)] if name_mi is None else name_mi129            result = df.set_index(key, drop=drop, append=append)130            # only valid column keys are dropped131            # since B is always passed as array above, nothing is dropped132            expected = df.set_index(["B"], drop=False, append=append)133            expected.index.names = [index_name] + name if append else name134            tm.assert_frame_equal(result, expected)135    # MultiIndex constructor does not work directly on Series -> lambda136    # also test index name if append=True (name is duplicate here for A & B)137    @pytest.mark.parametrize(138        "box", [Series, Index, np.array, list, lambda x: MultiIndex.from_arrays([x])]139    )140    @pytest.mark.parametrize(141        "append, index_name",142        [(True, None), (True, "A"), (True, "B"), (True, "test"), (False, None)],143    )144    @pytest.mark.parametrize("drop", [True, False])145    def test_set_index_pass_arrays(146        self, frame_of_index_cols, drop, append, index_name, box147    ):148        df = frame_of_index_cols149        df.index.name = index_name150        keys = ["A", box(df["B"])]151        # np.array/list "forget" the name of B152        names = ["A", None if box in [np.array, list, tuple, iter] else "B"]153        result = df.set_index(keys, drop=drop, append=append)154        # only valid column keys are dropped155        # since B is always passed as array above, only A is dropped, if at all156        expected = df.set_index(["A", "B"], drop=False, append=append)157        expected = expected.drop("A", axis=1) if drop else expected158        expected.index.names = [index_name] + names if append else names159        tm.assert_frame_equal(result, expected)160    # MultiIndex constructor does not work directly on Series -> lambda161    # We also emulate a "constructor" for the label -> lambda162    # also test index name if append=True (name is duplicate here for A)163    @pytest.mark.parametrize(164        "box2",165        [166            Series,167            Index,168            np.array,169            list,170            iter,171            lambda x: MultiIndex.from_arrays([x]),172            lambda x: x.name,173        ],174    )175    @pytest.mark.parametrize(176        "box1",177        [178            Series,179            Index,180            np.array,181            list,182            iter,183            lambda x: MultiIndex.from_arrays([x]),184            lambda x: x.name,185        ],186    )187    @pytest.mark.parametrize(188        "append, index_name", [(True, None), (True, "A"), (True, "test"), (False, None)]189    )190    @pytest.mark.parametrize("drop", [True, False])191    def test_set_index_pass_arrays_duplicate(192        self, frame_of_index_cols, drop, append, index_name, box1, box2193    ):194        df = frame_of_index_cols195        df.index.name = index_name196        keys = [box1(df["A"]), box2(df["A"])]197        result = df.set_index(keys, drop=drop, append=append)198        # if either box is iter, it has been consumed; re-read199        keys = [box1(df["A"]), box2(df["A"])]200        # need to adapt first drop for case that both keys are 'A' --201        # cannot drop the same column twice;202        # use "is" because == would give ambiguous Boolean error for containers203        first_drop = (204            False if (keys[0] is "A" and keys[1] is "A") else drop  # noqa: F632205        )206        # to test against already-tested behaviour, we add sequentially,207        # hence second append always True; must wrap keys in list, otherwise208        # box = list would be interpreted as keys209        expected = df.set_index([keys[0]], drop=first_drop, append=append)210        expected = expected.set_index([keys[1]], drop=drop, append=True)211        tm.assert_frame_equal(result, expected)212    @pytest.mark.parametrize("append", [True, False])213    @pytest.mark.parametrize("drop", [True, False])214    def test_set_index_pass_multiindex(self, frame_of_index_cols, drop, append):215        df = frame_of_index_cols216        keys = MultiIndex.from_arrays([df["A"], df["B"]], names=["A", "B"])217        result = df.set_index(keys, drop=drop, append=append)218        # setting with a MultiIndex will never drop columns219        expected = df.set_index(["A", "B"], drop=False, append=append)220        tm.assert_frame_equal(result, expected)221    def test_set_index_verify_integrity(self, frame_of_index_cols):222        df = frame_of_index_cols223        with pytest.raises(ValueError, match="Index has duplicate keys"):224            df.set_index("A", verify_integrity=True)225        # with MultiIndex226        with pytest.raises(ValueError, match="Index has duplicate keys"):227            df.set_index([df["A"], df["A"]], verify_integrity=True)228    @pytest.mark.parametrize("append", [True, False])229    @pytest.mark.parametrize("drop", [True, False])230    def test_set_index_raise_keys(self, frame_of_index_cols, drop, append):231        df = frame_of_index_cols232        with pytest.raises(KeyError, match="['foo', 'bar', 'baz']"):233            # column names are A-E, as well as one tuple234            df.set_index(["foo", "bar", "baz"], drop=drop, append=append)235        # non-existent key in list with arrays236        with pytest.raises(KeyError, match="X"):237            df.set_index([df["A"], df["B"], "X"], drop=drop, append=append)238        msg = "[('foo', 'foo', 'foo', 'bar', 'bar')]"239        # tuples always raise KeyError240        with pytest.raises(KeyError, match=msg):241            df.set_index(tuple(df["A"]), drop=drop, append=append)242        # also within a list243        with pytest.raises(KeyError, match=msg):244            df.set_index(["A", df["A"], tuple(df["A"])], drop=drop, append=append)245    @pytest.mark.parametrize("append", [True, False])246    @pytest.mark.parametrize("drop", [True, False])247    @pytest.mark.parametrize("box", [set], ids=["set"])248    def test_set_index_raise_on_type(self, frame_of_index_cols, box, drop, append):249        df = frame_of_index_cols250        msg = 'The parameter "keys" may be a column key, .*'251        # forbidden type, e.g. set252        with pytest.raises(TypeError, match=msg):253            df.set_index(box(df["A"]), drop=drop, append=append)254        # forbidden type in list, e.g. set255        with pytest.raises(TypeError, match=msg):256            df.set_index(["A", df["A"], box(df["A"])], drop=drop, append=append)257    # MultiIndex constructor does not work directly on Series -> lambda258    @pytest.mark.parametrize(259        "box",260        [Series, Index, np.array, iter, lambda x: MultiIndex.from_arrays([x])],261        ids=["Series", "Index", "np.array", "iter", "MultiIndex"],262    )263    @pytest.mark.parametrize("length", [4, 6], ids=["too_short", "too_long"])264    @pytest.mark.parametrize("append", [True, False])265    @pytest.mark.parametrize("drop", [True, False])266    def test_set_index_raise_on_len(267        self, frame_of_index_cols, box, length, drop, append268    ):269        # GH 24984270        df = frame_of_index_cols  # has length 5271        values = np.random.randint(0, 10, (length,))272        msg = "Length mismatch: Expected 5 rows, received array of length.*"273        # wrong length directly274        with pytest.raises(ValueError, match=msg):275            df.set_index(box(values), drop=drop, append=append)276        # wrong length in list277        with pytest.raises(ValueError, match=msg):278            df.set_index(["A", df.A, box(values)], drop=drop, append=append)279    def test_set_index_custom_label_type(self):280        # GH 24969281        class Thing:282            def __init__(self, name, color):283                self.name = name284                self.color = color285            def __str__(self):286                return "<Thing {self.name!r}>".format(self=self)287            # necessary for pretty KeyError288            __repr__ = __str__289        thing1 = Thing("One", "red")290        thing2 = Thing("Two", "blue")291        df = DataFrame({thing1: [0, 1], thing2: [2, 3]})292        expected = DataFrame({thing1: [0, 1]}, index=Index([2, 3], name=thing2))293        # use custom label directly294        result = df.set_index(thing2)295        tm.assert_frame_equal(result, expected)296        # custom label wrapped in list297        result = df.set_index([thing2])298        tm.assert_frame_equal(result, expected)299        # missing key300        thing3 = Thing("Three", "pink")301        msg = "<Thing 'Three'>"302        with pytest.raises(KeyError, match=msg):303            # missing label directly304            df.set_index(thing3)305        with pytest.raises(KeyError, match=msg):306            # missing label in list307            df.set_index([thing3])308    def test_set_index_custom_label_hashable_iterable(self):309        # GH 24969310        # actual example discussed in GH 24984 was e.g. for shapely.geometry311        # objects (e.g. a collection of Points) that can be both hashable and312        # iterable; using frozenset as a stand-in for testing here313        class Thing(frozenset):314            # need to stabilize repr for KeyError (due to random order in sets)315            def __repr__(self):316                tmp = sorted(list(self))317                # double curly brace prints one brace in format string318                return "frozenset({{{}}})".format(", ".join(map(repr, tmp)))319        thing1 = Thing(["One", "red"])320        thing2 = Thing(["Two", "blue"])321        df = DataFrame({thing1: [0, 1], thing2: [2, 3]})322        expected = DataFrame({thing1: [0, 1]}, index=Index([2, 3], name=thing2))323        # use custom label directly324        result = df.set_index(thing2)325        tm.assert_frame_equal(result, expected)326        # custom label wrapped in list327        result = df.set_index([thing2])328        tm.assert_frame_equal(result, expected)329        # missing key330        thing3 = Thing(["Three", "pink"])331        msg = r"frozenset\(\{'Three', 'pink'\}\)"332        with pytest.raises(KeyError, match=msg):333            # missing label directly334            df.set_index(thing3)335        with pytest.raises(KeyError, match=msg):336            # missing label in list337            df.set_index([thing3])338    def test_set_index_custom_label_type_raises(self):339        # GH 24969340        # purposefully inherit from something unhashable341        class Thing(set):342            def __init__(self, name, color):343                self.name = name344                self.color = color345            def __str__(self):346                return "<Thing {self.name!r}>".format(self=self)347        thing1 = Thing("One", "red")348        thing2 = Thing("Two", "blue")349        df = DataFrame([[0, 2], [1, 3]], columns=[thing1, thing2])350        msg = 'The parameter "keys" may be a column key, .*'351        with pytest.raises(TypeError, match=msg):352            # use custom label directly353            df.set_index(thing2)354        with pytest.raises(TypeError, match=msg):355            # custom label wrapped in list356            df.set_index([thing2])357    def test_construction_with_categorical_index(self):358        ci = tm.makeCategoricalIndex(10)359        ci.name = "B"360        # with Categorical361        df = DataFrame({"A": np.random.randn(10), "B": ci.values})362        idf = df.set_index("B")363        tm.assert_index_equal(idf.index, ci)364        # from a CategoricalIndex365        df = DataFrame({"A": np.random.randn(10), "B": ci})366        idf = df.set_index("B")367        tm.assert_index_equal(idf.index, ci)368        # round-trip369        idf = idf.reset_index().set_index("B")370        tm.assert_index_equal(idf.index, ci)371    def test_set_index_cast_datetimeindex(self):372        df = DataFrame(373            {374                "A": [datetime(2000, 1, 1) + timedelta(i) for i in range(1000)],375                "B": np.random.randn(1000),376            }377        )378        idf = df.set_index("A")379        assert isinstance(idf.index, DatetimeIndex)380    def test_convert_dti_to_series(self):381        # don't cast a DatetimeIndex WITH a tz, leave as object382        # GH 6032383        idx = DatetimeIndex(384            to_datetime(["2013-1-1 13:00", "2013-1-2 14:00"]), name="B"385        ).tz_localize("US/Pacific")386        df = DataFrame(np.random.randn(2, 1), columns=["A"])387        expected = Series(388            np.array(389                [390                    Timestamp("2013-01-01 13:00:00-0800", tz="US/Pacific"),391                    Timestamp("2013-01-02 14:00:00-0800", tz="US/Pacific"),392                ],393                dtype="object",394            ),395            name="B",396        )397        # convert index to series398        result = Series(idx)399        tm.assert_series_equal(result, expected)400        # assign to frame401        df["B"] = idx402        result = df["B"]403        tm.assert_series_equal(result, expected)404        # convert to series while keeping the timezone405        result = idx.to_series(keep_tz=True, index=[0, 1])406        tm.assert_series_equal(result, expected)407        # convert to utc408        with tm.assert_produces_warning(FutureWarning):409            df["B"] = idx.to_series(keep_tz=False, index=[0, 1])410        result = df["B"]411        comp = Series(DatetimeIndex(expected.values).tz_localize(None), name="B")412        tm.assert_series_equal(result, comp)413        with tm.assert_produces_warning(FutureWarning) as m:414            result = idx.to_series(index=[0, 1])415        tm.assert_series_equal(result, expected.dt.tz_convert(None))416        msg = (417            "The default of the 'keep_tz' keyword in "418            "DatetimeIndex.to_series will change to True in a future "419            "release."420        )421        assert msg in str(m[0].message)422        with tm.assert_produces_warning(FutureWarning):423            result = idx.to_series(keep_tz=False, index=[0, 1])424        tm.assert_series_equal(result, expected.dt.tz_convert(None))425        # list of datetimes with a tz426        df["B"] = idx.to_pydatetime()427        result = df["B"]428        tm.assert_series_equal(result, expected)429        # GH 6785430        # set the index manually431        import pytz432        df = DataFrame([{"ts": datetime(2014, 4, 1, tzinfo=pytz.utc), "foo": 1}])433        expected = df.set_index("ts")434        df.index = df["ts"]435        df.pop("ts")436        tm.assert_frame_equal(df, expected)437    def test_reset_index_tz(self, tz_aware_fixture):438        # GH 3950439        # reset_index with single level440        tz = tz_aware_fixture441        idx = date_range("1/1/2011", periods=5, freq="D", tz=tz, name="idx")442        df = DataFrame({"a": range(5), "b": ["A", "B", "C", "D", "E"]}, index=idx)443        expected = DataFrame(444            {445                "idx": [446                    datetime(2011, 1, 1),447                    datetime(2011, 1, 2),448                    datetime(2011, 1, 3),449                    datetime(2011, 1, 4),450                    datetime(2011, 1, 5),451                ],452                "a": range(5),453                "b": ["A", "B", "C", "D", "E"],454            },455            columns=["idx", "a", "b"],456        )457        expected["idx"] = expected["idx"].apply(lambda d: Timestamp(d, tz=tz))458        tm.assert_frame_equal(df.reset_index(), expected)459    def test_set_index_timezone(self):460        # GH 12358461        # tz-aware Series should retain the tz462        idx = to_datetime(["2014-01-01 10:10:10"], utc=True).tz_convert("Europe/Rome")463        df = DataFrame({"A": idx})464        assert df.set_index(idx).index[0].hour == 11465        assert DatetimeIndex(Series(df.A))[0].hour == 11466        assert df.set_index(df.A).index[0].hour == 11467    def test_set_index_dst(self):468        di = date_range("2006-10-29 00:00:00", periods=3, freq="H", tz="US/Pacific")469        df = DataFrame(data={"a": [0, 1, 2], "b": [3, 4, 5]}, index=di).reset_index()470        # single level471        res = df.set_index("index")472        exp = DataFrame(473            data={"a": [0, 1, 2], "b": [3, 4, 5]}, index=Index(di, name="index")474        )475        tm.assert_frame_equal(res, exp)476        # GH 12920477        res = df.set_index(["index", "a"])478        exp_index = MultiIndex.from_arrays([di, [0, 1, 2]], names=["index", "a"])479        exp = DataFrame({"b": [3, 4, 5]}, index=exp_index)480        tm.assert_frame_equal(res, exp)481    def test_reset_index_with_intervals(self):482        idx = IntervalIndex.from_breaks(np.arange(11), name="x")483        original = DataFrame({"x": idx, "y": np.arange(10)})[["x", "y"]]484        result = original.set_index("x")485        expected = DataFrame({"y": np.arange(10)}, index=idx)486        tm.assert_frame_equal(result, expected)487        result2 = result.reset_index()488        tm.assert_frame_equal(result2, original)489    def test_set_index_multiindexcolumns(self):490        columns = MultiIndex.from_tuples([("foo", 1), ("foo", 2), ("bar", 1)])491        df = DataFrame(np.random.randn(3, 3), columns=columns)492        result = df.set_index(df.columns[0])493        expected = df.iloc[:, 1:]494        expected.index = df.iloc[:, 0].values495        expected.index.names = [df.columns[0]]496        tm.assert_frame_equal(result, expected)497    def test_set_index_empty_column(self):498        # GH 1971499        df = DataFrame(500            [501                {"a": 1, "p": 0},502                {"a": 2, "m": 10},503                {"a": 3, "m": 11, "p": 20},504                {"a": 4, "m": 12, "p": 21},505            ],506            columns=("a", "m", "p", "x"),507        )508        result = df.set_index(["a", "x"])509        expected = df[["m", "p"]]510        expected.index = MultiIndex.from_arrays([df["a"], df["x"]], names=["a", "x"])511        tm.assert_frame_equal(result, expected)512    def test_set_columns(self, float_string_frame):513        cols = Index(np.arange(len(float_string_frame.columns)))514        float_string_frame.columns = cols515        with pytest.raises(ValueError, match="Length mismatch"):516            float_string_frame.columns = cols[::2]517    def test_dti_set_index_reindex(self):518        # GH 6631519        df = DataFrame(np.random.random(6))520        idx1 = date_range("2011/01/01", periods=6, freq="M", tz="US/Eastern")521        idx2 = date_range("2013", periods=6, freq="A", tz="Asia/Tokyo")522        df = df.set_index(idx1)523        tm.assert_index_equal(df.index, idx1)524        df = df.reindex(idx2)525        tm.assert_index_equal(df.index, idx2)526        # GH 11314527        # with tz528        index = date_range(529            datetime(2015, 10, 1), datetime(2015, 10, 1, 23), freq="H", tz="US/Eastern"530        )531        df = DataFrame(np.random.randn(24, 1), columns=["a"], index=index)532        new_index = date_range(533            datetime(2015, 10, 2), datetime(2015, 10, 2, 23), freq="H", tz="US/Eastern"534        )535        result = df.set_index(new_index)536        assert result.index.freq == index.freq537    # Renaming538    def test_rename(self, float_frame):539        mapping = {"A": "a", "B": "b", "C": "c", "D": "d"}540        renamed = float_frame.rename(columns=mapping)541        renamed2 = float_frame.rename(columns=str.lower)542        tm.assert_frame_equal(renamed, renamed2)543        tm.assert_frame_equal(544            renamed2.rename(columns=str.upper), float_frame, check_names=False545        )546        # index547        data = {"A": {"foo": 0, "bar": 1}}548        # gets sorted alphabetical549        df = DataFrame(data)550        renamed = df.rename(index={"foo": "bar", "bar": "foo"})551        tm.assert_index_equal(renamed.index, Index(["foo", "bar"]))552        renamed = df.rename(index=str.upper)553        tm.assert_index_equal(renamed.index, Index(["BAR", "FOO"]))554        # have to pass something555        with pytest.raises(TypeError, match="must pass an index to rename"):556            float_frame.rename()557        # partial columns558        renamed = float_frame.rename(columns={"C": "foo", "D": "bar"})559        tm.assert_index_equal(renamed.columns, Index(["A", "B", "foo", "bar"]))560        # other axis561        renamed = float_frame.T.rename(index={"C": "foo", "D": "bar"})562        tm.assert_index_equal(renamed.index, Index(["A", "B", "foo", "bar"]))563        # index with name564        index = Index(["foo", "bar"], name="name")565        renamer = DataFrame(data, index=index)566        renamed = renamer.rename(index={"foo": "bar", "bar": "foo"})567        tm.assert_index_equal(renamed.index, Index(["bar", "foo"], name="name"))568        assert renamed.index.name == renamer.index.name569    def test_rename_axis_inplace(self, float_frame):570        # GH 15704571        expected = float_frame.rename_axis("foo")572        result = float_frame.copy()573        no_return = result.rename_axis("foo", inplace=True)574        assert no_return is None575        tm.assert_frame_equal(result, expected)576        expected = float_frame.rename_axis("bar", axis=1)577        result = float_frame.copy()578        no_return = result.rename_axis("bar", axis=1, inplace=True)579        assert no_return is None580        tm.assert_frame_equal(result, expected)581    def test_rename_axis_raises(self):582        # https://github.com/pandas-dev/pandas/issues/17833583        df = DataFrame({"A": [1, 2], "B": [1, 2]})584        with pytest.raises(ValueError, match="Use `.rename`"):585            df.rename_axis(id, axis=0)586        with pytest.raises(ValueError, match="Use `.rename`"):587            df.rename_axis({0: 10, 1: 20}, axis=0)588        with pytest.raises(ValueError, match="Use `.rename`"):589            df.rename_axis(id, axis=1)590        with pytest.raises(ValueError, match="Use `.rename`"):591            df["A"].rename_axis(id)592    def test_rename_axis_mapper(self):593        # GH 19978594        mi = MultiIndex.from_product([["a", "b", "c"], [1, 2]], names=["ll", "nn"])595        df = DataFrame(596            {"x": [i for i in range(len(mi))], "y": [i * 10 for i in range(len(mi))]},597            index=mi,598        )599        # Test for rename of the Index object of columns600        result = df.rename_axis("cols", axis=1)601        tm.assert_index_equal(result.columns, Index(["x", "y"], name="cols"))602        # Test for rename of the Index object of columns using dict603        result = result.rename_axis(columns={"cols": "new"}, axis=1)604        tm.assert_index_equal(result.columns, Index(["x", "y"], name="new"))605        # Test for renaming index using dict606        result = df.rename_axis(index={"ll": "foo"})607        assert result.index.names == ["foo", "nn"]608        # Test for renaming index using a function609        result = df.rename_axis(index=str.upper, axis=0)610        assert result.index.names == ["LL", "NN"]611        # Test for renaming index providing complete list612        result = df.rename_axis(index=["foo", "goo"])613        assert result.index.names == ["foo", "goo"]614        # Test for changing index and columns at same time615        sdf = df.reset_index().set_index("nn").drop(columns=["ll", "y"])616        result = sdf.rename_axis(index="foo", columns="meh")617        assert result.index.name == "foo"618        assert result.columns.name == "meh"619        # Test different error cases620        with pytest.raises(TypeError, match="Must pass"):621            df.rename_axis(index="wrong")622        with pytest.raises(ValueError, match="Length of names"):623            df.rename_axis(index=["wrong"])624        with pytest.raises(TypeError, match="bogus"):625            df.rename_axis(bogus=None)626    @pytest.mark.parametrize(627        "kwargs, rename_index, rename_columns",628        [629            ({"mapper": None, "axis": 0}, True, False),630            ({"mapper": None, "axis": 1}, False, True),631            ({"index": None}, True, False),632            ({"columns": None}, False, True),633            ({"index": None, "columns": None}, True, True),634            ({}, False, False),635        ],636    )637    def test_rename_axis_none(self, kwargs, rename_index, rename_columns):638        # GH 25034639        index = Index(list("abc"), name="foo")640        columns = Index(["col1", "col2"], name="bar")641        data = np.arange(6).reshape(3, 2)642        df = DataFrame(data, index, columns)643        result = df.rename_axis(**kwargs)644        expected_index = index.rename(None) if rename_index else index645        expected_columns = columns.rename(None) if rename_columns else columns646        expected = DataFrame(data, expected_index, expected_columns)647        tm.assert_frame_equal(result, expected)648    def test_rename_multiindex(self):649        tuples_index = [("foo1", "bar1"), ("foo2", "bar2")]650        tuples_columns = [("fizz1", "buzz1"), ("fizz2", "buzz2")]651        index = MultiIndex.from_tuples(tuples_index, names=["foo", "bar"])652        columns = MultiIndex.from_tuples(tuples_columns, names=["fizz", "buzz"])653        df = DataFrame([(0, 0), (1, 1)], index=index, columns=columns)654        #655        # without specifying level -> across all levels656        renamed = df.rename(657            index={"foo1": "foo3", "bar2": "bar3"},658            columns={"fizz1": "fizz3", "buzz2": "buzz3"},659        )660        new_index = MultiIndex.from_tuples(661            [("foo3", "bar1"), ("foo2", "bar3")], names=["foo", "bar"]662        )663        new_columns = MultiIndex.from_tuples(664            [("fizz3", "buzz1"), ("fizz2", "buzz3")], names=["fizz", "buzz"]665        )666        tm.assert_index_equal(renamed.index, new_index)667        tm.assert_index_equal(renamed.columns, new_columns)668        assert renamed.index.names == df.index.names669        assert renamed.columns.names == df.columns.names670        #671        # with specifying a level (GH13766)672        # dict673        new_columns = MultiIndex.from_tuples(674            [("fizz3", "buzz1"), ("fizz2", "buzz2")], names=["fizz", "buzz"]675        )676        renamed = df.rename(columns={"fizz1": "fizz3", "buzz2": "buzz3"}, level=0)677        tm.assert_index_equal(renamed.columns, new_columns)678        renamed = df.rename(columns={"fizz1": "fizz3", "buzz2": "buzz3"}, level="fizz")679        tm.assert_index_equal(renamed.columns, new_columns)680        new_columns = MultiIndex.from_tuples(681            [("fizz1", "buzz1"), ("fizz2", "buzz3")], names=["fizz", "buzz"]682        )683        renamed = df.rename(columns={"fizz1": "fizz3", "buzz2": "buzz3"}, level=1)684        tm.assert_index_equal(renamed.columns, new_columns)685        renamed = df.rename(columns={"fizz1": "fizz3", "buzz2": "buzz3"}, level="buzz")686        tm.assert_index_equal(renamed.columns, new_columns)687        # function688        func = str.upper689        new_columns = MultiIndex.from_tuples(690            [("FIZZ1", "buzz1"), ("FIZZ2", "buzz2")], names=["fizz", "buzz"]691        )692        renamed = df.rename(columns=func, level=0)693        tm.assert_index_equal(renamed.columns, new_columns)694        renamed = df.rename(columns=func, level="fizz")695        tm.assert_index_equal(renamed.columns, new_columns)696        new_columns = MultiIndex.from_tuples(697            [("fizz1", "BUZZ1"), ("fizz2", "BUZZ2")], names=["fizz", "buzz"]698        )699        renamed = df.rename(columns=func, level=1)700        tm.assert_index_equal(renamed.columns, new_columns)701        renamed = df.rename(columns=func, level="buzz")702        tm.assert_index_equal(renamed.columns, new_columns)703        # index704        new_index = MultiIndex.from_tuples(705            [("foo3", "bar1"), ("foo2", "bar2")], names=["foo", "bar"]706        )707        renamed = df.rename(index={"foo1": "foo3", "bar2": "bar3"}, level=0)708        tm.assert_index_equal(renamed.index, new_index)709    def test_rename_nocopy(self, float_frame):710        renamed = float_frame.rename(columns={"C": "foo"}, copy=False)711        renamed["foo"] = 1.0712        assert (float_frame["C"] == 1.0).all()713    def test_rename_inplace(self, float_frame):714        float_frame.rename(columns={"C": "foo"})715        assert "C" in float_frame716        assert "foo" not in float_frame717        c_id = id(float_frame["C"])718        float_frame = float_frame.copy()719        float_frame.rename(columns={"C": "foo"}, inplace=True)720        assert "C" not in float_frame721        assert "foo" in float_frame722        assert id(float_frame["foo"]) != c_id723    def test_rename_bug(self):724        # GH 5344725        # rename set ref_locs, and set_index was not resetting726        df = DataFrame({0: ["foo", "bar"], 1: ["bah", "bas"], 2: [1, 2]})727        df = df.rename(columns={0: "a"})728        df = df.rename(columns={1: "b"})729        df = df.set_index(["a", "b"])730        df.columns = ["2001-01-01"]731        expected = DataFrame(732            [[1], [2]],733            index=MultiIndex.from_tuples(734                [("foo", "bah"), ("bar", "bas")], names=["a", "b"]735            ),736            columns=["2001-01-01"],737        )738        tm.assert_frame_equal(df, expected)739    def test_rename_bug2(self):740        # GH 19497741        # rename was changing Index to MultiIndex if Index contained tuples742        df = DataFrame(data=np.arange(3), index=[(0, 0), (1, 1), (2, 2)], columns=["a"])743        df = df.rename({(1, 1): (5, 4)}, axis="index")744        expected = DataFrame(745            data=np.arange(3), index=[(0, 0), (5, 4), (2, 2)], columns=["a"]746        )747        tm.assert_frame_equal(df, expected)748    def test_rename_errors_raises(self):749        df = DataFrame(columns=["A", "B", "C", "D"])750        with pytest.raises(KeyError, match="'E'] not found in axis"):751            df.rename(columns={"A": "a", "E": "e"}, errors="raise")752    @pytest.mark.parametrize(753        "mapper, errors, expected_columns",754        [755            ({"A": "a", "E": "e"}, "ignore", ["a", "B", "C", "D"]),756            ({"A": "a"}, "raise", ["a", "B", "C", "D"]),757            (str.lower, "raise", ["a", "b", "c", "d"]),758        ],759    )760    def test_rename_errors(self, mapper, errors, expected_columns):761        # GH 13473762        # rename now works with errors parameter763        df = DataFrame(columns=["A", "B", "C", "D"])764        result = df.rename(columns=mapper, errors=errors)765        expected = DataFrame(columns=expected_columns)766        tm.assert_frame_equal(result, expected)767    def test_reorder_levels(self):768        index = MultiIndex(769            levels=[["bar"], ["one", "two", "three"], [0, 1]],770            codes=[[0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 1, 2], [0, 1, 0, 1, 0, 1]],771            names=["L0", "L1", "L2"],772        )773        df = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=index)774        # no change, position775        result = df.reorder_levels([0, 1, 2])776        tm.assert_frame_equal(df, result)777        # no change, labels778        result = df.reorder_levels(["L0", "L1", "L2"])779        tm.assert_frame_equal(df, result)780        # rotate, position781        result = df.reorder_levels([1, 2, 0])782        e_idx = MultiIndex(783            levels=[["one", "two", "three"], [0, 1], ["bar"]],784            codes=[[0, 1, 2, 0, 1, 2], [0, 1, 0, 1, 0, 1], [0, 0, 0, 0, 0, 0]],785            names=["L1", "L2", "L0"],786        )787        expected = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=e_idx)788        tm.assert_frame_equal(result, expected)789        result = df.reorder_levels([0, 0, 0])790        e_idx = MultiIndex(791            levels=[["bar"], ["bar"], ["bar"]],792            codes=[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]],793            names=["L0", "L0", "L0"],794        )795        expected = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=e_idx)796        tm.assert_frame_equal(result, expected)797        result = df.reorder_levels(["L0", "L0", "L0"])798        tm.assert_frame_equal(result, expected)799    def test_reset_index(self, float_frame):800        stacked = float_frame.stack()[::2]801        stacked = DataFrame({"foo": stacked, "bar": stacked})802        names = ["first", "second"]803        stacked.index.names = names804        deleveled = stacked.reset_index()805        for i, (lev, level_codes) in enumerate(806            zip(stacked.index.levels, stacked.index.codes)807        ):808            values = lev.take(level_codes)809            name = names[i]810            tm.assert_index_equal(values, Index(deleveled[name]))811        stacked.index.names = [None, None]812        deleveled2 = stacked.reset_index()813        tm.assert_series_equal(814            deleveled["first"], deleveled2["level_0"], check_names=False815        )816        tm.assert_series_equal(817            deleveled["second"], deleveled2["level_1"], check_names=False818        )819        # default name assigned820        rdf = float_frame.reset_index()821        exp = Series(float_frame.index.values, name="index")822        tm.assert_series_equal(rdf["index"], exp)823        # default name assigned, corner case824        df = float_frame.copy()825        df["index"] = "foo"826        rdf = df.reset_index()827        exp = Series(float_frame.index.values, name="level_0")828        tm.assert_series_equal(rdf["level_0"], exp)829        # but this is ok830        float_frame.index.name = "index"831        deleveled = float_frame.reset_index()832        tm.assert_series_equal(deleveled["index"], Series(float_frame.index))833        tm.assert_index_equal(deleveled.index, Index(np.arange(len(deleveled))))834        # preserve column names835        float_frame.columns.name = "columns"836        resetted = float_frame.reset_index()837        assert resetted.columns.name == "columns"838        # only remove certain columns839        df = float_frame.reset_index().set_index(["index", "A", "B"])840        rs = df.reset_index(["A", "B"])841        # TODO should reset_index check_names ?842        tm.assert_frame_equal(rs, float_frame, check_names=False)843        rs = df.reset_index(["index", "A", "B"])844        tm.assert_frame_equal(rs, float_frame.reset_index(), check_names=False)845        rs = df.reset_index(["index", "A", "B"])846        tm.assert_frame_equal(rs, float_frame.reset_index(), check_names=False)847        rs = df.reset_index("A")848        xp = float_frame.reset_index().set_index(["index", "B"])849        tm.assert_frame_equal(rs, xp, check_names=False)850        # test resetting in place851        df = float_frame.copy()852        resetted = float_frame.reset_index()853        df.reset_index(inplace=True)854        tm.assert_frame_equal(df, resetted, check_names=False)855        df = float_frame.reset_index().set_index(["index", "A", "B"])856        rs = df.reset_index("A", drop=True)857        xp = float_frame.copy()858        del xp["A"]859        xp = xp.set_index(["B"], append=True)860        tm.assert_frame_equal(rs, xp, check_names=False)861    def test_reset_index_name(self):862        df = DataFrame(863            [[1, 2, 3, 4], [5, 6, 7, 8]],864            columns=["A", "B", "C", "D"],865            index=Index(range(2), name="x"),866        )867        assert df.reset_index().index.name is None868        assert df.reset_index(drop=True).index.name is None869        df.reset_index(inplace=True)870        assert df.index.name is None871    def test_reset_index_level(self):872        df = DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=["A", "B", "C", "D"])873        for levels in ["A", "B"], [0, 1]:874            # With MultiIndex875            result = df.set_index(["A", "B"]).reset_index(level=levels[0])876            tm.assert_frame_equal(result, df.set_index("B"))877            result = df.set_index(["A", "B"]).reset_index(level=levels[:1])878            tm.assert_frame_equal(result, df.set_index("B"))879            result = df.set_index(["A", "B"]).reset_index(level=levels)880            tm.assert_frame_equal(result, df)881            result = df.set_index(["A", "B"]).reset_index(level=levels, drop=True)882            tm.assert_frame_equal(result, df[["C", "D"]])883            # With single-level Index (GH 16263)884            result = df.set_index("A").reset_index(level=levels[0])885            tm.assert_frame_equal(result, df)886            result = df.set_index("A").reset_index(level=levels[:1])887            tm.assert_frame_equal(result, df)888            result = df.set_index(["A"]).reset_index(level=levels[0], drop=True)889            tm.assert_frame_equal(result, df[["B", "C", "D"]])890        # Missing levels - for both MultiIndex and single-level Index:891        for idx_lev in ["A", "B"], ["A"]:892            with pytest.raises(KeyError, match="Level E "):893                df.set_index(idx_lev).reset_index(level=["A", "E"])894            with pytest.raises(IndexError, match="Too many levels"):895                df.set_index(idx_lev).reset_index(level=[0, 1, 2])896    def test_reset_index_right_dtype(self):897        time = np.arange(0.0, 10, np.sqrt(2) / 2)898        s1 = Series(899            (9.81 * time ** 2) / 2, index=Index(time, name="time"), name="speed"900        )901        df = DataFrame(s1)902        resetted = s1.reset_index()903        assert resetted["time"].dtype == np.float64904        resetted = df.reset_index()905        assert resetted["time"].dtype == np.float64906    def test_reset_index_multiindex_col(self):907        vals = np.random.randn(3, 3).astype(object)908        idx = ["x", "y", "z"]909        full = np.hstack(([[x] for x in idx], vals))910        df = DataFrame(911            vals,912            Index(idx, name="a"),913            columns=[["b", "b", "c"], ["mean", "median", "mean"]],914        )915        rs = df.reset_index()916        xp = DataFrame(917            full, columns=[["a", "b", "b", "c"], ["", "mean", "median", "mean"]]918        )919        tm.assert_frame_equal(rs, xp)920        rs = df.reset_index(col_fill=None)921        xp = DataFrame(922            full, columns=[["a", "b", "b", "c"], ["a", "mean", "median", "mean"]]923        )924        tm.assert_frame_equal(rs, xp)925        rs = df.reset_index(col_level=1, col_fill="blah")926        xp = DataFrame(927            full, columns=[["blah", "b", "b", "c"], ["a", "mean", "median", "mean"]]928        )929        tm.assert_frame_equal(rs, xp)930        df = DataFrame(931            vals,932            MultiIndex.from_arrays([[0, 1, 2], ["x", "y", "z"]], names=["d", "a"]),933            columns=[["b", "b", "c"], ["mean", "median", "mean"]],934        )935        rs = df.reset_index("a")936        xp = DataFrame(937            full,938            Index([0, 1, 2], name="d"),939            columns=[["a", "b", "b", "c"], ["", "mean", "median", "mean"]],940        )941        tm.assert_frame_equal(rs, xp)942        rs = df.reset_index("a", col_fill=None)943        xp = DataFrame(944            full,945            Index(range(3), name="d"),946            columns=[["a", "b", "b", "c"], ["a", "mean", "median", "mean"]],947        )948        tm.assert_frame_equal(rs, xp)949        rs = df.reset_index("a", col_fill="blah", col_level=1)950        xp = DataFrame(951            full,952            Index(range(3), name="d"),953            columns=[["blah", "b", "b", "c"], ["a", "mean", "median", "mean"]],954        )955        tm.assert_frame_equal(rs, xp)956    def test_reset_index_multiindex_nan(self):957        # GH6322, testing reset_index on MultiIndexes958        # when we have a nan or all nan959        df = DataFrame(960            {"A": ["a", "b", "c"], "B": [0, 1, np.nan], "C": np.random.rand(3)}961        )962        rs = df.set_index(["A", "B"]).reset_index()963        tm.assert_frame_equal(rs, df)964        df = DataFrame(965            {"A": [np.nan, "b", "c"], "B": [0, 1, 2], "C": np.random.rand(3)}966        )967        rs = df.set_index(["A", "B"]).reset_index()968        tm.assert_frame_equal(rs, df)969        df = DataFrame({"A": ["a", "b", "c"], "B": [0, 1, 2], "C": [np.nan, 1.1, 2.2]})970        rs = df.set_index(["A", "B"]).reset_index()971        tm.assert_frame_equal(rs, df)972        df = DataFrame(973            {974                "A": ["a", "b", "c"],975                "B": [np.nan, np.nan, np.nan],976                "C": np.random.rand(3),977            }978        )979        rs = df.set_index(["A", "B"]).reset_index()980        tm.assert_frame_equal(rs, df)981    def test_reset_index_with_datetimeindex_cols(self):982        # GH5818983        #984        df = DataFrame(985            [[1, 2], [3, 4]],986            columns=date_range("1/1/2013", "1/2/2013"),987            index=["A", "B"],988        )989        result = df.reset_index()990        expected = DataFrame(991            [["A", 1, 2], ["B", 3, 4]],992            columns=["index", datetime(2013, 1, 1), datetime(2013, 1, 2)],993        )994        tm.assert_frame_equal(result, expected)995    def test_reset_index_range(self):996        # GH 12071997        df = DataFrame([[0, 0], [1, 1]], columns=["A", "B"], index=RangeIndex(stop=2))998        result = df.reset_index()999        assert isinstance(result.index, RangeIndex)1000        expected = DataFrame(1001            [[0, 0, 0], [1, 1, 1]],1002            columns=["index", "A", "B"],1003            index=RangeIndex(stop=2),1004        )1005        tm.assert_frame_equal(result, expected)1006    def test_set_index_names(self):1007        df = tm.makeDataFrame()1008        df.index.name = "name"1009        assert df.set_index(df.index).index.names == ["name"]1010        mi = MultiIndex.from_arrays(df[["A", "B"]].T.values, names=["A", "B"])1011        mi2 = MultiIndex.from_arrays(1012            df[["A", "B", "A", "B"]].T.values, names=["A", "B", "C", "D"]1013        )1014        df = df.set_index(["A", "B"])1015        assert df.set_index(df.index).index.names == ["A", "B"]1016        # Check that set_index isn't converting a MultiIndex into an Index1017        assert isinstance(df.set_index(df.index).index, MultiIndex)1018        # Check actual equality1019        tm.assert_index_equal(df.set_index(df.index).index, mi)1020        idx2 = df.index.rename(["C", "D"])1021        # Check that [MultiIndex, MultiIndex] yields a MultiIndex rather1022        # than a pair of tuples1023        assert isinstance(df.set_index([df.index, idx2]).index, MultiIndex)1024        # Check equality1025        tm.assert_index_equal(df.set_index([df.index, idx2]).index, mi2)1026    def test_rename_objects(self, float_string_frame):1027        renamed = float_string_frame.rename(columns=str.upper)1028        assert "FOO" in renamed1029        assert "foo" not in renamed1030    def test_rename_axis_style(self):1031        # https://github.com/pandas-dev/pandas/issues/123921032        df = DataFrame({"A": [1, 2], "B": [1, 2]}, index=["X", "Y"])1033        expected = DataFrame({"a": [1, 2], "b": [1, 2]}, index=["X", "Y"])1034        result = df.rename(str.lower, axis=1)1035        tm.assert_frame_equal(result, expected)1036        result = df.rename(str.lower, axis="columns")1037        tm.assert_frame_equal(result, expected)1038        result = df.rename({"A": "a", "B": "b"}, axis=1)1039        tm.assert_frame_equal(result, expected)1040        result = df.rename({"A": "a", "B": "b"}, axis="columns")1041        tm.assert_frame_equal(result, expected)1042        # Index1043        expected = DataFrame({"A": [1, 2], "B": [1, 2]}, index=["x", "y"])1044        result = df.rename(str.lower, axis=0)1045        tm.assert_frame_equal(result, expected)1046        result = df.rename(str.lower, axis="index")1047        tm.assert_frame_equal(result, expected)1048        result = df.rename({"X": "x", "Y": "y"}, axis=0)1049        tm.assert_frame_equal(result, expected)1050        result = df.rename({"X": "x", "Y": "y"}, axis="index")1051        tm.assert_frame_equal(result, expected)1052        result = df.rename(mapper=str.lower, axis="index")1053        tm.assert_frame_equal(result, expected)1054    def test_rename_mapper_multi(self):1055        df = DataFrame({"A": ["a", "b"], "B": ["c", "d"], "C": [1, 2]}).set_index(1056            ["A", "B"]1057        )1058        result = df.rename(str.upper)1059        expected = df.rename(index=str.upper)1060        tm.assert_frame_equal(result, expected)1061    def test_rename_positional_named(self):1062        # https://github.com/pandas-dev/pandas/issues/123921063        df = DataFrame({"a": [1, 2], "b": [1, 2]}, index=["X", "Y"])1064        result = df.rename(str.lower, columns=str.upper)1065        expected = DataFrame({"A": [1, 2], "B": [1, 2]}, index=["x", "y"])1066        tm.assert_frame_equal(result, expected)1067    def test_rename_axis_style_raises(self):1068        # see gh-123921069        df = DataFrame({"A": [1, 2], "B": [1, 2]}, index=["0", "1"])1070        # Named target and axis1071        over_spec_msg = "Cannot specify both 'axis' and any of 'index' or 'columns'"1072        with pytest.raises(TypeError, match=over_spec_msg):1073            df.rename(index=str.lower, axis=1)1074        with pytest.raises(TypeError, match=over_spec_msg):1075            df.rename(index=str.lower, axis="columns")1076        with pytest.raises(TypeError, match=over_spec_msg):1077            df.rename(columns=str.lower, axis="columns")1078        with pytest.raises(TypeError, match=over_spec_msg):1079            df.rename(index=str.lower, axis=0)1080        # Multiple targets and axis1081        with pytest.raises(TypeError, match=over_spec_msg):1082            df.rename(str.lower, str.lower, axis="columns")1083        # Too many targets1084        over_spec_msg = "Cannot specify all of 'mapper', 'index', 'columns'."1085        with pytest.raises(TypeError, match=over_spec_msg):1086            df.rename(str.lower, str.lower, str.lower)1087        # Duplicates1088        with pytest.raises(TypeError, match="multiple values"):1089            df.rename(id, mapper=id)1090    def test_reindex_api_equivalence(self):1091        # equivalence of the labels/axis and index/columns API's1092        df = DataFrame(1093            [[1, 2, 3], [3, 4, 5], [5, 6, 7]],1094            index=["a", "b", "c"],1095            columns=["d", "e", "f"],1096        )1097        res1 = df.reindex(["b", "a"])1098        res2 = df.reindex(index=["b", "a"])1099        res3 = df.reindex(labels=["b", "a"])1100        res4 = df.reindex(labels=["b", "a"], axis=0)1101        res5 = df.reindex(["b", "a"], axis=0)1102        for res in [res2, res3, res4, res5]:1103            tm.assert_frame_equal(res1, res)1104        res1 = df.reindex(columns=["e", "d"])1105        res2 = df.reindex(["e", "d"], axis=1)1106        res3 = df.reindex(labels=["e", "d"], axis=1)1107        for res in [res2, res3]:1108            tm.assert_frame_equal(res1, res)1109        res1 = df.reindex(index=["b", "a"], columns=["e", "d"])1110        res2 = df.reindex(columns=["e", "d"], index=["b", "a"])1111        res3 = df.reindex(labels=["b", "a"], axis=0).reindex(labels=["e", "d"], axis=1)1112        for res in [res2, res3]:1113            tm.assert_frame_equal(res1, res)1114    def test_rename_positional(self):1115        df = DataFrame(columns=["A", "B"])1116        with tm.assert_produces_warning(FutureWarning) as rec:1117            result = df.rename(None, str.lower)1118        expected = DataFrame(columns=["a", "b"])1119        tm.assert_frame_equal(result, expected)1120        assert len(rec) == 11121        message = str(rec[0].message)1122        assert "rename" in message1123        assert "Use named arguments" in message1124    def test_assign_columns(self, float_frame):1125        float_frame["hi"] = "there"1126        df = float_frame.copy()1127        df.columns = ["foo", "bar", "baz", "quux", "foo2"]1128        tm.assert_series_equal(float_frame["C"], df["baz"], check_names=False)1129        tm.assert_series_equal(float_frame["hi"], df["foo2"], check_names=False)1130    def test_set_index_preserve_categorical_dtype(self):1131        # GH13743, GH138541132        df = DataFrame(1133            {1134                "A": [1, 2, 1, 1, 2],1135                "B": [10, 16, 22, 28, 34],1136                "C1": Categorical(list("abaab"), categories=list("bac"), ordered=False),1137                "C2": Categorical(list("abaab"), categories=list("bac"), ordered=True),1138            }1139        )1140        for cols in ["C1", "C2", ["A", "C1"], ["A", "C2"], ["C1", "C2"]]:1141            result = df.set_index(cols).reset_index()1142            result = result.reindex(columns=df.columns)1143            tm.assert_frame_equal(result, df)1144    def test_ambiguous_warns(self):1145        df = DataFrame({"A": [1, 2]})1146        with tm.assert_produces_warning(FutureWarning):1147            df.rename(id, id)1148        with tm.assert_produces_warning(FutureWarning):1149            df.rename({0: 10}, {"A": "B"})1150    def test_rename_signature(self):1151        sig = inspect.signature(DataFrame.rename)1152        parameters = set(sig.parameters)1153        assert parameters == {1154            "self",1155            "mapper",1156            "index",1157            "columns",1158            "axis",1159            "inplace",1160            "copy",1161            "level",1162            "errors",1163        }1164    def test_reindex_signature(self):1165        sig = inspect.signature(DataFrame.reindex)1166        parameters = set(sig.parameters)1167        assert parameters == {1168            "self",1169            "labels",1170            "index",1171            "columns",1172            "axis",1173            "limit",1174            "copy",1175            "level",1176            "method",1177            "fill_value",1178            "tolerance",1179        }1180    def test_droplevel(self):1181        # GH203421182        df = DataFrame([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])1183        df = df.set_index([0, 1]).rename_axis(["a", "b"])1184        df.columns = MultiIndex.from_tuples(1185            [("c", "e"), ("d", "f")], names=["level_1", "level_2"]1186        )1187        # test that dropping of a level in index works1188        expected = df.reset_index("a", drop=True)1189        result = df.droplevel("a", axis="index")1190        tm.assert_frame_equal(result, expected)1191        # test that dropping of a level in columns works1192        expected = df.copy()1193        expected.columns = Index(["c", "d"], name="level_1")1194        result = df.droplevel("level_2", axis="columns")1195        tm.assert_frame_equal(result, expected)1196@pytest.mark.filterwarnings("ignore:Sparse:FutureWarning")1197class TestIntervalIndex:1198    def test_setitem(self):1199        df = DataFrame({"A": range(10)})1200        s = cut(df.A, 5)1201        assert isinstance(s.cat.categories, IntervalIndex)1202        # B & D end up as Categoricals1203        # the remainer are converted to in-line objects1204        # contining an IntervalIndex.values1205        df["B"] = s1206        df["C"] = np.array(s)1207        df["D"] = s.values1208        df["E"] = np.array(s.values)1209        assert is_categorical_dtype(df["B"])1210        assert is_interval_dtype(df["B"].cat.categories)1211        assert is_categorical_dtype(df["D"])1212        assert is_interval_dtype(df["D"].cat.categories)1213        assert is_object_dtype(df["C"])1214        assert is_object_dtype(df["E"])1215        # they compare equal as Index1216        # when converted to numpy objects1217        c = lambda x: Index(np.array(x))1218        tm.assert_index_equal(c(df.B), c(df.B), check_names=False)1219        tm.assert_index_equal(c(df.B), c(df.C), check_names=False)1220        tm.assert_index_equal(c(df.B), c(df.D), check_names=False)1221        tm.assert_index_equal(c(df.B), c(df.D), check_names=False)1222        # B & D are the same Series1223        tm.assert_series_equal(df["B"], df["B"], check_names=False)1224        tm.assert_series_equal(df["B"], df["D"], check_names=False)1225        # C & E are the same Series1226        tm.assert_series_equal(df["C"], df["C"], check_names=False)1227        tm.assert_series_equal(df["C"], df["E"], check_names=False)1228    def test_set_reset_index(self):1229        df = DataFrame({"A": range(10)})1230        s = cut(df.A, 5)1231        df["B"] = s1232        df = df.set_index("B")1233        df = df.reset_index()1234    def test_set_axis_inplace(self):1235        # GH146361236        df = DataFrame(1237            {"A": [1.1, 2.2, 3.3], "B": [5.0, 6.1, 7.2], "C": [4.4, 5.5, 6.6]},1238            index=[2010, 2011, 2012],1239        )1240        expected = {0: df.copy(), 1: df.copy()}1241        expected[0].index = list("abc")1242        expected[1].columns = list("abc")1243        expected["index"] = expected[0]1244        expected["columns"] = expected[1]1245        for axis in expected:1246            # inplace=True1247            # The FutureWarning comes from the fact that we would like to have...test_range.py
Source:test_range.py  
...19            index=RangeIndex(0, 20, 2, name="foo"),20            index_dec=RangeIndex(18, -1, -2, name="bar"),21        )22        self.setup_indices()23    def create_index(self):24        return RangeIndex(5)25    def test_can_hold_identifiers(self):26        idx = self.create_index()27        key = idx[0]28        assert idx._can_hold_identifiers_and_holds_name(key) is False29    def test_too_many_names(self):30        with pytest.raises(ValueError, match="^Length"):31            self.index.names = ["roger", "harold"]32    @pytest.mark.parametrize("name", [None, "foo"])33    @pytest.mark.parametrize(34        "args, kwargs, start, stop, step",35        [36            ((5,), dict(), 0, 5, 1),37            ((1, 5), dict(), 1, 5, 1),38            ((1, 5, 2), dict(), 1, 5, 2),39            ((0,), dict(), 0, 0, 1),40            ((0, 0), dict(), 0, 0, 1),41            (tuple(), dict(start=0), 0, 0, 1),42            (tuple(), dict(stop=0), 0, 0, 1),43        ],44    )45    def test_constructor(self, args, kwargs, start, stop, step, name):46        result = RangeIndex(*args, name=name, **kwargs)47        expected = Index(np.arange(start, stop, step, dtype=np.int64), name=name)48        assert isinstance(result, RangeIndex)49        assert result.name is name50        assert result._range == range(start, stop, step)51        tm.assert_index_equal(result, expected)52    def test_constructor_invalid_args(self):53        msg = "RangeIndex\\(\\.\\.\\.\\) must be called with integers"54        with pytest.raises(TypeError, match=msg):55            RangeIndex()56        with pytest.raises(TypeError, match=msg):57            RangeIndex(name="Foo")58        # invalid args59        for i in [60            Index(["a", "b"]),61            Series(["a", "b"]),62            np.array(["a", "b"]),63            [],64            "foo",65            datetime(2000, 1, 1, 0, 0),66            np.arange(0, 10),67            np.array([1]),68            [1],69        ]:70            with pytest.raises(TypeError):71                RangeIndex(i)72        # we don't allow on a bare Index73        msg = (74            r"Index\(\.\.\.\) must be called with a collection of some "75            r"kind, 0 was passed"76        )77        with pytest.raises(TypeError, match=msg):78            Index(0, 1000)79    def test_constructor_same(self):80        # pass thru w and w/o copy81        index = RangeIndex(1, 5, 2)82        result = RangeIndex(index, copy=False)83        assert result.identical(index)84        result = RangeIndex(index, copy=True)85        tm.assert_index_equal(result, index, exact=True)86        result = RangeIndex(index)87        tm.assert_index_equal(result, index, exact=True)88        with pytest.raises(TypeError):89            RangeIndex(index, dtype="float64")90    def test_constructor_range(self):91        msg = "Value needs to be a scalar value, was type <class 'range'>"92        with pytest.raises(TypeError, match=msg):93            result = RangeIndex(range(1, 5, 2))94        result = RangeIndex.from_range(range(1, 5, 2))95        expected = RangeIndex(1, 5, 2)96        tm.assert_index_equal(result, expected, exact=True)97        result = RangeIndex.from_range(range(5, 6))98        expected = RangeIndex(5, 6, 1)99        tm.assert_index_equal(result, expected, exact=True)100        # an invalid range101        result = RangeIndex.from_range(range(5, 1))102        expected = RangeIndex(0, 0, 1)103        tm.assert_index_equal(result, expected, exact=True)104        result = RangeIndex.from_range(range(5))105        expected = RangeIndex(0, 5, 1)106        tm.assert_index_equal(result, expected, exact=True)107        result = Index(range(1, 5, 2))108        expected = RangeIndex(1, 5, 2)109        tm.assert_index_equal(result, expected, exact=True)110        with pytest.raises(TypeError):111            Index(range(1, 5, 2), dtype="float64")112        msg = r"^from_range\(\) got an unexpected keyword argument"113        with pytest.raises(TypeError, match=msg):114            pd.RangeIndex.from_range(range(10), copy=True)115    def test_constructor_name(self):116        # GH12288117        orig = RangeIndex(10)118        orig.name = "original"119        copy = RangeIndex(orig)120        copy.name = "copy"121        assert orig.name == "original"122        assert copy.name == "copy"123        new = Index(copy)124        assert new.name == "copy"125        new.name = "new"126        assert orig.name == "original"127        assert copy.name == "copy"128        assert new.name == "new"129    def test_constructor_corner(self):130        arr = np.array([1, 2, 3, 4], dtype=object)131        index = RangeIndex(1, 5)132        assert index.values.dtype == np.int64133        tm.assert_index_equal(index, Index(arr))134        # non-int raise Exception135        with pytest.raises(TypeError):136            RangeIndex("1", "10", "1")137        with pytest.raises(TypeError):138            RangeIndex(1.1, 10.2, 1.3)139        # invalid passed type140        with pytest.raises(TypeError):141            RangeIndex(1, 5, dtype="float64")142    @pytest.mark.parametrize(143        "index, start, stop, step",144        [145            (RangeIndex(5), 0, 5, 1),146            (RangeIndex(0, 5), 0, 5, 1),147            (RangeIndex(5, step=2), 0, 5, 2),148            (RangeIndex(1, 5, 2), 1, 5, 2),149        ],150    )151    def test_start_stop_step_attrs(self, index, start, stop, step):152        # GH 25710153        assert index.start == start154        assert index.stop == stop155        assert index.step == step156    @pytest.mark.parametrize("attr_name", ["_start", "_stop", "_step"])157    def test_deprecated_start_stop_step_attrs(self, attr_name):158        # GH 26581159        idx = self.create_index()160        with tm.assert_produces_warning(DeprecationWarning):161            getattr(idx, attr_name)162    def test_copy(self):163        i = RangeIndex(5, name="Foo")164        i_copy = i.copy()165        assert i_copy is not i166        assert i_copy.identical(i)167        assert i_copy._range == range(0, 5, 1)168        assert i_copy.name == "Foo"169    def test_repr(self):170        i = RangeIndex(5, name="Foo")171        result = repr(i)172        expected = "RangeIndex(start=0, stop=5, step=1, name='Foo')"173        assert result == expected174        result = eval(result)175        tm.assert_index_equal(result, i, exact=True)176        i = RangeIndex(5, 0, -1)177        result = repr(i)178        expected = "RangeIndex(start=5, stop=0, step=-1)"179        assert result == expected180        result = eval(result)181        tm.assert_index_equal(result, i, exact=True)182    def test_insert(self):183        idx = RangeIndex(5, name="Foo")184        result = idx[1:4]185        # test 0th element186        tm.assert_index_equal(idx[0:4], result.insert(0, idx[0]))187        # GH 18295 (test missing)188        expected = Float64Index([0, np.nan, 1, 2, 3, 4])189        for na in (np.nan, pd.NaT, None):190            result = RangeIndex(5).insert(1, na)191            tm.assert_index_equal(result, expected)192    def test_delete(self):193        idx = RangeIndex(5, name="Foo")194        expected = idx[1:].astype(int)195        result = idx.delete(0)196        tm.assert_index_equal(result, expected)197        assert result.name == expected.name198        expected = idx[:-1].astype(int)199        result = idx.delete(-1)200        tm.assert_index_equal(result, expected)201        assert result.name == expected.name202        with pytest.raises((IndexError, ValueError)):203            # either depending on numpy version204            result = idx.delete(len(idx))205    def test_view(self):206        i = RangeIndex(0, name="Foo")207        i_view = i.view()208        assert i_view.name == "Foo"209        i_view = i.view("i8")210        tm.assert_numpy_array_equal(i.values, i_view)211        i_view = i.view(RangeIndex)212        tm.assert_index_equal(i, i_view)213    def test_dtype(self):214        assert self.index.dtype == np.int64215    def test_cached_data(self):216        # GH 26565, GH26617217        # Calling RangeIndex._data caches an int64 array of the same length at218        # self._cached_data. This test checks whether _cached_data has been set219        idx = RangeIndex(0, 100, 10)220        assert idx._cached_data is None221        repr(idx)222        assert idx._cached_data is None223        str(idx)224        assert idx._cached_data is None225        idx.get_loc(20)226        assert idx._cached_data is None227        90 in idx228        assert idx._cached_data is None229        91 in idx230        assert idx._cached_data is None231        with tm.assert_produces_warning(FutureWarning):232            idx.contains(90)233        assert idx._cached_data is None234        with tm.assert_produces_warning(FutureWarning):235            idx.contains(91)236        assert idx._cached_data is None237        idx.all()238        assert idx._cached_data is None239        idx.any()240        assert idx._cached_data is None241        df = pd.DataFrame({"a": range(10)}, index=idx)242        df.loc[50]243        assert idx._cached_data is None244        with pytest.raises(KeyError, match="51"):245            df.loc[51]246        assert idx._cached_data is None247        df.loc[10:50]248        assert idx._cached_data is None249        df.iloc[5:10]250        assert idx._cached_data is None251        # actually calling idx._data252        assert isinstance(idx._data, np.ndarray)253        assert isinstance(idx._cached_data, np.ndarray)254    def test_is_monotonic(self):255        assert self.index.is_monotonic is True256        assert self.index.is_monotonic_increasing is True257        assert self.index.is_monotonic_decreasing is False258        assert self.index._is_strictly_monotonic_increasing is True259        assert self.index._is_strictly_monotonic_decreasing is False260        index = RangeIndex(4, 0, -1)261        assert index.is_monotonic is False262        assert index._is_strictly_monotonic_increasing is False263        assert index.is_monotonic_decreasing is True264        assert index._is_strictly_monotonic_decreasing is True265        index = RangeIndex(1, 2)266        assert index.is_monotonic is True267        assert index.is_monotonic_increasing is True268        assert index.is_monotonic_decreasing is True269        assert index._is_strictly_monotonic_increasing is True270        assert index._is_strictly_monotonic_decreasing is True271        index = RangeIndex(2, 1)272        assert index.is_monotonic is True273        assert index.is_monotonic_increasing is True274        assert index.is_monotonic_decreasing is True275        assert index._is_strictly_monotonic_increasing is True276        assert index._is_strictly_monotonic_decreasing is True277        index = RangeIndex(1, 1)278        assert index.is_monotonic is True279        assert index.is_monotonic_increasing is True280        assert index.is_monotonic_decreasing is True281        assert index._is_strictly_monotonic_increasing is True282        assert index._is_strictly_monotonic_decreasing is True283    def test_equals_range(self):284        equiv_pairs = [285            (RangeIndex(0, 9, 2), RangeIndex(0, 10, 2)),286            (RangeIndex(0), RangeIndex(1, -1, 3)),287            (RangeIndex(1, 2, 3), RangeIndex(1, 3, 4)),288            (RangeIndex(0, -9, -2), RangeIndex(0, -10, -2)),289        ]290        for left, right in equiv_pairs:291            assert left.equals(right)292            assert right.equals(left)293    def test_logical_compat(self):294        idx = self.create_index()295        assert idx.all() == idx.values.all()296        assert idx.any() == idx.values.any()297    def test_identical(self):298        i = Index(self.index.copy())299        assert i.identical(self.index)300        # we don't allow object dtype for RangeIndex301        if isinstance(self.index, RangeIndex):302            return303        same_values_different_type = Index(i, dtype=object)304        assert not i.identical(same_values_different_type)305        i = self.index.copy(dtype=object)306        i = i.rename("foo")307        same_values = Index(i, dtype=object)308        assert same_values.identical(self.index.copy(dtype=object))309        assert not i.identical(self.index)310        assert Index(same_values, name="foo", dtype=object).identical(i)311        assert not self.index.copy(dtype=object).identical(312            self.index.copy(dtype="int64")313        )314    def test_get_indexer(self):315        target = RangeIndex(10)316        indexer = self.index.get_indexer(target)317        expected = np.array([0, -1, 1, -1, 2, -1, 3, -1, 4, -1], dtype=np.intp)318        tm.assert_numpy_array_equal(indexer, expected)319    def test_get_indexer_pad(self):320        target = RangeIndex(10)321        indexer = self.index.get_indexer(target, method="pad")322        expected = np.array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4], dtype=np.intp)323        tm.assert_numpy_array_equal(indexer, expected)324    def test_get_indexer_backfill(self):325        target = RangeIndex(10)326        indexer = self.index.get_indexer(target, method="backfill")327        expected = np.array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5], dtype=np.intp)328        tm.assert_numpy_array_equal(indexer, expected)329    def test_join_outer(self):330        # join with Int64Index331        other = Int64Index(np.arange(25, 14, -1))332        res, lidx, ridx = self.index.join(other, how="outer", return_indexers=True)333        noidx_res = self.index.join(other, how="outer")334        tm.assert_index_equal(res, noidx_res)335        eres = Int64Index(336            [0, 2, 4, 6, 8, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]337        )338        elidx = np.array(339            [0, 1, 2, 3, 4, 5, 6, 7, -1, 8, -1, 9, -1, -1, -1, -1, -1, -1, -1],340            dtype=np.intp,341        )342        eridx = np.array(343            [-1, -1, -1, -1, -1, -1, -1, -1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],344            dtype=np.intp,345        )346        assert isinstance(res, Int64Index)347        assert not isinstance(res, RangeIndex)348        tm.assert_index_equal(res, eres)349        tm.assert_numpy_array_equal(lidx, elidx)350        tm.assert_numpy_array_equal(ridx, eridx)351        # join with RangeIndex352        other = RangeIndex(25, 14, -1)353        res, lidx, ridx = self.index.join(other, how="outer", return_indexers=True)354        noidx_res = self.index.join(other, how="outer")355        tm.assert_index_equal(res, noidx_res)356        assert isinstance(res, Int64Index)357        assert not isinstance(res, RangeIndex)358        tm.assert_index_equal(res, eres)359        tm.assert_numpy_array_equal(lidx, elidx)360        tm.assert_numpy_array_equal(ridx, eridx)361    def test_join_inner(self):362        # Join with non-RangeIndex363        other = Int64Index(np.arange(25, 14, -1))364        res, lidx, ridx = self.index.join(other, how="inner", return_indexers=True)365        # no guarantee of sortedness, so sort for comparison purposes366        ind = res.argsort()367        res = res.take(ind)368        lidx = lidx.take(ind)369        ridx = ridx.take(ind)370        eres = Int64Index([16, 18])371        elidx = np.array([8, 9], dtype=np.intp)372        eridx = np.array([9, 7], dtype=np.intp)373        assert isinstance(res, Int64Index)374        tm.assert_index_equal(res, eres)375        tm.assert_numpy_array_equal(lidx, elidx)376        tm.assert_numpy_array_equal(ridx, eridx)377        # Join two RangeIndex378        other = RangeIndex(25, 14, -1)379        res, lidx, ridx = self.index.join(other, how="inner", return_indexers=True)380        assert isinstance(res, RangeIndex)381        tm.assert_index_equal(res, eres)382        tm.assert_numpy_array_equal(lidx, elidx)383        tm.assert_numpy_array_equal(ridx, eridx)384    def test_join_left(self):385        # Join with Int64Index386        other = Int64Index(np.arange(25, 14, -1))387        res, lidx, ridx = self.index.join(other, how="left", return_indexers=True)388        eres = self.index389        eridx = np.array([-1, -1, -1, -1, -1, -1, -1, -1, 9, 7], dtype=np.intp)390        assert isinstance(res, RangeIndex)391        tm.assert_index_equal(res, eres)392        assert lidx is None393        tm.assert_numpy_array_equal(ridx, eridx)394        # Join withRangeIndex395        other = Int64Index(np.arange(25, 14, -1))396        res, lidx, ridx = self.index.join(other, how="left", return_indexers=True)397        assert isinstance(res, RangeIndex)398        tm.assert_index_equal(res, eres)399        assert lidx is None400        tm.assert_numpy_array_equal(ridx, eridx)401    def test_join_right(self):402        # Join with Int64Index403        other = Int64Index(np.arange(25, 14, -1))404        res, lidx, ridx = self.index.join(other, how="right", return_indexers=True)405        eres = other406        elidx = np.array([-1, -1, -1, -1, -1, -1, -1, 9, -1, 8, -1], dtype=np.intp)407        assert isinstance(other, Int64Index)408        tm.assert_index_equal(res, eres)409        tm.assert_numpy_array_equal(lidx, elidx)410        assert ridx is None411        # Join withRangeIndex412        other = RangeIndex(25, 14, -1)413        res, lidx, ridx = self.index.join(other, how="right", return_indexers=True)414        eres = other415        assert isinstance(other, RangeIndex)416        tm.assert_index_equal(res, eres)417        tm.assert_numpy_array_equal(lidx, elidx)418        assert ridx is None419    def test_join_non_int_index(self):420        other = Index([3, 6, 7, 8, 10], dtype=object)421        outer = self.index.join(other, how="outer")422        outer2 = other.join(self.index, how="outer")423        expected = Index([0, 2, 3, 4, 6, 7, 8, 10, 12, 14, 16, 18])424        tm.assert_index_equal(outer, outer2)425        tm.assert_index_equal(outer, expected)426        inner = self.index.join(other, how="inner")427        inner2 = other.join(self.index, how="inner")428        expected = Index([6, 8, 10])429        tm.assert_index_equal(inner, inner2)430        tm.assert_index_equal(inner, expected)431        left = self.index.join(other, how="left")432        tm.assert_index_equal(left, self.index.astype(object))433        left2 = other.join(self.index, how="left")...common.py
Source:common.py  
...38        with pytest.raises(TypeError, match=msg):39            self._holder()40    def test_to_series(self):41        # assert that we are creating a copy of the index42        idx = self.create_index()43        s = idx.to_series()44        assert s.values is not idx.values45        assert s.index is not idx46        assert s.name == idx.name47    def test_to_series_with_arguments(self):48        # GH1869949        # index kwarg50        idx = self.create_index()51        s = idx.to_series(index=idx)52        assert s.values is not idx.values53        assert s.index is idx54        assert s.name == idx.name55        # name kwarg56        idx = self.create_index()57        s = idx.to_series(name="__test")58        assert s.values is not idx.values59        assert s.index is not idx60        assert s.name != idx.name61    @pytest.mark.parametrize("name", [None, "new_name"])62    def test_to_frame(self, name):63        # see GH-15230, GH-2258064        idx = self.create_index()65        if name:66            idx_name = name67        else:68            idx_name = idx.name or 069        df = idx.to_frame(name=idx_name)70        assert df.index is idx71        assert len(df.columns) == 172        assert df.columns[0] == idx_name73        assert df[idx_name].values is not idx.values74        df = idx.to_frame(index=False, name=idx_name)75        assert df.index is not idx76    def test_to_frame_datetime_tz(self):77        # GH 2580978        idx = pd.date_range(start="2019-01-01", end="2019-01-30", freq="D")79        idx = idx.tz_localize("UTC")80        result = idx.to_frame()81        expected = pd.DataFrame(idx, index=idx)82        tm.assert_frame_equal(result, expected)83    def test_shift(self):84        # GH8083 test the base class for shift85        idx = self.create_index()86        msg = "Not supported for type {}".format(type(idx).__name__)87        with pytest.raises(NotImplementedError, match=msg):88            idx.shift(1)89        with pytest.raises(NotImplementedError, match=msg):90            idx.shift(1, 2)91    def test_create_index_existing_name(self):92        # GH11193, when an existing index is passed, and a new name is not93        # specified, the new index should inherit the previous object name94        expected = self.create_index()95        if not isinstance(expected, MultiIndex):96            expected.name = "foo"97            result = pd.Index(expected)98            tm.assert_index_equal(result, expected)99            result = pd.Index(expected, name="bar")100            expected.name = "bar"101            tm.assert_index_equal(result, expected)102        else:103            expected.names = ["foo", "bar"]104            result = pd.Index(expected)105            tm.assert_index_equal(106                result,107                Index(108                    Index(109                        [110                            ("foo", "one"),111                            ("foo", "two"),112                            ("bar", "one"),113                            ("baz", "two"),114                            ("qux", "one"),115                            ("qux", "two"),116                        ],117                        dtype="object",118                    ),119                    names=["foo", "bar"],120                ),121            )122            result = pd.Index(expected, names=["A", "B"])123            tm.assert_index_equal(124                result,125                Index(126                    Index(127                        [128                            ("foo", "one"),129                            ("foo", "two"),130                            ("bar", "one"),131                            ("baz", "two"),132                            ("qux", "one"),133                            ("qux", "two"),134                        ],135                        dtype="object",136                    ),137                    names=["A", "B"],138                ),139            )140    def test_numeric_compat(self):141        idx = self.create_index()142        with pytest.raises(TypeError, match="cannot perform __mul__"):143            idx * 1144        with pytest.raises(TypeError, match="cannot perform __rmul__"):145            1 * idx146        div_err = "cannot perform __truediv__"147        with pytest.raises(TypeError, match=div_err):148            idx / 1149        div_err = div_err.replace(" __", " __r")150        with pytest.raises(TypeError, match=div_err):151            1 / idx152        with pytest.raises(TypeError, match="cannot perform __floordiv__"):153            idx // 1154        with pytest.raises(TypeError, match="cannot perform __rfloordiv__"):155            1 // idx156    def test_logical_compat(self):157        idx = self.create_index()158        with pytest.raises(TypeError, match="cannot perform all"):159            idx.all()160        with pytest.raises(TypeError, match="cannot perform any"):161            idx.any()162    def test_boolean_context_compat(self):163        # boolean context compat164        idx = self.create_index()165        with pytest.raises(ValueError, match="The truth value of a"):166            if idx:167                pass168    def test_reindex_base(self):169        idx = self.create_index()170        expected = np.arange(idx.size, dtype=np.intp)171        actual = idx.get_indexer(idx)172        tm.assert_numpy_array_equal(expected, actual)173        with pytest.raises(ValueError, match="Invalid fill method"):174            idx.get_indexer(idx, method="invalid")175    def test_get_indexer_consistency(self):176        # See GH 16819177        for name, index in self.indices.items():178            if isinstance(index, IntervalIndex):179                continue180            if index.is_unique or isinstance(index, CategoricalIndex):181                indexer = index.get_indexer(index[0:2])182                assert isinstance(indexer, np.ndarray)183                assert indexer.dtype == np.intp184            else:185                e = "Reindexing only valid with uniquely valued Index objects"186                with pytest.raises(InvalidIndexError, match=e):187                    index.get_indexer(index[0:2])188            indexer, _ = index.get_indexer_non_unique(index[0:2])189            assert isinstance(indexer, np.ndarray)190            assert indexer.dtype == np.intp191    def test_ndarray_compat_properties(self):192        idx = self.create_index()193        assert idx.T.equals(idx)194        assert idx.transpose().equals(idx)195        values = idx.values196        for prop in self._compat_props:197            assert getattr(idx, prop) == getattr(values, prop)198        # test for validity199        idx.nbytes200        idx.values.nbytes201    def test_repr_roundtrip(self):202        idx = self.create_index()203        tm.assert_index_equal(eval(repr(idx)), idx)204    def test_str(self):205        # test the string repr206        idx = self.create_index()207        idx.name = "foo"208        assert "'foo'" in str(idx)209        assert idx.__class__.__name__ in str(idx)210    def test_repr_max_seq_item_setting(self):211        # GH10182212        idx = self.create_index()213        idx = idx.repeat(50)214        with pd.option_context("display.max_seq_items", None):215            repr(idx)216            assert "..." not in str(idx)217    def test_copy_name(self):218        # gh-12309: Check that the "name" argument219        # passed at initialization is honored.220        for name, index in self.indices.items():221            if isinstance(index, MultiIndex):222                continue223            first = index.__class__(index, copy=True, name="mario")224            second = first.__class__(first, copy=False)225            # Even though "copy=False", we want a new object.226            assert first is not second227            # Not using tm.assert_index_equal() since names differ.228            assert index.equals(first)229            assert first.name == "mario"230            assert second.name == "mario"231            s1 = Series(2, index=first)232            s2 = Series(3, index=second[:-1])233            if not isinstance(index, CategoricalIndex):234                # See gh-13365235                s3 = s1 * s2236                assert s3.index.name == "mario"237    def test_ensure_copied_data(self):238        # Check the "copy" argument of each Index.__new__ is honoured239        # GH12309240        for name, index in self.indices.items():241            init_kwargs = {}242            if isinstance(index, PeriodIndex):243                # Needs "freq" specification:244                init_kwargs["freq"] = index.freq245            elif isinstance(index, (RangeIndex, MultiIndex, CategoricalIndex)):246                # RangeIndex cannot be initialized from data247                # MultiIndex and CategoricalIndex are tested separately248                continue249            index_type = index.__class__250            result = index_type(index.values, copy=True, **init_kwargs)251            tm.assert_index_equal(index, result)252            tm.assert_numpy_array_equal(253                index._ndarray_values, result._ndarray_values, check_same="copy"254            )255            if isinstance(index, PeriodIndex):256                # .values an object array of Period, thus copied257                result = index_type(ordinal=index.asi8, copy=False, **init_kwargs)258                tm.assert_numpy_array_equal(259                    index._ndarray_values, result._ndarray_values, check_same="same"260                )261            elif isinstance(index, IntervalIndex):262                # checked in test_interval.py263                pass264            else:265                result = index_type(index.values, copy=False, **init_kwargs)266                tm.assert_numpy_array_equal(267                    index.values, result.values, check_same="same"268                )269                tm.assert_numpy_array_equal(270                    index._ndarray_values, result._ndarray_values, check_same="same"271                )272    def test_memory_usage(self):273        for name, index in self.indices.items():274            result = index.memory_usage()275            if len(index):276                index.get_loc(index[0])277                result2 = index.memory_usage()278                result3 = index.memory_usage(deep=True)279                # RangeIndex, IntervalIndex280                # don't have engines281                if not isinstance(index, (RangeIndex, IntervalIndex)):282                    assert result2 > result283                if index.inferred_type == "object":284                    assert result3 > result2285            else:286                # we report 0 for no-length287                assert result == 0288    def test_argsort(self):289        for k, ind in self.indices.items():290            # separately tested291            if k in ["catIndex"]:292                continue293            result = ind.argsort()294            expected = np.array(ind).argsort()295            tm.assert_numpy_array_equal(result, expected, check_dtype=False)296    def test_numpy_argsort(self):297        for k, ind in self.indices.items():298            result = np.argsort(ind)299            expected = ind.argsort()300            tm.assert_numpy_array_equal(result, expected)301            # these are the only two types that perform302            # pandas compatibility input validation - the303            # rest already perform separate (or no) such304            # validation via their 'values' attribute as305            # defined in pandas.core.indexes/base.py - they306            # cannot be changed at the moment due to307            # backwards compatibility concerns308            if isinstance(type(ind), (CategoricalIndex, RangeIndex)):309                msg = "the 'axis' parameter is not supported"310                with pytest.raises(ValueError, match=msg):311                    np.argsort(ind, axis=1)312                msg = "the 'kind' parameter is not supported"313                with pytest.raises(ValueError, match=msg):314                    np.argsort(ind, kind="mergesort")315                msg = "the 'order' parameter is not supported"316                with pytest.raises(ValueError, match=msg):317                    np.argsort(ind, order=("a", "b"))318    def test_take(self):319        indexer = [4, 3, 0, 2]320        for k, ind in self.indices.items():321            # separate322            if k in ["boolIndex", "tuples", "empty"]:323                continue324            result = ind.take(indexer)325            expected = ind[indexer]326            assert result.equals(expected)327            if not isinstance(ind, (DatetimeIndex, PeriodIndex, TimedeltaIndex)):328                # GH 10791329                with pytest.raises(AttributeError):330                    ind.freq331    def test_take_invalid_kwargs(self):332        idx = self.create_index()333        indices = [1, 2]334        msg = r"take\(\) got an unexpected keyword argument 'foo'"335        with pytest.raises(TypeError, match=msg):336            idx.take(indices, foo=2)337        msg = "the 'out' parameter is not supported"338        with pytest.raises(ValueError, match=msg):339            idx.take(indices, out=indices)340        msg = "the 'mode' parameter is not supported"341        with pytest.raises(ValueError, match=msg):342            idx.take(indices, mode="clip")343    def test_repeat(self):344        rep = 2345        i = self.create_index()346        expected = pd.Index(i.values.repeat(rep), name=i.name)347        tm.assert_index_equal(i.repeat(rep), expected)348        i = self.create_index()349        rep = np.arange(len(i))350        expected = pd.Index(i.values.repeat(rep), name=i.name)351        tm.assert_index_equal(i.repeat(rep), expected)352    def test_numpy_repeat(self):353        rep = 2354        i = self.create_index()355        expected = i.repeat(rep)356        tm.assert_index_equal(np.repeat(i, rep), expected)357        msg = "the 'axis' parameter is not supported"358        with pytest.raises(ValueError, match=msg):359            np.repeat(i, rep, axis=0)360    @pytest.mark.parametrize("klass", [list, tuple, np.array, Series])361    def test_where(self, klass):362        i = self.create_index()363        cond = [True] * len(i)364        result = i.where(klass(cond))365        expected = i366        tm.assert_index_equal(result, expected)367        cond = [False] + [True] * len(i[1:])368        expected = pd.Index([i._na_value] + i[1:].tolist(), dtype=i.dtype)369        result = i.where(klass(cond))370        tm.assert_index_equal(result, expected)371    @pytest.mark.parametrize("case", [0.5, "xxx"])372    @pytest.mark.parametrize(373        "method", ["intersection", "union", "difference", "symmetric_difference"]374    )375    def test_set_ops_error_cases(self, case, method):376        for name, idx in self.indices.items():377            # non-iterable input378            msg = "Input must be Index or array-like"379            with pytest.raises(TypeError, match=msg):380                getattr(idx, method)(case)381    def test_intersection_base(self):382        for name, idx in self.indices.items():383            first = idx[:5]384            second = idx[:3]385            intersect = first.intersection(second)386            if isinstance(idx, CategoricalIndex):387                pass388            else:389                assert tm.equalContents(intersect, second)390            # GH 10149391            cases = [klass(second.values) for klass in [np.array, Series, list]]392            for case in cases:393                if isinstance(idx, CategoricalIndex):394                    pass395                else:396                    result = first.intersection(case)397                    assert tm.equalContents(result, second)398            if isinstance(idx, MultiIndex):399                msg = "other must be a MultiIndex or a list of tuples"400                with pytest.raises(TypeError, match=msg):401                    first.intersection([1, 2, 3])402    def test_union_base(self):403        for name, idx in self.indices.items():404            first = idx[3:]405            second = idx[:5]406            everything = idx407            union = first.union(second)408            assert tm.equalContents(union, everything)409            # GH 10149410            cases = [klass(second.values) for klass in [np.array, Series, list]]411            for case in cases:412                if isinstance(idx, CategoricalIndex):413                    pass414                else:415                    result = first.union(case)416                    assert tm.equalContents(result, everything)417            if isinstance(idx, MultiIndex):418                msg = "other must be a MultiIndex or a list of tuples"419                with pytest.raises(TypeError, match=msg):420                    first.union([1, 2, 3])421    @pytest.mark.parametrize("sort", [None, False])422    def test_difference_base(self, sort):423        for name, idx in self.indices.items():424            first = idx[2:]425            second = idx[:4]426            answer = idx[4:]427            result = first.difference(second, sort)428            if isinstance(idx, CategoricalIndex):429                pass430            else:431                assert tm.equalContents(result, answer)432            # GH 10149433            cases = [klass(second.values) for klass in [np.array, Series, list]]434            for case in cases:435                if isinstance(idx, CategoricalIndex):436                    pass437                elif isinstance(idx, (DatetimeIndex, TimedeltaIndex)):438                    assert result.__class__ == answer.__class__439                    tm.assert_numpy_array_equal(440                        result.sort_values().asi8, answer.sort_values().asi8441                    )442                else:443                    result = first.difference(case, sort)444                    assert tm.equalContents(result, answer)445            if isinstance(idx, MultiIndex):446                msg = "other must be a MultiIndex or a list of tuples"447                with pytest.raises(TypeError, match=msg):448                    first.difference([1, 2, 3], sort)449    def test_symmetric_difference(self):450        for name, idx in self.indices.items():451            first = idx[1:]452            second = idx[:-1]453            if isinstance(idx, CategoricalIndex):454                pass455            else:456                answer = idx[[0, -1]]457                result = first.symmetric_difference(second)458                assert tm.equalContents(result, answer)459            # GH 10149460            cases = [klass(second.values) for klass in [np.array, Series, list]]461            for case in cases:462                if isinstance(idx, CategoricalIndex):463                    pass464                else:465                    result = first.symmetric_difference(case)466                    assert tm.equalContents(result, answer)467            if isinstance(idx, MultiIndex):468                msg = "other must be a MultiIndex or a list of tuples"469                with pytest.raises(TypeError, match=msg):470                    first.symmetric_difference([1, 2, 3])471    def test_insert_base(self):472        for name, idx in self.indices.items():473            result = idx[1:4]474            if not len(idx):475                continue476            # test 0th element477            assert idx[0:4].equals(result.insert(0, idx[0]))478    def test_delete_base(self):479        for name, idx in self.indices.items():480            if not len(idx):481                continue482            if isinstance(idx, RangeIndex):483                # tested in class484                continue485            expected = idx[1:]486            result = idx.delete(0)487            assert result.equals(expected)488            assert result.name == expected.name489            expected = idx[:-1]490            result = idx.delete(-1)491            assert result.equals(expected)492            assert result.name == expected.name493            with pytest.raises((IndexError, ValueError)):494                # either depending on numpy version495                idx.delete(len(idx))496    def test_equals(self):497        for name, idx in self.indices.items():498            assert idx.equals(idx)499            assert idx.equals(idx.copy())500            assert idx.equals(idx.astype(object))501            assert not idx.equals(list(idx))502            assert not idx.equals(np.array(idx))503            # Cannot pass in non-int64 dtype to RangeIndex504            if not isinstance(idx, RangeIndex):505                same_values = Index(idx, dtype=object)506                assert idx.equals(same_values)507                assert same_values.equals(idx)508            if idx.nlevels == 1:509                # do not test MultiIndex510                assert not idx.equals(pd.Series(idx))511    def test_equals_op(self):512        # GH9947, GH10637513        index_a = self.create_index()514        if isinstance(index_a, PeriodIndex):515            pytest.skip("Skip check for PeriodIndex")516        n = len(index_a)517        index_b = index_a[0:-1]518        index_c = index_a[0:-1].append(index_a[-2:-1])519        index_d = index_a[0:1]520        msg = "Lengths must match|could not be broadcast"521        with pytest.raises(ValueError, match=msg):522            index_a == index_b523        expected1 = np.array([True] * n)524        expected2 = np.array([True] * (n - 1) + [False])525        tm.assert_numpy_array_equal(index_a == index_a, expected1)526        tm.assert_numpy_array_equal(index_a == index_c, expected2)527        # test comparisons with numpy arrays528        array_a = np.array(index_a)529        array_b = np.array(index_a[0:-1])530        array_c = np.array(index_a[0:-1].append(index_a[-2:-1]))531        array_d = np.array(index_a[0:1])532        with pytest.raises(ValueError, match=msg):533            index_a == array_b534        tm.assert_numpy_array_equal(index_a == array_a, expected1)535        tm.assert_numpy_array_equal(index_a == array_c, expected2)536        # test comparisons with Series537        series_a = Series(array_a)538        series_b = Series(array_b)539        series_c = Series(array_c)540        series_d = Series(array_d)541        with pytest.raises(ValueError, match=msg):542            index_a == series_b543        tm.assert_numpy_array_equal(index_a == series_a, expected1)544        tm.assert_numpy_array_equal(index_a == series_c, expected2)545        # cases where length is 1 for one of them546        with pytest.raises(ValueError, match="Lengths must match"):547            index_a == index_d548        with pytest.raises(ValueError, match="Lengths must match"):549            index_a == series_d550        with pytest.raises(ValueError, match="Lengths must match"):551            index_a == array_d552        msg = "Can only compare identically-labeled Series objects"553        with pytest.raises(ValueError, match=msg):554            series_a == series_d555        with pytest.raises(ValueError, match="Lengths must match"):556            series_a == array_d557        # comparing with a scalar should broadcast; note that we are excluding558        # MultiIndex because in this case each item in the index is a tuple of559        # length 2, and therefore is considered an array of length 2 in the560        # comparison instead of a scalar561        if not isinstance(index_a, MultiIndex):562            expected3 = np.array([False] * (len(index_a) - 2) + [True, False])563            # assuming the 2nd to last item is unique in the data564            item = index_a[-2]565            tm.assert_numpy_array_equal(index_a == item, expected3)566            tm.assert_series_equal(series_a == item, Series(expected3))567    def test_hasnans_isnans(self):568        # GH 11343, added tests for hasnans / isnans569        for name, index in self.indices.items():570            if isinstance(index, MultiIndex):571                pass572            else:573                idx = index.copy()574                # cases in indices doesn't include NaN575                expected = np.array([False] * len(idx), dtype=bool)576                tm.assert_numpy_array_equal(idx._isnan, expected)577                assert idx.hasnans is False578                idx = index.copy()579                values = np.asarray(idx.values)580                if len(index) == 0:581                    continue582                elif isinstance(index, DatetimeIndexOpsMixin):583                    values[1] = iNaT584                elif isinstance(index, (Int64Index, UInt64Index)):585                    continue586                else:587                    values[1] = np.nan588                if isinstance(index, PeriodIndex):589                    idx = index.__class__(values, freq=index.freq)590                else:591                    idx = index.__class__(values)592                expected = np.array([False] * len(idx), dtype=bool)593                expected[1] = True594                tm.assert_numpy_array_equal(idx._isnan, expected)595                assert idx.hasnans is True596    def test_fillna(self):597        # GH 11343598        for name, index in self.indices.items():599            if len(index) == 0:600                pass601            elif isinstance(index, MultiIndex):602                idx = index.copy()603                msg = "isna is not defined for MultiIndex"604                with pytest.raises(NotImplementedError, match=msg):605                    idx.fillna(idx[0])606            else:607                idx = index.copy()608                result = idx.fillna(idx[0])609                tm.assert_index_equal(result, idx)610                assert result is not idx611                msg = "'value' must be a scalar, passed: "612                with pytest.raises(TypeError, match=msg):613                    idx.fillna([idx[0]])614                idx = index.copy()615                values = np.asarray(idx.values)616                if isinstance(index, DatetimeIndexOpsMixin):617                    values[1] = iNaT618                elif isinstance(index, (Int64Index, UInt64Index)):619                    continue620                else:621                    values[1] = np.nan622                if isinstance(index, PeriodIndex):623                    idx = index.__class__(values, freq=index.freq)624                else:625                    idx = index.__class__(values)626                expected = np.array([False] * len(idx), dtype=bool)627                expected[1] = True628                tm.assert_numpy_array_equal(idx._isnan, expected)629                assert idx.hasnans is True630    def test_nulls(self):631        # this is really a smoke test for the methods632        # as these are adequately tested for function elsewhere633        for name, index in self.indices.items():634            if len(index) == 0:635                tm.assert_numpy_array_equal(index.isna(), np.array([], dtype=bool))636            elif isinstance(index, MultiIndex):637                idx = index.copy()638                msg = "isna is not defined for MultiIndex"639                with pytest.raises(NotImplementedError, match=msg):640                    idx.isna()641            else:642                if not index.hasnans:643                    tm.assert_numpy_array_equal(644                        index.isna(), np.zeros(len(index), dtype=bool)645                    )646                    tm.assert_numpy_array_equal(647                        index.notna(), np.ones(len(index), dtype=bool)648                    )649                else:650                    result = isna(index)651                    tm.assert_numpy_array_equal(index.isna(), result)652                    tm.assert_numpy_array_equal(index.notna(), ~result)653    def test_empty(self):654        # GH 15270655        index = self.create_index()656        assert not index.empty657        assert index[:0].empty658    def test_join_self_unique(self, join_type):659        index = self.create_index()660        if index.is_unique:661            joined = index.join(index, how=join_type)662            assert (index == joined).all()663    def test_map(self):664        # callable665        index = self.create_index()666        # we don't infer UInt64667        if isinstance(index, pd.UInt64Index):668            expected = index.astype("int64")669        else:670            expected = index671        result = index.map(lambda x: x)672        tm.assert_index_equal(result, expected)673    @pytest.mark.parametrize(674        "mapper",675        [676            lambda values, index: {i: e for e, i in zip(values, index)},677            lambda values, index: pd.Series(values, index),678        ],679    )680    def test_map_dictlike(self, mapper):681        index = self.create_index()682        if isinstance(index, (pd.CategoricalIndex, pd.IntervalIndex)):683            pytest.skip("skipping tests for {}".format(type(index)))684        identity = mapper(index.values, index)685        # we don't infer to UInt64 for a dict686        if isinstance(index, pd.UInt64Index) and isinstance(identity, dict):687            expected = index.astype("int64")688        else:689            expected = index690        result = index.map(identity)691        tm.assert_index_equal(result, expected)692        # empty mappable693        expected = pd.Index([np.nan] * len(index))694        result = index.map(mapper(expected, index))695        tm.assert_index_equal(result, expected)696    def test_putmask_with_wrong_mask(self):697        # GH18368698        index = self.create_index()699        with pytest.raises(ValueError):700            index.putmask(np.ones(len(index) + 1, np.bool), 1)701        with pytest.raises(ValueError):702            index.putmask(np.ones(len(index) - 1, np.bool), 1)703        with pytest.raises(ValueError):704            index.putmask("foo", 1)705    @pytest.mark.parametrize("copy", [True, False])706    @pytest.mark.parametrize("name", [None, "foo"])707    @pytest.mark.parametrize("ordered", [True, False])708    def test_astype_category(self, copy, name, ordered):709        # GH 18630710        index = self.create_index()711        if name:712            index = index.rename(name)713        # standard categories714        dtype = CategoricalDtype(ordered=ordered)715        result = index.astype(dtype, copy=copy)716        expected = CategoricalIndex(index.values, name=name, ordered=ordered)717        tm.assert_index_equal(result, expected)718        # non-standard categories719        dtype = CategoricalDtype(index.unique().tolist()[:-1], ordered)720        result = index.astype(dtype, copy=copy)721        expected = CategoricalIndex(index.values, name=name, dtype=dtype)722        tm.assert_index_equal(result, expected)723        if ordered is False:724            # dtype='category' defaults to ordered=False, so only test once725            result = index.astype("category", copy=copy)726            expected = CategoricalIndex(index.values, name=name)727            tm.assert_index_equal(result, expected)728    def test_is_unique(self):729        # initialize a unique index730        index = self.create_index().drop_duplicates()731        assert index.is_unique is True732        # empty index should be unique733        index_empty = index[:0]734        assert index_empty.is_unique is True735        # test basic dupes736        index_dup = index.insert(0, index[0])737        assert index_dup.is_unique is False738        # single NA should be unique739        index_na = index.insert(0, np.nan)740        assert index_na.is_unique is True741        # multiple NA should not be unique742        index_na_dup = index_na.insert(0, np.nan)...conway.py
Source:conway.py  
...232            y = 0233            checkForRule = lines[valueLineNumber].find(", rule")234            if checkForRule == -1:235                #no rule 236                commaIndex = lines[valueLineNumber].index(',')237                x = int(lines[valueLineNumber][4:commaIndex])238                y = int(lines[valueLineNumber][commaIndex + 5:])239            else:240                subs = lines[valueLineNumber][0:checkForRule]241                commaIndex = subs.index(',')242                x = int(subs[4:commaIndex])243                y = int(subs[commaIndex + 5:])244            if x >= self.rows or y >= self.cols:245                raise Exception("Pattern to big to fit in grid")246            if x + position[0] >= self.cols or y + position[1] >= self.rows:247                raise Exception("Pattern unable to fit pattern at that position")248            joinedLines = "".join(lines[valueLineNumber+1:]).split("$")249            i = 0250            while i < y:251                j = 0252                xindex = 0253                while j < len(joinedLines[i]):254                    #has run_counter255                    run_counter = 1...test_setops.py
Source:test_setops.py  
...7    return request.param8@pytest.fixture(params=[None, False])9def sort(request):10    return request.param11def monotonic_index(start, end, dtype="int64", closed="right"):12    return IntervalIndex.from_breaks(np.arange(start, end, dtype=dtype), closed=closed)13def empty_index(dtype="int64", closed="right"):14    return IntervalIndex(np.array([], dtype=dtype), closed=closed)15class TestIntervalIndex:16    def test_union(self, closed, sort):17        index = monotonic_index(0, 11, closed=closed)18        other = monotonic_index(5, 13, closed=closed)19        expected = monotonic_index(0, 13, closed=closed)20        result = index[::-1].union(other, sort=sort)21        if sort is None:22            tm.assert_index_equal(result, expected)23        assert tm.equalContents(result, expected)24        result = other[::-1].union(index, sort=sort)25        if sort is None:26            tm.assert_index_equal(result, expected)27        assert tm.equalContents(result, expected)28        tm.assert_index_equal(index.union(index, sort=sort), index)29        tm.assert_index_equal(index.union(index[:1], sort=sort), index)30        # GH 19101: empty result, same dtype31        index = empty_index(dtype="int64", closed=closed)32        result = index.union(index, sort=sort)33        tm.assert_index_equal(result, index)34        # GH 19101: empty result, different dtypes35        other = empty_index(dtype="float64", closed=closed)36        result = index.union(other, sort=sort)37        tm.assert_index_equal(result, index)38    def test_intersection(self, closed, sort):39        index = monotonic_index(0, 11, closed=closed)40        other = monotonic_index(5, 13, closed=closed)41        expected = monotonic_index(5, 11, closed=closed)42        result = index[::-1].intersection(other, sort=sort)43        if sort is None:44            tm.assert_index_equal(result, expected)45        assert tm.equalContents(result, expected)46        result = other[::-1].intersection(index, sort=sort)47        if sort is None:48            tm.assert_index_equal(result, expected)49        assert tm.equalContents(result, expected)50        tm.assert_index_equal(index.intersection(index, sort=sort), index)51        # GH 19101: empty result, same dtype52        other = monotonic_index(300, 314, closed=closed)53        expected = empty_index(dtype="int64", closed=closed)54        result = index.intersection(other, sort=sort)55        tm.assert_index_equal(result, expected)56        # GH 19101: empty result, different dtypes57        other = monotonic_index(300, 314, dtype="float64", closed=closed)58        result = index.intersection(other, sort=sort)59        tm.assert_index_equal(result, expected)60        # GH 26225: nested intervals61        index = IntervalIndex.from_tuples([(1, 2), (1, 3), (1, 4), (0, 2)])62        other = IntervalIndex.from_tuples([(1, 2), (1, 3)])63        expected = IntervalIndex.from_tuples([(1, 2), (1, 3)])64        result = index.intersection(other)65        tm.assert_index_equal(result, expected)66        # GH 26225: duplicate element67        index = IntervalIndex.from_tuples([(1, 2), (1, 2), (2, 3), (3, 4)])68        other = IntervalIndex.from_tuples([(1, 2), (2, 3)])69        expected = IntervalIndex.from_tuples([(1, 2), (1, 2), (2, 3)])70        result = index.intersection(other)71        tm.assert_index_equal(result, expected)72        # GH 2622573        index = IntervalIndex.from_tuples([(0, 3), (0, 2)])74        other = IntervalIndex.from_tuples([(0, 2), (1, 3)])75        expected = IntervalIndex.from_tuples([(0, 2)])76        result = index.intersection(other)77        tm.assert_index_equal(result, expected)78        # GH 26225: duplicate nan element79        index = IntervalIndex([np.nan, np.nan])80        other = IntervalIndex([np.nan])81        expected = IntervalIndex([np.nan])82        result = index.intersection(other)83        tm.assert_index_equal(result, expected)84    def test_difference(self, closed, sort):85        index = IntervalIndex.from_arrays([1, 0, 3, 2], [1, 2, 3, 4], closed=closed)86        result = index.difference(index[:1], sort=sort)87        expected = index[1:]88        if sort is None:89            expected = expected.sort_values()90        tm.assert_index_equal(result, expected)91        # GH 19101: empty result, same dtype92        result = index.difference(index, sort=sort)93        expected = empty_index(dtype="int64", closed=closed)94        tm.assert_index_equal(result, expected)95        # GH 19101: empty result, different dtypes96        other = IntervalIndex.from_arrays(97            index.left.astype("float64"), index.right, closed=closed98        )99        result = index.difference(other, sort=sort)100        tm.assert_index_equal(result, expected)101    def test_symmetric_difference(self, closed, sort):102        index = monotonic_index(0, 11, closed=closed)103        result = index[1:].symmetric_difference(index[:-1], sort=sort)104        expected = IntervalIndex([index[0], index[-1]])105        if sort is None:106            tm.assert_index_equal(result, expected)107        assert tm.equalContents(result, expected)108        # GH 19101: empty result, same dtype109        result = index.symmetric_difference(index, sort=sort)110        expected = empty_index(dtype="int64", closed=closed)111        if sort is None:112            tm.assert_index_equal(result, expected)113        assert tm.equalContents(result, expected)114        # GH 19101: empty result, different dtypes115        other = IntervalIndex.from_arrays(116            index.left.astype("float64"), index.right, closed=closed117        )118        result = index.symmetric_difference(other, sort=sort)119        tm.assert_index_equal(result, expected)120    @pytest.mark.parametrize(121        "op_name", ["union", "intersection", "difference", "symmetric_difference"]122    )123    @pytest.mark.parametrize("sort", [None, False])124    def test_set_incompatible_types(self, closed, op_name, sort):125        index = monotonic_index(0, 11, closed=closed)126        set_op = getattr(index, op_name)127        # TODO: standardize return type of non-union setops type(self vs other)128        # non-IntervalIndex129        if op_name == "difference":130            expected = index131        else:132            expected = getattr(index.astype("O"), op_name)(Index([1, 2, 3]))133        result = set_op(Index([1, 2, 3]), sort=sort)134        tm.assert_index_equal(result, expected)135        # mixed closed136        msg = (137            "can only do set operations between two IntervalIndex objects "138            "that are closed on the same side"139        )140        for other_closed in {"right", "left", "both", "neither"} - {closed}:141            other = monotonic_index(0, 11, closed=other_closed)142            with pytest.raises(ValueError, match=msg):143                set_op(other, sort=sort)144        # GH 19016: incompatible dtypes145        other = interval_range(Timestamp("20180101"), periods=9, closed=closed)146        msg = (147            "can only do {op} between two IntervalIndex objects that have "148            "compatible dtypes"149        ).format(op=op_name)150        with pytest.raises(TypeError, match=msg):...test_period.py
Source:test_period.py  
...32        rs = Index(df["Index"])33        tm.assert_index_equal(rs, rng, check_names=False)34        assert rs.name == "Index"35        assert rng.name == "index"36        rs = df.reset_index().set_index("index")37        assert isinstance(rs.index, PeriodIndex)38        tm.assert_index_equal(rs.index, rng)39    def test_frame_to_time_stamp(self):40        K = 541        index = period_range(freq="A", start="1/1/2001", end="12/1/2009")42        df = DataFrame(np.random.randn(len(index), K), index=index)43        df["mix"] = "a"44        exp_index = date_range("1/1/2001", end="12/31/2009", freq="A-DEC")45        exp_index = exp_index + Timedelta(1, "D") - Timedelta(1, "ns")46        result = df.to_timestamp("D", "end")47        tm.assert_index_equal(result.index, exp_index)48        tm.assert_numpy_array_equal(result.values, df.values)49        exp_index = date_range("1/1/2001", end="1/1/2009", freq="AS-JAN")50        result = df.to_timestamp("D", "start")...test_indexed_read.py
Source:test_indexed_read.py  
1import ctypes2import ecl3from ecl import EclPrototype4from ecl import EclDataType5from ecl.eclfile import EclKW, EclFile, FortIO6from ecl.util.test import TestAreaContext7from tests import EclTest8from ecl.util.util import IntVector9class EclIndexedReadTest(EclTest):10    _freadIndexedData   = EclPrototype("void ecl_kw_fread_indexed_data_python(fortio, int, ecl_data_type, int, int_vector, char*)", bind = False) # fortio, offset, type, count, index_map, buffer11    _eclFileIndexedRead = EclPrototype("void ecl_file_indexed_read(ecl_file, char*, int, int_vector, char*)", bind = False) # ecl_file, kw, index, index_map, buffer12    def test_ecl_kw_indexed_read(self):13        with TestAreaContext("ecl_kw_indexed_read") as area:14            fortio = FortIO("index_test", mode=FortIO.WRITE_MODE)15            element_count = 10000016            ecl_kw = EclKW("TEST", element_count, EclDataType.ECL_INT)17            for index in range(element_count):18                ecl_kw[index] = index19            ecl_kw.fwrite(fortio)20            fortio.close()21            fortio = FortIO("index_test", mode=FortIO.READ_MODE)22            new_ecl_kw = EclKW.fread(fortio)23            for index in range(element_count):24                self.assertEqual(new_ecl_kw[index], index)25            index_map = IntVector()26            index_map.append(2)27            index_map.append(3)28            index_map.append(5)29            index_map.append(7)30            index_map.append(11)31            index_map.append(13)32            index_map.append(313)33            index_map.append(1867)34            index_map.append(5227)35            index_map.append(7159)36            index_map.append(12689)37            index_map.append(18719)38            index_map.append(32321)39            index_map.append(37879)40            index_map.append(54167)41            index_map.append(77213)42            index_map.append(88843)43            index_map.append(99991)44            char_buffer = ctypes.create_string_buffer(len(index_map) * ctypes.sizeof(ctypes.c_int))45            self._freadIndexedData(fortio, 24, EclDataType.ECL_INT, element_count, index_map, char_buffer)46            int_buffer = ctypes.cast(char_buffer, ctypes.POINTER(ctypes.c_int))47            for index, index_map_value in enumerate(index_map):48                self.assertEqual(index_map_value, int_buffer[index])49    def test_ecl_file_indexed_read(self):50        with TestAreaContext("ecl_file_indexed_read") as area:51            fortio = FortIO("ecl_file_index_test", mode=FortIO.WRITE_MODE)52            element_count = 10000053            ecl_kw_1 = EclKW("TEST1", element_count, EclDataType.ECL_INT)54            ecl_kw_2 = EclKW("TEST2", element_count, EclDataType.ECL_INT)55            for index in range(element_count):56                ecl_kw_1[index] = index57                ecl_kw_2[index] = index + 358            ecl_kw_1.fwrite(fortio)59            ecl_kw_2.fwrite(fortio)60            fortio.close()61            ecl_file = EclFile("ecl_file_index_test")62            index_map = IntVector()63            index_map.append(2)64            index_map.append(3)65            index_map.append(5)66            index_map.append(7)67            index_map.append(11)68            index_map.append(13)69            index_map.append(313)70            index_map.append(1867)71            index_map.append(5227)72            index_map.append(7159)73            index_map.append(12689)74            index_map.append(18719)75            index_map.append(32321)76            index_map.append(37879)77            index_map.append(54167)78            index_map.append(77213)79            index_map.append(88843)80            index_map.append(99991)81            char_buffer_1 = ctypes.create_string_buffer(len(index_map) * ctypes.sizeof(ctypes.c_int))82            char_buffer_2 = ctypes.create_string_buffer(len(index_map) * ctypes.sizeof(ctypes.c_int))83            self._eclFileIndexedRead(ecl_file, "TEST2", 0, index_map, char_buffer_2)84            self._eclFileIndexedRead(ecl_file, "TEST1", 0, index_map, char_buffer_1)85            int_buffer_1 = ctypes.cast(char_buffer_1, ctypes.POINTER(ctypes.c_int))86            int_buffer_2 = ctypes.cast(char_buffer_2, ctypes.POINTER(ctypes.c_int))87            for index, index_map_value in enumerate(index_map):88                self.assertEqual(index_map_value, int_buffer_1[index])...Using AI Code Generation
1describe('TestComponent', () => {2  let component: TestComponent;3  let fixture: ComponentFixture<TestComponent>;4  beforeEach(async(() => {5    TestBed.configureTestingModule({6    })7    .compileComponents();8  }));9  beforeEach(() => {10    fixture = TestBed.createComponent(TestComponent);11    component = fixture.componentInstance;12    fixture.detectChanges();13  });14  it('should create', () => {15    expect(component).toBeTruthy();16  });17  it('should render title in a h1 tag', () => {18    const fixture = TestBed.createComponent(TestComponent);19    fixture.detectChanges();20    const compiled = fixture.debugElement.nativeElement;21    expect(compiled.querySelector('h1').textContent).toContain('Welcome to test!');22  });23  it('should render title in a h1 tag', () => {24    const fixture = TestBed.createComponent(TestComponent);25    fixture.detectChanges();26    const compiled = fixture.debugElement.nativeElement;27    expect(compiled.querySelector('h1').textContent).toContain('Welcome to test!');28  });29  it('should have a button', () => {30    const fixture = TestBed.createComponent(TestComponent);31    fixture.detectChanges();32    const compiled = fixture.debugElement.nativeElement;33    expect(compiled.querySelector('button').textContent).toContain('Click me!');34  });35  it('should have a button', () => {36    const fixture = TestBed.createComponent(TestComponent);37    fixture.detectChanges();38    const compiled = fixture.debugElement.nativeElement;39    expect(compiled.querySelector('button').textContent).toContain('Click me!');40  });41  it('should have a button', () => {42    const fixture = TestBed.createComponent(TestComponent);43    fixture.detectChanges();44    const compiled = fixture.debugElement.nativeElement;45    expect(compiled.querySelector('button').textContent).toContain('Click me!');46  });47  it('should have a button', () => {48    const fixture = TestBed.createComponent(TestComponent);49    fixture.detectChanges();50    const compiled = fixture.debugElement.nativeElement;51    expect(compiled.querySelector('button').textContent).toContain('Click me!');52  });53  it('should have a button', () => {54    const fixture = TestBed.createComponent(TestComponent);55    fixture.detectChanges();56    const compiled = fixture.debugElement.nativeElement;57    expect(compiled.querySelector('button').textContent).toContain('Click me!');58  });59  it('should have a button', () => {60    const fixture = TestBed.createComponent(TestComponent);61    fixture.detectChanges();62    const compiled = fixture.debugElement.nativeElement;63    expect(compiled.querySelector('button').textContent).toContain('Click meUsing AI Code Generation
1import { index } from 'ng-mocks';2import { MockBuilder, MockRender } from 'ng-mocks';3describe('AppComponent', () => {4  beforeEach(() => MockBuilder(AppComponent));5  it('should create the app', () => {6    const fixture = MockRender(AppComponent);7    const app = index(fixture.debugElement, AppComponent);8    expect(app).toBeTruthy();9  });10  it(`should have as title 'test'`, () => {11    const fixture = MockRender(AppComponent);12    const app = index(fixture.debugElement, AppComponent);13    expect(app.title).toEqual('test');14  });15  it('should render title', () => {16    const fixture = MockRender(AppComponent);17    fixture.detectChanges();18    const compiled = fixture.debugElement.nativeElement;19    expect(compiled.querySelector('.content span').textContent).toContain('test app is running!');20  });21});22import 'zone.js/dist/zone-testing';23import { getTestBed } from '@angular/core/testing';24import {25} from '@angular/platform-browser-dynamic/testing';26getTestBed().initTestEnvironment(27  platformBrowserDynamicTesting()28);29{30  "compilerOptions": {31  },32}33{34  "compilerOptions": {Using AI Code Generation
1describe('test', function() {2  beforeEach(angular.mock.module('testApp'));3  var $controller;4  beforeEach(angular.mock.inject(function(_$controller_){5    $controller = _$controller_;6  }));7  it('test', function() {8    var $scope = {};9    var controller = $controller('testController', { $scope: $scope });10    expect($scope.test).toEqual('test');11  });12});13angular.module('testApp', [])14.controller('testController', function($scope) {15  $scope.test = 'test';16});Using AI Code Generation
1const { index } = require('ng-mocks');2const { MyComponent } = require('./my-component');3describe('MyComponent', () => {4  it('should render', () => {5    const fixture = index(MyComponent);6    expect(fixture.nativeElement.innerHTML).toEqual('hello');7  });8});9const { Component } = require('@angular/core');10@Component({11})12export class MyComponent {}Using AI Code Generation
1var myModule = require('ng-mocks');2var myModule = require('ng-mocks').index;3var myModule = require('ng-mocks/index');4var myModule = require('ng-mocks');5var myModule = require('ng-mocks').mock;6var myModule = require('ng-mocks/mock');7var myModule = require('ng-mocks');8var myModule = require('ng-mocks').stub;9var myModule = require('ng-mocks/stub');10var myModule = require('ng-mocks');11var myModule = require('ng-mocks').touch;12var myModule = require('ng-mocks/touch');13var myModule = require('ng-mocks');14var myModule = require('ng-mocks').trigger;15var myModule = require('ng-mocks/trigger');16var myModule = require('ng-mocks');17var myModule = require('ng-mocks').triggerKeyDown;18var myModule = require('ng-mocks/triggerKeyDown');19var myModule = require('ng-mocks');20var myModule = require('ng-mocks').triggerKeyUp;21var myModule = require('ng-mocks/triggerKeyUp');22var myModule = require('ng-mocks');23var myModule = require('ng-mocks').triggerMouseEvent;24var myModule = require('ng-mocks/triggerMouseEvent');25var myModule = require('ng-mocks');26var myModule = require('ng-mocks').triggerTouch;27var myModule = require('ng-mocks/triggerTouch');28var myModule = require('ng-mocks');29var myModule = require('ng-mocks').unmock;30var myModule = require('Using AI Code Generation
1import { index } from 'ng-mocks';2const fixture = TestBed.createComponent(MyComponent);3const component = fixture.componentInstance;4const button = index(fixture.debugElement, 'button');5expect(button).toBeDefined();6expect(button.nativeElement.textContent).toEqual('Click me');7const button = index(fixture.debugElement, 'button');8expect(button).toBeDefined();9expect(button.nativeElement.textContent).toEqual('Click me');10const button = index(fixture.debugElement, 'button');11expect(button).toBeDefined();12expect(button.nativeElement.textContent).toEqual('Click me');13const button = index(fixture.debugElement, 'button');14expect(button).toBeDefined();15expect(button.nativeElement.textContent).toEqual('Click me');16const button = index(fixture.debugElement, 'button');17expect(button).toBeDefined();18expect(button.nativeElement.textContent).toEqual('Click me');19const button = index(fixture.debugElement, 'button');20expect(button).toBeDefined();21expect(button.nativeElement.textContent).toEqual('Click me');22const button = index(fixture.debugElement, 'button');23expect(button).toBeDefined();24expect(button.nativeElement.textContent).toEqual('Click me');25const button = index(fixture.debugElement, 'button');26expect(button).toBeDefined();27expect(button.nativeElement.textContent).toEqual('Click me');28const button = index(fixture.debugElement, 'button');29expect(button).toBeDefined();30expect(button.nativeElement.textContent).toEqual('Click me');31const button = index(fixture.debugElement, 'button');32expect(button).toBeDefined();33expect(button.nativeElement.textContent).toEqual('Click me');34const button = index(fixture.debugElement, 'button');35expect(button).toBeDefined();36expect(button.nativeElement.textContent).toEqual('Click me');37const button = index(fixture.debugElement, 'button');38expect(button).toBeDefined();39expect(button.nativeElement.textContent).toEqual('Click me');40const button = index(fixture.debugElement, 'Using AI Code Generation
1import { index } from 'ng-mocks';2const fixture = TestBed.createComponent(MyComponent);3const component = fixture.componentInstance;4const indexMethod = index(component, 'someMethod');5expect(indexMethod).toHaveBeenCalled();6expect(indexMethod).toHaveBeenCalledWith('someArg');7expect(indexMethod).toHaveBeenCalledTimes(1);8import { Component } from '@angular/core';9@Component({10})11export class MyComponent {12  public someMethod(arg: string) {}13}14import { TestBed } from '@angular/core/testing';15import { MyComponent } from './my-component';16import { index } from 'ng-mocks';17describe('MyComponent', () => {18  it('should call someMethod', () => {19    const fixture = TestBed.createComponent(MyComponent);20    const component = fixture.componentInstance;21    const indexMethod = index(component, 'someMethod');22    expect(indexMethod).toHaveBeenCalled();23    expect(indexMethod).toHaveBeenCalledWith('someArg');24    expect(indexMethod).toHaveBeenCalledTimes(1);25  });26});27import { TestBed } from '@angular/core/testing';28import { MyComponent } from './my-component';29import { index } from 'ng-mocks';30describe('MyComponent', () => {31  it('should call someMethod', () => {32    const fixture = TestBed.createComponent(MyComponent);33    const component = fixture.componentInstance;34    const indexMethod = index(component, 'someMethod');35    expect(indexMethod).toHaveBeenCalled();36    expect(indexMethod).toHaveBeenCalledWith('someArg');37    expect(indexMethod).toHaveBeenCalledTimes(1);38  });39});40import { TestBed } from '@angular/core/testing';41import { MyComponent } from './my-component';42import { index } from 'ng-mocks';43describe('MyComponent', () => {44  it('should call someMethod', () => {45    const fixture = TestBed.createComponent(MyComponent);46    const component = fixture.componentInstance;47    const indexMethod = index(component, 'someMethod');48    expect(indexMethod).toHaveBeenCalled();49    expect(indexMethod).toHaveBeenCalledWith('someArg');50    expect(indexMethod).toHaveBeenCalledTimes(1);51  });52});53import { TestBed } from '@angular/core/testing';54import { MyComponent } from './Using AI Code Generation
1const module = angular.mock.module;2const inject = angular.mock.inject;3module('app', function () {4});5inject(function ($httpBackend, $rootScope, $controller) {6});7const module = angular.mock.module;8const inject = angular.mock.inject;9describe('Test', function () {10    beforeEach(module('app'));11    beforeEach(inject(function ($httpBackend, $rootScope, $controller) {12    }));13});Using AI Code Generation
1import { index } from 'ng-mocks';2import { AppModule } from './app.module';3describe('AppModule', () => {4  it('should have a component', () => {5    const component = index({6    });7    expect(component).toBeTruthy();8  });9});10import { NgModule } from '@angular/core';11import { AppComponent } from './app.component';12@NgModule({13})14export class AppModule {}15import { Component } from '@angular/core';16@Component({17})18export class AppComponent {}19import { index } from 'ng-mocks';20import { AppModule } from './app.module';21describe('AppModule', () => {22  it('should have a component', () => {23    const component = index({24    });25    expect(component).toBeTruthy();26  });27});28import { index } from 'ng-mocks';29import { AppModule } from './app.module';30describe('AppModule', () => {31  it('should have a component', () => {32    const component = index({33    });34    expect(component).toBeTruthy();35  });36});37import { index } from 'ng-mocks';38import { AppModule } from './app.module';39describe('AppModule', () => {40  it('should have a component', () => {41    const component = index({42    });43    expect(component).toBeTruthy();44  });45});Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
