def test_is_on_offset(self): tests = [ (BDay(), datetime(2008, 1, 1), True), (BDay(), datetime(2008, 1, 5), False), ] for offset, d, expected in tests: assert_is_on_offset(offset, d, expected)
def get_trade_open(date): curr_date_open = pd.to_datetime(date).floor('d').replace( hour=13, minute=30) - BDay(0) curr_date_close = pd.to_datetime(date).floor('d').replace( hour=20, minute=0) - BDay(0) prev_date_close = (curr_date_open - BDay()).replace(hour=20, minute=0) next_date_open = (curr_date_close + BDay()).replace(hour=13, minute=30) if ((pd.to_datetime(date) >= prev_date_close) & (pd.to_datetime(date) < curr_date_open)): return curr_date_open elif ((pd.to_datetime(date) >= curr_date_close) & (pd.to_datetime(date) < next_date_open)): return next_date_open else: return None
def test_constructor(self): bdate_range(START, END, freq=BDay()) bdate_range(START, periods=20, freq=BDay()) bdate_range(end=START, periods=20, freq=BDay()) msg = "periods must be a number, got B" with pytest.raises(TypeError, match=msg): date_range("2011-1-1", "2012-1-1", "B") with pytest.raises(TypeError, match=msg): bdate_range("2011-1-1", "2012-1-1", "B") msg = "freq must be specified for bdate_range; use date_range instead" with pytest.raises(TypeError, match=msg): bdate_range(START, END, periods=10, freq=None)
def draw_initial_graph(self, df): # df=pd.read_sql_table('yahoo_finance', engine.connect(), parse_dates=['date']) # df = df.loc[(df['ticker'] == self.ticker) & (df['date'] > '2009-12-31')& (df['date'] < '2020-07-01')] cols = [ 'open', 'low', 'close', 'adjclose', 'moving_avg', 'increase_rate_vol', 'increase_rate_adjclose' ] path = os.path.abspath(__file__ + "/.." + "/plots/") # Getting only business days isBusinessDay = BDay().onOffset df['date'] = df.index match_series = pd.to_datetime(df['date']).map(isBusinessDay) df = df[match_series] print(df) for c in cols: title = self.ticker + " " + c + " graph" ax = df.plot(x='date', y=c, colormap='Set2', title=title) if 'rate' in c: ax.set(xlabel="Date", ylabel="percentage (%)") ax.hlines(y=0, xmin='2020-01-01', xmax='2020-07-01', colors='r', linestyles='--', lw=2) else: ax.set(xlabel="Date", ylabel="$ U.S. Dollar") # plt.show() file_name = title + ".png" output_file = os.path.join(path, file_name) plt.savefig(output_file)
def test_mismatching_tz_raises_err(self, start, end): # issue 18488 msg = "Start and end cannot both be tz-aware with different timezones" with pytest.raises(TypeError, match=msg): date_range(start, end) with pytest.raises(TypeError, match=msg): date_range(start, end, freq=BDay())
def test_bday_ignores_timedeltas(self): idx = date_range("2010/02/01", "2010/02/10", freq="12H") t1 = idx + BDay(offset=Timedelta(3, unit="H")) expected = DatetimeIndex( [ "2010-02-02 03:00:00", "2010-02-02 15:00:00", "2010-02-03 03:00:00", "2010-02-03 15:00:00", "2010-02-04 03:00:00", "2010-02-04 15:00:00", "2010-02-05 03:00:00", "2010-02-05 15:00:00", "2010-02-08 03:00:00", "2010-02-08 15:00:00", "2010-02-08 03:00:00", "2010-02-08 15:00:00", "2010-02-08 03:00:00", "2010-02-08 15:00:00", "2010-02-09 03:00:00", "2010-02-09 15:00:00", "2010-02-10 03:00:00", "2010-02-10 15:00:00", "2010-02-11 03:00:00", ], freq=None, ) tm.assert_index_equal(t1, expected)
def test_daterange_bug_456(self): # GH #456 rng1 = bdate_range("12/5/2011", "12/5/2011") rng2 = bdate_range("12/2/2011", "12/5/2011") assert rng2._data.freq == BDay() result = rng1.union(rng2) assert isinstance(result, DatetimeIndex)
def test_misc(self): end = datetime(2009, 5, 13) dr = bdate_range(end=end, periods=20) firstDate = end - 19 * BDay() assert len(dr) == 20 assert dr[0] == firstDate assert dr[-1] == end
def test_apply_large_n(self): dt = datetime(2012, 10, 23) result = dt + BDay(10) assert result == datetime(2012, 11, 6) result = dt + BDay(100) - BDay(100) assert result == dt off = BDay() * 6 rs = datetime(2012, 1, 1) - off xp = datetime(2011, 12, 23) assert rs == xp st = datetime(2011, 12, 18) rs = st + off xp = datetime(2011, 12, 26) assert rs == xp off = BDay() * 10 rs = datetime(2014, 1, 5) + off # see #5890 xp = datetime(2014, 1, 17) assert rs == xp
def test_roll_date_object(self): offset = BDay() dt = date(2012, 9, 15) result = offset.rollback(dt) assert result == datetime(2012, 9, 14) result = offset.rollforward(dt) assert result == datetime(2012, 9, 17) offset = offsets.Day() result = offset.rollback(dt) assert result == datetime(2012, 9, 15) result = offset.rollforward(dt) assert result == datetime(2012, 9, 15)
def testRollforward2(self): assert BDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7)
def test_apply_corner(self): msg = "Only know how to combine business day with datetime or timedelta" with pytest.raises(ApplyTypeError, match=msg): BDay().apply(BMonthEnd())
def test_generate(self): rng1 = list(generate_range(START, END, offset=BDay())) rng2 = list(generate_range(START, END, offset="B")) assert rng1 == rng2
class TestBusinessDay(Base): _offset = BDay def setup_method(self, method): self.d = datetime(2008, 1, 1) self.offset = BDay() self.offset1 = self.offset self.offset2 = BDay(2) def test_different_normalize_equals(self): # GH#21404 changed __eq__ to return False when `normalize` does not match offset = self._offset() offset2 = self._offset(normalize=True) assert offset != offset2 def test_repr(self): assert repr(self.offset) == "<BusinessDay>" assert repr(self.offset2) == "<2 * BusinessDays>" expected = "<BusinessDay: offset=datetime.timedelta(days=1)>" assert repr(self.offset + timedelta(1)) == expected def test_with_offset(self): offset = self.offset + timedelta(hours=2) assert (self.d + offset) == datetime(2008, 1, 2, 2) def test_with_offset_index(self): dti = DatetimeIndex([self.d]) result = dti + (self.offset + timedelta(hours=2)) expected = DatetimeIndex([datetime(2008, 1, 2, 2)]) tm.assert_index_equal(result, expected) def test_eq(self): assert self.offset2 == self.offset2 def test_mul(self): pass def test_hash(self): assert hash(self.offset2) == hash(self.offset2) def test_call(self): with tm.assert_produces_warning(FutureWarning): # GH#34171 DateOffset.__call__ is deprecated assert self.offset2(self.d) == datetime(2008, 1, 3) def testRollback1(self): assert BDay(10).rollback(self.d) == self.d def testRollback2(self): assert BDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4) def testRollforward1(self): assert BDay(10).rollforward(self.d) == self.d def testRollforward2(self): assert BDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7) def test_roll_date_object(self): offset = BDay() dt = date(2012, 9, 15) result = offset.rollback(dt) assert result == datetime(2012, 9, 14) result = offset.rollforward(dt) assert result == datetime(2012, 9, 17) offset = offsets.Day() result = offset.rollback(dt) assert result == datetime(2012, 9, 15) result = offset.rollforward(dt) assert result == datetime(2012, 9, 15) def test_is_on_offset(self): tests = [ (BDay(), datetime(2008, 1, 1), True), (BDay(), datetime(2008, 1, 5), False), ] for offset, d, expected in tests: assert_is_on_offset(offset, d, expected) apply_cases: _ApplyCases = [ ( BDay(), { datetime(2008, 1, 1): datetime(2008, 1, 2), datetime(2008, 1, 4): datetime(2008, 1, 7), datetime(2008, 1, 5): datetime(2008, 1, 7), datetime(2008, 1, 6): datetime(2008, 1, 7), datetime(2008, 1, 7): datetime(2008, 1, 8), }, ), ( 2 * BDay(), { datetime(2008, 1, 1): datetime(2008, 1, 3), datetime(2008, 1, 4): datetime(2008, 1, 8), datetime(2008, 1, 5): datetime(2008, 1, 8), datetime(2008, 1, 6): datetime(2008, 1, 8), datetime(2008, 1, 7): datetime(2008, 1, 9), }, ), ( -BDay(), { datetime(2008, 1, 1): datetime(2007, 12, 31), datetime(2008, 1, 4): datetime(2008, 1, 3), datetime(2008, 1, 5): datetime(2008, 1, 4), datetime(2008, 1, 6): datetime(2008, 1, 4), datetime(2008, 1, 7): datetime(2008, 1, 4), datetime(2008, 1, 8): datetime(2008, 1, 7), }, ), ( -2 * BDay(), { datetime(2008, 1, 1): datetime(2007, 12, 28), datetime(2008, 1, 4): datetime(2008, 1, 2), datetime(2008, 1, 5): datetime(2008, 1, 3), datetime(2008, 1, 6): datetime(2008, 1, 3), datetime(2008, 1, 7): datetime(2008, 1, 3), datetime(2008, 1, 8): datetime(2008, 1, 4), datetime(2008, 1, 9): datetime(2008, 1, 7), }, ), ( BDay(0), { datetime(2008, 1, 1): datetime(2008, 1, 1), datetime(2008, 1, 4): datetime(2008, 1, 4), datetime(2008, 1, 5): datetime(2008, 1, 7), datetime(2008, 1, 6): datetime(2008, 1, 7), datetime(2008, 1, 7): datetime(2008, 1, 7), }, ), ] @pytest.mark.parametrize("case", apply_cases) def test_apply(self, case): offset, cases = case for base, expected in cases.items(): assert_offset_equal(offset, base, expected) def test_apply_large_n(self): dt = datetime(2012, 10, 23) result = dt + BDay(10) assert result == datetime(2012, 11, 6) result = dt + BDay(100) - BDay(100) assert result == dt off = BDay() * 6 rs = datetime(2012, 1, 1) - off xp = datetime(2011, 12, 23) assert rs == xp st = datetime(2011, 12, 18) rs = st + off xp = datetime(2011, 12, 26) assert rs == xp off = BDay() * 10 rs = datetime(2014, 1, 5) + off # see #5890 xp = datetime(2014, 1, 17) assert rs == xp def test_apply_corner(self): msg = "Only know how to combine business day with datetime or timedelta" with pytest.raises(ApplyTypeError, match=msg): BDay().apply(BMonthEnd())
def setup_method(self, method): self.d = datetime(2008, 1, 1) self.offset = BDay() self.offset1 = self.offset self.offset2 = BDay(2)
def testRollback1(self): assert BDay(10).rollback(self.d) == self.d
def testRollforward1(self): assert BDay(10).rollforward(self.d) == self.d
def testRollback2(self): assert BDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)