Skip to content

Commit 1ad9343

Browse files
authored
Merge pull request #529 from numpy/_numtype.shape
1 parent b82dacb commit 1ad9343

8 files changed

Lines changed: 240 additions & 274 deletions

File tree

src/_numtype/@test/test_to_array.pyi

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
from typing import TypeAlias
2-
from typing_extensions import TypeVar
3-
41
import _numtype as _nt
52
import numpy as np
63

7-
_ScalarT = TypeVar("_ScalarT", bound=np.generic)
8-
_0D: TypeAlias = np.ndarray[tuple[()], np.dtype[_ScalarT]]
9-
_1D: TypeAlias = np.ndarray[tuple[int], np.dtype[_ScalarT]]
10-
_2D: TypeAlias = np.ndarray[tuple[int, int], np.dtype[_ScalarT]]
11-
_3D: TypeAlias = np.ndarray[tuple[int, int, int], np.dtype[_ScalarT]]
12-
_ND: TypeAlias = np.ndarray[tuple[int, ...], np.dtype[_ScalarT]]
13-
144
b_0d: bool
155
i_0d: int
166
f_0d: float
@@ -47,17 +37,22 @@ O_3d: list[list[list[object]]]
4737
# bool
4838

4939
b1: np.bool
50-
b1_0d: _0D[np.bool]
51-
b1_1d: _1D[np.bool]
52-
b1_2d: _2D[np.bool]
53-
b1_3d: _3D[np.bool]
54-
b1_nd: _ND[np.bool]
55-
56-
like_bool_0d: bool | np.bool | _0D[np.bool]
57-
like_bool_1d: list[bool | np.bool] | _1D[np.bool]
58-
like_bool_2d: list[list[bool | np.bool]] | list[_1D[np.bool]] | _2D[np.bool]
59-
like_bool_3d: list[list[list[bool | np.bool]]] | list[_2D[np.bool]] | list[list[_1D[np.bool]]] | _3D[np.bool]
60-
like_bool_nd: list[list[list[list[bool | np.bool]]]] | list[_2D[np.bool]] | _ND[np.bool]
40+
b1_0d: _nt.Array0D[np.bool]
41+
b1_1d: _nt.Array1D[np.bool]
42+
b1_2d: _nt.Array2D[np.bool]
43+
b1_3d: _nt.Array3D[np.bool]
44+
b1_nd: _nt.Array[np.bool]
45+
46+
like_bool_0d: bool | np.bool | _nt.Array0D[np.bool]
47+
like_bool_1d: list[bool | np.bool] | _nt.Array1D[np.bool]
48+
like_bool_2d: list[list[bool | np.bool]] | list[_nt.Array1D[np.bool]] | _nt.Array2D[np.bool]
49+
like_bool_3d: (
50+
list[list[list[bool | np.bool]]]
51+
| list[_nt.Array2D[np.bool]]
52+
| list[list[_nt.Array1D[np.bool]]]
53+
| _nt.Array3D[np.bool]
54+
)
55+
like_bool_nd: list[list[list[list[bool | np.bool]]]] | list[_nt.Array2D[np.bool]] | _nt.Array[np.bool]
6156

6257
bool_0d_accept: _nt.ToBool_0d = like_bool_0d
6358
bool_0d_reject_sc: _nt.ToBool_0d = f_0d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]

src/_numtype/__init__.pyi

Lines changed: 47 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import decimal
66
import fractions
77
from collections.abc import Sequence
88
from typing import Any, TypeAlias, type_check_only
9-
from typing_extensions import Never, Protocol, TypeAliasType, TypeVar, Unpack
9+
from typing_extensions import Never, Protocol, TypeAliasType, TypeVar
1010

1111
import numpy as np
1212
from numpy._typing import _NestedSequence
@@ -101,13 +101,25 @@ from ._scalar_co import (
101101
co_uint64 as co_uint64,
102102
co_ulong as co_ulong,
103103
)
104+
from ._shape import (
105+
Shape as Shape,
106+
Shape0 as Shape0,
107+
Shape1 as Shape1,
108+
Shape1_ as Shape1_,
109+
Shape2 as Shape2,
110+
Shape2_ as Shape2_,
111+
Shape3 as Shape3,
112+
Shape3_ as Shape3_,
113+
Shape4 as Shape4,
114+
Shape4_ as Shape4_,
115+
)
104116

