@@ -302,7 +302,7 @@ def _add_comparison_methods(cls):
302
302
_engine_type = libindex .DatetimeEngine
303
303
304
304
tz = None
305
- offset = None
305
+ _freq = None
306
306
_comparables = ['name' , 'freqstr' , 'tz' ]
307
307
_attributes = ['name' , 'freq' , 'tz' ]
308
308
@@ -415,7 +415,7 @@ def __new__(cls, data=None,
415
415
subarr = data .values
416
416
417
417
if freq is None :
418
- freq = data .offset
418
+ freq = data .freq
419
419
verify_integrity = False
420
420
else :
421
421
if data .dtype != _NS_DTYPE :
@@ -467,12 +467,12 @@ def __new__(cls, data=None,
467
467
if freq_infer :
468
468
inferred = subarr .inferred_freq
469
469
if inferred :
470
- subarr .offset = to_offset (inferred )
470
+ subarr .freq = to_offset (inferred )
471
471
472
472
return subarr ._deepcopy_if_needed (ref_to_data , copy )
473
473
474
474
@classmethod
475
- def _generate (cls , start , end , periods , name , offset ,
475
+ def _generate (cls , start , end , periods , name , freq ,
476
476
tz = None , normalize = False , ambiguous = 'raise' , closed = None ):
477
477
if com ._count_not_none (start , end , periods ) != 2 :
478
478
raise ValueError ('Of the three parameters: start, end, and '
@@ -535,7 +535,7 @@ def _generate(cls, start, end, periods, name, offset,
535
535
else :
536
536
_normalized = _normalized and end .time () == _midnight
537
537
538
- if hasattr (offset , 'delta' ) and offset != offsets .Day ():
538
+ if hasattr (freq , 'delta' ) and freq != offsets .Day ():
539
539
if inferred_tz is None and tz is not None :
540
540
# naive dates
541
541
if start is not None and start .tz is None :
@@ -551,11 +551,11 @@ def _generate(cls, start, end, periods, name, offset,
551
551
if end .tz is None and start .tz is not None :
552
552
end = end .tz_localize (start .tz , ambiguous = False )
553
553
554
- if _use_cached_range (offset , _normalized , start , end ):
554
+ if _use_cached_range (freq , _normalized , start , end ):
555
555
index = cls ._cached_range (start , end , periods = periods ,
556
- offset = offset , name = name )
556
+ freq = freq , name = name )
557
557
else :
558
- index = _generate_regular_range (start , end , periods , offset )
558
+ index = _generate_regular_range (start , end , periods , freq )
559
559
560
560
else :
561
561
@@ -574,11 +574,11 @@ def _generate(cls, start, end, periods, name, offset,
574
574
if end .tz is None and start .tz is not None :
575
575
start = start .replace (tzinfo = None )
576
576
577
- if _use_cached_range (offset , _normalized , start , end ):
577
+ if _use_cached_range (freq , _normalized , start , end ):
578
578
index = cls ._cached_range (start , end , periods = periods ,
579
- offset = offset , name = name )
579
+ freq = freq , name = name )
580
580
else :
581
- index = _generate_regular_range (start , end , periods , offset )
581
+ index = _generate_regular_range (start , end , periods , freq )
582
582
583
583
if tz is not None and getattr (index , 'tz' , None ) is None :
584
584
index = conversion .tz_localize_to_utc (_ensure_int64 (index ), tz ,
@@ -596,12 +596,12 @@ def _generate(cls, start, end, periods, name, offset,
596
596
index = index [1 :]
597
597
if not right_closed and len (index ) and index [- 1 ] == end :
598
598
index = index [:- 1 ]
599
- index = cls ._simple_new (index , name = name , freq = offset , tz = tz )
599
+ index = cls ._simple_new (index , name = name , freq = freq , tz = tz )
600
600
return index
601
601
602
602
@property
603
603
def _box_func (self ):
604
- return lambda x : Timestamp (x , freq = self .offset , tz = self .tz )
604
+ return lambda x : Timestamp (x , freq = self .freq , tz = self .tz )
605
605
606
606
def _convert_for_op (self , value ):
607
607
""" Convert value to be insertable to ndarray """
@@ -647,7 +647,7 @@ def _simple_new(cls, values, name=None, freq=None, tz=None,
647
647
result = object .__new__ (cls )
648
648
result ._data = values
649
649
result .name = name
650
- result .offset = freq
650
+ result ._freq = freq
651
651
result ._tz = timezones .maybe_get_tz (tz )
652
652
result ._tz = timezones .tz_standardize (result ._tz )
653
653
result ._reset_identity ()
@@ -734,7 +734,7 @@ def _has_same_tz(self, other):
734
734
return zzone == vzone
735
735
736
736
@classmethod
737
- def _cached_range (cls , start = None , end = None , periods = None , offset = None ,
737
+ def _cached_range (cls , start = None , end = None , periods = None , freq = None ,
738
738
name = None ):
739
739
if start is None and end is None :
740
740
# I somewhat believe this should never be raised externally
@@ -747,54 +747,54 @@ def _cached_range(cls, start=None, end=None, periods=None, offset=None,
747
747
raise TypeError (
748
748
'Must either specify period or provide both start and end.' )
749
749
750
- if offset is None :
750
+ if freq is None :
751
751
# This can't happen with external-facing code
752
- raise TypeError ('Must provide offset .' )
752
+ raise TypeError ('Must provide freq .' )
753
753
754
754
drc = _daterange_cache
755
- if offset not in _daterange_cache :
756
- xdr = generate_range (offset = offset , start = _CACHE_START ,
755
+ if freq not in _daterange_cache :
756
+ xdr = generate_range (offset = freq , start = _CACHE_START ,
757
757
end = _CACHE_END )
758
758
759
759
arr = tools .to_datetime (list (xdr ), box = False )
760
760
761
761
cachedRange = DatetimeIndex ._simple_new (arr )
762
- cachedRange .offset = offset
762
+ cachedRange .freq = freq
763
763
cachedRange = cachedRange .tz_localize (None )
764
764
cachedRange .name = None
765
- drc [offset ] = cachedRange
765
+ drc [freq ] = cachedRange
766
766
else :
767
- cachedRange = drc [offset ]
767
+ cachedRange = drc [freq ]
768
768
769
769
if start is None :
770
770
if not isinstance (end , Timestamp ):
771
771
raise AssertionError ('end must be an instance of Timestamp' )
772
772
773
- end = offset .rollback (end )
773
+ end = freq .rollback (end )
774
774
775
775
endLoc = cachedRange .get_loc (end ) + 1
776
776
startLoc = endLoc - periods
777
777
elif end is None :
778
778
if not isinstance (start , Timestamp ):
779
779
raise AssertionError ('start must be an instance of Timestamp' )
780
780
781
- start = offset .rollforward (start )
781
+ start = freq .rollforward (start )
782
782
783
783
startLoc = cachedRange .get_loc (start )
784
784
endLoc = startLoc + periods
785
785
else :
786
- if not offset .onOffset (start ):
787
- start = offset .rollforward (start )
786
+ if not freq .onOffset (start ):
787
+ start = freq .rollforward (start )
788
788
789
- if not offset .onOffset (end ):
790
- end = offset .rollback (end )
789
+ if not freq .onOffset (end ):
790
+ end = freq .rollback (end )
791
791
792
792
startLoc = cachedRange .get_loc (start )
793
793
endLoc = cachedRange .get_loc (end ) + 1
794
794
795
795
indexSlice = cachedRange [startLoc :endLoc ]
796
796
indexSlice .name = name
797
- indexSlice .offset = offset
797
+ indexSlice .freq = freq
798
798
799
799
return indexSlice
800
800
@@ -836,7 +836,7 @@ def __setstate__(self, state):
836
836
np .ndarray .__setstate__ (data , nd_state )
837
837
838
838
self .name = own_state [0 ]
839
- self .offset = own_state [1 ]
839
+ self .freq = own_state [1 ]
840
840
self ._tz = timezones .tz_standardize (own_state [2 ])
841
841
842
842
# provide numpy < 1.7 compat
@@ -1184,7 +1184,7 @@ def union(self, other):
1184
1184
result ._tz = timezones .tz_standardize (this .tz )
1185
1185
if (result .freq is None and
1186
1186
(this .freq is not None or other .freq is not None )):
1187
- result .offset = to_offset (result .inferred_freq )
1187
+ result .freq = to_offset (result .inferred_freq )
1188
1188
return result
1189
1189
1190
1190
def to_perioddelta (self , freq ):
@@ -1232,7 +1232,7 @@ def union_many(self, others):
1232
1232
this ._tz = timezones .tz_standardize (tz )
1233
1233
1234
1234
if this .freq is None :
1235
- this .offset = to_offset (this .inferred_freq )
1235
+ this .freq = to_offset (this .inferred_freq )
1236
1236
return this
1237
1237
1238
1238
def join (self , other , how = 'left' , level = None , return_indexers = False ,
@@ -1271,7 +1271,7 @@ def _maybe_utc_convert(self, other):
1271
1271
def _wrap_joined_index (self , joined , other ):
1272
1272
name = self .name if self .name == other .name else None
1273
1273
if (isinstance (other , DatetimeIndex ) and
1274
- self .offset == other .offset and
1274
+ self .freq == other .freq and
1275
1275
self ._can_fast_union (other )):
1276
1276
joined = self ._shallow_copy (joined )
1277
1277
joined .name = name
@@ -1284,9 +1284,9 @@ def _can_fast_union(self, other):
1284
1284
if not isinstance (other , DatetimeIndex ):
1285
1285
return False
1286
1286
1287
- offset = self .offset
1287
+ freq = self .freq
1288
1288
1289
- if offset is None or offset != other .offset :
1289
+ if freq is None or freq != other .freq :
1290
1290
return False
1291
1291
1292
1292
if not self .is_monotonic or not other .is_monotonic :
@@ -1306,10 +1306,10 @@ def _can_fast_union(self, other):
1306
1306
1307
1307
# Only need to "adjoin", not overlap
1308
1308
try :
1309
- return (right_start == left_end + offset ) or right_start in left
1309
+ return (right_start == left_end + freq ) or right_start in left
1310
1310
except (ValueError ):
1311
1311
1312
- # if we are comparing an offset that does not propagate timezones
1312
+ # if we are comparing a freq that does not propagate timezones
1313
1313
# this will raise
1314
1314
return False
1315
1315
@@ -1329,7 +1329,7 @@ def _fast_union(self, other):
1329
1329
left_start , left_end = left [0 ], left [- 1 ]
1330
1330
right_end = right [- 1 ]
1331
1331
1332
- if not self .offset ._should_cache ():
1332
+ if not self .freq ._should_cache ():
1333
1333
# concatenate dates
1334
1334
if left_end < right_end :
1335
1335
loc = right .searchsorted (left_end , side = 'right' )
@@ -1341,7 +1341,7 @@ def _fast_union(self, other):
1341
1341
else :
1342
1342
return type (self )(start = left_start ,
1343
1343
end = max (left_end , right_end ),
1344
- freq = left .offset )
1344
+ freq = left .freq )
1345
1345
1346
1346
def __iter__ (self ):
1347
1347
"""
@@ -1393,18 +1393,18 @@ def intersection(self, other):
1393
1393
result = Index .intersection (self , other )
1394
1394
if isinstance (result , DatetimeIndex ):
1395
1395
if result .freq is None :
1396
- result .offset = to_offset (result .inferred_freq )
1396
+ result .freq = to_offset (result .inferred_freq )
1397
1397
return result
1398
1398
1399
- elif (other .offset is None or self .offset is None or
1400
- other .offset != self .offset or
1401
- not other .offset .isAnchored () or
1399
+ elif (other .freq is None or self .freq is None or
1400
+ other .freq != self .freq or
1401
+ not other .freq .isAnchored () or
1402
1402
(not self .is_monotonic or not other .is_monotonic )):
1403
1403
result = Index .intersection (self , other )
1404
1404
result = self ._shallow_copy (result ._values , name = result .name ,
1405
1405
tz = result .tz , freq = None )
1406
1406
if result .freq is None :
1407
- result .offset = to_offset (result .inferred_freq )
1407
+ result .freq = to_offset (result .inferred_freq )
1408
1408
return result
1409
1409
1410
1410
if len (self ) == 0 :
@@ -1729,12 +1729,28 @@ def slice_indexer(self, start=None, end=None, step=None, kind=None):
1729
1729
@property
1730
1730
def freq (self ):
1731
1731
"""get/set the frequency of the Index"""
1732
- return self .offset
1732
+ return self ._freq
1733
1733
1734
1734
@freq .setter
1735
1735
def freq (self , value ):
1736
1736
"""get/set the frequency of the Index"""
1737
- self .offset = value
1737
+ self ._freq = value
1738
+
1739
+ @property
1740
+ def offset (self ):
1741
+ """get/set the frequency of the Index"""
1742
+ msg = ('DatetimeIndex.offset has been deprecated and will be removed '
1743
+ 'in a future version; use DatetimeIndex.freq instead.' )
1744
+ warnings .warn (msg , FutureWarning , stacklevel = 2 )
1745
+ return self .freq
1746
+
1747
+ @offset .setter
1748
+ def offset (self , value ):
1749
+ """get/set the frequency of the Index"""
1750
+ msg = ('DatetimeIndex.offset has been deprecated and will be removed '
1751
+ 'in a future version; use DatetimeIndex.freq instead.' )
1752
+ warnings .warn (msg , FutureWarning , stacklevel = 2 )
1753
+ self .freq = value
1738
1754
1739
1755
year = _field_accessor ('year' , 'Y' , "The year of the datetime" )
1740
1756
month = _field_accessor ('month' , 'M' ,
@@ -2525,9 +2541,9 @@ def day_name(self, locale=None):
2525
2541
DatetimeIndex ._add_datetimelike_methods ()
2526
2542
2527
2543
2528
- def _generate_regular_range (start , end , periods , offset ):
2529
- if isinstance (offset , Tick ):
2530
- stride = offset .nanos
2544
+ def _generate_regular_range (start , end , periods , freq ):
2545
+ if isinstance (freq , Tick ):
2546
+ stride = freq .nanos
2531
2547
if periods is None :
2532
2548
b = Timestamp (start ).value
2533
2549
# cannot just use e = Timestamp(end) + 1 because arange breaks when
@@ -2558,7 +2574,7 @@ def _generate_regular_range(start, end, periods, offset):
2558
2574
end = end .to_pydatetime ()
2559
2575
2560
2576
xdr = generate_range (start = start , end = end ,
2561
- periods = periods , offset = offset )
2577
+ periods = periods , offset = freq )
2562
2578
2563
2579
dates = list (xdr )
2564
2580
# utc = len(dates) > 0 and dates[0].tzinfo is not None
@@ -2855,9 +2871,9 @@ def _in_range(start, end, rng_start, rng_end):
2855
2871
return start > rng_start and end < rng_end
2856
2872
2857
2873
2858
- def _use_cached_range (offset , _normalized , start , end ):
2859
- return (offset ._should_cache () and
2860
- not (offset ._normalize_cache and not _normalized ) and
2874
+ def _use_cached_range (freq , _normalized , start , end ):
2875
+ return (freq ._should_cache () and
2876
+ not (freq ._normalize_cache and not _normalized ) and
2861
2877
_naive_in_cache_range (start , end ))
2862
2878
2863
2879
0 commit comments