123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- # NOTE: Numpy's mypy plugin is used for importing the correct
- # platform-specific `ctypes._SimpleCData[int]` sub-type
- from ctypes import c_int64 as _c_intp
- import os
- import sys
- import ctypes
- from collections.abc import Iterable, Sequence
- from typing import (
- Literal as L,
- Any,
- Union,
- TypeVar,
- Generic,
- overload,
- ClassVar,
- )
- from numpy import (
- ndarray,
- dtype,
- generic,
- bool_,
- byte,
- short,
- intc,
- int_,
- longlong,
- ubyte,
- ushort,
- uintc,
- uint,
- ulonglong,
- single,
- double,
- longdouble,
- void,
- )
- from numpy.core._internal import _ctypes
- from numpy.core.multiarray import flagsobj
- from numpy._typing import (
- # Arrays
- NDArray,
- _ArrayLike,
- # Shapes
- _ShapeLike,
- # DTypes
- DTypeLike,
- _DTypeLike,
- _VoidDTypeLike,
- _BoolCodes,
- _UByteCodes,
- _UShortCodes,
- _UIntCCodes,
- _UIntCodes,
- _ULongLongCodes,
- _ByteCodes,
- _ShortCodes,
- _IntCCodes,
- _IntCodes,
- _LongLongCodes,
- _SingleCodes,
- _DoubleCodes,
- _LongDoubleCodes,
- )
- # TODO: Add a proper `_Shape` bound once we've got variadic typevars
- _DType = TypeVar("_DType", bound=dtype[Any])
- _DTypeOptional = TypeVar("_DTypeOptional", bound=None | dtype[Any])
- _SCT = TypeVar("_SCT", bound=generic)
- _FlagsKind = L[
- 'C_CONTIGUOUS', 'CONTIGUOUS', 'C',
- 'F_CONTIGUOUS', 'FORTRAN', 'F',
- 'ALIGNED', 'A',
- 'WRITEABLE', 'W',
- 'OWNDATA', 'O',
- 'WRITEBACKIFCOPY', 'X',
- ]
- # TODO: Add a shape typevar once we have variadic typevars (PEP 646)
- class _ndptr(ctypes.c_void_p, Generic[_DTypeOptional]):
- # In practice these 4 classvars are defined in the dynamic class
- # returned by `ndpointer`
- _dtype_: ClassVar[_DTypeOptional]
- _shape_: ClassVar[None]
- _ndim_: ClassVar[None | int]
- _flags_: ClassVar[None | list[_FlagsKind]]
- @overload
- @classmethod
- def from_param(cls: type[_ndptr[None]], obj: ndarray[Any, Any]) -> _ctypes: ...
- @overload
- @classmethod
- def from_param(cls: type[_ndptr[_DType]], obj: ndarray[Any, _DType]) -> _ctypes: ...
- class _concrete_ndptr(_ndptr[_DType]):
- _dtype_: ClassVar[_DType]
- _shape_: ClassVar[tuple[int, ...]]
- @property
- def contents(self) -> ndarray[Any, _DType]: ...
- def load_library(
- libname: str | bytes | os.PathLike[str] | os.PathLike[bytes],
- loader_path: str | bytes | os.PathLike[str] | os.PathLike[bytes],
- ) -> ctypes.CDLL: ...
- __all__: list[str]
- c_intp = _c_intp
- @overload
- def ndpointer(
- dtype: None = ...,
- ndim: int = ...,
- shape: None | _ShapeLike = ...,
- flags: None | _FlagsKind | Iterable[_FlagsKind] | int | flagsobj = ...,
- ) -> type[_ndptr[None]]: ...
- @overload
- def ndpointer(
- dtype: _DTypeLike[_SCT],
- ndim: int = ...,
- *,
- shape: _ShapeLike,
- flags: None | _FlagsKind | Iterable[_FlagsKind] | int | flagsobj = ...,
- ) -> type[_concrete_ndptr[dtype[_SCT]]]: ...
- @overload
- def ndpointer(
- dtype: DTypeLike,
- ndim: int = ...,
- *,
- shape: _ShapeLike,
- flags: None | _FlagsKind | Iterable[_FlagsKind] | int | flagsobj = ...,
- ) -> type[_concrete_ndptr[dtype[Any]]]: ...
- @overload
- def ndpointer(
- dtype: _DTypeLike[_SCT],
- ndim: int = ...,
- shape: None = ...,
- flags: None | _FlagsKind | Iterable[_FlagsKind] | int | flagsobj = ...,
- ) -> type[_ndptr[dtype[_SCT]]]: ...
- @overload
- def ndpointer(
- dtype: DTypeLike,
- ndim: int = ...,
- shape: None = ...,
- flags: None | _FlagsKind | Iterable[_FlagsKind] | int | flagsobj = ...,
- ) -> type[_ndptr[dtype[Any]]]: ...
- @overload
- def as_ctypes_type(dtype: _BoolCodes | _DTypeLike[bool_] | type[ctypes.c_bool]) -> type[ctypes.c_bool]: ...
- @overload
- def as_ctypes_type(dtype: _ByteCodes | _DTypeLike[byte] | type[ctypes.c_byte]) -> type[ctypes.c_byte]: ...
- @overload
- def as_ctypes_type(dtype: _ShortCodes | _DTypeLike[short] | type[ctypes.c_short]) -> type[ctypes.c_short]: ...
- @overload
- def as_ctypes_type(dtype: _IntCCodes | _DTypeLike[intc] | type[ctypes.c_int]) -> type[ctypes.c_int]: ...
- @overload
- def as_ctypes_type(dtype: _IntCodes | _DTypeLike[int_] | type[int | ctypes.c_long]) -> type[ctypes.c_long]: ...
- @overload
- def as_ctypes_type(dtype: _LongLongCodes | _DTypeLike[longlong] | type[ctypes.c_longlong]) -> type[ctypes.c_longlong]: ...
- @overload
- def as_ctypes_type(dtype: _UByteCodes | _DTypeLike[ubyte] | type[ctypes.c_ubyte]) -> type[ctypes.c_ubyte]: ...
- @overload
- def as_ctypes_type(dtype: _UShortCodes | _DTypeLike[ushort] | type[ctypes.c_ushort]) -> type[ctypes.c_ushort]: ...
- @overload
- def as_ctypes_type(dtype: _UIntCCodes | _DTypeLike[uintc] | type[ctypes.c_uint]) -> type[ctypes.c_uint]: ...
- @overload
- def as_ctypes_type(dtype: _UIntCodes | _DTypeLike[uint] | type[ctypes.c_ulong]) -> type[ctypes.c_ulong]: ...
- @overload
- def as_ctypes_type(dtype: _ULongLongCodes | _DTypeLike[ulonglong] | type[ctypes.c_ulonglong]) -> type[ctypes.c_ulonglong]: ...
- @overload
- def as_ctypes_type(dtype: _SingleCodes | _DTypeLike[single] | type[ctypes.c_float]) -> type[ctypes.c_float]: ...
- @overload
- def as_ctypes_type(dtype: _DoubleCodes | _DTypeLike[double] | type[float | ctypes.c_double]) -> type[ctypes.c_double]: ...
- @overload
- def as_ctypes_type(dtype: _LongDoubleCodes | _DTypeLike[longdouble] | type[ctypes.c_longdouble]) -> type[ctypes.c_longdouble]: ...
- @overload
- def as_ctypes_type(dtype: _VoidDTypeLike) -> type[Any]: ... # `ctypes.Union` or `ctypes.Structure`
- @overload
- def as_ctypes_type(dtype: str) -> type[Any]: ...
- @overload
- def as_array(obj: ctypes._PointerLike, shape: Sequence[int]) -> NDArray[Any]: ...
- @overload
- def as_array(obj: _ArrayLike[_SCT], shape: None | _ShapeLike = ...) -> NDArray[_SCT]: ...
- @overload
- def as_array(obj: object, shape: None | _ShapeLike = ...) -> NDArray[Any]: ...
- @overload
- def as_ctypes(obj: bool_) -> ctypes.c_bool: ...
- @overload
- def as_ctypes(obj: byte) -> ctypes.c_byte: ...
- @overload
- def as_ctypes(obj: short) -> ctypes.c_short: ...
- @overload
- def as_ctypes(obj: intc) -> ctypes.c_int: ...
- @overload
- def as_ctypes(obj: int_) -> ctypes.c_long: ...
- @overload
- def as_ctypes(obj: longlong) -> ctypes.c_longlong: ...
- @overload
- def as_ctypes(obj: ubyte) -> ctypes.c_ubyte: ...
- @overload
- def as_ctypes(obj: ushort) -> ctypes.c_ushort: ...
- @overload
- def as_ctypes(obj: uintc) -> ctypes.c_uint: ...
- @overload
- def as_ctypes(obj: uint) -> ctypes.c_ulong: ...
- @overload
- def as_ctypes(obj: ulonglong) -> ctypes.c_ulonglong: ...
- @overload
- def as_ctypes(obj: single) -> ctypes.c_float: ...
- @overload
- def as_ctypes(obj: double) -> ctypes.c_double: ...
- @overload
- def as_ctypes(obj: longdouble) -> ctypes.c_longdouble: ...
- @overload
- def as_ctypes(obj: void) -> Any: ... # `ctypes.Union` or `ctypes.Structure`
- @overload
- def as_ctypes(obj: NDArray[bool_]) -> ctypes.Array[ctypes.c_bool]: ...
- @overload
- def as_ctypes(obj: NDArray[byte]) -> ctypes.Array[ctypes.c_byte]: ...
- @overload
- def as_ctypes(obj: NDArray[short]) -> ctypes.Array[ctypes.c_short]: ...
- @overload
- def as_ctypes(obj: NDArray[intc]) -> ctypes.Array[ctypes.c_int]: ...
- @overload
- def as_ctypes(obj: NDArray[int_]) -> ctypes.Array[ctypes.c_long]: ...
- @overload
- def as_ctypes(obj: NDArray[longlong]) -> ctypes.Array[ctypes.c_longlong]: ...
- @overload
- def as_ctypes(obj: NDArray[ubyte]) -> ctypes.Array[ctypes.c_ubyte]: ...
- @overload
- def as_ctypes(obj: NDArray[ushort]) -> ctypes.Array[ctypes.c_ushort]: ...
- @overload
- def as_ctypes(obj: NDArray[uintc]) -> ctypes.Array[ctypes.c_uint]: ...
- @overload
- def as_ctypes(obj: NDArray[uint]) -> ctypes.Array[ctypes.c_ulong]: ...
- @overload
- def as_ctypes(obj: NDArray[ulonglong]) -> ctypes.Array[ctypes.c_ulonglong]: ...
- @overload
- def as_ctypes(obj: NDArray[single]) -> ctypes.Array[ctypes.c_float]: ...
- @overload
- def as_ctypes(obj: NDArray[double]) -> ctypes.Array[ctypes.c_double]: ...
- @overload
- def as_ctypes(obj: NDArray[longdouble]) -> ctypes.Array[ctypes.c_longdouble]: ...
- @overload
- def as_ctypes(obj: NDArray[void]) -> ctypes.Array[Any]: ... # `ctypes.Union` or `ctypes.Structure`
|