Skip to content

✨ Gradual shape-types #573

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/_numtype/@test/test_to_array.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -59,28 +59,28 @@ bool_0d_reject_sc: _nt.ToBool_0d = f_0d # type: ignore[assignment] # pyright:
bool_0d_reject_1d: _nt.ToBool_0d = b1_1d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_0d_reject_2d: _nt.ToBool_0d = b1_2d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_0d_reject_3d: _nt.ToBool_0d = b1_3d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_0d_reject_nd: _nt.ToBool_0d = b1_nd # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_0d_reject_nd: _nt.ToBool_0d = b1_nd

bool_1d_accept: _nt.ToBool_1d = like_bool_1d
bool_1d_reject_sc: _nt.ToBool_1d = f_1d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_1d_reject_0d: _nt.ToBool_1d = b1 # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_1d_reject_2d: _nt.ToBool_1ds = b1_2d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_1d_reject_3d: _nt.ToBool_1ds = b1_3d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_1d_reject_nd: _nt.ToBool_1ds = b1_nd # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_1d_reject_nd: _nt.ToBool_1ds = b1_nd

bool_2d_accept: _nt.ToBool_2d = like_bool_2d
bool_2d_reject_sc: _nt.ToBool_2d = f_2d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_2d_reject_0d: _nt.ToBool_2d = b1 # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_2d_reject_1d: _nt.ToBool_2ds = b1_1d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_2d_reject_3d: _nt.ToBool_2ds = b1_3d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_2d_reject_nd: _nt.ToBool_2ds = b1_nd # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_2d_reject_nd: _nt.ToBool_2ds = b1_nd

bool_3d_accept: _nt.ToBool_3d = like_bool_3d
bool_3d_reject_sc: _nt.ToBool_3d = f_3d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_3d_reject_0d: _nt.ToBool_3d = b1 # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_3d_reject_1d: _nt.ToBool_3ds = b1_1d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_3d_reject_2d: _nt.ToBool_3ds = b1_2d # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_3d_reject_nd: _nt.ToBool_3ds = b1_nd # type: ignore[assignment] # pyright: ignore[reportAssignmentType]
bool_3d_reject_nd: _nt.ToBool_3ds = b1_nd

