23
23
ApplyTypeError ,
24
24
as_datetime , _is_normalized ,
25
25
_get_calendar , _to_dt64 ,
26
- _determine_offset ,
27
26
apply_index_wraps ,
28
27
roll_yearday ,
29
28
shift_month ,
@@ -192,11 +191,14 @@ def __add__(date):
192
191
normalize = False
193
192
194
193
def __init__ (self , n = 1 , normalize = False , ** kwds ):
195
- self .n = self ._validate_n (n )
196
- self .normalize = normalize
194
+ BaseOffset .__init__ (self , n , normalize )
197
195
198
- self ._offset , self ._use_relativedelta = _determine_offset (kwds )
199
- self .__dict__ .update (kwds )
196
+ off , use_rd = liboffsets ._determine_offset (kwds )
197
+ object .__setattr__ (self , "_offset" , off )
198
+ object .__setattr__ (self , "_use_relativedelta" , use_rd )
199
+ for key in kwds :
200
+ val = kwds [key ]
201
+ object .__setattr__ (self , key , val )
200
202
201
203
@apply_wraps
202
204
def apply (self , other ):
@@ -446,9 +448,9 @@ def __init__(self, weekmask, holidays, calendar):
446
448
# following two attributes. See DateOffset._params()
447
449
# holidays, weekmask
448
450
449
- self . weekmask = weekmask
450
- self . holidays = holidays
451
- self . calendar = calendar
451
+ object . __setattr__ ( self , " weekmask" , weekmask )
452
+ object . __setattr__ ( self , " holidays" , holidays )
453
+ object . __setattr__ ( self , " calendar" , calendar )
452
454
453
455
454
456
class BusinessMixin (object ):
@@ -480,9 +482,8 @@ class BusinessDay(BusinessMixin, SingleConstructorOffset):
480
482
_attributes = frozenset (['n' , 'normalize' , 'offset' ])
481
483
482
484
def __init__ (self , n = 1 , normalize = False , offset = timedelta (0 )):
483
- self .n = self ._validate_n (n )
484
- self .normalize = normalize
485
- self ._offset = offset
485
+ BaseOffset .__init__ (self , n , normalize )
486
+ object .__setattr__ (self , "_offset" , offset )
486
487
487
488
def _offset_str (self ):
488
489
def get_str (td ):
@@ -578,9 +579,11 @@ class BusinessHourMixin(BusinessMixin):
578
579
579
580
def __init__ (self , start = '09:00' , end = '17:00' , offset = timedelta (0 )):
580
581
# must be validated here to equality check
581
- self .start = liboffsets ._validate_business_time (start )
582
- self .end = liboffsets ._validate_business_time (end )
583
- self ._offset = offset
582
+ start = liboffsets ._validate_business_time (start )
583
+ object .__setattr__ (self , "start" , start )
584
+ end = liboffsets ._validate_business_time (end )
585
+ object .__setattr__ (self , "end" , end )
586
+ object .__setattr__ (self , "_offset" , offset )
584
587
585
588
@cache_readonly
586
589
def next_bday (self ):
@@ -807,8 +810,7 @@ class BusinessHour(BusinessHourMixin, SingleConstructorOffset):
807
810
808
811
def __init__ (self , n = 1 , normalize = False , start = '09:00' ,
809
812
end = '17:00' , offset = timedelta (0 )):
810
- self .n = self ._validate_n (n )
811
- self .normalize = normalize
813
+ BaseOffset .__init__ (self , n , normalize )
812
814
super (BusinessHour , self ).__init__ (start = start , end = end , offset = offset )
813
815
814
816
@@ -837,9 +839,8 @@ class CustomBusinessDay(_CustomMixin, BusinessDay):
837
839
838
840
def __init__ (self , n = 1 , normalize = False , weekmask = 'Mon Tue Wed Thu Fri' ,
839
841
holidays = None , calendar = None , offset = timedelta (0 )):
840
- self .n = self ._validate_n (n )
841
- self .normalize = normalize
842
- self ._offset = offset
842
+ BaseOffset .__init__ (self , n , normalize )
843
+ object .__setattr__ (self , "_offset" , offset )
843
844
844
845
_CustomMixin .__init__ (self , weekmask , holidays , calendar )
845
846
@@ -898,9 +899,8 @@ class CustomBusinessHour(_CustomMixin, BusinessHourMixin,
898
899
def __init__ (self , n = 1 , normalize = False , weekmask = 'Mon Tue Wed Thu Fri' ,
899
900
holidays = None , calendar = None ,
900
901
start = '09:00' , end = '17:00' , offset = timedelta (0 )):
901
- self .n = self ._validate_n (n )
902
- self .normalize = normalize
903
- self ._offset = offset
902
+ BaseOffset .__init__ (self , n , normalize )
903
+ object .__setattr__ (self , "_offset" , offset )
904
904
905
905
_CustomMixin .__init__ (self , weekmask , holidays , calendar )
906
906
BusinessHourMixin .__init__ (self , start = start , end = end , offset = offset )
@@ -914,9 +914,7 @@ class MonthOffset(SingleConstructorOffset):
914
914
_adjust_dst = True
915
915
_attributes = frozenset (['n' , 'normalize' ])
916
916
917
- def __init__ (self , n = 1 , normalize = False ):
918
- self .n = self ._validate_n (n )
919
- self .normalize = normalize
917
+ __init__ = BaseOffset .__init__
920
918
921
919
@property
922
920
def name (self ):
@@ -995,9 +993,8 @@ class _CustomBusinessMonth(_CustomMixin, BusinessMixin, MonthOffset):
995
993
996
994
def __init__ (self , n = 1 , normalize = False , weekmask = 'Mon Tue Wed Thu Fri' ,
997
995
holidays = None , calendar = None , offset = timedelta (0 )):
998
- self .n = self ._validate_n (n )
999
- self .normalize = normalize
1000
- self ._offset = offset
996
+ BaseOffset .__init__ (self , n , normalize )
997
+ object .__setattr__ (self , "_offset" , offset )
1001
998
1002
999
_CustomMixin .__init__ (self , weekmask , holidays , calendar )
1003
1000
@@ -1074,18 +1071,18 @@ class SemiMonthOffset(DateOffset):
1074
1071
_attributes = frozenset (['n' , 'normalize' , 'day_of_month' ])
1075
1072
1076
1073
def __init__ (self , n = 1 , normalize = False , day_of_month = None ):
1074
+ BaseOffset .__init__ (self , n , normalize )
1075
+
1077
1076
if day_of_month is None :
1078
- self .day_of_month = self ._default_day_of_month
1077
+ object .__setattr__ (self , "day_of_month" ,
1078
+ self ._default_day_of_month )
1079
1079
else :
1080
- self . day_of_month = int (day_of_month )
1080
+ object . __setattr__ ( self , " day_of_month" , int (day_of_month ) )
1081
1081
if not self ._min_day_of_month <= self .day_of_month <= 27 :
1082
1082
msg = 'day_of_month must be {min}<=day_of_month<=27, got {day}'
1083
1083
raise ValueError (msg .format (min = self ._min_day_of_month ,
1084
1084
day = self .day_of_month ))
1085
1085
1086
- self .n = self ._validate_n (n )
1087
- self .normalize = normalize
1088
-
1089
1086
@classmethod
1090
1087
def _from_name (cls , suffix = None ):
1091
1088
return cls (day_of_month = suffix )
@@ -1291,9 +1288,8 @@ class Week(DateOffset):
1291
1288
_attributes = frozenset (['n' , 'normalize' , 'weekday' ])
1292
1289
1293
1290
def __init__ (self , n = 1 , normalize = False , weekday = None ):
1294
- self .n = self ._validate_n (n )
1295
- self .normalize = normalize
1296
- self .weekday = weekday
1291
+ BaseOffset .__init__ (self , n , normalize )
1292
+ object .__setattr__ (self , "weekday" , weekday )
1297
1293
1298
1294
if self .weekday is not None :
1299
1295
if self .weekday < 0 or self .weekday > 6 :
@@ -1421,10 +1417,9 @@ class WeekOfMonth(_WeekOfMonthMixin, DateOffset):
1421
1417
_attributes = frozenset (['n' , 'normalize' , 'week' , 'weekday' ])
1422
1418
1423
1419
def __init__ (self , n = 1 , normalize = False , week = 0 , weekday = 0 ):
1424
- self .n = self ._validate_n (n )
1425
- self .normalize = normalize
1426
- self .weekday = weekday
1427
- self .week = week
1420
+ BaseOffset .__init__ (self , n , normalize )
1421
+ object .__setattr__ (self , "weekday" , weekday )
1422
+ object .__setattr__ (self , "week" , week )
1428
1423
1429
1424
if self .weekday < 0 or self .weekday > 6 :
1430
1425
raise ValueError ('Day must be 0<=day<=6, got {day}'
@@ -1493,9 +1488,8 @@ class LastWeekOfMonth(_WeekOfMonthMixin, DateOffset):
1493
1488
_attributes = frozenset (['n' , 'normalize' , 'weekday' ])
1494
1489
1495
1490
def __init__ (self , n = 1 , normalize = False , weekday = 0 ):
1496
- self .n = self ._validate_n (n )
1497
- self .normalize = normalize
1498
- self .weekday = weekday
1491
+ BaseOffset .__init__ (self , n , normalize )
1492
+ object .__setattr__ (self , "weekday" , weekday )
1499
1493
1500
1494
if self .n == 0 :
1501
1495
raise ValueError ('N cannot be 0' )
@@ -1553,11 +1547,11 @@ class QuarterOffset(DateOffset):
1553
1547
# startingMonth vs month attr names are resolved
1554
1548
1555
1549
def __init__ (self , n = 1 , normalize = False , startingMonth = None ):
1556
- self . n = self . _validate_n ( n )
1557
- self . normalize = normalize
1550
+ BaseOffset . __init__ ( self , n , normalize )
1551
+
1558
1552
if startingMonth is None :
1559
1553
startingMonth = self ._default_startingMonth
1560
- self . startingMonth = startingMonth
1554
+ object . __setattr__ ( self , " startingMonth" , startingMonth )
1561
1555
1562
1556
def isAnchored (self ):
1563
1557
return (self .n == 1 and self .startingMonth is not None )
@@ -1679,11 +1673,10 @@ def onOffset(self, dt):
1679
1673
return dt .month == self .month and dt .day == self ._get_offset_day (dt )
1680
1674
1681
1675
def __init__ (self , n = 1 , normalize = False , month = None ):
1682
- self .n = self ._validate_n (n )
1683
- self .normalize = normalize
1676
+ BaseOffset .__init__ (self , n , normalize )
1684
1677
1685
1678
month = month if month is not None else self ._default_month
1686
- self . month = month
1679
+ object . __setattr__ ( self , " month" , month )
1687
1680
1688
1681
if self .month < 1 or self .month > 12 :
1689
1682
raise ValueError ('Month must go from 1 to 12' )
@@ -1776,12 +1769,11 @@ class FY5253(DateOffset):
1776
1769
1777
1770
def __init__ (self , n = 1 , normalize = False , weekday = 0 , startingMonth = 1 ,
1778
1771
variation = "nearest" ):
1779
- self .n = self ._validate_n (n )
1780
- self .normalize = normalize
1781
- self .startingMonth = startingMonth
1782
- self .weekday = weekday
1772
+ BaseOffset .__init__ (self , n , normalize )
1773
+ object .__setattr__ (self , "startingMonth" , startingMonth )
1774
+ object .__setattr__ (self , "weekday" , weekday )
1783
1775
1784
- self . variation = variation
1776
+ object . __setattr__ ( self , " variation" , variation )
1785
1777
1786
1778
if self .n == 0 :
1787
1779
raise ValueError ('N cannot be 0' )
@@ -1976,13 +1968,12 @@ class FY5253Quarter(DateOffset):
1976
1968
1977
1969
def __init__ (self , n = 1 , normalize = False , weekday = 0 , startingMonth = 1 ,
1978
1970
qtr_with_extra_week = 1 , variation = "nearest" ):
1979
- self .n = self ._validate_n (n )
1980
- self .normalize = normalize
1971
+ BaseOffset .__init__ (self , n , normalize )
1981
1972
1982
- self . weekday = weekday
1983
- self . startingMonth = startingMonth
1984
- self . qtr_with_extra_week = qtr_with_extra_week
1985
- self . variation = variation
1973
+ object . __setattr__ ( self , "startingMonth" , startingMonth )
1974
+ object . __setattr__ ( self , "weekday" , weekday )
1975
+ object . __setattr__ ( self , " qtr_with_extra_week" , qtr_with_extra_week )
1976
+ object . __setattr__ ( self , " variation" , variation )
1986
1977
1987
1978
if self .n == 0 :
1988
1979
raise ValueError ('N cannot be 0' )
@@ -2129,9 +2120,7 @@ class Easter(DateOffset):
2129
2120
_adjust_dst = True
2130
2121
_attributes = frozenset (['n' , 'normalize' ])
2131
2122
2132
- def __init__ (self , n = 1 , normalize = False ):
2133
- self .n = self ._validate_n (n )
2134
- self .normalize = normalize
2123
+ __init__ = BaseOffset .__init__
2135
2124
2136
2125
@apply_wraps
2137
2126
def apply (self , other ):
@@ -2177,11 +2166,10 @@ class Tick(SingleConstructorOffset):
2177
2166
_attributes = frozenset (['n' , 'normalize' ])
2178
2167
2179
2168
def __init__ (self , n = 1 , normalize = False ):
2180
- self . n = self . _validate_n ( n )
2169
+ BaseOffset . __init__ ( self , n , normalize )
2181
2170
if normalize :
2182
2171
raise ValueError ("Tick offset with `normalize=True` are not "
2183
2172
"allowed." ) # GH#21427
2184
- self .normalize = normalize
2185
2173
2186
2174
__gt__ = _tick_comp (operator .gt )
2187
2175
__ge__ = _tick_comp (operator .ge )
0 commit comments