105117
###
106118
# Type parameters
107119

108120
_T = TypeVar("_T")
109-
_ShapeT = TypeVar("_ShapeT", bound=tuple[int, ...], default=tuple[int, ...])
110-
_ShapeT_co = TypeVar("_ShapeT_co", bound=tuple[int, ...], covariant=True)
121+
_ShapeT = TypeVar("_ShapeT", bound=Shape, default=Shape)
122+
_ShapeT_co = TypeVar("_ShapeT_co", bound=Shape, covariant=True)
111123
_ScalarT = TypeVar("_ScalarT", bound=np.generic)
112124
_ScalarT_co = TypeVar("_ScalarT_co", bound=np.generic, covariant=True)
113125
_ScalarT0 = TypeVar("_ScalarT0", bound=np.generic, default=Any)
@@ -121,28 +133,28 @@ _ToT = TypeVar("_ToT")
121133

122134
@type_check_only
123135
class CanArray0D(Protocol[_ScalarT_co]):
124-
def __array__(self, /) -> np.ndarray[tuple[()], np.dtype[_ScalarT_co]]: ...
136+
def __array__(self, /) -> np.ndarray[Shape0, np.dtype[_ScalarT_co]]: ...
125137

126138
@type_check_only
127139
class CanArray1D(Protocol[_ScalarT_co]):
128-
def __array__(self, /) -> np.ndarray[tuple[int], np.dtype[_ScalarT_co]]: ...
140+
def __array__(self, /) -> np.ndarray[Shape1, np.dtype[_ScalarT_co]]: ...
129141

130142
@type_check_only
131143
class CanArray2D(Protocol[_ScalarT_co]):
132-
def __array__(self, /) -> np.ndarray[tuple[int, int], np.dtype[_ScalarT_co]]: ...
144+
def __array__(self, /) -> np.ndarray[Shape2, np.dtype[_ScalarT_co]]: ...
133145

134146
@type_check_only
135147
class CanArray3D(Protocol[_ScalarT_co]):
136-
def __array__(self, /) -> np.ndarray[tuple[int, int, int], np.dtype[_ScalarT_co]]: ...
148+
def __array__(self, /) -> np.ndarray[Shape3, np.dtype[_ScalarT_co]]: ...
137149

138150
@type_check_only
139151
class CanArrayND(Protocol[_ScalarT_co]):
140-
def __array__(self, /) -> np.ndarray[tuple[int, ...], np.dtype[_ScalarT_co]]: ...
152+
def __array__(self, /) -> np.ndarray[Shape, np.dtype[_ScalarT_co]]: ...
141153

142154
@type_check_only
143155
class CanLenArrayND(Protocol[_ScalarT_co]):
144156
def __len__(self, /) -> int: ...
145-
def __array__(self, /) -> np.ndarray[tuple[int, ...], np.dtype[_ScalarT_co]]: ...
157+
def __array__(self, /) -> np.ndarray[Shape, np.dtype[_ScalarT_co]]: ...
146158

147159
@type_check_only
148160
class CanLenArray(Protocol[_ScalarT_co, _ShapeT_co]):
@@ -153,15 +165,6 @@ class CanLenArray(Protocol[_ScalarT_co, _ShapeT_co]):
153165
class _CanStringArray(Protocol[_ShapeT_co, _NaT_co]):
154166
def __array__(self, /) -> np.ndarray[_ShapeT_co, np.dtypes.StringDType[_NaT_co]]: ...
155167

156-
###
157-
# Shape aliases
158-
159-
AtLeast0D: TypeAlias = tuple[int, ...]
160-
AtLeast1D = TypeAliasType("AtLeast1D", tuple[int, Unpack[tuple[int, ...]]])
161-
AtLeast2D = TypeAliasType("AtLeast2D", tuple[int, int, Unpack[tuple[int, ...]]])
162-
AtLeast3D = TypeAliasType("AtLeast3D", tuple[int, int, int, Unpack[tuple[int, ...]]])
163-
AtLeast4D = TypeAliasType("AtLeast4D", tuple[int, int, int, int, Unpack[tuple[int, ...]]])
164-
165168
###
166169
# Shape-typed sequences
167170

@@ -179,23 +182,19 @@ Sequence3ND: TypeAlias = Sequence[Sequence[_NestedSequence[_T]]]
179182
# Shape-typed array aliases
180183

181184
Array = TypeAliasType("Array", np.ndarray[_ShapeT, np.dtype[_ScalarT0]], type_params=(_ScalarT0, _ShapeT))
182-
Array0D = TypeAliasType("Array0D", np.ndarray[tuple[()], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
183-
Array1D = TypeAliasType("Array1D", np.ndarray[tuple[int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
184-
Array2D = TypeAliasType("Array2D", np.ndarray[tuple[int, int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
185-
Array3D = TypeAliasType("Array3D", np.ndarray[tuple[int, int, int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
186-
Array4D = TypeAliasType("Array4D", np.ndarray[tuple[int, int, int, int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
185+
Array0D = TypeAliasType("Array0D", np.ndarray[Shape0, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
186+
Array1D = TypeAliasType("Array1D", np.ndarray[Shape1, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
187+
Array2D = TypeAliasType("Array2D", np.ndarray[Shape2, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
188+
Array3D = TypeAliasType("Array3D", np.ndarray[Shape3, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
189+
Array4D = TypeAliasType("Array4D", np.ndarray[Shape4, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
187190

188191
MArray = TypeAliasType("MArray", np.ma.MaskedArray[_ShapeT, np.dtype[_ScalarT0]], type_params=(_ScalarT0, _ShapeT))
189-
MArray0D = TypeAliasType("MArray0D", np.ma.MaskedArray[tuple[()], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
190-
MArray1D = TypeAliasType("MArray1D", np.ma.MaskedArray[tuple[int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
191-
MArray2D = TypeAliasType("MArray2D", np.ma.MaskedArray[tuple[int, int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
192-
MArray3D = TypeAliasType(
193-
"MArray3D",
194-
np.ma.MaskedArray[tuple[int, int, int], np.dtype[_ScalarT0]],
195-
type_params=(_ScalarT0,),
196-
)
192+
MArray0D = TypeAliasType("MArray0D", np.ma.MaskedArray[Shape0, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
193+
MArray1D = TypeAliasType("MArray1D", np.ma.MaskedArray[Shape1, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
194+
MArray2D = TypeAliasType("MArray2D", np.ma.MaskedArray[Shape2, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
195+
MArray3D = TypeAliasType("MArray3D", np.ma.MaskedArray[Shape3, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
197196

198-
Matrix = TypeAliasType("Matrix", np.matrix[tuple[int, int], np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
197+
Matrix = TypeAliasType("Matrix", np.matrix[Shape2, np.dtype[_ScalarT0]], type_params=(_ScalarT0,))
199198

200199
StringArray = TypeAliasType(
201200
"StringArray",
@@ -204,27 +203,27 @@ StringArray = TypeAliasType(
204203
)
205204
StringArray0D = TypeAliasType(
206205
"StringArray0D",
207-
np.ndarray[tuple[()], np.dtypes.StringDType[_NaT]],
206+
np.ndarray[Shape0, np.dtypes.StringDType[_NaT]],
208207
type_params=(_NaT,),
209208
)
210209
StringArray1D = TypeAliasType(
211210
"StringArray1D",
212-
np.ndarray[tuple[int], np.dtypes.StringDType[_NaT]],
211+
np.ndarray[Shape1, np.dtypes.StringDType[_NaT]],
213212
type_params=(_NaT,),
214213
)
215214
StringArray2D = TypeAliasType(
216215
"StringArray2D",
217-
np.ndarray[tuple[int, int], np.dtypes.StringDType[_NaT]],
216+
np.ndarray[Shape2, np.dtypes.StringDType[_NaT]],
218217
type_params=(_NaT,),
219218
)
220219
StringArray3D = TypeAliasType(
221220
"StringArray3D",
222-
np.ndarray[tuple[int, int, int], np.dtypes.StringDType[_NaT]],
221+
np.ndarray[Shape3, np.dtypes.StringDType[_NaT]],
223222
type_params=(_NaT,),
224223
)
225224
StringArrayND = TypeAliasType(
226225
"StringArrayND",
227-
np.ndarray[tuple[int, ...], np.dtypes.StringDType[_NaT]],
226+
np.ndarray[Shape, np.dtypes.StringDType[_NaT]],
228227
type_params=(_NaT,),
229228
)
230229

@@ -262,10 +261,10 @@ _ToArray2_3ds: TypeAlias = CanArray3D[_ScalarT] | Sequence[_ToArray2_2ds[_Scalar
262261
# requires a lower bound on dimensionality, e.g. `_2nd` denotes `ndin` within `[2, n]`
263262
_ToArray_1nd: TypeAlias = CanLenArrayND[_ScalarT] | Sequence1ND[CanArrayND[_ScalarT]]
264263
_ToArray2_1nd: TypeAlias = CanLenArrayND[_ScalarT] | Sequence1ND[_ToT | CanArrayND[_ScalarT]]
265-
_ToArray_2nd: TypeAlias = CanLenArray[_ScalarT, AtLeast2D] | Sequence[_ToArray_1nd[_ScalarT]]
266-
_ToArray2_2nd: TypeAlias = CanLenArray[_ScalarT, AtLeast2D] | Sequence[_ToArray2_1nd[_ScalarT, _ToT]]
267-
_ToArray_3nd: TypeAlias = CanLenArray[_ScalarT, AtLeast3D] | Sequence[_ToArray_2nd[_ScalarT]]
268-
_ToArray2_3nd: TypeAlias = CanLenArray[_ScalarT, AtLeast3D] | Sequence[_ToArray2_2nd[_ScalarT, _ToT]]
264+
_ToArray_2nd: TypeAlias = CanLenArray[_ScalarT, Shape2_] | Sequence[_ToArray_1nd[_ScalarT]]
265+
_ToArray2_2nd: TypeAlias = CanLenArray[_ScalarT, Shape2_] | Sequence[_ToArray2_1nd[_ScalarT, _ToT]]
266+
_ToArray_3nd: TypeAlias = CanLenArray[_ScalarT, Shape3_] | Sequence[_ToArray_2nd[_ScalarT]]
267+
_ToArray2_3nd: TypeAlias = CanLenArray[_ScalarT, Shape3_] | Sequence[_ToArray2_2nd[_ScalarT, _ToT]]
269268

270269
###
271270
# Non-overlapping scalar- and array-like aliases for all scalar types.
@@ -685,13 +684,13 @@ ToObject_2nd = TypeAliasType("ToObject_2nd", _ToArray2_2nd[np.object_, _PyObject
685684
ToObject_3nd = TypeAliasType("ToObject_3nd", _ToArray2_3nd[np.object_, _PyObject])
686685

687686
# StringDType
688-
ToString_nd = TypeAliasType("ToString_nd", _CanStringArray[AtLeast0D, _NaT0], type_params=(_NaT0,))
689-
ToString_1ds = TypeAliasType("ToString_1ds", _CanStringArray[tuple[int], _NaT0], type_params=(_NaT0,))
690-
ToString_2ds = TypeAliasType("ToString_2ds", _CanStringArray[tuple[int, int], _NaT0], type_params=(_NaT0,))
691-
ToString_3ds = TypeAliasType("ToString_3ds", _CanStringArray[tuple[int, int, int], _NaT0], type_params=(_NaT0,))
692-
ToString_1nd = TypeAliasType("ToString_1nd", _CanStringArray[AtLeast1D, _NaT0], type_params=(_NaT0,))
693-
ToString_2nd = TypeAliasType("ToString_2nd", _CanStringArray[AtLeast2D, _NaT0], type_params=(_NaT0,))
694-
ToString_3nd = TypeAliasType("ToString_3nd", _CanStringArray[AtLeast3D, _NaT0], type_params=(_NaT0,))
687+
ToString_nd = TypeAliasType("ToString_nd", _CanStringArray[Shape, _NaT0], type_params=(_NaT0,))
688+
ToString_1ds = TypeAliasType("ToString_1ds", _CanStringArray[Shape1, _NaT0], type_params=(_NaT0,))
689+
ToString_2ds = TypeAliasType("ToString_2ds", _CanStringArray[Shape2, _NaT0], type_params=(_NaT0,))
690+
ToString_3ds = TypeAliasType("ToString_3ds", _CanStringArray[Shape3, _NaT0], type_params=(_NaT0,))
691+
ToString_1nd = TypeAliasType("ToString_1nd", _CanStringArray[Shape1_, _NaT0], type_params=(_NaT0,))
692+
ToString_2nd = TypeAliasType("ToString_2nd", _CanStringArray[Shape2_, _NaT0], type_params=(_NaT0,))
693+
ToString_3nd = TypeAliasType("ToString_3nd", _CanStringArray[Shape3_, _NaT0], type_params=(_NaT0,))
695694

696695
# any scalar
697696
ToGeneric_nd = TypeAliasType("ToGeneric_nd", _ToArray2_nd[np.generic, _PyScalar])
@@ -976,8 +975,3 @@ CoStr_3ds = TypeAliasType("CoStr_3ds", _ToArray2_3ds[_ToCharacter, _PyCharacter]
976975
CoStr_1nd = TypeAliasType("CoStr_1nd", _ToArray2_1nd[_ToCharacter, _PyCharacter])
977976
CoStr_2nd = TypeAliasType("CoStr_2nd", _ToArray2_2nd[_ToCharacter, _PyCharacter])
978977
CoStr_3nd = TypeAliasType("CoStr_3nd", _ToArray2_3nd[_ToCharacter, _PyCharacter])
979-
980-
###
981-
# DType-likes
982-
# TODO(jorenham): see
983-
# https://github.com/numpy/numtype/issues/304

src/_numtype/_nep50.pyi

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ from typing_extensions import TypeAliasType, TypeVar
88
import numpy as np
99
from numpy._typing import _NestedSequence
1010

11+
from . import _shape
12+
1113
__all__ = [
1214
"Casts",
1315
"CastsArray",
@@ -38,9 +40,8 @@ _ScalarOutT = TypeVar("_ScalarOutT", bound=_ScalarOut, default=Any)
3840
_ScalarOutT_co = TypeVar("_ScalarOutT_co", bound=_ScalarOut, covariant=True)
3941
_ScalarOutT_contra = TypeVar("_ScalarOutT_contra", bound=_ScalarOut, contravariant=True)
4042

41-
_Shape: TypeAlias = tuple[int, ...]
42-
_ShapeT = TypeVar("_ShapeT", bound=_Shape, default=_Shape)
43-
_ShapeT_co = TypeVar("_ShapeT_co", bound=_Shape, covariant=True)
43+
_ShapeT = TypeVar("_ShapeT", bound=_shape.Shape, default=_shape.Shape)
44+
_ShapeT_co = TypeVar("_ShapeT_co", bound=_shape.Shape, covariant=True)
4445

4546
###
4647

@@ -121,7 +122,7 @@ class _LikeArray(Protocol[_LikeT_co, _ShapeT_co]):
121122
@type_check_only
122123
class _LikeScalar(Protocol[_LikeT_co]):
123124
@property
124-
def shape(self, /) -> tuple[()]: ...
125+
def shape(self, /) -> _shape.Shape0: ...
125126
@property
126127
def dtype(self, /) -> _HasType[_LikeT_co]: ...
127128

src/_numtype/_shape.pyi

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing_extensions import TypeAliasType, Unpack
2+
3+
__all__ = [
4+
"Shape",
5+
"Shape0",
6+
"Shape1",
7+
"Shape1_",
8+
"Shape2",
9+
"Shape2_",
10+
"Shape3",
11+
"Shape3_",
12+
"Shape4",
13+
"Shape4_",
14+
]
15+
16+
Shape = TypeAliasType("Shape", tuple[int, ...])
17+
Shape0 = TypeAliasType("Shape0", tuple[()])
18+
Shape1 = TypeAliasType("Shape1", tuple[int])
19+
Shape2 = TypeAliasType("Shape2", tuple[int, int])
20+
Shape3 = TypeAliasType("Shape3", tuple[int, int, int])
21+
Shape4 = TypeAliasType("Shape4", tuple[int, int, int, int])
22+
23+
Shape1_ = TypeAliasType("Shape1_", tuple[int, Unpack[tuple[int, ...]]])
24+
Shape2_ = TypeAliasType("Shape2_", tuple[int, int, Unpack[tuple[int, ...]]])
25+
Shape3_ = TypeAliasType("Shape3_", tuple[int, int, int, Unpack[tuple[int, ...]]])
26+
Shape4_ = TypeAliasType("Shape4_", tuple[int, int, int, int, Unpack[tuple[int, ...]]])

src/numpy-stubs/@test/static/accept/linalg.pyi

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import numpy.typing as npt
77
from numpy.linalg._linalg import EigResult, EighResult, QRResult, SVDResult, SlogdetResult
88

99
_ScalarT = TypeVar("_ScalarT", bound=np.generic)
10-
_Array_2d: TypeAlias = _nt.Array[_ScalarT, tuple[int, int]]
11-
_Array_2nd: TypeAlias = _nt.Array[_ScalarT, _nt.AtLeast2D]
10+
_Array2ND: TypeAlias = _nt.Array[_ScalarT, _nt.Shape2_]
1211

1312
###
1413

@@ -55,29 +54,29 @@ assert_type(np.linalg.solve(AR_i8, AR_i8), npt.NDArray[np.float64])
5554
assert_type(np.linalg.solve(AR_i8, AR_f8), npt.NDArray[np.float64])
5655
assert_type(np.linalg.solve(AR_c16, AR_f8), npt.NDArray[np.complex128])
5756

58-
assert_type(np.linalg.tensorinv(AR_i8), _Array_2nd[np.float64])
59-
assert_type(np.linalg.tensorinv(AR_f8), _Array_2nd[np.float64])
60-
assert_type(np.linalg.tensorinv(AR_c16), _Array_2nd[np.complex128])
57+
assert_type(np.linalg.tensorinv(AR_i8), _Array2ND[np.float64])
58+
assert_type(np.linalg.tensorinv(AR_f8), _Array2ND[np.float64])
59+
assert_type(np.linalg.tensorinv(AR_c16), _Array2ND[np.complex128])
6160

62-
assert_type(np.linalg.inv(AR_i8), _Array_2nd[np.float64])
63-
assert_type(np.linalg.inv(AR_f8), _Array_2nd[np.float64])
64-
assert_type(np.linalg.inv(AR_c16), _Array_2nd[np.complex128])
61+
assert_type(np.linalg.inv(AR_i8), _Array2ND[np.float64])
62+
assert_type(np.linalg.inv(AR_f8), _Array2ND[np.float64])
63+
assert_type(np.linalg.inv(AR_c16), _Array2ND[np.complex128])
6564

66-
assert_type(np.linalg.matrix_power(AR_i8, -1), _Array_2nd[np.float64])
67-
assert_type(np.linalg.matrix_power(AR_f8, 0), _Array_2nd[np.float64])
68-
assert_type(np.linalg.matrix_power(AR_c16, 1), _Array_2nd[np.complex128])
69-
assert_type(np.linalg.matrix_power(AR_O, 2), _Array_2nd[np.object_])
65+
assert_type(np.linalg.matrix_power(AR_i8, -1), _Array2ND[np.float64])
66+
assert_type(np.linalg.matrix_power(AR_f8, 0), _Array2ND[np.float64])
67+
assert_type(np.linalg.matrix_power(AR_c16, 1), _Array2ND[np.complex128])
68+
assert_type(np.linalg.matrix_power(AR_O, 2), _Array2ND[np.object_])
7069

71-
assert_type(np.linalg.cholesky(AR_i8), _Array_2nd[np.float64])
72-
assert_type(np.linalg.cholesky(AR_f8), _Array_2nd[np.float64])
73-
assert_type(np.linalg.cholesky(AR_c16), _Array_2nd[np.complex128])
70+
assert_type(np.linalg.cholesky(AR_i8), _Array2ND[np.float64])
71+
assert_type(np.linalg.cholesky(AR_f8), _Array2ND[np.float64])
72+
assert_type(np.linalg.cholesky(AR_c16), _Array2ND[np.complex128])
7473

75-
assert_type(np.linalg.outer(AR_i8, AR_i8), _Array_2d[np.int64])
76-
assert_type(np.linalg.outer(AR_f8, AR_f8), _Array_2d[np.float64])
77-
assert_type(np.linalg.outer(AR_c16, AR_c16), _Array_2d[np.complex128])
78-
assert_type(np.linalg.outer(AR_b, AR_b), _Array_2d[np.bool])
79-
assert_type(np.linalg.outer(AR_O, AR_O), _Array_2d[np.object_])
80-
assert_type(np.linalg.outer(AR_i8, AR_m), _Array_2d[np.timedelta64])
74+
assert_type(np.linalg.outer(AR_i8, AR_i8), _nt.Array2D[np.int64])
75+
assert_type(np.linalg.outer(AR_f8, AR_f8), _nt.Array2D[np.float64])
76+
assert_type(np.linalg.outer(AR_c16, AR_c16), _nt.Array2D[np.complex128])
77+
assert_type(np.linalg.outer(AR_b, AR_b), _nt.Array2D[np.bool])
78+
assert_type(np.linalg.outer(AR_O, AR_O), _nt.Array2D[np.object_])
79+
assert_type(np.linalg.outer(AR_i8, AR_m), _nt.Array2D[np.timedelta64])
8180

8281
assert_type(np.linalg.qr(AR_i8), QRResult[np.float64])
8382
assert_type(np.linalg.qr(AR_f8), QRResult[np.float64])
@@ -121,9 +120,9 @@ assert_type(np.linalg.matrix_rank(AR_i8), Any)
121120
assert_type(np.linalg.matrix_rank(AR_f8), Any)
122121
assert_type(np.linalg.matrix_rank(AR_c16), Any)
123122

124-
assert_type(np.linalg.pinv(AR_i8), _Array_2nd[np.float64])
125-
assert_type(np.linalg.pinv(AR_f8), _Array_2nd[np.float64])
126-
assert_type(np.linalg.pinv(AR_c16), _Array_2nd[np.complex128])
123+
assert_type(np.linalg.pinv(AR_i8), _Array2ND[np.float64])
124+
assert_type(np.linalg.pinv(AR_f8), _Array2ND[np.float64])
125+
assert_type(np.linalg.pinv(AR_c16), _Array2ND[np.complex128])
127126

128127
assert_type(np.linalg.slogdet(i_2d), SlogdetResult[np.float64, np.float64])
129128
assert_type(np.linalg.slogdet([f_1d]), SlogdetResult[np.float64, np.float64])
@@ -181,7 +180,7 @@ assert_type(np.linalg.norm(AR_f8), np.float64)
181180
assert_type(np.linalg.norm(AR_c16), np.float64)
182181
assert_type(np.linalg.norm(AR_S), np.float64)
183182
assert_type(np.linalg.norm(AR_f8, axis=0), npt.NDArray[np.float64])
184-
assert_type(np.linalg.norm(AR_f8, keepdims=True), _Array_2nd[np.float64])
183+
assert_type(np.linalg.norm(AR_f8, keepdims=True), _Array2ND[np.float64])
185184

186185
assert_type(np.linalg.matrix_norm(b_2d), np.float64)
187186
assert_type(np.linalg.matrix_norm(i_2d), np.float64)

0 commit comments

Comments
 (0)