- Notifications
You must be signed in to change notification settings - Fork34
💡 Type hints for Numpy and Pandas
License
ramonhagenaars/nptyping
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
🧊Type hints forNumPy
🐼Type hints forpandas.DataFrame
💡Extensive dynamic type checks for dtypes shapes and structures
🚀Jump to the Quickstart
Example of a hintednumpy.ndarray
:
>>>fromnptypingimportNDArray,Int,Shape>>>arr:NDArray[Shape["2, 2"],Int]
Example of a hintedpandas.DataFrame
:
>>>fromnptypingimportDataFrame,StructureasS>>>df:DataFrame[S["name: Str, x: Float, y: Float"]]
Command | Description |
---|---|
pip install nptyping | Install the basics |
pip install nptyping[pandas] | Install with pandas extension |
pip install nptyping[complete] | Install with all extensions |
Example of instance checking:
>>>importnumpyasnp>>>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 providesassert_isinstance
. In contrast toassert isinstance(...)
, this won't cause IDEs or MyPycomplaints. Here is an example:
>>>fromnptypingimportassert_isinstance>>>assert_isinstance(np.array([1]),NDArray[Shape["1"],Int])True
You can also express structured arrays usingnptyping.Structure
:
>>>fromnptypingimportStructure>>>Structure["name: Str, age: Int"]Structure['age: Int, name: Str']
Here is an example to see it in action:
>>>fromtypingimportAny>>>importnumpyasnp>>>fromnptypingimportNDArray,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]']
The recarray is a specialization of a structured array. You can useRecArray
to express them.
>>>fromnptypingimportRecArray>>>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 can be expressed withStructure
also. To make it more concise, you may want to aliasStructure
.
>>>fromnptypingimportDataFrame,StructureasS>>>df:DataFrame[S["x: Float, y: Float"]]
Here is an example of a rich expression that can be done withnptyping
:
defplan_route(locations:NDArray[Shape["[from, to], [x, y]"],Float])->NDArray[Shape["* stops, [x, y]"],Float]: ...
More examples can be found in thedocumentation.
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.
About
💡 Type hints for Numpy and Pandas