from pandas import compat as compat
from pandas.core import ops as ops
from pandas.core.arrays import PandasArray as PandasArray
from pandas.core.construction import extract_array as extract_array
from pandas.core.dtypes.base import ExtensionDtype as ExtensionDtype
from pandas.core.dtypes.common import pandas_dtype as pandas_dtype
from pandas.core.dtypes.dtypes import register_extension_dtype as register_extension_dtype
from pandas.core.dtypes.generic import ABCDataFrame as ABCDataFrame, ABCIndexClass as ABCIndexClass, ABCSeries as ABCSeries
from pandas.core.dtypes.inference import is_array_like as is_array_like

from pandas.core.missing import isna as isna
from typing import Any, Optional, Type

class StringDtype(ExtensionDtype):
    name: str = ...
    na_value: Any = ...
    @property
    def type(self) -> Type[Any]: ...
    @classmethod
    def construct_array_type(cls: Any) -> Type[StringArray]: ...
    def __from_arrow__(self, array: Any) -> Any: ...

class StringArray(PandasArray):
    def __init__(self, values: Any, copy: bool = ...) -> None: ...
    def __arrow_array__(self, type: Optional[Any] = ...) -> Any: ...
    def __setitem__(self, key: Any, value: Any) -> None: ...
    def fillna(self, value: Optional[Any] = ..., method: Optional[Any] = ..., limit: Optional[Any] = ...) -> Any: ...
    def astype(self, dtype: Any, copy: bool = ...) -> Any: ...
    def value_counts(self, dropna: bool = ...) -> Any: ...
