FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

MAINT: Add annotations for `dtype.__getitem__`, `__mul__` and `names`… · numpy/numpy@a21cbb1 · GitHub

/ numpy Public

Commit a21cbb1

Browse files
authored
MAINT: Add annotations for dtype.__getitem__, __mul__ and names (#18599)
1 parent b83d574 commit a21cbb1

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

‎numpy/__init__.pyi‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,24 @@ class dtype(Generic[_DTypeScalar]):
862862
align: bool = ...,
863863
copy: bool = ...,
864864
) -> dtype[void]: ...
865+
866+
@overload
867+
def __getitem__(self: dtype[void], key: List[str]) -> dtype[void]: ...
868+
@overload
869+
def __getitem__(self: dtype[void], key: Union[str, int]) -> dtype[Any]: ...
870+
871+
# NOTE: In the future 1-based multiplications will also yield `void` dtypes
872+
@overload
873+
def __mul__(self, value: Literal[0]) -> None: ... # type: ignore[misc]
874+
@overload
875+
def __mul__(self, value: Literal[1]) -> dtype[_DTypeScalar]: ...
876+
@overload
877+
def __mul__(self, value: int) -> dtype[void]: ...
878+
879+
# NOTE: `__rmul__` seems to be broken when used in combination with
880+
# literals as of mypy 0.800. Set the return-type to `Any` for now.
881+
def __rmul__(self, value: int) -> Any: ...
882+
865883
def __eq__(self, other: DTypeLike) -> bool: ...
866884
def __ne__(self, other: DTypeLike) -> bool: ...
867885
def __gt__(self, other: DTypeLike) -> bool: ...
@@ -901,6 +919,8 @@ class dtype(Generic[_DTypeScalar]):
901919
@property
902920
def name(self) -> str: ...
903921
@property
922+
def names(self) -> Optional[Tuple[str, ...]]: ...
923+
@property
904924
def num(self) -> int: ...
905925
@property
906926
def shape(self) -> _Shape: ...

‎numpy/typing/tests/data/pass/dtype.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import numpy as np
22

3+
dtype_obj = np.dtype(np.str_)
4+
void_dtype_obj = np.dtype([("f0", np.float64), ("f1", np.float32)])
5+
36
np.dtype(dtype=np.int64)
47
np.dtype(int)
58
np.dtype("int")
@@ -33,3 +36,16 @@ class Test:
3336

3437

3538
np.dtype(Test())
39+
40+
dtype_obj.names
41+
42+
dtype_obj * 0
43+
dtype_obj * 2
44+
45+
0 * dtype_obj
46+
2 * dtype_obj
47+
48+
void_dtype_obj["f0"]
49+
void_dtype_obj[0]
50+
void_dtype_obj[["f0", "f1"]]
51+
void_dtype_obj[["f0"]]

‎numpy/typing/tests/data/reveal/dtype.py‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import numpy as np
22

3+
dtype_obj: np.dtype[np.str_]
4+
void_dtype_obj: np.dtype[np.void]
5+
36
reveal_type(np.dtype(np.float64)) # E: numpy.dtype[numpy.floating[numpy.typing._64Bit]]
47
reveal_type(np.dtype(np.int64)) # E: numpy.dtype[numpy.signedinteger[numpy.typing._64Bit]]
58

@@ -31,3 +34,19 @@
3134

3235
# Void
3336
reveal_type(np.dtype(("U", 10))) # E: numpy.dtype[numpy.void]
37+
38+
reveal_type(dtype_obj.name) # E: str
39+
reveal_type(dtype_obj.names) # E: Union[builtins.tuple[builtins.str], None]
40+
41+
reveal_type(dtype_obj * 0) # E: None
42+
reveal_type(dtype_obj * 1) # E: numpy.dtype[numpy.str_]
43+
reveal_type(dtype_obj * 2) # E: numpy.dtype[numpy.void]
44+
45+
reveal_type(0 * dtype_obj) # E: Any
46+
reveal_type(1 * dtype_obj) # E: Any
47+
reveal_type(2 * dtype_obj) # E: Any
48+
49+
reveal_type(void_dtype_obj["f0"]) # E: numpy.dtype[Any]
50+
reveal_type(void_dtype_obj[0]) # E: numpy.dtype[Any]
51+
reveal_type(void_dtype_obj[["f0", "f1"]]) # E: numpy.dtype[numpy.void]
52+
reveal_type(void_dtype_obj[["f0"]]) # E: numpy.dtype[numpy.void]

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL