Pydantic Model integration of the NumPy array
Project description
pydantic-numpy
Package that integrates NumPy Arrays into Pydantic!
NumpyModel
make it possible to dump and loadnp.ndarray
within model fields alongside other fields that are not instances ofnp.ndarray
!pydantic_numpy.typing
provides many typings such asNpNDArrayFp64
,Np3DArrayFp64
(float64 that must be 3D)!
Usage
For more examples see test_ndarray.py
import numpy as np
import pydantic_numpy.typing as pnd
from pydantic_numpy import np_array_pydantic_annotated_typing
from pydantic_numpy.model import NumpyModel, MultiArrayNumpyFile
class MyNumpyModel(NumpyModel):
any_array_dtype_and_dimension: pnd.NpNDArray
# Must be numpy float32 as dtype
k: np_array_pydantic_annotated_typing(data_type=np.float32)
shorthand_for_k: pnd.NpNDArrayFp32
must_be_1d_np_array: np_array_pydantic_annotated_typing(dimensions=1)
class MyDemoModel(NumpyModel):
k: np_array_pydantic_annotated_typing(data_type=np.float32)
# Instantiate from array
cfg = MyDemoModel(k=[1, 2])
# Instantiate from numpy file
cfg = MyDemoModel(k="path_to/array.npy")
# Instantiate from npz file with key
cfg = MyDemoModel(k=MultiArrayNumpyFile(path="path_to/array.npz", key="k"))
cfg.k # np.ndarray[np.float32]
cfg.dump("path_to_dump_dir", "object_id")
cfg.load("path_to_dump_dir", "object_id")
NumpyModel.load
requires the original mode, use model_agnostic_load
when you have several models that may be the right model:
from pydantic_numpy.model.np_model import model_agnostic_load
cfg.dump("path_to_dump_dir", "object_id")
equals_cfg = model_agnostic_load("path_to_dump_dir", "object_id", models=[MyNumpyModel, MyDemoModel])
Data type (dtype) support!
This package also comes with pydantic_numpy.dtype
, which adds subtyping support such as NpNDArray[float, pnd.float32]
. All subfields must be from this package as numpy dtypes have no Pydantic support, which is implemented in this package through the generic class workflow.
Install
pip install pydantic-numpy
Considerations
You can install from cheind's repository if you want Python 3.8
support, but this version only support Pydantic V1 and will not work with V2.
Licensing notice
As of version 3.0.0
the license has moved over to BSD-4. The versions prior are under the MIT license.
History
The original idea originates from this discussion, and forked from cheind's repository.
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.
Source Distribution
Built Distribution
Hashes for pydantic_numpy-3.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 595403dcf85ed994d2778749ae5d1fe758fd1e74164e233d1aac1721e8aa15f5 |
|
MD5 | 35bbee74238af7868c0d6bdd2984f3d6 |
|
BLAKE2b-256 | 636e0ed3c69fefba0de5315ab2b23873725e23425e8ea67c836e67d9970971db |