|
import ast |
|
import sys |
|
import types |
|
import unittest |
|
import warnings |
|
from collections.abc import Callable, Iterable, Sequence |
|
from contextlib import _GeneratorContextManager |
|
from pathlib import Path |
|
from re import Pattern |
|
from typing import ( |
|
Any, |
|
AnyStr, |
|
ClassVar, |
|
Final, |
|
Generic, |
|
NoReturn, |
|
SupportsIndex, |
|
TypeAlias, |
|
overload, |
|
type_check_only, |
|
) |
|
from typing import Literal as L |
|
from unittest.case import SkipTest |
|
|
|
from _typeshed import ConvertibleToFloat, GenericPath, StrOrBytesPath, StrPath |
|
from typing_extensions import ParamSpec, Self, TypeVar, TypeVarTuple, Unpack |
|
|
|
import numpy as np |
|
from numpy._typing import ( |
|
ArrayLike, |
|
DTypeLike, |
|
NDArray, |
|
_ArrayLikeDT64_co, |
|
_ArrayLikeNumber_co, |
|
_ArrayLikeObject_co, |
|
_ArrayLikeTD64_co, |
|
) |
|
|
|
__all__ = [ # noqa: RUF022 |
|
"IS_EDITABLE", |
|
"IS_MUSL", |
|
"IS_PYPY", |
|
"IS_PYSTON", |
|
"IS_WASM", |
|
"HAS_LAPACK64", |
|
"HAS_REFCOUNT", |
|
"NOGIL_BUILD", |
|
"assert_", |
|
"assert_array_almost_equal_nulp", |
|
"assert_raises_regex", |
|
"assert_array_max_ulp", |
|
"assert_warns", |
|
"assert_no_warnings", |
|
"assert_allclose", |
|
"assert_equal", |
|
"assert_almost_equal", |
|
"assert_approx_equal", |
|
"assert_array_equal", |
|
"assert_array_less", |
|
"assert_string_equal", |
|
"assert_array_almost_equal", |
|
"assert_raises", |
|
"build_err_msg", |
|
"decorate_methods", |
|
"jiffies", |
|
"memusage", |
|
"print_assert_equal", |
|
"rundocs", |
|
"runstring", |
|
"verbose", |
|
"measure", |
|
"IgnoreException", |
|
"clear_and_catch_warnings", |
|
"SkipTest", |
|
"KnownFailureException", |
|
"temppath", |
|
"tempdir", |
|
"suppress_warnings", |
|
"assert_array_compare", |
|
"assert_no_gc_cycles", |
|
"break_cycles", |
|
"check_support_sve", |
|
"run_threaded", |
|
] |
|
|
|
### |
|
|
|
_T = TypeVar("_T") |
|
_Ts = TypeVarTuple("_Ts") |
|
_Tss = ParamSpec("_Tss") |
|
_ET = TypeVar("_ET", bound=BaseException, default=BaseException) |
|
_FT = TypeVar("_FT", bound=Callable[..., Any]) |
|
_W_co = TypeVar("_W_co", bound=_WarnLog | None, default=_WarnLog | None, covariant=True) |
|
_T_or_bool = TypeVar("_T_or_bool", default=bool) |
|
|
|
_StrLike: TypeAlias = str | bytes |
|
_RegexLike: TypeAlias = _StrLike | Pattern[Any] |
|
_NumericArrayLike: TypeAlias = _ArrayLikeNumber_co | _ArrayLikeObject_co |
|
|
|
_ExceptionSpec: TypeAlias = type[_ET] | tuple[type[_ET], ...] |
|
_WarningSpec: TypeAlias = type[Warning] |
|
_WarnLog: TypeAlias = list[warnings.WarningMessage] |
|
_ToModules: TypeAlias = Iterable[types.ModuleType] |
|
|
|
# Must return a bool or an ndarray/generic type that is supported by `np.logical_and.reduce` |
|
_ComparisonFunc: TypeAlias = Callable[ |
|
[NDArray[Any], NDArray[Any]], |
|
bool | np.bool | np.number | NDArray[np.bool | np.number | np.object_], |
|
] |
|
|
|
# Type-check only `clear_and_catch_warnings` subclasses for both values of the |
|
# `record` parameter. Copied from the stdlib `warnings` stubs. |
|
@type_check_only |
|
class _clear_and_catch_warnings_with_records(clear_and_catch_warnings): |
|
def __enter__(self) -> list[warnings.WarningMessage]: ... |
|
|
|
@type_check_only |
|
class _clear_and_catch_warnings_without_records(clear_and_catch_warnings): |
|
def __enter__(self) -> None: ... |
|
|
|
### |
|
|
|
verbose: int = 0 |
|
NUMPY_ROOT: Final[Path] = ... |
|
IS_INSTALLED: Final[bool] = ... |
|
IS_EDITABLE: Final[bool] = ... |
|
IS_MUSL: Final[bool] = ... |
|
IS_PYPY: Final[bool] = ... |
|
IS_PYSTON: Final[bool] = ... |
|
IS_WASM: Final[bool] = ... |
|
HAS_REFCOUNT: Final[bool] = ... |
|
HAS_LAPACK64: Final[bool] = ... |
|
NOGIL_BUILD: Final[bool] = ... |
|
|
|
class KnownFailureException(Exception): ... |
|
class IgnoreException(Exception): ... |
|
|
|
# NOTE: `warnings.catch_warnings` is incorrectly defined as invariant in typeshed |
|
class clear_and_catch_warnings(warnings.catch_warnings[_W_co], Generic[_W_co]): # type: ignore[type-var] # pyright: ignore[reportInvalidTypeArguments] |
|
class_modules: ClassVar[tuple[types.ModuleType, ...]] = () |
|
modules: Final[set[types.ModuleType]] |
|
@overload # record: True |
|
def __init__(self: clear_and_catch_warnings[_WarnLog], /, record: L[True], modules: _ToModules = ()) -> None: ... |
|
@overload # record: False (default) |
|
def __init__(self: clear_and_catch_warnings[None], /, record: L[False] = False, modules: _ToModules = ()) -> None: ... |
|
@overload # record; bool |
|
def __init__(self, /, record: bool, modules: _ToModules = ()) -> None: ... |
|
|
|
class suppress_warnings: |
|
log: Final[_WarnLog] |
|
def __init__(self, /, forwarding_rule: L["always", "module", "once", "location"] = "always") -> None: ... |
|
def __enter__(self) -> Self: ... |
|
def __exit__(self, cls: type[BaseException] | None, exc: BaseException | None, tb: types.TracebackType | None, /) -> None: ... |
|
def __call__(self, /, func: _FT) -> _FT: ... |
|
|
|
# |
|
def filter(self, /, category: type[Warning] = ..., message: str = "", module: types.ModuleType | None = None) -> None: ... |
|
def record(self, /, category: type[Warning] = ..., message: str = "", module: types.ModuleType | None = None) -> _WarnLog: ... |
|
|
|
# Contrary to runtime we can't do `os.name` checks while type checking, |
|
# only `sys.platform` checks |
|
if sys.platform == "win32" or sys.platform == "cygwin": |
|
def memusage(processName: str = ..., instance: int = ...) -> int: ... |
|
elif sys.platform == "linux": |
|
def memusage(_proc_pid_stat: StrOrBytesPath = ...) -> int | None: ... |
|
else: |
|
def memusage() -> NoReturn: ... |
|
|
|
if sys.platform == "linux": |
|
def jiffies(_proc_pid_stat: StrOrBytesPath = ..., _load_time: list[float] = []) -> int: ... |
|
else: |
|
def jiffies(_load_time: list[float] = []) -> int: ... |
|
|
|
# |
|
def build_err_msg( |
|
arrays: Iterable[object], |
|
err_msg: object, |
|
header: str = ..., |
|
verbose: bool = ..., |
|
names: Sequence[str] = ..., |
|
precision: SupportsIndex | None = ..., |
|
) -> str: ... |
|
|
|
# |
|
def print_assert_equal(test_string: str, actual: object, desired: object) -> None: ... |
|
|
|
# |
|
def assert_(val: object, msg: str | Callable[[], str] = "") -> None: ... |
|
|
|
# |
|
def assert_equal( |
|
actual: object, |
|
desired: object, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
|
|
def assert_almost_equal( |
|
actual: _NumericArrayLike, |
|
desired: _NumericArrayLike, |
|
decimal: int = 7, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
) -> None: ... |
|
|
|
# |
|
def assert_approx_equal( |
|
actual: ConvertibleToFloat, |
|
desired: ConvertibleToFloat, |
|
significant: int = 7, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
) -> None: ... |
|
|
|
# |
|
def assert_array_compare( |
|
comparison: _ComparisonFunc, |
|
x: ArrayLike, |
|
y: ArrayLike, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
header: str = "", |
|
precision: SupportsIndex = 6, |
|
equal_nan: bool = True, |
|
equal_inf: bool = True, |
|
*, |
|
strict: bool = False, |
|
names: tuple[str, str] = ("ACTUAL", "DESIRED"), |
|
) -> None: ... |
|
|
|
# |
|
def assert_array_equal( |
|
actual: object, |
|
desired: object, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
|
|
# |
|
def assert_array_almost_equal( |
|
actual: _NumericArrayLike, |
|
desired: _NumericArrayLike, |
|
decimal: float = 6, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
) -> None: ... |
|
|
|
@overload |
|
def assert_array_less( |
|
x: _ArrayLikeDT64_co, |
|
y: _ArrayLikeDT64_co, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
@overload |
|
def assert_array_less( |
|
x: _ArrayLikeTD64_co, |
|
y: _ArrayLikeTD64_co, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
@overload |
|
def assert_array_less( |
|
x: _NumericArrayLike, |
|
y: _NumericArrayLike, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
|
|
# |
|
def assert_string_equal(actual: str, desired: str) -> None: ... |
|
|
|
# |
|
@overload |
|
def assert_raises( |
|
exception_class: _ExceptionSpec[_ET], |
|
/, |
|
*, |
|
msg: str | None = None, |
|
) -> unittest.case._AssertRaisesContext[_ET]: ... |
|
@overload |
|
def assert_raises( |
|
exception_class: _ExceptionSpec, |
|
callable: Callable[_Tss, Any], |
|
/, |
|
*args: _Tss.args, |
|
**kwargs: _Tss.kwargs, |
|
) -> None: ... |
|
|
|
# |
|
@overload |
|
def assert_raises_regex( |
|
exception_class: _ExceptionSpec[_ET], |
|
expected_regexp: _RegexLike, |
|
*, |
|
msg: str | None = None, |
|
) -> unittest.case._AssertRaisesContext[_ET]: ... |
|
@overload |
|
def assert_raises_regex( |
|
exception_class: _ExceptionSpec, |
|
expected_regexp: _RegexLike, |
|
callable: Callable[_Tss, Any], |
|
*args: _Tss.args, |
|
**kwargs: _Tss.kwargs, |
|
) -> None: ... |
|
|
|
# |
|
@overload |
|
def assert_allclose( |
|
actual: _ArrayLikeTD64_co, |
|
desired: _ArrayLikeTD64_co, |
|
rtol: float = 1e-7, |
|
atol: float = 0, |
|
equal_nan: bool = True, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
@overload |
|
def assert_allclose( |
|
actual: _NumericArrayLike, |
|
desired: _NumericArrayLike, |
|
rtol: float = 1e-7, |
|
atol: float = 0, |
|
equal_nan: bool = True, |
|
err_msg: object = "", |
|
verbose: bool = True, |
|
*, |
|
strict: bool = False, |
|
) -> None: ... |
|
|
|
# |
|
def assert_array_almost_equal_nulp( |
|
x: _ArrayLikeNumber_co, |
|
y: _ArrayLikeNumber_co, |
|
nulp: float = 1, |
|
) -> None: ... |
|
|
|
# |
|
def assert_array_max_ulp( |
|
a: _ArrayLikeNumber_co, |
|
b: _ArrayLikeNumber_co, |
|
maxulp: float = 1, |
|
dtype: DTypeLike | None = None, |
|
) -> NDArray[Any]: ... |
|
|
|
# |
|
@overload |
|
def assert_warns(warning_class: _WarningSpec) -> _GeneratorContextManager[None]: ... |
|
@overload |
|
def assert_warns(warning_class: _WarningSpec, func: Callable[_Tss, _T], *args: _Tss.args, **kwargs: _Tss.kwargs) -> _T: ... |
|
|
|
# |
|
@overload |
|
def assert_no_warnings() -> _GeneratorContextManager[None]: ... |
|
@overload |
|
def assert_no_warnings(func: Callable[_Tss, _T], /, *args: _Tss.args, **kwargs: _Tss.kwargs) -> _T: ... |
|
|
|
# |
|
@overload |
|
def assert_no_gc_cycles() -> _GeneratorContextManager[None]: ... |
|
@overload |
|
def assert_no_gc_cycles(func: Callable[_Tss, Any], /, *args: _Tss.args, **kwargs: _Tss.kwargs) -> None: ... |
|
|
|
### |
|
|
|
# |
|
@overload |
|
def tempdir( |
|
suffix: None = None, |
|
prefix: None = None, |
|
dir: None = None, |
|
) -> _GeneratorContextManager[str]: ... |
|
@overload |
|
def tempdir( |
|
suffix: AnyStr | None = None, |
|
prefix: AnyStr | None = None, |
|
*, |
|
dir: GenericPath[AnyStr], |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def tempdir( |
|
suffix: AnyStr | None = None, |
|
*, |
|
prefix: AnyStr, |
|
dir: GenericPath[AnyStr] | None = None, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def tempdir( |
|
suffix: AnyStr, |
|
prefix: AnyStr | None = None, |
|
dir: GenericPath[AnyStr] | None = None, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
|
|
# |
|
@overload |
|
def temppath( |
|
suffix: None = None, |
|
prefix: None = None, |
|
dir: None = None, |
|
text: bool = False, |
|
) -> _GeneratorContextManager[str]: ... |
|
@overload |
|
def temppath( |
|
suffix: AnyStr | None, |
|
prefix: AnyStr | None, |
|
dir: GenericPath[AnyStr], |
|
text: bool = False, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def temppath( |
|
suffix: AnyStr | None = None, |
|
prefix: AnyStr | None = None, |
|
*, |
|
dir: GenericPath[AnyStr], |
|
text: bool = False, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def temppath( |
|
suffix: AnyStr | None, |
|
prefix: AnyStr, |
|
dir: GenericPath[AnyStr] | None = None, |
|
text: bool = False, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def temppath( |
|
suffix: AnyStr | None = None, |
|
*, |
|
prefix: AnyStr, |
|
dir: GenericPath[AnyStr] | None = None, |
|
text: bool = False, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
@overload |
|
def temppath( |
|
suffix: AnyStr, |
|
prefix: AnyStr | None = None, |
|
dir: GenericPath[AnyStr] | None = None, |
|
text: bool = False, |
|
) -> _GeneratorContextManager[AnyStr]: ... |
|
|
|
# |
|
def check_support_sve(__cache: list[_T_or_bool] = []) -> _T_or_bool: ... # noqa: PYI063 |
|
|
|
# |
|
def decorate_methods( |
|
cls: type, |
|
decorator: Callable[[Callable[..., Any]], Any], |
|
testmatch: _RegexLike | None = None, |
|
) -> None: ... |
|
|
|
# |
|
@overload |
|
def run_threaded( |
|
func: Callable[[], None], |
|
max_workers: int = 8, |
|
pass_count: bool = False, |
|
pass_barrier: bool = False, |
|
outer_iterations: int = 1, |
|
prepare_args: None = None, |
|
) -> None: ... |
|
@overload |
|
def run_threaded( |
|
func: Callable[[Unpack[_Ts]], None], |
|
max_workers: int, |
|
pass_count: bool, |
|
pass_barrier: bool, |
|
outer_iterations: int, |
|
prepare_args: tuple[Unpack[_Ts]], |
|
) -> None: ... |
|
@overload |
|
def run_threaded( |
|
func: Callable[[Unpack[_Ts]], None], |
|
max_workers: int = 8, |
|
pass_count: bool = False, |
|
pass_barrier: bool = False, |
|
outer_iterations: int = 1, |
|
*, |
|
prepare_args: tuple[Unpack[_Ts]], |
|
) -> None: ... |
|
|
|
# |
|
def runstring(astr: _StrLike | types.CodeType, dict: dict[str, Any] | None) -> Any: ... # noqa: ANN401 |
|
def rundocs(filename: StrPath | None = None, raise_on_error: bool = True) -> None: ... |
|
def measure(code_str: _StrLike | ast.AST, times: int = 1, label: str | None = None) -> float: ... |
|
def break_cycles() -> None: ... |
|
|