Skip to content

parse_interval

yohou.utils.validation.parse_interval(interval)

Parse interval string into (multiplier, unit).

Parameters

Name Type Description Default
interval str

Interval string like "1d", "3mo", "2w".

required

Returns

Type Description
tuple[int, str]

Tuple of (multiplier, unit).

Examples

>>> parse_interval("1d")
(1, 'd')
>>> parse_interval("3mo")
(3, 'mo')
>>> parse_interval("2w")
(2, 'w')
>>> parse_interval("100ms")
(100, 'ms')
>>> parse_interval("50us")
(50, 'us')

See Also

Source Code

Show/Hide source
def parse_interval(interval: str) -> tuple[int, str]:
    r"""Parse interval string into (multiplier, unit).

    Parameters
    ----------
    interval : str
        Interval string like "1d", "3mo", "2w".

    Returns
    -------
    tuple[int, str]
        Tuple of (multiplier, unit).

    Examples
    --------
    >>> parse_interval("1d")
    (1, 'd')
    >>> parse_interval("3mo")
    (3, 'mo')
    >>> parse_interval("2w")
    (2, 'w')
    >>> parse_interval("100ms")
    (100, 'ms')
    >>> parse_interval("50us")
    (50, 'us')

    See Also
    --------
    - [`interval_to_timedelta`][yohou.utils.validation.interval_to_timedelta] : Convert interval string to timedelta.
    - [`add_interval`][yohou.utils.validation.add_interval] : Add intervals to a datetime value.
    - [`check_interval_consistency`][yohou.utils.validation.check_interval_consistency] : Validate uniform time spacing.

    """
    match = re.match(r"(\d+)(mo|q|y|w|d|h|min|ms|us|m|s)", interval)
    if not match:
        raise ValueError(f"Invalid interval format: {interval}")
    unit = match.group(2)
    # Normalize 'min' to 'm' (polars convention)
    if unit == "min":
        unit = "m"
    return int(match.group(1)), unit