# Removed some imports that were necessary only for implementation
import numpy as np
from pandas._libs import  NaTType as NaTType
from pandas._typing import DatetimeLikeScalar as DatetimeLikeScalar
from pandas.core import missing as missing, nanops as nanops, ops as ops
from pandas.core.algorithms import checked_add_with_arr as checked_add_with_arr, take as take, unique1d as unique1d, value_counts as value_counts
from pandas.core.arrays.base import ExtensionArray as ExtensionArray, ExtensionOpsMixin as ExtensionOpsMixin

from pandas.core.dtypes.generic import ABCSeries as ABCSeries
from pandas.core.dtypes.inference import is_array_like as is_array_like
from pandas.core.dtypes.missing import is_valid_nat_for_dtype as is_valid_nat_for_dtype, isna as isna

from pandas.core.ops.common import unpack_zerodim_and_defer as unpack_zerodim_and_defer
from pandas.core.ops.invalid import invalid_comparison as invalid_comparison, make_invalid_op as make_invalid_op
from pandas.tseries import frequencies as frequencies
from pandas.tseries.offsets import DateOffset as DateOffset, Tick as Tick
from pandas.util._decorators import Appender as Appender, Substitution as Substitution
from pandas.util._validators import validate_fillna_kwargs as validate_fillna_kwargs
from typing import Any, Optional, Sequence, Union

class AttributesMixin: ...

class DatelikeOps:
    def strftime(self, date_format: Any) -> Any: ...

class TimelikeOps:
    def round(self, freq: Any, ambiguous: str = ..., nonexistent: str = ...) -> Any: ...
    def floor(self, freq: Any, ambiguous: str = ..., nonexistent: str = ...) -> Any: ...
    def ceil(self, freq: Any, ambiguous: str = ..., nonexistent: str = ...) -> Any: ...

class DatetimeLikeArrayMixin(ExtensionOpsMixin, AttributesMixin, ExtensionArray):
    @property
    def ndim(self) -> int: ...
    @property
    def shape(self) -> Any: ...
    def reshape(self, *args: Any, **kwargs: Any) -> Any: ...
    def ravel(self, *args: Any, **kwargs: Any) -> Any: ...
    def __iter__(self) -> Any: ...
    @property
    def asi8(self) -> np.ndarray: ...
    @property
    def nbytes(self) -> Any: ...
    def __array__(self, dtype: Any = ...) -> np.ndarray: ...
    @property
    def size(self) -> int: ...
    def __len__(self) -> int: ...
    def __getitem__(self, key: Any) -> Any: ...
    def __setitem__(self, key: Union[int, Sequence[int], Sequence[bool], slice], value: Union[NaTType, Any, Sequence[Any]]) -> None: ...
    def astype(self, dtype: Any, copy: bool = ...) -> Any: ...
    def view(self, dtype: Optional[Any] = ...) -> Any: ...
    def unique(self) -> Any: ...
    def take(self, indices: Any, allow_fill: bool = ..., fill_value: Optional[Any] = ...) -> Any: ...
    def copy(self) -> Any: ...
    def shift(self, periods: int = ..., fill_value: Optional[Any] = ..., axis: int = ...) -> Any: ...
    def searchsorted(self, value: Any, side: str = ..., sorter: Optional[Any] = ...) -> Any: ...
    def repeat(self, repeats: Any, *args: Any, **kwargs: Any) -> Any: ...
    def value_counts(self, dropna: bool = ...) -> Any: ...
    def map(self, mapper: Any) -> Any: ...
    def isna(self) -> Any: ...
    def fillna(self, value: Optional[Any] = ..., method: Optional[Any] = ..., limit: Optional[Any] = ...) -> Any: ...
    @property
    def freq(self) -> Any: ...
    @freq.setter
    def freq(self, value: Any) -> None: ...
    @property
    def freqstr(self) -> Any: ...
    @property
    def inferred_freq(self) -> Any: ...
    @property
    def resolution(self) -> Any: ...
    __pow__: Any = ...
    __rpow__: Any = ...
    __mul__: Any = ...
    __rmul__: Any = ...
    __truediv__: Any = ...
    __rtruediv__: Any = ...
    __floordiv__: Any = ...
    __rfloordiv__: Any = ...
    __mod__: Any = ...
    __rmod__: Any = ...
    __divmod__: Any = ...
    __rdivmod__: Any = ...
    def __add__(self, other: Any) -> Any: ...
    def __radd__(self, other: Any) -> Any: ...
    def __sub__(self, other: Any) -> Any: ...
    def __rsub__(self, other: Any) -> Any: ...
    def __iadd__(self, other: Any) -> Any: ...
    def __isub__(self, other: Any) -> Any: ...
    def min(self, axis: Optional[Any] = ..., skipna: bool = ..., *args: Any, **kwargs: Any) -> Any: ...
    def max(self, axis: Optional[Any] = ..., skipna: bool = ..., *args: Any, **kwargs: Any) -> Any: ...
    def mean(self, skipna: bool = ...) -> Any: ...

def validate_periods(periods: Any) -> Any: ...
def validate_endpoints(closed: Any) -> Any: ...
def validate_inferred_freq(freq: Any, inferred_freq: Any, freq_infer: Any) -> Any: ...
def maybe_infer_freq(freq: Any) -> Any: ...
