diff options
| author | Bas van Beek <43369155+BvB93@users.noreply.github.com> | 2021-09-02 16:09:41 +0200 |
|---|---|---|
| committer | Bas van Beek <43369155+BvB93@users.noreply.github.com> | 2021-09-02 16:28:16 +0200 |
| commit | 0275d624cf2d980faca5829c2a4147cf4c8becf7 (patch) | |
| tree | 571263865c70e75af1928868288ccd6c400103d9 /numpy/lib | |
| parent | 3f6aaa9cb625af3f7ff2106c29afce1e7f9247cc (diff) | |
| download | numpy-0275d624cf2d980faca5829c2a4147cf4c8becf7.tar.gz | |
ENH: Use custom file-like protocols instead of `typing.IO`
Diffstat (limited to 'numpy/lib')
| -rw-r--r-- | numpy/lib/npyio.pyi | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/numpy/lib/npyio.pyi b/numpy/lib/npyio.pyi index 1fa689bbe..edf3daf07 100644 --- a/numpy/lib/npyio.pyi +++ b/numpy/lib/npyio.pyi @@ -18,6 +18,7 @@ from typing import ( Callable, Pattern, Protocol, + Iterable, ) from numpy import ( @@ -42,6 +43,8 @@ _T = TypeVar("_T") _T_contra = TypeVar("_T_contra", contravariant=True) _T_co = TypeVar("_T_co", covariant=True) _SCT = TypeVar("_SCT", bound=generic) +_CharType_co = TypeVar("_CharType_co", str, bytes, covariant=True) +_CharType_contra = TypeVar("_CharType_contra", str, bytes, contravariant=True) _DTypeLike = Union[ Type[_SCT], @@ -52,6 +55,16 @@ _DTypeLike = Union[ class _SupportsGetItem(Protocol[_T_contra, _T_co]): def __getitem__(self, key: _T_contra) -> _T_co: ... +class _SupportsRead(Protocol[_CharType_co]): + def read(self) -> _CharType_co: ... + +class _SupportsReadSeek(Protocol[_CharType_co]): + def read(self, n: int, /) -> _CharType_co: ... + def seek(self, offset: int, whence: int, /) -> object: ... + +class _SupportsWrite(Protocol[_CharType_contra]): + def write(self, s: _CharType_contra, /) -> object: ... + __all__: List[str] class BagObj(Generic[_T_co]): @@ -94,7 +107,7 @@ class NpzFile(Mapping[str, NDArray[Any]]): # NOTE: Returns a `NpzFile` if file is a zip file; # returns an `ndarray`/`memmap` otherwise def load( - file: str | bytes | os.PathLike[Any] | IO[bytes], + file: str | bytes | os.PathLike[Any] | _SupportsReadSeek[bytes], mmap_mode: L[None, "r+", "r", "w+", "c"] = ..., allow_pickle: bool = ..., fix_imports: bool = ..., @@ -102,27 +115,29 @@ def load( ) -> Any: ... def save( - file: str | os.PathLike[str] | IO[bytes], + file: str | os.PathLike[str] | _SupportsWrite[bytes], arr: ArrayLike, allow_pickle: bool = ..., fix_imports: bool = ..., ) -> None: ... def savez( - file: str | os.PathLike[str] | IO[bytes], + file: str | os.PathLike[str] | _SupportsWrite[bytes], *args: ArrayLike, **kwds: ArrayLike, ) -> None: ... def savez_compressed( - file: str | os.PathLike[str] | IO[bytes], + file: str | os.PathLike[str] | _SupportsWrite[bytes], *args: ArrayLike, **kwds: ArrayLike, ) -> None: ... +# File-like objects only have to implement `__iter__` and, +# optionally, `encoding` @overload def loadtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: None = ..., comments: str | Sequence[str] = ..., delimiter: None | str = ..., @@ -138,7 +153,7 @@ def loadtxt( ) -> NDArray[float64]: ... @overload def loadtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: _DTypeLike[_SCT], comments: str | Sequence[str] = ..., delimiter: None | str = ..., @@ -154,7 +169,7 @@ def loadtxt( ) -> NDArray[_SCT]: ... @overload def loadtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: DTypeLike, comments: str | Sequence[str] = ..., delimiter: None | str = ..., @@ -170,7 +185,7 @@ def loadtxt( ) -> NDArray[Any]: ... def savetxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | _SupportsWrite[str] | _SupportsWrite[bytes], X: ArrayLike, fmt: str | Sequence[str] = ..., delimiter: str = ..., @@ -183,14 +198,14 @@ def savetxt( @overload def fromregex( - file: str | os.PathLike[str] | IO[Any], + file: str | os.PathLike[str] | _SupportsRead[str] | _SupportsRead[bytes], regexp: str | bytes | Pattern[Any], dtype: _DTypeLike[_SCT], encoding: None | str = ... ) -> NDArray[_SCT]: ... @overload def fromregex( - file: str | os.PathLike[str] | IO[Any], + file: str | os.PathLike[str] | _SupportsRead[str] | _SupportsRead[bytes], regexp: str | bytes | Pattern[Any], dtype: DTypeLike, encoding: None | str = ... @@ -199,21 +214,21 @@ def fromregex( # TODO: Sort out arguments @overload def genfromtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: None = ..., *args: Any, **kwargs: Any, ) -> NDArray[float64]: ... @overload def genfromtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: _DTypeLike[_SCT], *args: Any, **kwargs: Any, ) -> NDArray[_SCT]: ... @overload def genfromtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], dtype: DTypeLike, *args: Any, **kwargs: Any, @@ -221,14 +236,14 @@ def genfromtxt( @overload def recfromtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], *, usemask: L[False] = ..., **kwargs: Any, ) -> recarray[Any, dtype[void]]: ... @overload def recfromtxt( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], *, usemask: L[True], **kwargs: Any, @@ -236,14 +251,14 @@ def recfromtxt( @overload def recfromcsv( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], *, usemask: L[False] = ..., **kwargs: Any, ) -> recarray[Any, dtype[void]]: ... @overload def recfromcsv( - fname: str | os.PathLike[str] | IO[Any], + fname: str | os.PathLike[str] | Iterable[str] | Iterable[bytes], *, usemask: L[True], **kwargs: Any, |
