Skip to content

Commit b74d902

Browse files
authored
🏷️ io.matlab: stub private cython modules (#718)
2 parents 7d4b902 + 6edc5ea commit b74d902

File tree

4 files changed

+151
-5
lines changed

4 files changed

+151
-5
lines changed

scipy-stubs/io/matlab/_mio5_utils.pyi

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# defined in scipy/io/matlab/_mio5_utils.pyx
2+
3+
from collections.abc import Iterable
4+
from typing import Any, ClassVar, Final, Literal, Never, TypeAlias
5+
from typing_extensions import CapsuleType
6+
7+
import numpy as np
8+
import optype.numpy as onp
9+
import optype.numpy.compat as npc
10+
11+
from ._miobase import MatVarReader
12+
from ._streams import GenericStream, _FileLike
13+
14+
_bint: TypeAlias = Literal[0, 1] | bool # noqa: PYI042
15+
16+
###
17+
18+
# NOTE: These apprear to be broken, and will always raise `TypeError: no default __reduce__ due to non-trivial __cinit__`
19+
def __reduce_cython__(self: Never) -> Never: ... # undocumented
20+
def __setstate_cython__(self: Never, __pyx_state: Never) -> None: ... # undocumented # pyright: ignore[reportGeneralTypeIssues]
21+
22+
swapped_code: Final[Literal[">", "<"]] = ... # undocumented # ">" sys.byteorder == "little" else "<"
23+
24+
def byteswap_u4(u4: np.uint32) -> np.uint32: ... # undocumented
25+
26+
class VarHeader5: # undocumented
27+
# cdef readonly object name
28+
name: Final[object]
29+
# cdef readonly int mclass
30+
mclass: Final[int]
31+
# cdef readonly object dims
32+
dims: Final[Iterable[int | npc.integer]]
33+
# cdef readonly int is_logical
34+
is_logical: Final[_bint]
35+
# cdef public int is_global
36+
is_global: _bint
37+
# cdef readonly size_t nzmax
38+
nzmax: Final[int]
39+
40+
def __reduce_cython__(self) -> tuple[Any, ...]: ...
41+
def __setstate_cython__(self, /, state: tuple[object, ...]) -> None: ...
42+
43+
#
44+
def set_dims(self, /, dims: object) -> None: ...
45+
46+
class VarReader5: # undocumented
47+
__pyx_vtable__: ClassVar[CapsuleType] = ...
48+
49+
# cdef public int is_swapped, little_endian
50+
is_swapped: _bint
51+
little_endian: _bint
52+
53+
def __init__(self, /, preader: MatVarReader) -> None: ...
54+
def set_stream(self, /, fobj: GenericStream | _FileLike) -> None: ...
55+
def read_tag(self, /) -> tuple[int, int, str | None]: ...
56+
def read_numeric(self, /, copy: _bint = True, nnz: int = -1) -> onp.Array1D[Any]: ...
57+
def read_full_tag(self, /) -> tuple[np.uint32, np.uint32]: ...
58+
def read_header(self, /, check_stream_limit: _bint) -> VarHeader5: ...
59+
def array_from_header(self, /, header: VarHeader5, process: _bint = 1) -> Any: ... # squeezed ndarray or sparse csc_array
60+
def shape_from_header(self, /, header: VarHeader5) -> tuple[int, ...]: ...
61+
def read_real_complex(self, /, header: VarHeader5) -> onp.ArrayND[np.float64 | np.complex128]: ...
62+
def read_char(self, /, header: VarHeader5) -> onp.ArrayND[np.str_]: ...
63+
def read_cells(self, /, header: VarHeader5) -> onp.ArrayND[np.object_]: ...
64+
def read_fieldnames(self, /) -> list[str]: ...
65+
def read_struct(self, /, header: VarHeader5) -> onp.ArrayND[np.object_]: ...
66+
def read_opaque(self, /, hdr: VarHeader5) -> onp.Array1D[np.void]: ...

scipy-stubs/io/matlab/_mio_utils.pyi

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import datetime as dt
2+
from typing import Any, Final, Never, TypeVar, overload
3+
from typing_extensions import CapsuleType
4+
5+
import numpy as np
6+
import optype.numpy as onp
7+
import optype.numpy.compat as npc
8+
9+
_ArrayT = TypeVar("_ArrayT", bound=onp.ArrayND[Any, onp.AtLeast1D])
10+
11+
###
12+
13+
__pyx_capi__: Final[dict[str, CapsuleType]] = ...
14+
15+
#
16+
@overload
17+
def squeeze_element(arr: onp.ArrayND[Any, tuple[Never]]) -> Any: ...
18+
@overload
19+
def squeeze_element(arr: _ArrayT) -> _ArrayT: ...
20+
21+
# TODO: use generic item type of `np.generic` when we require `numpy>=2.2`
22+
@overload
23+
def squeeze_element(arr: onp.Array0D[np.bool_]) -> bool: ...
24+
@overload
25+
def squeeze_element(arr: onp.Array0D[npc.integer]) -> int: ...
26+
@overload
27+
def squeeze_element(arr: onp.Array0D[np.float16 | np.float32 | np.float64]) -> float: ... # type: ignore[overload-overlap]
28+
@overload
29+
def squeeze_element(arr: onp.Array0D[np.longdouble]) -> np.longdouble: ...
30+
@overload
31+
def squeeze_element(arr: onp.Array0D[np.complex64 | np.complex128]) -> complex: ... # type: ignore[overload-overlap]
32+
@overload
33+
def squeeze_element(arr: onp.Array0D[np.clongdouble]) -> np.clongdouble: ...
34+
@overload
35+
def squeeze_element(arr: onp.Array0D[np.bytes_]) -> bytes: ...
36+
@overload
37+
def squeeze_element(arr: onp.Array0D[np.str_]) -> str: ...
38+
@overload
39+
def squeeze_element(arr: onp.Array0D[np.datetime64]) -> dt.date | int | None: ...
40+
@overload
41+
def squeeze_element(arr: onp.Array0D[np.timedelta64]) -> dt.timedelta | int | None: ...
42+
@overload
43+
def squeeze_element(arr: onp.Array0D[np.object_]) -> Any: ...
44+
45+
#
46+
def chars_to_strings(in_arr: onp.ArrayND[np.str_]) -> onp.ArrayND[np.str_]: ...

scipy-stubs/io/matlab/_miobase.pyi

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import abc
22
from collections.abc import Callable, Mapping
3-
from typing import IO, Final, Literal, Protocol, TypeVar, type_check_only
3+
from typing import IO, Any, Final, Literal, Protocol, TypeVar, type_check_only
44

55
import numpy as np
66
import numpy.typing as npt
@@ -29,13 +29,13 @@ class MatWriteWarning(UserWarning): ...
2929
class MatVarReader:
3030
def __init__(self, /, file_reader: MatFileReader) -> None: ...
3131
@abc.abstractmethod
32-
def read_header(self, /) -> dict[str, object]: ...
32+
def read_header(self, /) -> dict[str, Any]: ...
3333
@abc.abstractmethod
3434
def array_from_header(self, /, header: Mapping[str, object]) -> onp.ArrayND: ...
3535

3636
class MatFileReader:
3737
mat_stream: Final[IO[bytes]]
38-
dtypes: Final[Mapping[str, np.dtype[np.generic]]]
38+
dtypes: Final[Mapping[str, np.dtype[Any]]]
3939
byte_order: Final[ByteOrder]
4040
struct_as_record: Final[bool]
4141
verify_compressed_data_integrity: Final[bool]
@@ -62,10 +62,10 @@ class MatFileReader:
6262
def end_of_stream(self, /) -> bool: ...
6363

6464
def _get_matfile_version(fileobj: IO[bytes]) -> tuple[Literal[1, 2], int]: ...
65-
def convert_dtypes(dtype_template: Mapping[str, str], order_code: ByteOrder) -> dict[str, np.dtype[np.generic]]: ...
65+
def convert_dtypes(dtype_template: Mapping[str, str], order_code: ByteOrder) -> dict[str, np.dtype[Any]]: ...
6666
def read_dtype(mat_stream: IO[bytes], a_dtype: npt.DTypeLike) -> onp.ArrayND: ...
6767
def matfile_version(file_name: FileName, *, appendmat: bool = True) -> tuple[Literal[0, 1, 2], int]: ...
68-
def matdims(arr: onp.ArrayND, oned_as: Literal["column", "row"] = "column") -> onp.AtLeast1D: ...
68+
def matdims(arr: onp.ArrayND, oned_as: Literal["column", "row"] = "column") -> tuple[Any, ...]: ...
6969
def arr_dtype_number(arr: onp.HasDType[np.dtype[np.character]], num: int | str) -> np.dtype[np.character]: ...
7070
def arr_to_chars(arr: onp.ArrayND[np.str_]) -> onp.ArrayND[np.str_]: ...
7171

scipy-stubs/io/matlab/_streams.pyi

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from typing import Any, ClassVar, Final, Literal, Protocol, type_check_only
2+
from typing_extensions import CapsuleType
3+
4+
@type_check_only
5+
class _FileLike(Protocol):
6+
def read(self, size: int, /) -> bytes: ...
7+
def tell(self, /) -> int: ...
8+
def seek(self, offset: int, whence: int = 0, /) -> int | None: ...
9+
10+
###
11+
12+
BLOCK_SIZE: Final = 131072 # undocumented
13+
14+
__pyx_capi__: Final[dict[str, CapsuleType]] = ... # undocumented
15+
16+
class GenericStream: # undocumented
17+
__pyx_vtable__: ClassVar[CapsuleType] = ...
18+
19+
fobs: Final[_FileLike]
20+
21+
def __init__(self, /, fobj: _FileLike) -> None: ...
22+
def seek(self, /, offset: int, whence: int = 0) -> Literal[0, -1]: ...
23+
def tell(self, /) -> int: ...
24+
def read(self, /, n_bytes: int) -> bytes: ...
25+
def all_data_read(self, /) -> Literal[1]: ...
26+
def __reduce_cython__(self) -> tuple[Any, ...]: ...
27+
def __setstate_cython__(self, /, state: tuple[object, ...]) -> None: ...
28+
29+
class ZlibInputStream(GenericStream): # undocumented
30+
def __init__(self, /, fobj: _FileLike, max_length: int) -> None: ...
31+
32+
def _read_into(st: GenericStream, n: int) -> bytes: ... # undocumented
33+
def _read_string(st: GenericStream, n: int) -> bytes: ... # undocumented
34+
def make_stream(fobj: GenericStream | _FileLike) -> GenericStream: ... # undocumented

0 commit comments

Comments
 (0)