def test_td_sub_timedelta64(self): td = Timedelta(10, unit='d') expected = Timedelta(0, unit='ns') result = td - td.to_timedelta64() assert isinstance(result, Timedelta) assert result == expected result = td.to_timedelta64() - td assert isinstance(result, Timedelta) assert result == expected
def _triple_barriers(data: pd.Series, pt: pd.Series, sl: pd.Series, vb_delta: pd.Timedelta, seed: pd.Series = None, side: pd.Series = None): """ Triple barrier labeling for single index series :param data: data to be labeled :param pt: profit taking barrier :param sl: stop loss barrier :param vb_delta: vertical barrier delta :param seed: True/False array. If True, the given moment will be used to seed one triple barrier. If false, the given moment will be omitted :param side: if side is specified, then meta-labeling is enabled :return dataframe with first timestamp of threshold crossing, type of threshold crossing and return """ result = data.to_frame() result['interval_end'] = data.index.copy() result['interval_end'].values.fill(np.datetime64('NaT')) result['returns'] = data.copy() result['returns'].values.fill(np.nan) result.drop(data.name, axis=1, inplace=True) seed = seed.values if seed is not None else np.full(data.size, True) if side is None: result['side'] = np.zeros(data.shape, dtype=np.int8) __triple_barriers_side_jit(data=data.values, timestamps=data.index.values, seed=seed, vb_delta=vb_delta.to_timedelta64(), pt=pt.values, sl=sl.values, interval_end=result['interval_end'].values, side=result['side'].values, returns=result['returns'].values) else: result['size'] = np.zeros(data.shape, dtype=np.int8) __triple_barriers_size_jit(data=data.values, timestamps=data.index.values, seed=seed, vb_delta=vb_delta.to_timedelta64(), pt=pt.values, sl=sl.values, interval_end=result['interval_end'].values, side=side.values, returns=result['returns'].values, size=result['size'].values) return result
def test_rfloordiv(self): # GH#18846 td = Timedelta(hours=3, minutes=3) scalar = Timedelta(hours=3, minutes=4) # scalar others # x // Timedelta is defined only for timedelta-like x. int-like, # float-like, and date-like, in particular, should all either # a) raise TypeError directly or # b) return NotImplemented, following which the reversed # operation will raise TypeError. assert td.__rfloordiv__(scalar) == 1 assert (-td).__rfloordiv__(scalar.to_pytimedelta()) == -2 assert (2 * td).__rfloordiv__(scalar.to_timedelta64()) == 0 assert np.isnan(td.__rfloordiv__(pd.NaT)) assert np.isnan(td.__rfloordiv__(np.timedelta64('NaT'))) dt64 = np.datetime64('2016-01-01', dtype='datetime64[us]') with pytest.raises(TypeError): td.__rfloordiv__(dt64) assert td.__rfloordiv__(np.nan) is NotImplemented assert td.__rfloordiv__(3.5) is NotImplemented assert td.__rfloordiv__(2) is NotImplemented with pytest.raises(TypeError): td.__rfloordiv__(np.float64(2.0)) with pytest.raises(TypeError): td.__rfloordiv__(np.int32(2.0)) with pytest.raises(TypeError): td.__rfloordiv__(np.uint8(9)) # Array-like others assert td.__rfloordiv__(np.array(scalar.to_timedelta64())) == 1 res = td.__rfloordiv__(np.array([(3 * scalar).to_timedelta64()])) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) arr = np.array([(10 * scalar).to_timedelta64(), np.timedelta64('NaT')]) res = td.__rfloordiv__(arr) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected) ser = pd.Series([1], dtype=np.int64) res = td.__rfloordiv__(ser) assert res is NotImplemented with pytest.raises(TypeError): ser // td
def test_td_floordiv_timedeltalike_array(self): # GH#18846 td = Timedelta(hours=3, minutes=4) scalar = Timedelta(hours=3, minutes=3) # Array-like others assert td // np.array(scalar.to_timedelta64()) == 1 res = (3 * td) // np.array([scalar.to_timedelta64()]) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) res = (10 * td) // np.array([scalar.to_timedelta64(), np.timedelta64("NaT")]) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected)
def test_td_floordiv_timedeltalike_array(self): # GH#18846 td = Timedelta(hours=3, minutes=4) scalar = Timedelta(hours=3, minutes=3) # Array-like others assert td // np.array(scalar.to_timedelta64()) == 1 res = (3 * td) // np.array([scalar.to_timedelta64()]) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) res = (10 * td) // np.array([scalar.to_timedelta64(), np.timedelta64('NaT')]) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected)
def test_td_sub_timedelta64(self): td = Timedelta(10, unit='d') expected = Timedelta(0, unit='ns') result = td - td.to_timedelta64() assert isinstance(result, Timedelta) # comparison fails even if we comment out the isinstance assertion assert result == expected
def test_td_rsub_timedelta64(self): td = Timedelta(10, unit='d') expected = Timedelta(0, unit='ns') result = td.to_timedelta64() - td assert isinstance(result, Timedelta) assert result == expected
def test_td_floordiv_timedeltalike_scalar(self): # GH#18846 td = Timedelta(hours=3, minutes=4) scalar = Timedelta(hours=3, minutes=3) assert td // scalar == 1 assert -td // scalar.to_pytimedelta() == -2 assert (2 * td) // scalar.to_timedelta64() == 2
def test_to_numpy_alias(self): # GH 24653: alias .to_numpy() for scalars td = Timedelta("10m7s") assert td.to_timedelta64() == td.to_numpy() # GH#44460 msg = "dtype and copy arguments are ignored" with pytest.raises(ValueError, match=msg): td.to_numpy("m8[s]") with pytest.raises(ValueError, match=msg): td.to_numpy(copy=True)
def test_tick_addition(kls, expected): offset = kls(3) td = Timedelta(hours=2) for other in [td, td.to_pytimedelta(), td.to_timedelta64()]: result = offset + other assert isinstance(result, Timedelta) assert result == expected result = other + offset assert isinstance(result, Timedelta) assert result == expected
def test_floordiv(self): # GH#18846 td = Timedelta(hours=3, minutes=4) scalar = Timedelta(hours=3, minutes=3) # scalar others assert td // scalar == 1 assert -td // scalar.to_pytimedelta() == -2 assert (2 * td) // scalar.to_timedelta64() == 2 assert td // np.nan is pd.NaT assert np.isnan(td // pd.NaT) assert np.isnan(td // np.timedelta64('NaT')) with pytest.raises(TypeError): td // np.datetime64('2016-01-01', dtype='datetime64[us]') expected = Timedelta(hours=1, minutes=32) assert td // 2 == expected assert td // 2.0 == expected assert td // np.float64(2.0) == expected assert td // np.int32(2.0) == expected assert td // np.uint8(2.0) == expected # Array-like others assert td // np.array(scalar.to_timedelta64()) == 1 res = (3 * td) // np.array([scalar.to_timedelta64()]) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) res = (10 * td) // np.array( [scalar.to_timedelta64(), np.timedelta64('NaT')]) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected) ser = pd.Series([1], dtype=np.int64) res = td // ser assert res.dtype.kind == 'm'
def test_floordiv(self): # GH#18846 td = Timedelta(hours=3, minutes=4) scalar = Timedelta(hours=3, minutes=3) # scalar others assert td // scalar == 1 assert -td // scalar.to_pytimedelta() == -2 assert (2 * td) // scalar.to_timedelta64() == 2 assert td // np.nan is pd.NaT assert np.isnan(td // pd.NaT) assert np.isnan(td // np.timedelta64('NaT')) with pytest.raises(TypeError): td // np.datetime64('2016-01-01', dtype='datetime64[us]') expected = Timedelta(hours=1, minutes=32) assert td // 2 == expected assert td // 2.0 == expected assert td // np.float64(2.0) == expected assert td // np.int32(2.0) == expected assert td // np.uint8(2.0) == expected # Array-like others assert td // np.array(scalar.to_timedelta64()) == 1 res = (3 * td) // np.array([scalar.to_timedelta64()]) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) res = (10 * td) // np.array([scalar.to_timedelta64(), np.timedelta64('NaT')]) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected) ser = pd.Series([1], dtype=np.int64) res = td // ser assert res.dtype.kind == 'm'
def test_td_rfloordiv_timedeltalike_scalar(self): # GH#18846 td = Timedelta(hours=3, minutes=3) scalar = Timedelta(hours=3, minutes=4) # scalar others # x // Timedelta is defined only for timedelta-like x. int-like, # float-like, and date-like, in particular, should all either # a) raise TypeError directly or # b) return NotImplemented, following which the reversed # operation will raise TypeError. assert td.__rfloordiv__(scalar) == 1 assert (-td).__rfloordiv__(scalar.to_pytimedelta()) == -2 assert (2 * td).__rfloordiv__(scalar.to_timedelta64()) == 0
def test_invert(self): td = Timedelta(10, unit="d") msg = "bad operand type for unary ~" with pytest.raises(TypeError, match=msg): ~td # check this matches pytimedelta and timedelta64 with pytest.raises(TypeError, match=msg): ~(td.to_pytimedelta()) umsg = "ufunc 'invert' not supported for the input types" with pytest.raises(TypeError, match=umsg): ~(td.to_timedelta64())
def test_td_add_sub_td64_ndarray(self): td = Timedelta("1 day") other = np.array([td.to_timedelta64()]) expected = np.array([Timedelta("2 Days").to_timedelta64()]) result = td + other tm.assert_numpy_array_equal(result, expected) result = other + td tm.assert_numpy_array_equal(result, expected) result = td - other tm.assert_numpy_array_equal(result, expected * 0) result = other - td tm.assert_numpy_array_equal(result, expected * 0)
def test_td_rfloordiv_timedeltalike_array(self): # GH#18846 td = Timedelta(hours=3, minutes=3) scalar = Timedelta(hours=3, minutes=4) # Array-like others assert td.__rfloordiv__(np.array(scalar.to_timedelta64())) == 1 res = td.__rfloordiv__(np.array([(3 * scalar).to_timedelta64()])) expected = np.array([3], dtype=np.int64) tm.assert_numpy_array_equal(res, expected) arr = np.array([(10 * scalar).to_timedelta64(), np.timedelta64('NaT')]) res = td.__rfloordiv__(arr) expected = np.array([10, np.nan]) tm.assert_numpy_array_equal(res, expected)
def test_to_numpy_alias(self): # GH 24653: alias .to_numpy() for scalars td = Timedelta('10m7s') assert td.to_timedelta64() == td.to_numpy()