コード例 #1
0
ファイル: test_numeric.py プロジェクト: zach-b/pandas
    def test_numarr_with_dtype_add_int(self, dtype, box_with_array):
        box = box_with_array
        ser = pd.Series([1, 2, 3], dtype=dtype)
        expected = pd.Series([2, 3, 4], dtype=dtype)

        ser = tm.box_expected(ser, box)
        expected = tm.box_expected(expected, box)

        result = 1 + ser
        tm.assert_equal(result, expected)

        result = ser + 1
        tm.assert_equal(result, expected)
コード例 #2
0
    def test_add_extension_scalar(self, other, box_with_array, op):
        # GH#22378
        # Check that scalars satisfying is_extension_array_dtype(obj)
        # do not incorrectly try to dispatch to an ExtensionArray operation

        arr = Series(["a", "b", "c"])
        expected = Series([op(x, other) for x in arr])

        arr = tm.box_expected(arr, box_with_array)
        expected = tm.box_expected(expected, box_with_array)

        result = op(arr, other)
        tm.assert_equal(result, expected)
コード例 #3
0
ファイル: test_numeric.py プロジェクト: wkerzendorf/pandas
    def test_numarr_with_dtype_add_nan(self, dtype, box_with_array):
        box = box_with_array
        ser = Series([1, 2, 3], dtype=dtype)
        expected = Series([np.nan, np.nan, np.nan], dtype=dtype)

        ser = tm.box_expected(ser, box)
        expected = tm.box_expected(expected, box)

        result = np.nan + ser
        tm.assert_equal(result, expected)

        result = ser + np.nan
        tm.assert_equal(result, expected)
コード例 #4
0
ファイル: test_numeric.py プロジェクト: sduzjp/Python
    def test_numeric_arr_rdiv_tdscalar(self, three_days, numeric_idx, box):
        index = numeric_idx[1:3]

        expected = TimedeltaIndex(["3 Days", "36 Hours"])

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = three_days / index
        tm.assert_equal(result, expected)

        with pytest.raises(TypeError):
            index / three_days
コード例 #5
0
    def test_numeric_arr_rdiv_tdscalar(self, three_days, numeric_idx, box):
        index = numeric_idx[1:3]

        expected = TimedeltaIndex(["3 Days", "36 Hours"])

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = three_days / index
        tm.assert_equal(result, expected)

        msg = "cannot use operands with types dtype"
        with pytest.raises(TypeError, match=msg):
            index / three_days
コード例 #6
0
    def test_numeric_arr_mul_tdscalar_numexpr_path(self, scalar_td, box_with_array):
        box = box_with_array

        arr = np.arange(2 * 10 ** 4).astype(np.int64)
        obj = tm.box_expected(arr, box, transpose=False)

        expected = arr.view("timedelta64[D]").astype("timedelta64[ns]")
        expected = tm.box_expected(expected, box, transpose=False)

        result = obj * scalar_td
        tm.assert_equal(result, expected)

        result = scalar_td * obj
        tm.assert_equal(result, expected)
コード例 #7
0
    def test_divide_decimal(self, box):
        # resolves issue GH#9787
        ser = Series([Decimal(10)])
        expected = Series([Decimal(5)])

        ser = tm.box_expected(ser, box)
        expected = tm.box_expected(expected, box)

        result = ser / Decimal(2)

        tm.assert_equal(result, expected)

        result = ser // Decimal(2)
        tm.assert_equal(result, expected)
コード例 #8
0
    def test_numeric_arr_mul_tdscalar(self, scalar_td, numeric_idx, box):
        # GH#19333
        index = numeric_idx

        expected = pd.timedelta_range("0 days", "4 days")

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = index * scalar_td
        tm.assert_equal(result, expected)

        commute = scalar_td * index
        tm.assert_equal(commute, expected)
コード例 #9
0
    def test_numeric_arr_mul_tdscalar(self, scalar_td, numeric_idx, box):
        # GH#19333
        index = numeric_idx

        expected = pd.TimedeltaIndex([pd.Timedelta(days=n) for n in range(5)])

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = index * scalar_td
        tm.assert_equal(result, expected)

        commute = scalar_td * index
        tm.assert_equal(commute, expected)
コード例 #10
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_add_sub_tdt64_nat_array(self, box_with_array, other):
        pi = pd.period_range("1994-04-01", periods=9, freq="19D")
        expected = pd.PeriodIndex(["NaT"] * 9, freq="19D")

        obj = tm.box_expected(pi, box_with_array)
        expected = tm.box_expected(expected, box_with_array)

        result = obj + other
        tm.assert_equal(result, expected)
        result = other + obj
        tm.assert_equal(result, expected)
        result = obj - other
        tm.assert_equal(result, expected)
        with pytest.raises(TypeError):
            other - obj
