'''NumPy Patcher'''
from typing import List, Tuple, Union

from numpy import double, float32, int32, int64, ndarray

class PatcherDouble:
    def __init__(self) -> None: ...
    def get_patch(
        self,
        fpath: str,
        qidx: Union[Tuple[int, ...], List[int], ndarray],
        pshape: Union[Tuple[int, ...], List[int], ndarray],
        pstride: Union[Tuple[int, ...], List[int], ndarray],
        pnum: int,
        padding: Union[Tuple[int, ...], List[int], ndarray] = (),
        pnum_offset: Union[Tuple[int, ...], List[int], ndarray] = (),
    ) -> List[double]: ...
    def get_patch_size(self) -> List[int]: ...
    def get_padding(self) -> List[int]: ...
    def get_data_strides(self) -> List[int]: ...
    def get_patch_strides(self) -> List[int]: ...
    def get_num_patches(self) -> List[int]: ...
    def get_shift_lengths(self) -> List[int]: ...
    def get_patch_numbers(self) -> List[int]: ...

class PatcherFloat:
    def __init__(self) -> None: ...
    def get_patch(
        self,
        fpath: str,
        qidx: Union[Tuple[int, ...], List[int], ndarray],
        pshape: Union[Tuple[int, ...], List[int], ndarray],
        pstride: Union[Tuple[int, ...], List[int], ndarray],
        pnum: int,
        padding: Union[Tuple[int, ...], List[int], ndarray] = (),
        pnum_offset: Union[Tuple[int, ...], List[int], ndarray] = (),
    ) -> List[float32]: ...
    def get_patch_size(self) -> List[int]: ...
    def get_padding(self) -> List[int]: ...
    def get_data_strides(self) -> List[int]: ...
    def get_patch_strides(self) -> List[int]: ...
    def get_num_patches(self) -> List[int]: ...
    def get_shift_lengths(self) -> List[int]: ...
    def get_patch_numbers(self) -> List[int]: ...

class PatcherInt:
    def __init__(self) -> None: ...
    def get_patch(
        self,
        fpath: str,
        qidx: Union[Tuple[int, ...], List[int], ndarray],
        pshape: Union[Tuple[int, ...], List[int], ndarray],
        pstride: Union[Tuple[int, ...], List[int], ndarray],
        pnum: int,
        padding: Union[Tuple[int, ...], List[int], ndarray] = (),
        pnum_offset: Union[Tuple[int, ...], List[int], ndarray] = (),
    ) -> List[int32]: ...
    def get_patch_size(self) -> List[int]: ...
    def get_padding(self) -> List[int]: ...
    def get_data_strides(self) -> List[int]: ...
    def get_patch_strides(self) -> List[int]: ...
    def get_num_patches(self) -> List[int]: ...
    def get_shift_lengths(self) -> List[int]: ...
    def get_patch_numbers(self) -> List[int]: ...

class PatcherLong:
    def __init__(self) -> None: ...
    def get_patch(
        self,
        fpath: str,
        qidx: Union[Tuple[int, ...], List[int], ndarray],
        pshape: Union[Tuple[int, ...], List[int], ndarray],
        pstride: Union[Tuple[int, ...], List[int], ndarray],
        pnum: int,
        padding: Union[Tuple[int, ...], List[int], ndarray] = (),
        pnum_offset: Union[Tuple[int, ...], List[int], ndarray] = (),
    ) -> List[int64]: ...
    def get_patch_size(self) -> List[int]: ...
    def get_padding(self) -> List[int]: ...
    def get_data_strides(self) -> List[int]: ...
    def get_patch_strides(self) -> List[int]: ...
    def get_num_patches(self) -> List[int]: ...
    def get_shift_lengths(self) -> List[int]: ...
    def get_patch_numbers(self) -> List[int]: ...
