nptyping2.5.0
Published
Type hints for NumPy.
pip install nptyping
Package Downloads
Authors
Project URLs
Requires Python
>=3.7
Dependencies
- typing-extensions
(<5.0.0,>=4.0.0) ; python_version < "3.10"
- numpy
(==1.21.5) ; python_version < "3.8"
- numpy
(<2.0.0,>=1.20.0) ; python_version >= "3.8"
- invoke
(>=1.6.0) ; extra == 'build'
- pip-tools
(>=6.5.0) ; extra == 'build'
- pandas
; extra == 'complete'
- pandas-stubs-fork
; (python_version >= "3.8") and extra == 'complete'
- invoke
(>=1.6.0) ; extra == 'dev'
- pip-tools
(>=6.5.0) ; extra == 'dev'
- autoflake
; extra == 'dev'
- black
; extra == 'dev'
- coverage
; extra == 'dev'
- codecov
(>=2.1.0) ; extra == 'dev'
- feedparser
; extra == 'dev'
- isort
; extra == 'dev'
- mypy
; extra == 'dev'
- pylint
; extra == 'dev'
- pyright
; extra == 'dev'
- setuptools
; extra == 'dev'
- typeguard
; extra == 'dev'
- wheel
; extra == 'dev'
- pandas
; extra == 'dev'
- beartype
(<0.10.0) ; (python_version < "3.10") and extra == 'dev'
- beartype
(>=0.10.0) ; (python_version >= "3.10") and extra == 'dev'
- pandas-stubs-fork
; (python_version >= "3.8") and extra == 'dev'
- pandas
; extra == 'pandas'
- pandas-stubs-fork
; (python_version >= "3.8") and extra == 'pandas'
- autoflake
; extra == 'qa'
- black
; extra == 'qa'
- coverage
; extra == 'qa'
- codecov
(>=2.1.0) ; extra == 'qa'
- feedparser
; extra == 'qa'
- isort
; extra == 'qa'
- mypy
; extra == 'qa'
- pylint
; extra == 'qa'
- pyright
; extra == 'qa'
- setuptools
; extra == 'qa'
- typeguard
; extra == 'qa'
- wheel
; extra == 'qa'
- beartype
(<0.10.0) ; (python_version < "3.10") and extra == 'qa'
- beartype
(>=0.10.0) ; (python_version >= "3.10") and extra == 'qa'
š§ Type hints for NumPy
š¼ Type hints for pandas.DataFrame
š” Extensive dynamic type checks for dtypes shapes and structures
š Jump to the Quickstart
Example of a hinted numpy.ndarray
:
>>> from nptyping import NDArray, Int, Shape
>>> arr: NDArray[Shape["2, 2"], Int]
Example of a hinted pandas.DataFrame
:
>>> from nptyping import DataFrame, Structure as S
>>> df: DataFrame[S["name: Str, x: Float, y: Float"]]
Installation
Command | Description |
---|---|
pip install nptyping | Install the basics |
pip install nptyping[pandas] | Install with pandas extension |
pip install nptyping[complete] | Install with all extensions |
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
NumPy 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
Subarrays can be expressed with a shape expression between square brackets:
>>> Structure["name: Int[3, 3]"]
Structure['name: Int[3, 3]']
NumPy 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
Pandas DataFrames
Pandas DataFrames can be expressed with Structure
also. To make it more concise, you may want to alias Structure
.
>>> from nptyping import DataFrame, Structure as S
>>> df: DataFrame[S["x: Float, y: Float"]]
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. -
License
If you want to check out how open source this library is.