from typing import Literal

from pandas.core.arrays import PandasArray

from pandas._libs.missing import NAType

from pandas.core.dtypes.base import ExtensionDtype

class StringDtype(ExtensionDtype):
    def __init__(self, storage: Literal["python", "pyarrow"] | None) -> None: ...
    @property
    def na_value(self) -> NAType: ...

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