###########################################################################
# common methods from _coo_base
###########################################################################
coords: tuple[npt.NDArray[np.int_], ...]
data: np.ndarray[Any, _DType_co]
has_canonical_format: bool
@property
def format(self) -> Literal["coo"]: ...

# input is sparse array/matrix
@overload
def __init__(
    self,
    arg1: sparray[Any, _DType_co] | spmatrix[Any, _DType_co],
    shape: _ShapeLike | None = ...,
    dtype: None = ...,
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: sparray[Any, Any] | spmatrix[Any, Any],
    shape: _ShapeLike | None = ...,
    *,
    dtype: _DTypeLike[_SCT_co],
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: sparray[Any, Any] | spmatrix[Any, Any],
    shape: _ShapeLike | None,
    dtype: _DTypeLike[_SCT_co],
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self,
    arg1: sparray[Any, Any] | spmatrix[Any, Any],
    shape: _ShapeLike | None = ...,
    *,
    dtype: npt.DTypeLike,
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self,
    arg1: sparray[Any, Any] | spmatrix[Any, Any],
    shape: _ShapeLike | None,
    dtype: npt.DTypeLike,
    copy: bool = ...,
) -> None: ...
# input is shape and dtype to init empty sparse
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: tuple[SupportsIndex] | tuple[SupportsIndex, SupportsIndex],
    *,
    dtype: _DTypeLike[_SCT_co],
) -> None: ...
@overload
def __init__(
    self,
    arg1: tuple[SupportsIndex] | tuple[SupportsIndex, SupportsIndex],
    *,
    dtype: npt.DTypeLike | None = ...,
) -> None: ...
# input is data and indices
# TODO: add support for 1D array indices? check if csr/csc also need it
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: tuple[
        _ArrayLike1DDual[Any, Any],
        tuple[_ArrayLike1DIndex, _ArrayLike1DIndex],
    ],
    shape: _ShapeLike | None,
    dtype: _DTypeLike[_SCT_co],
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: tuple[
        _ArrayLike1DDual[Any, Any],
        tuple[_ArrayLike1DIndex, _ArrayLike1DIndex],
    ],
    shape: _ShapeLike | None = ...,
    *,
    dtype: _DTypeLike[_SCT_co],
    copy: bool = ...,
) -> None: ...
@overload
def __init__(
    self,
    arg1: tuple[
        _ArrayLike1DDual[Any, Any],
        tuple[_ArrayLike1DIndex, _ArrayLike1DIndex],
    ],
    shape: _ShapeLike | None = ...,
    dtype: npt.DTypeLike | None = ...,
    copy: bool = ...,
) -> None: ...
# input is array
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: npt.NDArray[_SCT_co],
    *,
    dtype: None = ...,
) -> None: ...
@overload
def __init__(
    self: {_Self_Base}[Any, np.dtype[_SCT_co]],
    arg1: npt.ArrayLike,
    *,
    dtype: _DTypeLike[_SCT_co],
) -> None: ...
@overload
def __init__(
    self,
    arg1: npt.ArrayLike,
    *,
    dtype: npt.DTypeLike | None = ...,
) -> None: ...
@property
def row(self) -> npt.NDArray[np.int_]: ...
@row.setter
def row(self, new_row: npt.ArrayLike) -> None: ...
@property
def col(self) -> npt.NDArray[np.int_]: ...
@col.setter
def col(self, new_row: npt.ArrayLike) -> None: ...
def sum_duplicates(self) -> None: ...
def eliminate_zeros(self) -> None: ...
