mirror of
https://github.com/p2p-ld/numpydantic.git
synced 2025-01-09 21:44:27 +00:00
changelog, bump version, fill in coverage
This commit is contained in:
parent
0a930eed35
commit
a64bb2186f
4 changed files with 80 additions and 3 deletions
|
@ -2,6 +2,33 @@
|
||||||
|
|
||||||
## 1.*
|
## 1.*
|
||||||
|
|
||||||
|
### 1.2.3 - 24-07-31 - Vendor `nptyping`
|
||||||
|
|
||||||
|
`nptyping` vendored into `numpydantic.vendor.nptyping` -
|
||||||
|
`nptyping` is no longer maintained, and pins `numpy<2`.
|
||||||
|
It also has many obnoxious warnings and we have to monkeypatch it
|
||||||
|
so it performs halfway decently. Since we are en-route to deprecating
|
||||||
|
usage of `nptyping` anyway, in the meantime we have just vendored it in
|
||||||
|
(it is MIT licensed, included) so that we can make those changes ourselves
|
||||||
|
and have to patch less of it. Currently the whole package is vendored with
|
||||||
|
modifications, but will be whittled away until we have replaced it with
|
||||||
|
updated type specification system :)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- [#2](https://github.com/p2p-ld/numpydantic/issues/2) - Support `numpy>=2`
|
||||||
|
- Remove deprecated numpy dtypes
|
||||||
|
|
||||||
|
CI:
|
||||||
|
- Add windows and mac tests
|
||||||
|
- Add testing with numpy>=2 and <2
|
||||||
|
|
||||||
|
DevOps:
|
||||||
|
- Make a tox file for local testing, not used in CI.
|
||||||
|
|
||||||
|
Tidying:
|
||||||
|
- Remove `monkeypatch` module! we don't need it anymore!
|
||||||
|
everything has either been upstreamed or vendored.
|
||||||
|
|
||||||
### 1.2.2 - 24-07-31
|
### 1.2.2 - 24-07-31
|
||||||
|
|
||||||
Add `datetime` map to numpy's :class:`numpy.datetime64` type
|
Add `datetime` map to numpy's :class:`numpy.datetime64` type
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "numpydantic"
|
name = "numpydantic"
|
||||||
version = "1.2.2"
|
version = "1.2.3"
|
||||||
description = "Type and shape validation and serialization for numpy arrays in pydantic models"
|
description = "Type and shape validation and serialization for numpy arrays in pydantic models"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "sneakers-the-rat", email = "sneakers-the-rat@protonmail.com"},
|
{name = "sneakers-the-rat", email = "sneakers-the-rat@protonmail.com"},
|
||||||
|
|
|
@ -18,7 +18,7 @@ from numpydantic.maps import np_to_python
|
||||||
from numpydantic.types import DtypeType, NDArrayType, ShapeType
|
from numpydantic.types import DtypeType, NDArrayType, ShapeType
|
||||||
from numpydantic.vendor.nptyping.structure import StructureMeta
|
from numpydantic.vendor.nptyping.structure import StructureMeta
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING: # pragma: no cover
|
||||||
from numpydantic import Shape
|
from numpydantic import Shape
|
||||||
|
|
||||||
_handler_type = Callable[[Any], core_schema.CoreSchema]
|
_handler_type = Callable[[Any], core_schema.CoreSchema]
|
||||||
|
@ -143,7 +143,7 @@ def list_of_lists_schema(shape: "Shape", array_type: CoreSchema) -> ListSchema:
|
||||||
arg = int(arg)
|
arg = int(arg)
|
||||||
arg_min = arg
|
arg_min = arg
|
||||||
arg_max = arg
|
arg_max = arg
|
||||||
except ValueError as e:
|
except ValueError as e: # pragma: no cover
|
||||||
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Array shapes must be integers, wildcards, ellipses, or "
|
"Array shapes must be integers, wildcards, ellipses, or "
|
||||||
|
|
|
@ -40,6 +40,56 @@ def test_ndarray_type():
|
||||||
instance = Model(array=np.zeros((2, 3)), array_any=np.ones((3, 4, 5)))
|
instance = Model(array=np.zeros((2, 3)), array_any=np.ones((3, 4, 5)))
|
||||||
|
|
||||||
|
|
||||||
|
def test_schema_unsupported_type():
|
||||||
|
"""
|
||||||
|
Complex numbers should just be made with an `any` schema
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Model(BaseModel):
|
||||||
|
array: NDArray[Shape["2 x, * y"], complex]
|
||||||
|
|
||||||
|
schema = Model.model_json_schema()
|
||||||
|
assert schema["properties"]["array"]["items"] == {
|
||||||
|
"items": {},
|
||||||
|
"type": "array",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_schema_tuple():
|
||||||
|
"""
|
||||||
|
Types specified as tupled should have their schemas as a union
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Model(BaseModel):
|
||||||
|
array: NDArray[Shape["2 x, * y"], (np.uint8, np.uint16)]
|
||||||
|
|
||||||
|
schema = Model.model_json_schema()
|
||||||
|
assert schema["properties"]["array"]["items"] == {
|
||||||
|
"items": {
|
||||||
|
"anyOf": [
|
||||||
|
{"maximum": 255, "minimum": 0, "type": "integer"},
|
||||||
|
{"maximum": 65535, "minimum": 0, "type": "integer"},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_schema_number():
|
||||||
|
"""
|
||||||
|
np.numeric should just be the float schema
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Model(BaseModel):
|
||||||
|
array: NDArray[Shape["2 x, * y"], np.number]
|
||||||
|
|
||||||
|
schema = Model.model_json_schema()
|
||||||
|
assert schema["properties"]["array"]["items"] == {
|
||||||
|
"items": {"type": "number"},
|
||||||
|
"type": "array",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_ndarray_union():
|
def test_ndarray_union():
|
||||||
class Model(BaseModel):
|
class Model(BaseModel):
|
||||||
array: Optional[
|
array: Optional[
|
||||||
|
|
Loading…
Reference in a new issue