@@ -939,12 +939,14 @@ def __init__(self, n=1, normalize=False, **kwds):
939939 self .normalize = normalize
940940 super (BusinessHour , self ).__init__ (** kwds )
941941
942+ @cache_readonly
943+ def next_bday (self ):
942944 # used for moving to next businessday
943945 if self .n >= 0 :
944946 nb_offset = 1
945947 else :
946948 nb_offset = - 1
947- self . next_bday = BusinessDay (n = nb_offset )
949+ return BusinessDay (n = nb_offset )
948950
949951
950952class CustomBusinessDay (BusinessDay ):
@@ -1562,6 +1564,7 @@ class Week(DateOffset):
15621564 Always generate specific day of week. 0 for Monday
15631565 """
15641566 _adjust_dst = True
1567+ _inc = timedelta (weeks = 1 )
15651568
15661569 def __init__ (self , n = 1 , normalize = False , ** kwds ):
15671570 self .n = n
@@ -1573,7 +1576,6 @@ def __init__(self, n=1, normalize=False, **kwds):
15731576 raise ValueError ('Day must be 0<=day<=6, got {day}'
15741577 .format (day = self .weekday ))
15751578
1576- self ._inc = timedelta (weeks = 1 )
15771579 self .kwds = kwds
15781580
15791581 def isAnchored (self ):
@@ -1977,13 +1979,6 @@ class QuarterEnd(QuarterOffset):
19771979 _default_startingMonth = 3
19781980 _prefix = 'Q'
19791981
1980- def __init__ (self , n = 1 , normalize = False , ** kwds ):
1981- self .n = n
1982- self .normalize = normalize
1983- self .startingMonth = kwds .get ('startingMonth' , 3 )
1984-
1985- self .kwds = kwds
1986-
19871982 def isAnchored (self ):
19881983 return (self .n == 1 and self .startingMonth is not None )
19891984
@@ -2316,12 +2311,28 @@ def __init__(self, n=1, normalize=False, **kwds):
23162311 raise ValueError ('{variation} is not a valid variation'
23172312 .format (variation = self .variation ))
23182313
2314+ @cache_readonly
2315+ def _relativedelta_forward (self ):
23192316 if self .variation == "nearest" :
23202317 weekday_offset = weekday (self .weekday )
2321- self ._rd_forward = relativedelta (weekday = weekday_offset )
2322- self ._rd_backward = relativedelta (weekday = weekday_offset (- 1 ))
2318+ return relativedelta (weekday = weekday_offset )
23232319 else :
2324- self ._offset_lwom = LastWeekOfMonth (n = 1 , weekday = self .weekday )
2320+ return None
2321+
2322+ @cache_readonly
2323+ def _relativedelta_backward (self ):
2324+ if self .variation == "nearest" :
2325+ weekday_offset = weekday (self .weekday )
2326+ return relativedelta (weekday = weekday_offset (- 1 ))
2327+ else :
2328+ return None
2329+
2330+ @cache_readonly
2331+ def _offset_lwom (self ):
2332+ if self .variation == "nearest" :
2333+ return None
2334+ else :
2335+ return LastWeekOfMonth (n = 1 , weekday = self .weekday )
23252336
23262337 def isAnchored (self ):
23272338 return self .n == 1 \
@@ -2425,8 +2436,8 @@ def _get_year_end_nearest(self, dt):
24252436 if target_date .weekday () == self .weekday :
24262437 return target_date
24272438 else :
2428- forward = target_date + self ._rd_forward
2429- backward = target_date + self ._rd_backward
2439+ forward = target_date + self ._relativedelta_forward
2440+ backward = target_date + self ._relativedelta_backward
24302441
24312442 if forward - target_date < target_date - backward :
24322443 return forward
@@ -2542,7 +2553,10 @@ def __init__(self, n=1, normalize=False, **kwds):
25422553 if self .n == 0 :
25432554 raise ValueError ('N cannot be 0' )
25442555
2545- self ._offset = FY5253 (
2556+ @cache_readonly
2557+ def _offset (self ):
2558+ kwds = self .kwds
2559+ return FY5253 (
25462560 startingMonth = kwds ['startingMonth' ],
25472561 weekday = kwds ["weekday" ],
25482562 variation = kwds ["variation" ])
@@ -2652,9 +2666,6 @@ class Easter(DateOffset):
26522666 """
26532667 _adjust_dst = True
26542668
2655- def __init__ (self , n = 1 , ** kwds ):
2656- super (Easter , self ).__init__ (n , ** kwds )
2657-
26582669 @apply_wraps
26592670 def apply (self , other ):
26602671 currentEaster = easter (other .year )
0 commit comments