from _typeshed import ConvertibleToInt
from typing import Final, Literal
from typing_extensions import Self

__version__: Final[str]

def getStdMonthNames() -> list[str]: ...
def getStdShortMonthNames() -> list[str]: ...
def getStdDayNames() -> list[str]: ...
def getStdShortDayNames() -> list[str]: ...
def isLeapYear(year: int) -> Literal[0, 1]: ...

class NormalDateException(Exception): ...

class NormalDate:
    def __init__(self, normalDate=None) -> None: ...
    def add(self, days) -> None: ...
    def __add__(self, days: int) -> Self: ...
    def __radd__(self, days: int) -> Self: ...
    def clone(self) -> Self: ...
    def __lt__(self, other) -> bool: ...
    def __le__(self, other) -> bool: ...
    def __eq__(self, other) -> bool: ...
    def __ne__(self, other) -> bool: ...
    def __ge__(self, other) -> bool: ...
    def __gt__(self, other) -> bool: ...
    def day(self) -> int: ...
    def dayOfWeek(self) -> int: ...
    @property
    def __day_of_week_name__(self): ...
    def dayOfWeekAbbrev(self): ...
    def dayOfWeekName(self): ...
    def dayOfYear(self) -> int: ...
    def daysBetweenDates(self, normalDate) -> int: ...
    def equals(self, target) -> bool | Literal[0]: ...
    def endOfMonth(self) -> Self: ...
    def firstDayOfMonth(self) -> Self: ...
    def formatUS(self) -> str: ...
    def formatUSCentury(self) -> str: ...
    def formatMS(self, fmt): ...
    def __hash__(self) -> int: ...
    def __int__(self) -> int: ...
    def isLeapYear(self) -> Literal[0, 1]: ...
    def lastDayOfMonth(self) -> int: ...
    def localeFormat(self) -> str: ...
    def month(self) -> int: ...
    @property
    def __month_name__(self): ...
    def monthAbbrev(self): ...
    def monthName(self): ...
    def normalize(self, scalar) -> None: ...
    def range(self, days) -> list[NormalDate]: ...
    def scalar(self) -> int: ...
    def setDay(self, day) -> None: ...
    def setMonth(self, month) -> None: ...
    normalDate: int | None
    def setNormalDate(self, normalDate) -> None: ...
    def setYear(self, year) -> None: ...
    def __sub__(self, v): ...
    def __rsub__(self, v): ...
    def toTuple(self) -> tuple[int, int, int]: ...
    def year(self) -> int: ...

def bigBang() -> NormalDate: ...
def bigCrunch() -> NormalDate: ...
def dayOfWeek(y: int, m: int, d: int) -> int: ...
def firstDayOfYear(year: int) -> int: ...
def FND(d): ...

Epoch: NormalDate
ND = NormalDate
BDEpoch: ND
BDEpochScalar: int

class BusinessDate(NormalDate):
    def add(self, days: int) -> None: ...
    def __add__(self, days: int) -> Self: ...
    def __sub__(self, v): ...
    def asNormalDate(self) -> ND: ...
    def daysBetweenDates(self, normalDate) -> int: ...
    def normalize(self, i: ConvertibleToInt) -> None: ...
    def scalar(self): ...
    def setNormalDate(self, normalDate) -> None: ...
