You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			500 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			500 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
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,
 | 
						|
    ParamSpec,
 | 
						|
    Self,
 | 
						|
    SupportsIndex,
 | 
						|
    TypeAlias,
 | 
						|
    TypeVarTuple,
 | 
						|
    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 TypeVar
 | 
						|
 | 
						|
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[[*_Ts], None],
 | 
						|
    max_workers: int,
 | 
						|
    pass_count: bool,
 | 
						|
    pass_barrier: bool,
 | 
						|
    outer_iterations: int,
 | 
						|
    prepare_args: tuple[*_Ts],
 | 
						|
) -> None: ...
 | 
						|
@overload
 | 
						|
def run_threaded(
 | 
						|
    func: Callable[[*_Ts], None],
 | 
						|
    max_workers: int = 8,
 | 
						|
    pass_count: bool = False,
 | 
						|
    pass_barrier: bool = False,
 | 
						|
    outer_iterations: int = 1,
 | 
						|
    *,
 | 
						|
    prepare_args: tuple[*_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: ...
 |