import numpy as np
from datetime import tzinfo
from pandas._libs.tslibs import parsing as parsing, timezones as timezones
from pandas.core.accessor import delegate_names as delegate_names
from pandas.core.arrays.datetimes import DatetimeArray as DatetimeArray, tz_to_dtype as tz_to_dtype, validate_tz_from_dtype as validate_tz_from_dtype
from pandas.core.dtypes.dtypes import DatetimeTZDtype as DatetimeTZDtype
from pandas.core.dtypes.missing import is_valid_nat_for_dtype as is_valid_nat_for_dtype, isna as isna
from pandas.core.indexes.base import Index as Index, maybe_extract_name as maybe_extract_name
from pandas.core.indexes.datetimelike import DatetimeTimedeltaMixin as DatetimeTimedeltaMixin, DatetimelikeDelegateMixin as DatetimelikeDelegateMixin
from pandas.core.indexes.extension import inherit_names as inherit_names
from pandas.core.ops import get_op_result_name as get_op_result_name
from pandas.tseries.frequencies import Resolution as Resolution, to_offset as to_offset
from pandas.tseries.offsets import Nano as Nano, prefix_mapping as prefix_mapping
from pandas.util._decorators import Appender as Appender, Substitution as Substitution, cache_readonly as cache_readonly
from typing import Any, Optional

class DatetimeDelegateMixin(DatetimelikeDelegateMixin): ...

class DatetimeIndex(DatetimeTimedeltaMixin, DatetimeDelegateMixin):
    tz: Optional[tzinfo]
    def __new__(cls, data: Optional[Any] = ..., freq: Optional[Any] = ..., tz: Optional[Any] = ..., normalize: bool = ..., closed: Optional[Any] = ..., ambiguous: str = ..., dayfirst: bool = ..., yearfirst: bool = ..., dtype: Optional[Any] = ..., copy: bool = ..., name: Optional[Any] = ...) -> Any: ...
    def __array__(self, dtype: Any = ...) -> np.ndarray: ...
    def __reduce__(self) -> Any: ...
    def union_many(self, others: Any) -> Any: ...
    def to_series(self, keep_tz: Any = ..., index: Optional[Any] = ..., name: Optional[Any] = ...) -> Any: ...  # type: ignore
    def snap(self, freq: str = ...) -> Any: ...
    def get_value(self, series: Any, key: Any) -> Any: ...
    def get_value_maybe_box(self, series: Any, key: Any) -> Any: ...
    def get_loc(self, key: Any, method: Optional[Any] = ..., tolerance: Optional[Any] = ...) -> Any: ...
    def slice_indexer(self, start: Optional[Any] = ..., end: Optional[Any] = ..., step: Optional[Any] = ..., kind: Optional[Any] = ...) -> Any: ...
    def searchsorted(self, value: Any, side: str = ..., sorter: Optional[Any] = ...) -> Any: ...
    def is_type_compatible(self, typ: Any) -> bool: ...
    @property
    def inferred_type(self) -> str: ...
    def insert(self, loc: Any, item: Any) -> Any: ...
    def indexer_at_time(self, time: Any, asof: bool = ...) -> Any: ...
    def indexer_between_time(self, start_time: Any, end_time: Any, include_start: bool = ..., include_end: bool = ...) -> Any: ...

def date_range(start: Any = ..., end: Any = ..., periods: Any = ..., freq: Any = ..., tz: Any = ..., normalize: Any = ..., name: Any = ..., closed: Any = ..., **kwargs: Any) -> DatetimeIndex: ...
def bdate_range(start: Any = ..., end: Any = ..., periods: Any = ..., freq: Any = ..., tz: Any = ..., normalize: Any = ..., name: Any = ..., weekmask: Any = ..., holidays: Any = ..., closed: Any = ..., **kwargs: Any) -> DatetimeIndex: ...
