@@ -4697,13 +4697,9 @@ _lite_rule_alias = {
4697
4697
" BYS" : " BYS-JAN" , # BYearBegin(month=1),
4698
4698
4699
4699
" Min" : " min" ,
4700
- " min" : " min" ,
4701
- " ms" : " ms" ,
4702
- " us" : " us" ,
4703
- " ns" : " ns" ,
4704
4700
}
4705
4701
4706
- _dont_uppercase = {" h" , " bh" , " cbh" , " MS " , " ms" , " s " }
4702
+ _dont_uppercase = {" min " , " h" , " bh" , " cbh" , " s " , " ms" , " us " , " ns " }
4707
4703
4708
4704
4709
4705
INVALID_FREQ_ERR_MSG = " Invalid frequency: {0}"
@@ -4713,6 +4709,37 @@ INVALID_FREQ_ERR_MSG = "Invalid frequency: {0}"
4713
4709
_offset_map = {}
4714
4710
4715
4711
4712
+ def _warn_about_deprecated_aliases (name: str , is_period: bool ) -> str:
4713
+ if name in _lite_rule_alias:
4714
+ return name
4715
+ if name in c_PERIOD_AND_OFFSET_DEPR_FREQSTR:
4716
+ warnings.warn(
4717
+ f"\'{name}\' is deprecated and will be removed "
4718
+ f"in a future version , please use "
4719
+ f"\'{c_PERIOD_AND_OFFSET_DEPR_FREQSTR.get(name )}\' "
4720
+ f" instead.",
4721
+ FutureWarning ,
4722
+ stacklevel = find_stack_level(),
4723
+ )
4724
+ return c_PERIOD_AND_OFFSET_DEPR_FREQSTR[name]
4725
+
4726
+ for _name in (name.lower(), name.upper()):
4727
+ if name == _name:
4728
+ continue
4729
+ if _name in c_PERIOD_AND_OFFSET_DEPR_FREQSTR.values():
4730
+ warnings.warn(
4731
+ f" \' {name}\' is deprecated and will be removed "
4732
+ f" in a future version, please use "
4733
+ f" \' {_name}\' "
4734
+ f" instead." ,
4735
+ FutureWarning ,
4736
+ stacklevel = find_stack_level(),
4737
+ )
4738
+ return _name
4739
+
4740
+ return name
4741
+
4742
+
4716
4743
def _validate_to_offset_alias (alias: str , is_period: bool ) -> None:
4717
4744
if not is_period:
4718
4745
if alias.upper() in c_OFFSET_RENAMED_FREQSTR:
@@ -4750,35 +4777,6 @@ def _get_offset(name: str) -> BaseOffset:
4750
4777
--------
4751
4778
_get_offset('EOM') --> BMonthEnd(1)
4752
4779
"""
4753
- if (
4754
- name not in _lite_rule_alias
4755
- and (name.upper() in _lite_rule_alias )
4756
- and name != "ms"
4757
- ):
4758
- warnings.warn(
4759
- f" \' {name}\' is deprecated and will be removed "
4760
- f" in a future version, please use \' {name.upper()}\' instead." ,
4761
- FutureWarning ,
4762
- stacklevel = find_stack_level(),
4763
- )
4764
- elif (
4765
- name not in _lite_rule_alias
4766
- and (name.lower() in _lite_rule_alias)
4767
- and name != " MS"
4768
- ):
4769
- warnings.warn(
4770
- f" \' {name}\' is deprecated and will be removed "
4771
- f" in a future version, please use \' {name.lower()}\' instead." ,
4772
- FutureWarning ,
4773
- stacklevel = find_stack_level(),
4774
- )
4775
- if name not in _dont_uppercase:
4776
- name = name.upper()
4777
- name = _lite_rule_alias.get(name, name)
4778
- name = _lite_rule_alias.get(name.lower(), name)
4779
- else :
4780
- name = _lite_rule_alias.get(name, name)
4781
-
4782
4780
if name not in _offset_map:
4783
4781
try:
4784
4782
split = name.split(" -" )
@@ -4880,39 +4878,31 @@ cpdef to_offset(freq, bint is_period=False):
4880
4878
4881
4879
tups = zip (split[0 ::4 ], split[1 ::4 ], split[2 ::4 ])
4882
4880
for n, (sep, stride, name) in enumerate (tups):
4881
+ name = _warn_about_deprecated_aliases(name, is_period)
4883
4882
_validate_to_offset_alias(name, is_period)
4883
+ name = _lite_rule_alias.get(name, name)
4884
4884
if is_period:
4885
4885
if name.upper() in c_PERIOD_TO_OFFSET_FREQSTR:
4886
4886
if name.upper() != name:
4887
4887
raise ValueError (
4888
4888
f" \' {name}\' is no longer supported, "
4889
4889
f" please use \' {name.upper()}\' instead." ,
4890
4890
)
4891
- name = c_PERIOD_TO_OFFSET_FREQSTR.get(name.upper())
4892
-
4893
- if name in c_PERIOD_AND_OFFSET_DEPR_FREQSTR:
4894
- warnings.warn(
4895
- f" \' {name}\' is deprecated and will be removed "
4896
- f" in a future version, please use "
4897
- f" \' {c_PERIOD_AND_OFFSET_DEPR_FREQSTR.get(name)}\' "
4898
- f" instead." ,
4899
- FutureWarning ,
4900
- stacklevel = find_stack_level(),
4901
- )
4902
- name = c_PERIOD_AND_OFFSET_DEPR_FREQSTR.get(name)
4891
+ name = c_PERIOD_TO_OFFSET_FREQSTR[name.upper()]
4892
+ name = _lite_rule_alias.get(name, name)
4893
+
4903
4894
if sep != " " and not sep.isspace():
4904
4895
raise ValueError (" separator must be spaces" )
4905
- prefix = _lite_rule_alias.get(name) or name
4906
4896
if stride_sign is None :
4907
4897
stride_sign = - 1 if stride.startswith(" -" ) else 1
4908
4898
if not stride:
4909
4899
stride = 1
4910
4900
4911
- if prefix in {" D" , " h" , " min" , " s" , " ms" , " us" , " ns" }:
4901
+ if name in {" D" , " h" , " min" , " s" , " ms" , " us" , " ns" }:
4912
4902
# For these prefixes, we have something like "3h" or
4913
4903
# "2.5min", so we can construct a Timedelta with the
4914
4904
# matching unit and get our offset from delta_to_tick
4915
- td = Timedelta(1 , unit = prefix )
4905
+ td = Timedelta(1 , unit = name )
4916
4906
off = delta_to_tick(td)
4917
4907
offset = off * float (stride)
4918
4908
if n != 0 :
@@ -4921,7 +4911,7 @@ cpdef to_offset(freq, bint is_period=False):
4921
4911
offset *= stride_sign
4922
4912
else :
4923
4913
stride = int (stride)
4924
- offset = _get_offset(prefix )
4914
+ offset = _get_offset(name )
4925
4915
offset = offset * int (np.fabs(stride) * stride_sign)
4926
4916
4927
4917
if result is None :
@@ -4931,7 +4921,7 @@ cpdef to_offset(freq, bint is_period=False):
4931
4921
except (ValueError , TypeError ) as err:
4932
4922
raise ValueError (INVALID_FREQ_ERR_MSG.format(
4933
4923
f" {freq}, failed to parse with error message: {repr(err)}" )
4934
- )
4924
+ ) from err
4935
4925
else :
4936
4926
result = None
4937
4927
0 commit comments