Type hints for NumPy.
Project description
💡 Type hints for NumPy
💡 Extends numpy.typing
💡 Extensive dynamic type checks for dtypes and shapes of arrays
Example of a hinted function with nptyping
:
>>> from nptyping import NDArray, Int, Shape >>> def func(arr: NDArray[Shape["2, 2"], Int]) -> None: ... pass
Installation
pip install nptyping
Instance checking
Example of instance checking:
>>> import numpy as np >>> isinstance(np.array([[1, 2], [3, 4]]), NDArray[Shape["2, 2"], Int]) True >>> isinstance(np.array([[1., 2.], [3., 4.]]), NDArray[Shape["2, 2"], Int]) False >>> isinstance(np.array([1, 2, 3, 4]), NDArray[Shape["2, 2"], Int]) False
nptyping
also provides assert_isinstance
. In contrast to assert isinstance(...)
, this won't cause IDEs or MyPy
complaints. Here is an example:
>>> from nptyping import assert_isinstance >>> assert_isinstance(np.array([1]), NDArray[Shape["1"], Int]) True
Structured arrays
You can also express structured arrays using nptyping.Structure
:
>>> from nptyping import Structure >>> Structure["name: Str, age: Int"] Structure['age: Int, name: Str']
Here is an example to see it in action:
>>> from typing import Any >>> import numpy as np >>> from nptyping import NDArray, Structure >>> arr = np.array([("Peter", 34)], dtype=[("name", "U10"), ("age", "i4")]) >>> isinstance(arr, NDArray[Any, Structure["name: Str, age: Int"]]) True
Record arrays
The recarray is a specialization of a structured array. You can use RecArray
to express them.
>>> from nptyping import RecArray >>> arr = np.array([("Peter", 34)], dtype=[("name", "U10"), ("age", "i4")]) >>> rec_arr = arr.view(np.recarray) >>> isinstance(rec_arr, RecArray[Any, Structure["name: Str, age: Int"]]) True
More examples
Here is an example of a rich expression that can be done with nptyping
:
def plan_route( locations: NDArray[Shape["[from, to], [x, y]"], Float] ) -> NDArray[Shape["* stops, [x, y]"], Float]: ...
More examples can be found in the documentation.
Documentation
-
User documentation
The place to go if you are using this library. -
Release notes
To see what's new, check out the release notes. -
Contributing
If you're interested in developing along, find the guidelines here. -
Licence
If you want to check out how open source this library is.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.