from _typeshed import Unused
from collections.abc import Generator
from typing import Final, Literal, NoReturn, overload

EPOCH: Final = 584282.5
HAAB: Final[list[str]]
HAAB_TRANSLATIONS: Final[list[str]]
TZOLKIN: Final[list[str]]
TZOLKIN_TRANSLATIONS: Final[list[str]]

def to_jd(baktun: int, katun: int, tun: int, uinal: int, kin: int) -> float: ...
def from_jd(jd: float) -> tuple[int, int, int, int, int]: ...
def to_gregorian(baktun: int, katun: int, tun: int, uinal: int, kin: int) -> tuple[int, int, int]: ...
def from_gregorian(year: int, month: int, day: int) -> tuple[int, int, int, int, int]: ...
def to_haab(jd: float) -> tuple[int, str]: ...
def to_tzolkin(jd: float) -> tuple[int, str]: ...
def lc_to_haab(baktun: int, katun: int, tun: int, uinal: int, kin: int) -> tuple[int, str]: ...
def lc_to_tzolkin(baktun: int, katun: int, tun: int, uinal: int, kin: int) -> tuple[int, str]: ...
def lc_to_haab_tzolkin(baktun: int, katun: int, tun: int, uinal: int, kin: int) -> str: ...
def translate_haab(h: str) -> str | None: ...
def translate_tzolkin(tz: str) -> str | None: ...
def tzolkin_generator(number: int | None = None, name: str | None = None) -> Generator[tuple[int, str]]: ...
def longcount_generator(
    baktun: int, katun: int, tun: int, uinal: int, kin: int
) -> Generator[tuple[int, int, int, int, int], None, NoReturn]: ...
def next_haab(month: str, jd: float) -> float: ...
def next_tzolkin(tzolkin: tuple[int, str], jd: float) -> float: ...
def next_tzolkin_haab(tzolkin: tuple[int, str], haab: tuple[int, str], jd: float) -> float: ...
def month_length(month: str) -> Literal[5, 20]: ...

@overload
def haab_monthcalendar(
    baktun: int, katun: int, tun: int, uinal: int, kin: int, jdc: None = None
) -> list[list[tuple[int | None, tuple[int, str] | None, tuple[int, int, int, int, int] | None]]]: ...
@overload
def haab_monthcalendar(
    baktun: Unused = None, katun: Unused = None, tun: Unused = None, uinal: Unused = None, kin: Unused = None, jdc: float = ...
) -> list[list[tuple[int | None, tuple[int, str] | None, tuple[int, int, int, int, int] | None]]]: ...

def haab_monthcalendar_prospective(
    haabmonth: str, jdc: float
) -> list[list[tuple[int | None, tuple[int, str] | None, tuple[int, int, int, int, int] | None]]]: ...