bool_nd_accept_0d: _nt.ToBool_nd = b1_0d
bool_nd_accept_1d: _nt.ToBool_nd = like_bool_1d
Expand Down
10 changes: 8 additions & 2 deletions src/_numtype/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ from ._scalar_co import (
)
from ._shape import (
AnyShape as AnyShape,
NeitherShape as NeitherShape,
Shape as Shape,
Shape0 as Shape0,
Shape0N as Shape0N,
Expand Down Expand Up @@ -188,13 +189,17 @@ class CanArray3D(Protocol[_ScalarT_co]):
@type_check_only
class CanArrayND(Protocol[_ScalarT_co]):
# TODO: remove `| Rank0` once python/mypy#19110 is fixed
def __array__(self, /) -> np.ndarray[Shape | Rank0, np.dtype[_ScalarT_co]]: ...
def __array__(self, /) -> np.ndarray[AnyShape | Rank0, np.dtype[_ScalarT_co]]: ...

@type_check_only
class CanLenArrayND(Protocol[_ScalarT_co]):
def __len__(self, /) -> int: ...
# TODO: remove `| Rank0` once python/mypy#19110 is fixed
def __array__(self, /) -> np.ndarray[Shape, np.dtype[_ScalarT_co]]: ...
def __array__(self, /) -> np.ndarray[AnyShape, np.dtype[_ScalarT_co]]: ...

@type_check_only
class CanArray(Protocol[_ScalarT_co, _ShapeT_co]):
def __array__(self, /) -> np.ndarray[_ShapeT_co, np.dtype[_ScalarT_co]]: ...

@type_check_only
class CanLenArray(Protocol[_ScalarT_co, _ShapeT_co]):
Expand Down Expand Up @@ -260,6 +265,7 @@ _ToArray_2nd: TypeAlias = CanLenArray[_ScalarT, Shape2N] | Sequence[_ToArray_1nd
_ToArray2_2nd: TypeAlias = CanLenArray[_ScalarT, Shape2N] | Sequence[_ToArray2_1nd[_ScalarT, _ToT]]
_ToArray_3nd: TypeAlias = CanLenArray[_ScalarT, Shape3N] | Sequence[_ToArray_2nd[_ScalarT]]
_ToArray2_3nd: TypeAlias = CanLenArray[_ScalarT, Shape3N] | Sequence[_ToArray2_2nd[_ScalarT, _ToT]]
_ToArray_nnd: TypeAlias = CanArray[_ScalarT, NeitherShape] # noqa: PYI047

###
# Non-overlapping scalar- and array-like aliases for all scalar types.
Expand Down
2 changes: 1 addition & 1 deletion src/_numtype/_array.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ __all__ = [
###

# TODO: use `AnyShape` instead of `Shape` once python/mypy#19110 is fixed
_RankT = TypeVar("_RankT", bound=AnyShape, default=Shape)
_RankT = TypeVar("_RankT", bound=AnyShape, default=AnyShape)
_ScalarT = TypeVar("_ScalarT", bound=np.generic, default=Any)
_NaT = TypeVar("_NaT", default=Never)

Expand Down
3 changes: 2 additions & 1 deletion src/_numtype/_nep50.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import numpy as np
from numpy._typing import _NestedSequence

from . import _shape
from ._rank import Rank0

__all__ = [
"Casts",
Expand Down Expand Up @@ -122,7 +123,7 @@ class _LikeArray(Protocol[_LikeT_co, _ShapeT_co]):
@type_check_only
class _LikeScalar(Protocol[_LikeT_co]):
@property
def shape(self, /) -> _shape.Shape0: ...
def __inner_shape__(self, /) -> Rank0: ...
@property
def dtype(self, /) -> _HasType[_LikeT_co]: ...

Expand Down
6 changes: 4 additions & 2 deletions src/_numtype/_shape.pyi
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from typing import Any, TypeAlias
from typing import Any, Never, TypeAlias
from typing_extensions import TypeAliasType

__all__ = [
"AnyShape",
"NeitherShape",
"Shape",
"Shape0",
"Shape0N",
Expand All @@ -17,8 +18,9 @@ __all__ = [
"ShapeN",
]

AnyShape = TypeAliasType("AnyShape", tuple[Any, ...])
Shape = TypeAliasType("Shape", tuple[int, ...])
AnyShape = TypeAliasType("AnyShape", tuple[Any, ...])
NeitherShape = TypeAliasType("NeitherShape", tuple[Never, ...])

# TODO: remove `| Rank0` once python/mypy#19110 is fixed
Shape0 = TypeAliasType("Shape0", tuple[()])
Expand Down
108 changes: 54 additions & 54 deletions src/numpy-stubs/@test/static/accept/array_constructors.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ def func(i: int, j: int, **kwargs: object) -> MyArray[np.float64]: ...
assert_type(np.array(A), _nt.Array[np.float64])
assert_type(np.array(B), _nt.Array1D[np.float64])
assert_type(np.array(D), _nt.Array1D[np.float64 | np.int64])
assert_type(np.array([1, 1.0]), _nt.Array[Any])
assert_type(np.array(deque([1, 2, 3])), _nt.Array[Any])
assert_type(np.array([1, 1.0]), _nt.Array)
assert_type(np.array(deque([1, 2, 3])), _nt.Array)
assert_type(np.array(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.array(A, dtype="c16"), _nt.Array[Any])
assert_type(np.array(A, dtype="c16"), _nt.Array)
assert_type(np.array(A, like=A), _nt.Array[np.float64])
assert_type(np.array(A, subok=True), _nt.Array[np.float64])
assert_type(np.array(B, subok=True), MyArray[np.float64])
Expand All @@ -36,68 +36,68 @@ assert_type(np.array(B, subok=True, ndmin=1), MyArray[np.float64])

assert_type(np.zeros([1, 5, 6]), _nt.Array[np.float64])
assert_type(np.zeros([1, 5, 6], dtype=np.int64), _nt.Array[np.int64])
assert_type(np.zeros([1, 5, 6], dtype="c16"), _nt.Array[Any])
assert_type(np.zeros([1, 5, 6], dtype="c16"), _nt.Array)

assert_type(np.empty([1, 5, 6]), _nt.Array[np.float64])
assert_type(np.empty([1, 5, 6], dtype=np.int64), _nt.Array[np.int64])
assert_type(np.empty([1, 5, 6], dtype="c16"), _nt.Array[Any])
assert_type(np.empty([1, 5, 6], dtype="c16"), _nt.Array)

assert_type(np.concatenate(A), _nt.Array[np.float64])
assert_type(np.concatenate([A, A]), _nt.Array[Any]) # pyright: ignore[reportAssertTypeFailure] # _nt.Array[np.float64]
assert_type(np.concatenate([[1], A]), _nt.Array[Any])
assert_type(np.concatenate([[1], [1]]), _nt.Array[Any])
assert_type(np.concatenate([A, A]), _nt.Array[np.float64]) # type: ignore[assert-type] # mypy fail
assert_type(np.concatenate([[1], A]), _nt.Array)
assert_type(np.concatenate([[1], [1]]), _nt.Array)
assert_type(np.concatenate((A, A)), _nt.Array[np.float64])
assert_type(np.concatenate(([1], [1])), _nt.Array[Any])
assert_type(np.concatenate([1, 1.0]), _nt.Array[Any])
assert_type(np.concatenate(([1], [1])), _nt.Array)
assert_type(np.concatenate([1, 1.0]), _nt.Array)
assert_type(np.concatenate(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.concatenate(A, dtype="c16"), _nt.Array[Any])
assert_type(np.concatenate(A, dtype="c16"), _nt.Array)
assert_type(np.concatenate([1, 1.0], out=A), _nt.Array[np.float64])

assert_type(np.asarray(A), _nt.Array[np.float64])
assert_type(np.asarray(B), _nt.Array1D[np.float64])
assert_type(np.asarray([1, 1.0]), _nt.Array[Any])
assert_type(np.asarray([1, 1.0]), _nt.Array)
assert_type(np.asarray(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.asarray(A, dtype="c16"), _nt.Array[Any])
assert_type(np.asarray(A, dtype="c16"), _nt.Array)

assert_type(np.asanyarray(A), _nt.Array[np.float64])
assert_type(np.asanyarray(B), MyArray[np.float64])
assert_type(np.asanyarray([1, 1.0]), _nt.Array[Any])
assert_type(np.asanyarray([1, 1.0]), _nt.Array)
assert_type(np.asanyarray(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.asanyarray(A, dtype="c16"), _nt.Array[Any])
assert_type(np.asanyarray(A, dtype="c16"), _nt.Array)

assert_type(np.ascontiguousarray(A), _nt.Array[np.float64])
assert_type(np.ascontiguousarray(B), _nt.Array1D[np.float64])
assert_type(np.ascontiguousarray([1, 1.0]), _nt.Array[Any])
assert_type(np.ascontiguousarray([1, 1.0]), _nt.Array)
assert_type(np.ascontiguousarray(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.ascontiguousarray(A, dtype="c16"), _nt.Array[Any])
assert_type(np.ascontiguousarray(A, dtype="c16"), _nt.Array)

assert_type(np.asfortranarray(A), _nt.Array[np.float64])
assert_type(np.asfortranarray(B), _nt.Array1D[np.float64])
assert_type(np.asfortranarray([1, 1.0]), _nt.Array[Any])
assert_type(np.asfortranarray([1, 1.0]), _nt.Array)
assert_type(np.asfortranarray(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.asfortranarray(A, dtype="c16"), _nt.Array[Any])
assert_type(np.asfortranarray(A, dtype="c16"), _nt.Array)

assert_type(np.fromstring("1 1 1", sep=" "), _nt.Array[np.float64])
assert_type(np.fromstring(b"1 1 1", sep=" "), _nt.Array[np.float64])
assert_type(np.fromstring("1 1 1", dtype=np.int64, sep=" "), _nt.Array[np.int64])
assert_type(np.fromstring(b"1 1 1", dtype=np.int64, sep=" "), _nt.Array[np.int64])
assert_type(np.fromstring("1 1 1", dtype="c16", sep=" "), _nt.Array[Any])
assert_type(np.fromstring(b"1 1 1", dtype="c16", sep=" "), _nt.Array[Any])
assert_type(np.fromstring("1 1 1", dtype="c16", sep=" "), _nt.Array)
assert_type(np.fromstring(b"1 1 1", dtype="c16", sep=" "), _nt.Array)

assert_type(np.fromfile("test.txt", sep=" "), _nt.Array[np.float64])
assert_type(np.fromfile("test.txt", dtype=np.int64, sep=" "), _nt.Array[np.int64])
assert_type(np.fromfile("test.txt", dtype="c16", sep=" "), _nt.Array[Any])
assert_type(np.fromfile("test.txt", dtype="c16", sep=" "), _nt.Array)
with open("test.txt", encoding="utf-8") as f:
assert_type(np.fromfile(f, sep=" "), _nt.Array[np.float64])
assert_type(np.fromfile(b"test.txt", sep=" "), _nt.Array[np.float64])
assert_type(np.fromfile(Path("test.txt"), sep=" "), _nt.Array[np.float64])

assert_type(np.fromiter("12345", np.float64), _nt.Array[np.float64])
assert_type(np.fromiter("12345", float), _nt.Array[Any])
assert_type(np.fromiter("12345", float), _nt.Array)

assert_type(np.frombuffer(A), _nt.Array[np.float64])
assert_type(np.frombuffer(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.frombuffer(A, dtype="c16"), _nt.Array[Any])
assert_type(np.frombuffer(A, dtype="c16"), _nt.Array)

assert_type(np.arange(False, True), _nt.Array1D[np.int_])
assert_type(np.arange(10), _nt.Array1D[np.int_])
Expand All @@ -115,7 +115,7 @@ assert_type(np.arange(0, 10, dtype="f8"), _nt.Array1D[np.float64])
assert_type(np.require(A), _nt.Array[np.float64])
assert_type(np.require(B), MyArray[np.float64])
assert_type(np.require(B, requirements=None), MyArray[np.float64])
assert_type(np.require(B, dtype=int), _nt.Array[Any])
assert_type(np.require(B, dtype=int), _nt.Array)
assert_type(np.require(B, requirements="E"), _nt.Array[np.float64])
assert_type(np.require(B, requirements=["ENSUREARRAY"]), _nt.Array[np.float64])
assert_type(np.require(B, requirements={"F", "E"}), _nt.Array[np.float64])
Expand All @@ -127,28 +127,28 @@ assert_type(np.require(C), _nt.Array[np.intp])
assert_type(np.linspace(0, 10), _nt.Array[np.floating])
assert_type(np.linspace(0, 10j), _nt.Array[np.inexact])
assert_type(np.linspace(0, 10, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.linspace(0, 10, dtype=int), _nt.Array[Any])
assert_type(np.linspace(0, 10, dtype=int), _nt.Array)
assert_type(np.linspace(0, 10, retstep=True), tuple[_nt.Array[np.floating], np.floating])
assert_type(np.linspace(0j, 10, retstep=True), tuple[_nt.Array[np.inexact], np.inexact])
assert_type(np.linspace(0, 10, retstep=True, dtype=np.int64), tuple[_nt.Array[np.int64], np.int64])
assert_type(np.linspace(0j, 10, retstep=True, dtype=int), tuple[_nt.Array[Any], Any])
assert_type(np.linspace(0j, 10, retstep=True, dtype=int), tuple[_nt.Array, Any])

assert_type(np.logspace(0, 10), _nt.Array[np.floating])
assert_type(np.logspace(0, 10j), _nt.Array[np.inexact])
assert_type(np.logspace(0, 10, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.logspace(0, 10, dtype=int), _nt.Array[Any])
assert_type(np.logspace(0, 10, dtype=int), _nt.Array)

assert_type(np.geomspace(0, 10), _nt.Array[np.floating])
assert_type(np.geomspace(0, 10j), _nt.Array[np.inexact])
assert_type(np.geomspace(0, 10, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.geomspace(0, 10, dtype=int), _nt.Array[Any])
assert_type(np.geomspace(0, 10, dtype=int), _nt.Array)

assert_type(np.empty_like(A), _nt.Array[np.float64])
assert_type(np.empty_like(A, dtype=float), _nt.Array[np.float64])
assert_type(np.empty_like(A, shape=(2, 2)), _nt.Array[np.float64, _nt.Shape2])
assert_type(np.empty_like(A, shape=(2, 2)), _nt.Array2D[np.float64])
assert_type(np.empty_like(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.empty_like(A, dtype=np.int64, shape=(2, 2)), _nt.Array[np.int64, _nt.Shape2])
assert_type(np.empty_like(A, dtype="c16"), _nt.Array[Any])
assert_type(np.empty_like(A, dtype="c16"), _nt.Array)
assert_type(np.empty_like(A, dtype="c16", shape=(2, 2)), np.ndarray[_nt.Shape2, np.dtype])
assert_type(np.empty_like(B), MyArray[np.float64])
assert_type(np.empty_like(B, dtype=np.int64), _nt.Array[np.int64])
Expand All @@ -171,10 +171,10 @@ assert_type(np.empty_like([[[4j]]]), _nt.Array3D[np.complex128])

assert_type(np.zeros_like(A), _nt.Array[np.float64])
assert_type(np.zeros_like(A, dtype=float), _nt.Array[np.float64])
assert_type(np.zeros_like(A, shape=(2, 2)), _nt.Array[np.float64, _nt.Shape2])
assert_type(np.zeros_like(A, shape=(2, 2)), _nt.Array2D[np.float64])
assert_type(np.zeros_like(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.zeros_like(A, dtype=np.int64, shape=(2, 2)), _nt.Array[np.int64, _nt.Shape2])
assert_type(np.zeros_like(A, dtype="c16"), _nt.Array[Any])
assert_type(np.zeros_like(A, dtype="c16"), _nt.Array)
assert_type(np.zeros_like(A, dtype="c16", shape=(2, 2)), np.ndarray[_nt.Shape2, np.dtype])
assert_type(np.zeros_like(B), MyArray[np.float64])
assert_type(np.zeros_like(B, dtype=np.int64), _nt.Array[np.int64])
Expand All @@ -197,10 +197,10 @@ assert_type(np.zeros_like([[[4j]]]), _nt.Array3D[np.complex128])

assert_type(np.ones_like(A), _nt.Array[np.float64])
assert_type(np.ones_like(A, dtype=float), _nt.Array[np.float64])
assert_type(np.ones_like(A, shape=(2, 2)), _nt.Array[np.float64, _nt.Shape2])
assert_type(np.ones_like(A, shape=(2, 2)), _nt.Array2D[np.float64])
assert_type(np.ones_like(A, dtype=np.int64), _nt.Array[np.int64])
assert_type(np.ones_like(A, dtype=np.int64, shape=(2, 2)), _nt.Array[np.int64, _nt.Shape2])
assert_type(np.ones_like(A, dtype="c16"), _nt.Array[Any])
assert_type(np.ones_like(A, dtype="c16"), _nt.Array)
assert_type(np.ones_like(A, dtype="c16", shape=(2, 2)), np.ndarray[_nt.Shape2, np.dtype])
assert_type(np.ones_like(B), MyArray[np.float64])
assert_type(np.ones_like(B, dtype=np.int64), _nt.Array[np.int64])
Expand All @@ -223,7 +223,7 @@ assert_type(np.ones_like([[[4j]]]), _nt.Array3D[np.complex128])

assert_type(np.full_like(A, i8), _nt.Array[np.float64])
assert_type(np.full_like(C, i8), _nt.Array1D[np.intp])
assert_type(np.full_like(A, i8, dtype=int), _nt.Array[Any])
assert_type(np.full_like(A, i8, dtype=int), _nt.Array)
assert_type(np.full_like(B, i8), MyArray[np.float64])
assert_type(np.full_like(B, i8, dtype=np.int64), _nt.Array[np.int64])

Expand All @@ -240,8 +240,8 @@ assert_type(np.ones(_shape_2d), _nt.Array[np.float64, _nt.Shape2])
assert_type(np.ones(_shape_nd), np.ndarray[_nt.Shape, np.dtype[np.float64]])
assert_type(np.ones(_shape_1d, dtype=np.int64), _nt.Array1D[np.int64])
assert_type(np.ones(_shape_like), _nt.Array[np.float64])
assert_type(np.ones(_shape_like, dtype=np.dtypes.StringDType()), np.ndarray[Any, np.dtypes.StringDType])
assert_type(np.ones(_shape_like, dtype=int), _nt.Array[Any])
assert_type(np.ones(_shape_like, dtype=np.dtypes.StringDType()), np.ndarray[_nt.AnyShape, np.dtypes.StringDType])
assert_type(np.ones(_shape_like, dtype=int), _nt.Array)

assert_type(np.full(_size, i8), _nt.Array1D[np.int64])
assert_type(np.full(_shape_2d, i8), _nt.Array[np.int64, _nt.Shape2])
Expand All @@ -265,12 +265,12 @@ assert_type(np.identity(10, dtype=np.int64), _nt.Array2D[np.int64])
assert_type(np.identity(10, dtype=int), _nt.Array2D)

assert_type(np.atleast_1d(A), _nt.Array[np.float64])
assert_type(np.atleast_1d(C), _nt.Array[Any])
assert_type(np.atleast_1d(C), _nt.Array)
assert_type(np.atleast_1d(A, A), tuple[_nt.Array[np.float64], _nt.Array[np.float64]])
assert_type(np.atleast_1d(A, C), tuple[_nt.Array[Any], _nt.Array[Any]])
assert_type(np.atleast_1d(C, C), tuple[_nt.Array[Any], _nt.Array[Any]])
assert_type(np.atleast_1d(A, C), tuple[_nt.Array, _nt.Array])
assert_type(np.atleast_1d(C, C), tuple[_nt.Array, _nt.Array])
assert_type(np.atleast_1d(A, A, A), tuple[_nt.Array[np.float64], ...])
assert_type(np.atleast_1d(C, C, C), tuple[_nt.Array[Any], ...])
assert_type(np.atleast_1d(C, C, C), tuple[_nt.Array, ...])

assert_type(np.atleast_2d(A), _nt.Array[np.float64])
assert_type(np.atleast_2d(A, A), tuple[_nt.Array[np.float64], _nt.Array[np.float64]])
Expand All @@ -280,28 +280,28 @@ assert_type(np.atleast_3d(A), _nt.Array[np.float64])
assert_type(np.atleast_3d(A, A), tuple[_nt.Array[np.float64], _nt.Array[np.float64]])
assert_type(np.atleast_3d(A, A, A), tuple[_nt.Array[np.float64], ...])

assert_type(np.vstack([A, A]), _nt.Array[np.float64])
assert_type(np.vstack([A, A]), _nt.Array[np.float64]) # type: ignore[assert-type] # mypy fail
assert_type(np.vstack([A, A], dtype=np.float32), _nt.Array[np.float32])
assert_type(np.vstack([A, C]), _nt.Array[Any])
assert_type(np.vstack([C, C]), _nt.Array[Any])
assert_type(np.vstack([A, C]), _nt.Array)
assert_type(np.vstack([C, C]), _nt.Array)

assert_type(np.hstack([A, A]), _nt.Array[np.float64])
assert_type(np.hstack([A, A]), _nt.Array[np.float64]) # type: ignore[assert-type] # mypy fail
assert_type(np.hstack([A, A], dtype=np.float32), _nt.Array[np.float32])

assert_type(np.stack([A, A]), _nt.Array[np.float64])
assert_type(np.stack([A, A]), _nt.Array[np.float64]) # type: ignore[assert-type] # mypy fail
assert_type(np.stack([A, A], dtype=np.float32), _nt.Array[np.float32])
assert_type(np.stack([A, C]), _nt.Array[Any])
assert_type(np.stack([C, C]), _nt.Array[Any])
assert_type(np.stack([A, A], axis=0), _nt.Array[np.float64])
assert_type(np.stack([A, C]), _nt.Array)
assert_type(np.stack([C, C]), _nt.Array)
assert_type(np.stack([A, A], axis=0), _nt.Array[np.float64]) # type: ignore[assert-type] # mypy fail
assert_type(np.stack([A, A], out=B), MyArray[np.float64])

assert_type(np.block([[A, A], [A, A]]), _nt.Array[Any]) # pyright: ignore[reportAssertTypeFailure] # _nt.Array[np.float64]
assert_type(np.block(C), _nt.Array[Any])
assert_type(np.block([[A, A], [A, A]]), _nt.Array) # pyright: ignore[reportAssertTypeFailure] # _nt.Array[np.float64]
assert_type(np.block(C), _nt.Array)

if sys.version_info >= (3, 12):
from collections.abc import Buffer

def create_array(obj: npt.ArrayLike) -> _nt.Array[Any]: ...
def create_array(obj: npt.ArrayLike) -> _nt.Array: ...

buffer: Buffer
assert_type(create_array(buffer), _nt.Array[Any])
assert_type(create_array(buffer), _nt.Array)
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy