Disable class level caching in AbstractHolidayCalendar · Issue #9552 · pandas-dev/pandas (original) (raw)
By caching at the class level it prevents instances from defining different rules - e.g.
import numpy as np from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday
class HolidayCalendar(AbstractHolidayCalendar): def init(self, rules): self.rules = list(np.atleast_1d(rules))
jan1 = HolidayCalendar(Holiday('jan1', year=2015, month=1, day=1)) jan2 = HolidayCalendar(Holiday('jan2', year=2015, month=1, day=2))
jan1.holidays() Out[2]: <class 'pandas.tseries.index.DatetimeIndex'> [2015-01-01] Length: 1, Freq: None, Timezone: None
jan2.holidays() Out[3]: <class 'pandas.tseries.index.DatetimeIndex'> [2015-01-01] <--------------------------- uses cached result from other instance! Length: 1, Freq: None, Timezone: None
import numpy as np from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday
class HolidayCalendar(AbstractHolidayCalendar): def init(self, rules): self.rules = list(np.atleast_1d(rules))
jan1 = HolidayCalendar(Holiday('jan1', year=2015, month=1, day=1)) jan2 = HolidayCalendar(Holiday('jan2', year=2015, month=1, day=2))
jan2.holidays() Out[2]: <class 'pandas.tseries.index.DatetimeIndex'> [2015-01-02] Length: 1, Freq: None, Timezone: None
jan1.holidays() Out[3]: <class 'pandas.tseries.index.DatetimeIndex'> [2015-01-02] <--------------------------- uses cached result from other instance! Length: 1, Freq: None, Timezone: None