@@ -939,12 +939,14 @@ def __init__(self, n=1, normalize=False, **kwds):
939
939
self .normalize = normalize
940
940
super (BusinessHour , self ).__init__ (** kwds )
941
941
942
+ @cache_readonly
943
+ def next_bday (self ):
942
944
# used for moving to next businessday
943
945
if self .n >= 0 :
944
946
nb_offset = 1
945
947
else :
946
948
nb_offset = - 1
947
- self . next_bday = BusinessDay (n = nb_offset )
949
+ return BusinessDay (n = nb_offset )
948
950
949
951
950
952
class CustomBusinessDay (BusinessDay ):
@@ -1562,6 +1564,7 @@ class Week(DateOffset):
1562
1564
Always generate specific day of week. 0 for Monday
1563
1565
"""
1564
1566
_adjust_dst = True
1567
+ _inc = timedelta (weeks = 1 )
1565
1568
1566
1569
def __init__ (self , n = 1 , normalize = False , ** kwds ):
1567
1570
self .n = n
@@ -1573,7 +1576,6 @@ def __init__(self, n=1, normalize=False, **kwds):
1573
1576
raise ValueError ('Day must be 0<=day<=6, got {day}'
1574
1577
.format (day = self .weekday ))
1575
1578
1576
- self ._inc = timedelta (weeks = 1 )
1577
1579
self .kwds = kwds
1578
1580
1579
1581
def isAnchored (self ):
@@ -1977,13 +1979,6 @@ class QuarterEnd(QuarterOffset):
1977
1979
_default_startingMonth = 3
1978
1980
_prefix = 'Q'
1979
1981
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
-
1987
1982
def isAnchored (self ):
1988
1983
return (self .n == 1 and self .startingMonth is not None )
1989
1984
@@ -2316,12 +2311,28 @@ def __init__(self, n=1, normalize=False, **kwds):
2316
2311
raise ValueError ('{variation} is not a valid variation'
2317
2312
.format (variation = self .variation ))
2318
2313
2314
+ @cache_readonly
2315
+ def _relativedelta_forward (self ):
2319
2316
if self .variation == "nearest" :
2320
2317
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 )
2323
2319
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 )
2325
2336
2326
2337
def isAnchored (self ):
2327
2338
return self .n == 1 \
@@ -2425,8 +2436,8 @@ def _get_year_end_nearest(self, dt):
2425
2436
if target_date .weekday () == self .weekday :
2426
2437
return target_date
2427
2438
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
2430
2441
2431
2442
if forward - target_date < target_date - backward :
2432
2443
return forward
@@ -2542,7 +2553,10 @@ def __init__(self, n=1, normalize=False, **kwds):
2542
2553
if self .n == 0 :
2543
2554
raise ValueError ('N cannot be 0' )
2544
2555
2545
- self ._offset = FY5253 (
2556
+ @cache_readonly
2557
+ def _offset (self ):
2558
+ kwds = self .kwds
2559
+ return FY5253 (
2546
2560
startingMonth = kwds ['startingMonth' ],
2547
2561
weekday = kwds ["weekday" ],
2548
2562
variation = kwds ["variation" ])
@@ -2652,9 +2666,6 @@ class Easter(DateOffset):
2652
2666
"""
2653
2667
_adjust_dst = True
2654
2668
2655
- def __init__ (self , n = 1 , ** kwds ):
2656
- super (Easter , self ).__init__ (n , ** kwds )
2657
-
2658
2669
@apply_wraps
2659
2670
def apply (self , other ):
2660
2671
currentEaster = easter (other .year )
0 commit comments