コード例 #11
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_pi_add_offset_n_gt1_not_divisible(self, box_with_array):
        # GH#23215
        # PeriodIndex with freq.n > 1 add offset with offset.n % freq.n != 0
        pi = pd.PeriodIndex(["2016-01"], freq="2M")
        expected = pd.PeriodIndex(["2016-04"], freq="2M")

        # FIXME: with transposing these tests fail
        pi = tm.box_expected(pi, box_with_array, transpose=False)
        expected = tm.box_expected(expected, box_with_array, transpose=False)

        result = pi + to_offset("3M")
        tm.assert_equal(result, expected)

        result = to_offset("3M") + pi
        tm.assert_equal(result, expected)
コード例 #12
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_cmp_pi_mismatched_freq_raises(self, freq, box_with_array):
        # GH#13200
        # different base freq
        base = PeriodIndex(["2011-01", "2011-02", "2011-03", "2011-04"],
                           freq=freq)
        base = tm.box_expected(base, box_with_array)

        msg = "Input has different freq=A-DEC from "
        with pytest.raises(IncompatibleFrequency, match=msg):
            base <= Period("2011", freq="A")

        with pytest.raises(IncompatibleFrequency, match=msg):
            Period("2011", freq="A") >= base

        # TODO: Could parametrize over boxes for idx?
        idx = PeriodIndex(["2011", "2012", "2013", "2014"], freq="A")
        rev_msg = r"Input has different freq=(M|2M|3M) from PeriodArray\(freq=A-DEC\)"
        idx_msg = rev_msg if box_with_array is tm.to_array else msg
        with pytest.raises(IncompatibleFrequency, match=idx_msg):
            base <= idx

        # Different frequency
        msg = "Input has different freq=4M from "
        with pytest.raises(IncompatibleFrequency, match=msg):
            base <= Period("2011", freq="4M")

        with pytest.raises(IncompatibleFrequency, match=msg):
            Period("2011", freq="4M") >= base

        idx = PeriodIndex(["2011", "2012", "2013", "2014"], freq="4M")
        rev_msg = r"Input has different freq=(M|2M|3M) from PeriodArray\(freq=4M\)"
        idx_msg = rev_msg if box_with_array is tm.to_array else msg
        with pytest.raises(IncompatibleFrequency, match=idx_msg):
            base <= idx
コード例 #13
0
    def test_df_numeric_cmp_dt64_raises(self, box_with_array, fixed_now_ts):
        # GH#8932, GH#22163
        ts = fixed_now_ts
        obj = np.array(range(5))
        obj = tm.box_expected(obj, box_with_array)

        assert_invalid_comparison(obj, ts, box_with_array)
コード例 #14
0
    def test_add_sub_datetimelike_invalid(self, numeric_idx, other, box_with_array):
        # GH#28080 numeric+datetime64 should raise; Timestamp raises
        #  NullFrequencyError instead of TypeError so is excluded.
        box = box_with_array
        left = tm.box_expected(numeric_idx, box)

        msg = "|".join(
            [
                "unsupported operand type",
                "Cannot (add|subtract) NaT (to|from) ndarray",
                "Addition/subtraction of integers and integer-arrays",
                "Concatenation operation is not implemented for NumPy arrays",
                # pd.array vs np.datetime64 case
                r"operand type\(s\) all returned NotImplemented from __array_ufunc__",
                "can only perform ops with numeric values",
            ]
        )
        with pytest.raises(TypeError, match=msg):
            left + other
        with pytest.raises(TypeError, match=msg):
            other + left
        with pytest.raises(TypeError, match=msg):
            left - other
        with pytest.raises(TypeError, match=msg):
            other - left
コード例 #15
0
ファイル: test_numeric.py プロジェクト: markmc0/pandas-tester
    def test_numeric_arr_mul_tdscalar_numexpr_path(self, scalar_td,
                                                   box_with_array):
        box = box_with_array
        if box is pd.array:
            pytest.xfail("IntegerArray.__mul__ doesnt handle timedeltas")

        arr = np.arange(2 * 10**4).astype(np.int64)
        obj = tm.box_expected(arr, box, transpose=False)

        expected = arr.view("timedelta64[D]").astype("timedelta64[ns]")
        expected = tm.box_expected(expected, box, transpose=False)

        result = obj * scalar_td
        tm.assert_equal(result, expected)

        result = scalar_td * obj
        tm.assert_equal(result, expected)
