# pydantic-numpy
Package that integrates NumPy Arrays into Pydantic!
- `NumpyModel` make it possible to dump and load `np.ndarray` within model fields alongside other fields that are not instances of `np.ndarray`!
- `pydantic_numpy.typing` provides many typings such as `NpNDArrayFp64`, `Np3DArrayFp64` (float64 that must be 3D)!
## Usage
For more examples see [test_ndarray.py](./tests/test_typing.py)
```python
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 model:
```python
MyNumpyModel.load(<path>)
```
Use `model_agnostic_load` when you have several models that may be the correct model:
```python
from pydantic_numpy.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])
```
### Install
```shell
pip install pydantic-numpy
```
## Considerations
You can install from [cheind's](https://github.com/cheind/pydantic-numpy) repository if you want Python `3.8` support, but this version only supports 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](https://gist.github.com/danielhfrank/00e6b8556eed73fb4053450e602d2434), and forked from [cheind's](https://github.com/cheind/pydantic-numpy) repository.
Raw data
{
"_id": null,
"home_page": "https://github.com/caniko/pydantic-numpy",
"name": "pydantic-numpy",
"maintainer": "Can H. Tartanoglu",
"docs_url": null,
"requires_python": ">=3.9,<3.12",
"maintainer_email": "python@rotas.mozmail.com",
"keywords": "pydantic,numpy,typing,validation",
"author": "Can H. Tartanoglu",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/98/db/db22cad9f88ebb90bb3fde87caa1dd28f0f267a10b7ebeba62b4c7c71ec9/pydantic_numpy-4.0.0.tar.gz",
"platform": null,
"description": "# pydantic-numpy\n\nPackage that integrates NumPy Arrays into Pydantic!\n\n- `NumpyModel` make it possible to dump and load `np.ndarray` within model fields alongside other fields that are not instances of `np.ndarray`!\n- `pydantic_numpy.typing` provides many typings such as `NpNDArrayFp64`, `Np3DArrayFp64` (float64 that must be 3D)!\n\n## Usage\n\nFor more examples see [test_ndarray.py](./tests/test_typing.py)\n\n```python\nimport numpy as np\n\nimport pydantic_numpy.typing as pnd\nfrom pydantic_numpy import np_array_pydantic_annotated_typing\nfrom pydantic_numpy.model import NumpyModel, MultiArrayNumpyFile\n\n\nclass MyNumpyModel(NumpyModel):\n any_array_dtype_and_dimension: pnd.NpNDArray\n\n # Must be numpy float32 as dtype\n k: np_array_pydantic_annotated_typing(data_type=np.float32)\n shorthand_for_k: pnd.NpNDArrayFp32\n\n must_be_1d_np_array: np_array_pydantic_annotated_typing(dimensions=1)\n\n\nclass MyDemoModel(NumpyModel):\n k: np_array_pydantic_annotated_typing(data_type=np.float32)\n\n\n# Instantiate from array\ncfg = MyDemoModel(k=[1, 2])\n# Instantiate from numpy file\ncfg = MyDemoModel(k=\"path_to/array.npy\")\n# Instantiate from npz file with key\ncfg = MyDemoModel(k=MultiArrayNumpyFile(path=\"path_to/array.npz\", key=\"k\"))\n\ncfg.k # np.ndarray[np.float32]\n\ncfg.dump(\"path_to_dump_dir\", \"object_id\")\ncfg.load(\"path_to_dump_dir\", \"object_id\")\n```\n\n`NumpyModel.load` requires the original model:\n```python\nMyNumpyModel.load(<path>)\n```\nUse `model_agnostic_load` when you have several models that may be the correct model:\n\n```python\nfrom pydantic_numpy.model import model_agnostic_load\n\ncfg.dump(\"path_to_dump_dir\", \"object_id\")\nequals_cfg = model_agnostic_load(\"path_to_dump_dir\", \"object_id\", models=[MyNumpyModel, MyDemoModel])\n```\n\n### Install\n```shell\npip install pydantic-numpy\n```\n\n## Considerations\nYou can install from [cheind's](https://github.com/cheind/pydantic-numpy) repository if you want Python `3.8` support, but this version only supports Pydantic V1 and will not work with V2.\n\n### Licensing notice\nAs of version `3.0.0` the license has moved over to BSD-4. The versions prior are under the MIT license.\n\n### History\nThe original idea originates from [this discussion](https://gist.github.com/danielhfrank/00e6b8556eed73fb4053450e602d2434), and forked from [cheind's](https://github.com/cheind/pydantic-numpy) repository.\n",
"bugtrack_url": null,
"license": "BSD-4",
"summary": "Pydantic Model integration of the NumPy array",
"version": "4.0.0",
"project_urls": {
"Homepage": "https://github.com/caniko/pydantic-numpy"
},
"split_keywords": [
"pydantic",
"numpy",
"typing",
"validation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "37ff38ea6e64a2a566f80db4795b8208a24347a6eda48168becb63fa8e7f67ab",
"md5": "9a8d7aabf94bde1efb4d008f2ab8d664",
"sha256": "9f126346c7c4fe50d7e798e22f65febf452797b45a872fad119ec5fd70e87ddc"
},
"downloads": -1,
"filename": "pydantic_numpy-4.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9a8d7aabf94bde1efb4d008f2ab8d664",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<3.12",
"size": 15833,
"upload_time": "2023-09-14T07:35:34",
"upload_time_iso_8601": "2023-09-14T07:35:34.632773Z",
"url": "https://files.pythonhosted.org/packages/37/ff/38ea6e64a2a566f80db4795b8208a24347a6eda48168becb63fa8e7f67ab/pydantic_numpy-4.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "98dbdb22cad9f88ebb90bb3fde87caa1dd28f0f267a10b7ebeba62b4c7c71ec9",
"md5": "3bc174a0de2b865f9e54c012e3c1ba46",
"sha256": "bafb3eb00392aba2eed4abce5f6167c86cc834a9ae9d47cd79ba52c455f75f3b"
},
"downloads": -1,
"filename": "pydantic_numpy-4.0.0.tar.gz",
"has_sig": false,
"md5_digest": "3bc174a0de2b865f9e54c012e3c1ba46",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<3.12",
"size": 11638,
"upload_time": "2023-09-14T07:35:36",
"upload_time_iso_8601": "2023-09-14T07:35:36.316866Z",
"url": "https://files.pythonhosted.org/packages/98/db/db22cad9f88ebb90bb3fde87caa1dd28f0f267a10b7ebeba62b4c7c71ec9/pydantic_numpy-4.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-14 07:35:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "caniko",
"github_project": "pydantic-numpy",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pydantic-numpy"
}