414 lines
10 KiB
Python
414 lines
10 KiB
Python
import os
|
|
import sys
|
|
import ast
|
|
import types
|
|
import warnings
|
|
import unittest
|
|
import contextlib
|
|
from re import Pattern
|
|
from collections.abc import Callable, Iterable, Sequence
|
|
from typing import (
|
|
Literal as L,
|
|
Any,
|
|
AnyStr,
|
|
ClassVar,
|
|
NoReturn,
|
|
overload,
|
|
type_check_only,
|
|
TypeVar,
|
|
Final,
|
|
SupportsIndex,
|
|
ParamSpec
|
|
)
|
|
|
|
import numpy as np
|
|
from numpy import number, object_, _FloatValue
|
|
from numpy._typing import (
|
|
NDArray,
|
|
ArrayLike,
|
|
DTypeLike,
|
|
_ArrayLikeNumber_co,
|
|
_ArrayLikeObject_co,
|
|
_ArrayLikeTD64_co,
|
|
_ArrayLikeDT64_co,
|
|
)
|
|
|
|
from unittest.case import (
|
|
SkipTest as SkipTest,
|
|
)
|
|
|
|
_P = ParamSpec("_P")
|
|
_T = TypeVar("_T")
|
|
_ET = TypeVar("_ET", bound=BaseException)
|
|
_FT = TypeVar("_FT", bound=Callable[..., Any])
|
|
|
|
# Must return a bool or an ndarray/generic type
|
|
# that is supported by `np.logical_and.reduce`
|
|
_ComparisonFunc = Callable[
|
|
[NDArray[Any], NDArray[Any]],
|
|
(
|
|
bool
|
|
| np.bool
|
|
| number[Any]
|
|
| NDArray[np.bool | number[Any] | object_]
|
|
)
|
|
]
|
|
|
|
__all__: list[str]
|
|
|
|
class KnownFailureException(Exception): ...
|
|
class IgnoreException(Exception): ...
|
|
|
|
class clear_and_catch_warnings(warnings.catch_warnings):
|
|
class_modules: ClassVar[tuple[types.ModuleType, ...]]
|
|
modules: set[types.ModuleType]
|
|
@overload
|
|
def __new__(
|
|
cls,
|
|
record: L[False] = ...,
|
|
modules: Iterable[types.ModuleType] = ...,
|
|
) -> _clear_and_catch_warnings_without_records: ...
|
|
@overload
|
|
def __new__(
|
|
cls,
|
|
record: L[True],
|
|
modules: Iterable[types.ModuleType] = ...,
|
|
) -> _clear_and_catch_warnings_with_records: ...
|
|
@overload
|
|
def __new__(
|
|
cls,
|
|
record: bool,
|
|
modules: Iterable[types.ModuleType] = ...,
|
|
) -> clear_and_catch_warnings: ...
|
|
def __enter__(self) -> None | list[warnings.WarningMessage]: ...
|
|
def __exit__(
|
|
self,
|
|
__exc_type: None | type[BaseException] = ...,
|
|
__exc_val: None | BaseException = ...,
|
|
__exc_tb: None | types.TracebackType = ...,
|
|
) -> None: ...
|
|
|
|
# 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: ...
|
|
|
|
class suppress_warnings:
|
|
log: list[warnings.WarningMessage]
|
|
def __init__(
|
|
self,
|
|
forwarding_rule: L["always", "module", "once", "location"] = ...,
|
|
) -> None: ...
|
|
def filter(
|
|
self,
|
|
category: type[Warning] = ...,
|
|
message: str = ...,
|
|
module: None | types.ModuleType = ...,
|
|
) -> None: ...
|
|
def record(
|
|
self,
|
|
category: type[Warning] = ...,
|
|
message: str = ...,
|
|
module: None | types.ModuleType = ...,
|
|
) -> list[warnings.WarningMessage]: ...
|
|
def __enter__(self: _T) -> _T: ...
|
|
def __exit__(
|
|
self,
|
|
__exc_type: None | type[BaseException] = ...,
|
|
__exc_val: None | BaseException = ...,
|
|
__exc_tb: None | types.TracebackType = ...,
|
|
) -> None: ...
|
|
def __call__(self, func: _FT) -> _FT: ...
|
|
|
|
verbose: int
|
|
IS_PYPY: Final[bool]
|
|
IS_PYSTON: Final[bool]
|
|
HAS_REFCOUNT: Final[bool]
|
|
HAS_LAPACK64: Final[bool]
|
|
|
|
def assert_(val: object, msg: str | Callable[[], str] = ...) -> None: ...
|
|
|
|
# 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: str | bytes | os.PathLike[Any] = ...) -> None | int: ...
|
|
else:
|
|
def memusage() -> NoReturn: ...
|
|
|
|
if sys.platform == "linux":
|
|
def jiffies(
|
|
_proc_pid_stat: str | bytes | os.PathLike[Any] = ...,
|
|
_load_time: list[float] = ...,
|
|
) -> int: ...
|
|
else:
|
|
def jiffies(_load_time: list[float] = ...) -> int: ...
|
|
|
|
def build_err_msg(
|
|
arrays: Iterable[object],
|
|
err_msg: str,
|
|
header: str = ...,
|
|
verbose: bool = ...,
|
|
names: Sequence[str] = ...,
|
|
precision: None | SupportsIndex = ...,
|
|
) -> str: ...
|
|
|
|
def assert_equal(
|
|
actual: object,
|
|
desired: object,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
|
|
def print_assert_equal(
|
|
test_string: str,
|
|
actual: object,
|
|
desired: object,
|
|
) -> None: ...
|
|
|
|
def assert_almost_equal(
|
|
actual: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
desired: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
decimal: int = ...,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
) -> None: ...
|
|
|
|
# Anything that can be coerced into `builtins.float`
|
|
def assert_approx_equal(
|
|
actual: _FloatValue,
|
|
desired: _FloatValue,
|
|
significant: int = ...,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
) -> None: ...
|
|
|
|
def assert_array_compare(
|
|
comparison: _ComparisonFunc,
|
|
x: ArrayLike,
|
|
y: ArrayLike,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
header: str = ...,
|
|
precision: SupportsIndex = ...,
|
|
equal_nan: bool = ...,
|
|
equal_inf: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
|
|
def assert_array_equal(
|
|
x: ArrayLike,
|
|
y: ArrayLike,
|
|
/,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
|
|
def assert_array_almost_equal(
|
|
x: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
y: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
/,
|
|
decimal: float = ...,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
) -> None: ...
|
|
|
|
@overload
|
|
def assert_array_less(
|
|
x: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
y: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
@overload
|
|
def assert_array_less(
|
|
x: _ArrayLikeTD64_co,
|
|
y: _ArrayLikeTD64_co,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
@overload
|
|
def assert_array_less(
|
|
x: _ArrayLikeDT64_co,
|
|
y: _ArrayLikeDT64_co,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
|
|
def runstring(
|
|
astr: str | bytes | types.CodeType,
|
|
dict: None | dict[str, Any],
|
|
) -> Any: ...
|
|
|
|
def assert_string_equal(actual: str, desired: str) -> None: ...
|
|
|
|
def rundocs(
|
|
filename: None | str | os.PathLike[str] = ...,
|
|
raise_on_error: bool = ...,
|
|
) -> None: ...
|
|
|
|
def raises(*args: type[BaseException]) -> Callable[[_FT], _FT]: ...
|
|
|
|
@overload
|
|
def assert_raises( # type: ignore
|
|
expected_exception: type[BaseException] | tuple[type[BaseException], ...],
|
|
callable: Callable[_P, Any],
|
|
/,
|
|
*args: _P.args,
|
|
**kwargs: _P.kwargs,
|
|
) -> None: ...
|
|
@overload
|
|
def assert_raises(
|
|
expected_exception: type[_ET] | tuple[type[_ET], ...],
|
|
*,
|
|
msg: None | str = ...,
|
|
) -> unittest.case._AssertRaisesContext[_ET]: ...
|
|
|
|
@overload
|
|
def assert_raises_regex(
|
|
expected_exception: type[BaseException] | tuple[type[BaseException], ...],
|
|
expected_regex: str | bytes | Pattern[Any],
|
|
callable: Callable[_P, Any],
|
|
/,
|
|
*args: _P.args,
|
|
**kwargs: _P.kwargs,
|
|
) -> None: ...
|
|
@overload
|
|
def assert_raises_regex(
|
|
expected_exception: type[_ET] | tuple[type[_ET], ...],
|
|
expected_regex: str | bytes | Pattern[Any],
|
|
*,
|
|
msg: None | str = ...,
|
|
) -> unittest.case._AssertRaisesContext[_ET]: ...
|
|
|
|
def decorate_methods(
|
|
cls: type[Any],
|
|
decorator: Callable[[Callable[..., Any]], Any],
|
|
testmatch: None | str | bytes | Pattern[Any] = ...,
|
|
) -> None: ...
|
|
|
|
def measure(
|
|
code_str: str | bytes | ast.mod | ast.AST,
|
|
times: int = ...,
|
|
label: None | str = ...,
|
|
) -> float: ...
|
|
|
|
@overload
|
|
def assert_allclose(
|
|
actual: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
desired: _ArrayLikeNumber_co | _ArrayLikeObject_co,
|
|
rtol: float = ...,
|
|
atol: float = ...,
|
|
equal_nan: bool = ...,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
@overload
|
|
def assert_allclose(
|
|
actual: _ArrayLikeTD64_co,
|
|
desired: _ArrayLikeTD64_co,
|
|
rtol: float = ...,
|
|
atol: float = ...,
|
|
equal_nan: bool = ...,
|
|
err_msg: object = ...,
|
|
verbose: bool = ...,
|
|
*,
|
|
strict: bool = ...
|
|
) -> None: ...
|
|
|
|
def assert_array_almost_equal_nulp(
|
|
x: _ArrayLikeNumber_co,
|
|
y: _ArrayLikeNumber_co,
|
|
nulp: float = ...,
|
|
) -> None: ...
|
|
|
|
def assert_array_max_ulp(
|
|
a: _ArrayLikeNumber_co,
|
|
b: _ArrayLikeNumber_co,
|
|
maxulp: float = ...,
|
|
dtype: DTypeLike = ...,
|
|
) -> NDArray[Any]: ...
|
|
|
|
@overload
|
|
def assert_warns(
|
|
warning_class: type[Warning],
|
|
) -> contextlib._GeneratorContextManager[None]: ...
|
|
@overload
|
|
def assert_warns(
|
|
warning_class: type[Warning],
|
|
func: Callable[_P, _T],
|
|
/,
|
|
*args: _P.args,
|
|
**kwargs: _P.kwargs,
|
|
) -> _T: ...
|
|
|
|
@overload
|
|
def assert_no_warnings() -> contextlib._GeneratorContextManager[None]: ...
|
|
@overload
|
|
def assert_no_warnings(
|
|
func: Callable[_P, _T],
|
|
/,
|
|
*args: _P.args,
|
|
**kwargs: _P.kwargs,
|
|
) -> _T: ...
|
|
|
|
@overload
|
|
def tempdir(
|
|
suffix: None = ...,
|
|
prefix: None = ...,
|
|
dir: None = ...,
|
|
) -> contextlib._GeneratorContextManager[str]: ...
|
|
@overload
|
|
def tempdir(
|
|
suffix: None | AnyStr = ...,
|
|
prefix: None | AnyStr = ...,
|
|
dir: None | AnyStr | os.PathLike[AnyStr] = ...,
|
|
) -> contextlib._GeneratorContextManager[AnyStr]: ...
|
|
|
|
@overload
|
|
def temppath(
|
|
suffix: None = ...,
|
|
prefix: None = ...,
|
|
dir: None = ...,
|
|
text: bool = ...,
|
|
) -> contextlib._GeneratorContextManager[str]: ...
|
|
@overload
|
|
def temppath(
|
|
suffix: None | AnyStr = ...,
|
|
prefix: None | AnyStr = ...,
|
|
dir: None | AnyStr | os.PathLike[AnyStr] = ...,
|
|
text: bool = ...,
|
|
) -> contextlib._GeneratorContextManager[AnyStr]: ...
|
|
|
|
@overload
|
|
def assert_no_gc_cycles() -> contextlib._GeneratorContextManager[None]: ...
|
|
@overload
|
|
def assert_no_gc_cycles(
|
|
func: Callable[_P, Any],
|
|
/,
|
|
*args: _P.args,
|
|
**kwargs: _P.kwargs,
|
|
) -> None: ...
|
|
|
|
def break_cycles() -> None: ...
|