コード例 #16
0
    def test_numeric_arr_mul_tdscalar_numexpr_path(self, dtype, scalar_td,
                                                   box_with_array):
        # GH#44772 for the float64 case
        box = box_with_array

        arr_i8 = np.arange(2 * 10**4).astype(np.int64, copy=False)
        arr = arr_i8.astype(dtype, copy=False)
        obj = tm.box_expected(arr, box, transpose=False)

        expected = arr_i8.view("timedelta64[D]").astype("timedelta64[ns]")
        expected = tm.box_expected(expected, box, transpose=False)

        result = obj * scalar_td
        tm.assert_equal(result, expected)

        result = scalar_td * obj
        tm.assert_equal(result, expected)
コード例 #17
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_sub_pi_mismatched_freq(self, box_with_array):
        rng = pd.period_range("1/1/2000", freq="D", periods=5)
        other = pd.period_range("1/6/2000", freq="H", periods=5)
        # TODO: parametrize over boxes for other?

        rng = tm.box_expected(rng, box_with_array)
        with pytest.raises(IncompatibleFrequency):
            rng - other
コード例 #18
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_cmp_pi(self, freq, box_with_array):
        # GH#13200
        xbox = np.ndarray if box_with_array is pd.Index else box_with_array

        base = PeriodIndex(["2011-01", "2011-02", "2011-03", "2011-04"],
                           freq=freq)
        base = tm.box_expected(base, box_with_array)

        # TODO: could also box idx?
        idx = PeriodIndex(["2011-02", "2011-01", "2011-03", "2011-05"],
                          freq=freq)

        exp = np.array([False, False, True, False])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base == idx, exp)

        exp = np.array([True, True, False, True])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base != idx, exp)

        exp = np.array([False, True, False, False])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base > idx, exp)

        exp = np.array([True, False, False, True])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base < idx, exp)

        exp = np.array([False, True, True, False])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base >= idx, exp)

        exp = np.array([True, False, True, True])
        exp = tm.box_expected(exp, xbox)
        tm.assert_equal(base <= idx, exp)
コード例 #19
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_cmp_period_scalar2(self, box_with_array):
        xbox = box_with_array if box_with_array is not pd.Index else np.ndarray

        pi = pd.period_range("2000-01-01", periods=10, freq="D")

        val = Period("2000-01-04", freq="D")
        expected = [x > val for x in pi]

        ser = tm.box_expected(pi, box_with_array)
        expected = tm.box_expected(expected, xbox)
        result = ser > val
        tm.assert_equal(result, expected)

        val = pi[5]
        result = ser > val
        expected = [x > val for x in pi]
        expected = tm.box_expected(expected, xbox)
        tm.assert_equal(result, expected)
コード例 #20
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_add_sub_td64_nat(self, box_with_array, transpose):
        # GH#23320 special handling for timedelta64("NaT")
        pi = pd.period_range("1994-04-01", periods=9, freq="19D")
        other = np.timedelta64("NaT")
        expected = pd.PeriodIndex(["NaT"] * 9, freq="19D")

        obj = tm.box_expected(pi, box_with_array, transpose=transpose)
        expected = tm.box_expected(expected,
                                   box_with_array,
                                   transpose=transpose)

        result = obj + other
        tm.assert_equal(result, expected)
        result = other + obj
        tm.assert_equal(result, expected)
        result = obj - other
        tm.assert_equal(result, expected)
        with pytest.raises(TypeError):
            other - obj
コード例 #21
0
    def test_objarr_radd_str_invalid(self, dtype, data, box_with_array):
        ser = Series(data, dtype=dtype)

        ser = tm.box_expected(ser, box_with_array)
        msg = ("can only concatenate str|"
               "did not contain a loop with signature matching types|"
               "unsupported operand type|"
               "must be str")
        with pytest.raises(TypeError, match=msg):
            "foo_" + ser
コード例 #22
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_parr_ops_errors(self, ng, func, box_with_array):
        idx = PeriodIndex(["2011-01", "2011-02", "2011-03", "2011-04"],
                          freq="M",
                          name="idx")
        obj = tm.box_expected(idx, box_with_array)
        msg = (r"unsupported operand type\(s\)|can only concatenate|"
               r"must be str|object to str implicitly")

        with pytest.raises(TypeError, match=msg):
            func(obj, ng)
