Skip to content
Merged
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
10 changes: 10 additions & 0 deletions pyvista_validation/check.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
from typing import Literal

import numpy.typing as npt
from typing_extensions import Never
from typing_extensions import TypeIs

from pyvista_validation._typing import VectorLikeFloat
Expand All @@ -57,8 +58,11 @@
from pyvista_validation._typing import _DTypeLike
from pyvista_validation._typing import _Floating
from pyvista_validation._typing import _Integer
from pyvista_validation._typing import _NestedBool
from pyvista_validation._typing import _NestedStr
from pyvista_validation._typing import _Real
from pyvista_validation._typing import _Scalar
from pyvista_validation._typing import _Text


_Shape = tuple[()] | tuple[int, ...]
Expand Down Expand Up @@ -165,6 +169,12 @@ def check_subdtype(
return input_obj


# fmt: off
@overload
def check_real(array: npt.NDArray[_Text | np.bool_] | _Text | np.bool_ | str | bool | _NestedStr | _NestedBool, /, *, name: str = ...) -> Never: ...
@overload
def check_real(array: _AnyArrayT, /, *, name: str = ...) -> _AnyArrayT: ...
# fmt: on
def check_real(array: _AnyArrayT, /, *, name: str = 'Array') -> _AnyArrayT:
"""Check if an array has real numbers (float or integer type).

Expand Down
11 changes: 9 additions & 2 deletions tests/typing/cases/check_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import numpy as np
import numpy.typing as npt
from type_assert import assert_types
from typing_extensions import Never

from pyvista_validation import check_contains
from pyvista_validation import check_finite
Expand Down Expand Up @@ -99,7 +100,10 @@ def unknown_number() -> object:
assert_types(check_real([1.0]), list[float])
assert_types(check_real(ONES), npt.NDArray[np.float64])
assert_types(check_real(1), int)
assert_types(check_real(TEXT), npt.NDArray[np.str_])
assert_types(check_real(TEXT), Never)
assert_types(check_real(np.ones(2, dtype=bool)), Never)
assert_types(check_real(['a']), Never)
assert_types(check_real(True), Never)
assert_types(check_sorted([1, 2]), list[int])
assert_types(check_sorted(MATRIX, axis=None), npt.NDArray[np.int64])
assert_types(check_sorted(MATRIX, axis=0), npt.NDArray[np.int64])
Expand Down Expand Up @@ -219,5 +223,8 @@ def unknown_number() -> object:
assert_types(_is_ndim(ONES, 1), bool)

SKIP_RUNTIME = {
'check_real(TEXT)': 'raises TypeError: text is not real, only the passthrough is typed',
'check_real(TEXT)': 'raises TypeError: text is not real',
'check_real(np.ones(2, dtype=bool))': 'raises TypeError: booleans are not real',
"check_real(['a'])": 'raises TypeError: text is not real',
'check_real(True)': 'raises TypeError: booleans are not real',
}
Loading