@@ -5188,6 +5188,27 @@ INVALID_FREQ_ERR_MSG = "Invalid frequency: {0}"
51885188_offset_map = {}
51895189
51905190
5191+ deprec_to_valid_alias = {
5192+ " H" : " h" ,
5193+ " BH" : " bh" ,
5194+ " CBH" : " cbh" ,
5195+ " T" : " min" ,
5196+ " S" : " s" ,
5197+ " L" : " ms" ,
5198+ " U" : " us" ,
5199+ " N" : " ns" ,
5200+ }
5201+
5202+
5203+ def raise_invalid_freq (freq: str , extra_message: str | None = None ) -> None:
5204+ msg = f" Invalid frequency: {freq}."
5205+ if extra_message is not None:
5206+ msg += " " + extra_message
5207+ if freq in deprec_to_valid_alias:
5208+ msg += " " + "Did you mean {deprec_to_valid_alias[name]}?"
5209+ raise ValueError(msg )
5210+
5211+
51915212def _warn_about_deprecated_aliases(name: str , is_period: bool ) -> str:
51925213 if name in _lite_rule_alias:
51935214 return name
@@ -5236,7 +5257,7 @@ def _validate_to_offset_alias(alias: str, is_period: bool) -> None:
52365257 if (alias.upper() != alias and
52375258 alias.lower() not in {"s", "ms", "us", "ns"} and
52385259 alias.upper().split("-")[0].endswith(("S", "E"))):
5239- raise ValueError (INVALID_FREQ_ERR_MSG.format( alias))
5260+ raise ValueError (raise_invalid_freq( freq = alias))
52405261 if (
52415262 is_period and
52425263 alias in c_OFFSET_TO_PERIOD_FREQSTR and
@@ -5267,27 +5288,16 @@ def _get_offset(name: str) -> BaseOffset:
52675288 offset = klass._from_name(* split[1 :])
52685289 except (ValueError , TypeError , KeyError ) as err:
52695290 # bad prefix or suffix
5270- raise ValueError(INVALID_FREQ_ERR_MSG.format(
5271- f"{name}, failed to parse with error message: {repr(err )}")
5291+ raise_invalid_freq(
5292+ freq = name,
5293+ extra_message = f" Failed to parse with error message: {repr(err)}."
52725294 )
52735295 # cache
52745296 _offset_map[name] = offset
52755297
52765298 return _offset_map[name]
52775299
52785300
5279- deprec_to_valid_alias = {
5280- " H" : " h" ,
5281- " BH" : " bh" ,
5282- " CBH" : " cbh" ,
5283- " T" : " min" ,
5284- " S" : " s" ,
5285- " L" : " ms" ,
5286- " U" : " us" ,
5287- " N" : " ns" ,
5288- }
5289-
5290-
52915301cpdef to_offset(freq , bint is_period = False ):
52925302 """
52935303 Return DateOffset object from string or datetime.timedelta object.
@@ -5371,11 +5381,6 @@ cpdef to_offset(freq, bint is_period=False):
53715381
53725382 tups = zip (split[0 ::4 ], split[1 ::4 ], split[2 ::4 ], strict = False )
53735383 for n, (sep, stride, name) in enumerate (tups):
5374- if name in deprec_to_valid_alias:
5375- raise ValueError (INVALID_FREQ_ERR_MSG.format(
5376- f" {name}. Did you mean {deprec_to_valid_alias[name]}?" )
5377- )
5378-
53795384 name = _warn_about_deprecated_aliases(name, is_period)
53805385 _validate_to_offset_alias(name, is_period)
53815386 if is_period:
@@ -5416,9 +5421,10 @@ cpdef to_offset(freq, bint is_period=False):
54165421 else :
54175422 result = result + offset
54185423 except (ValueError , TypeError ) as err:
5419- raise ValueError (INVALID_FREQ_ERR_MSG.format(
5420- f" {freq}, failed to parse with error message: {repr(err)}" )
5421- ) from err
5424+ raise_invalid_freq(
5425+ freq = freq,
5426+ extra_message = f" Failed to parse with error message: {repr(err)}"
5427+ )
54225428
54235429 # TODO(3.0?) once deprecation of "d" is enforced, the check for it here
54245430 # can be removed
@@ -5434,7 +5440,7 @@ cpdef to_offset(freq, bint is_period=False):
54345440 result = None
54355441
54365442 if result is None :
5437- raise ValueError (INVALID_FREQ_ERR_MSG.format( freq) )
5443+ raise_invalid_freq( freq = freq )
54385444
54395445 try :
54405446 has_period_dtype_code = hasattr (result, " _period_dtype_code" )
0 commit comments