コード例 #23
0
ファイル: test_period.py プロジェクト: robbie1540/pandas
    def test_pi_add_offset_n_gt1(self, box_with_array, transpose):
        # GH#23215
        # add offset to PeriodIndex with freq.n > 1

        per = pd.Period("2016-01", freq="2M")
        pi = pd.PeriodIndex([per])

        expected = pd.PeriodIndex(["2016-03"], freq="2M")

        pi = tm.box_expected(pi, box_with_array, transpose=transpose)
        expected = tm.box_expected(expected,
                                   box_with_array,
                                   transpose=transpose)

        result = pi + per.freq
        tm.assert_equal(result, expected)

        result = per.freq + pi
        tm.assert_equal(result, expected)
コード例 #24
0
ファイル: test_numeric.py プロジェクト: markmc0/pandas-tester
    def test_numeric_arr_rdiv_tdscalar(self, three_days, numeric_idx,
                                       box_with_array):
        box = box_with_array
        if box is pd.array:
            pytest.xfail("We get PandasArray[td64] instead of TimedeltaArray")

        index = numeric_idx[1:3]

        expected = TimedeltaIndex(["3 Days", "36 Hours"])

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = three_days / index
        tm.assert_equal(result, expected)

        msg = "cannot use operands with types dtype"
        with pytest.raises(TypeError, match=msg):
            index / three_days
コード例 #25
0
 def test_add_sub_timedeltalike_invalid(self, numeric_idx, other, box):
     left = tm.box_expected(numeric_idx, box)
     with pytest.raises(TypeError):
         left + other
     with pytest.raises(TypeError):
         other + left
     with pytest.raises(TypeError):
         left - other
     with pytest.raises(TypeError):
         other - left
コード例 #26
0
ファイル: test_numeric.py プロジェクト: markmc0/pandas-tester
    def test_numeric_arr_mul_tdscalar(self, scalar_td, numeric_idx,
                                      box_with_array):
        # GH#19333
        box = box_with_array
        if box is pd.array:
            pytest.xfail(
                "we get a PandasArray[timedelta64[ns]] instead of TimedeltaArray"
            )
        index = numeric_idx
        expected = pd.TimedeltaIndex([pd.Timedelta(days=n) for n in range(5)])

        index = tm.box_expected(index, box)
        expected = tm.box_expected(expected, box)

        result = index * scalar_td
        tm.assert_equal(result, expected)

        commute = scalar_td * index
        tm.assert_equal(commute, expected)
コード例 #27
0
    def test_numeric_cmp_string_numexpr_path(self, box):
        # GH#36377, GH#35700
        xbox = box if box is not pd.Index else np.ndarray

        obj = pd.Series(np.random.randn(10**5))
        obj = tm.box_expected(obj, box, transpose=False)

        result = obj == "a"

        expected = pd.Series(np.zeros(10**5, dtype=bool))
        expected = tm.box_expected(expected, xbox, transpose=False)
        tm.assert_equal(result, expected)

        result = obj != "a"
        tm.assert_equal(result, ~expected)

        msg = "Invalid comparison between dtype=float64 and str"
        with pytest.raises(TypeError, match=msg):
            obj < "a"
コード例 #28
0
    def test_objarr_add_invalid(self, op, box_with_array):
        # invalid ops
        box = box_with_array

        obj_ser = tm.makeObjectSeries()
        obj_ser.name = "objects"

        obj_ser = tm.box_expected(obj_ser, box)
        with pytest.raises(Exception):
            op(obj_ser, 1)
        with pytest.raises(Exception):
            op(obj_ser, np.array(1, dtype=np.int64))
コード例 #29
0
    def test_objarr_add_invalid(self, op, box_with_array):
        # invalid ops
        box = box_with_array

        obj_ser = tm.makeObjectSeries()
        obj_ser.name = "objects"

        obj_ser = tm.box_expected(obj_ser, box)
        msg = "can only concatenate str|unsupported operand type|must be str"
        with pytest.raises(Exception, match=msg):
            op(obj_ser, 1)
        with pytest.raises(Exception, match=msg):
            op(obj_ser, np.array(1, dtype=np.int64))
コード例 #30
0
    def test_add_sub_datetimelike_invalid(self, numeric_idx, other, box):
        # GH#28080 numeric+datetime64 should raise; Timestamp raises
        #  NullFrequencyError instead of TypeError so is excluded.
        left = tm.box_expected(numeric_idx, box)

        with pytest.raises(TypeError):
            left + other
        with pytest.raises(TypeError):
            other + left
        with pytest.raises(TypeError):
            left - other
        with pytest.raises(TypeError):
            other - left