def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: # use data for ARIMA - endog changes end = len(self.data.endog) - 1 dates = self.data.dates if isinstance(end, str): if dates is None: raise ValueError("Got a string for end and dates is None") try: dtend = self._str_to_date(end) self.data.predict_end = dtend # for pandas 0.7.x vs 0.8.x if hasattr(dates, 'indexMap'): # 0.7.x end = dates.indexMap[dtend] else: end = dates.get_loc(dtend) except KeyError, err: # end is greater than dates[-1]...probably if dtend > self.data.dates[-1]: end = len(self.data.endog) - 1 freq = self.data.freq out_of_sample = datetools._idx_from_dates(dates[-1], dtend, freq) else: raise err self._make_predict_dates() # attaches self.data.predict_dates
def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: end = len(self.endog) - 1 dates = self._data.dates if isinstance(end, str): if dates is None: raise ValueError("Got a string for end and dates is None") try: dtend = self._str_to_date(end) self._data.predict_end = dtend end = dates.indexMap[dtend] except ImportError, err: # make sure timeseries isn't the prob raise ImportError(err) except KeyError, err: # end is greater than dates[-1]...probably if dtend > self._data.dates[-1]: end = len(self.endog) - 1 freq = self._data.freq out_of_sample = datetools._idx_from_dates(dates[-1], dtend, freq) else: raise err
def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: end = len(self.endog) - 1 dates = self._data.dates if isinstance(end, str): if dates is None: raise ValueError("Got a string for end and dates is None") try: dtend = self._str_to_date(end) self._data.predict_end = dtend end = dates.indexMap[dtend] except ImportError as err: # make sure timeseries isn't the prob raise ImportError(err) except KeyError as err: # end is greater than dates[-1]...probably if dtend > self._data.dates[-1]: end = len(self.endog) - 1 freq = self._data.freq out_of_sample = datetools._idx_from_dates(dates[-1], dtend, freq) else: raise err self._make_predict_dates() # attaches self._data.predict_dates elif isinstance(end, int) and dates is not None: try: self._data.predict_end = dates[end] except IndexError as err: nobs = len(self.endog) - 1 # as an index out_of_sample = end - nobs end = nobs freq = self._data.freq self._data.predict_end = datetools._date_from_idx(dates[-1], out_of_sample, freq) self._make_predict_dates() elif isinstance(end, int): nobs = len(self.endog) - 1 # is an index if end > nobs: out_of_sample = end - nobs end = nobs return end, out_of_sample
def test_idx_from_date(): d1 = datetime(2008, 12, 31) idx = 15 npt.assert_equal(_idx_from_dates(d1, datetime(2012, 9, 30), "Q"), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2023, 12, 31), "A"), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2009, 1, 21), "B"), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2009, 1, 15), "D"), idx) # move d1 and d2 forward to end of week npt.assert_equal(_idx_from_dates(datetime(2009, 1, 4), datetime(2009, 4, 17), "W"), idx - 1) npt.assert_equal(_idx_from_dates(d1, datetime(2010, 3, 31), "M"), idx)
def test_idx_from_date(): d1 = datetime(2008, 12, 31) idx = 15 npt.assert_equal(_idx_from_dates(d1, datetime(2012, 9, 30), 'Q'), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2023, 12, 31), 'A'), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2009, 1, 21), 'B'), idx) npt.assert_equal(_idx_from_dates(d1, datetime(2009, 1, 15), 'D'), idx) # move d1 and d2 forward to end of week npt.assert_equal(_idx_from_dates(datetime(2009, 1, 4), datetime(2009, 4, 17), 'W'), idx-1) npt.assert_equal(_idx_from_dates(d1, datetime(2010, 3, 31), 'M'), idx)
def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: # use data for ARIMA - endog changes end = len(self.data.endog) - 1 dates = self.data.dates freq = self.data.freq if isinstance(end, str): if dates is None: raise ValueError("Got a string for end and dates is None") try: dtend = self._str_to_date(end) self.data.predict_end = dtend end = self._get_dates_loc(dates, dtend) except KeyError, err: # end is greater than dates[-1]...probably if dtend > self.data.dates[-1]: end = len(self.data.endog) - 1 freq = self.data.freq out_of_sample = datetools._idx_from_dates(dates[-1], dtend, freq) else: if freq is None: raise ValueError("There is no frequency for these " "dates and date %s is not in dates " "index. Try giving a date that is in " "the dates index or use an integer." % dtend) else: #pragma: no cover raise err # should never get here self._make_predict_dates() # attaches self.data.predict_dates
def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: # use data for ARIMA - endog changes end = len(self.data.endog) - 1 dates = self.data.dates freq = self.data.freq if isinstance(end, str): if dates is None: raise ValueError("Got a string for end and dates is None") try: dtend = self._str_to_date(end) self.data.predict_end = dtend end = self._get_dates_loc(dates, dtend) except KeyError, err: # end is greater than dates[-1]...probably if dtend > self.data.dates[-1]: end = len(self.data.endog) - 1 freq = self.data.freq out_of_sample = datetools._idx_from_dates( dates[-1], dtend, freq) else: if freq is None: raise ValueError("There is no frequency for these " "dates and date %s is not in dates " "index. Try giving a date that is in " "the dates index or use an integer." % dtend) else: #pragma: no cover raise err # should never get here self._make_predict_dates() # attaches self.data.predict_dates
def _get_predict_end(self, end): """ See _get_predict_start for more information. Subclasses do not need to define anything for this. """ out_of_sample = 0 # will be overwritten if needed if end is None: # use data for ARIMA - endog changes end = len(self.data.endog) - 1 dates = self.data.dates freq = self.data.freq if isinstance(end, str) or (dates is not None and isinstance(end, type(dates[0]))): if dates is None: raise ValueError("Got a string or date for `end` and `dates` is None") if isinstance(end, str): dtend = self._str_to_date(end) else: dtend = end # end could be a pandas TimeStamp not a datetime self.data.predict_end = dtend try: end = self._get_dates_loc(dates, dtend) except KeyError as err: # end is greater than dates[-1]...probably if dtend > self.data.dates[-1]: end = len(self.data.endog) - 1 freq = self.data.freq out_of_sample = datetools._idx_from_dates(dates[-1], dtend, freq) else: if freq is None: raise ValueError("There is no frequency for these " "dates and date %s is not in dates " "index. Try giving a date that is in " "the dates index or use an integer." % dtend) else: #pragma: no cover raise err # should never get here self._make_predict_dates() # attaches self.data.predict_dates elif isinstance(end, int) and dates is not None: try: self.data.predict_end = dates[end] except IndexError as err: nobs = len(self.data.endog) - 1 # as an index out_of_sample = end - nobs end = nobs if freq is not None: self.data.predict_end = datetools._date_from_idx(dates[-1], out_of_sample, freq) elif out_of_sample <= 0: # have no frequency but are in sample #TODO: what error to catch here to make sure dates is #on the index? try: self.data.predict_end = self._get_dates_loc(dates, end) except KeyError: raise else: self.data.predict_end = end + out_of_sample self.data.predict_start = self._get_dates_loc(dates, self.data.predict_start) self._make_predict_dates() elif isinstance(end, int): nobs = len(self.data.endog) - 1 # is an index if end > nobs: out_of_sample = end - nobs end = nobs elif freq is None: # should have a date with freq = None raise ValueError("When freq is None, you must give an integer " "index for end.") else: raise ValueError("no rule for interpreting end") return end, out_of_sample