1"""
2This file defines the types for type annotations.
3
4These names aren't part of the module namespace, but they are used in the
5annotations in the function signatures. The functions in the module are only
6valid for inputs that match the given type annotations.
7"""
8
9from __future__ import annotations
10
11__all__ = [
12 "Array",
13 "Device",
14 "Dtype",
15 "SupportsDLPack",
16 "SupportsBufferProtocol",
17 "PyCapsule",
18]
19
20import sys
21from typing import (
22 Any,
23 Literal,
24 Sequence,
25 Type,
26 Union,
27 TYPE_CHECKING,
28 TypeVar,
29 Protocol,
30)
31
32from ._array_object import Array
33from numpy import (
34 dtype,
35 int8,
36 int16,
37 int32,
38 int64,
39 uint8,
40 uint16,
41 uint32,
42 uint64,
43 float32,
44 float64,
45)
46
47_T_co = TypeVar("_T_co", covariant=True)
48
49class NestedSequence(Protocol[_T_co]):
50 def __getitem__(self, key: int, /) -> _T_co | NestedSequence[_T_co]: ...
51 def __len__(self, /) -> int: ...
52
53Device = Literal["cpu"]
54if TYPE_CHECKING or sys.version_info >= (3, 9):
55 Dtype = dtype[Union[
56 int8,
57 int16,
58 int32,
59 int64,
60 uint8,
61 uint16,
62 uint32,
63 uint64,
64 float32,
65 float64,
66 ]]
67else:
68 Dtype = dtype
69
70SupportsBufferProtocol = Any
71PyCapsule = Any
72
73class SupportsDLPack(Protocol):
74 def __dlpack__(self, /, *, stream: None = ...) -> PyCapsule: ...