mirror of
https://github.com/p2p-ld/numpydantic.git
synced 2024-09-19 15:34:28 +00:00
remove nptyping dependency, update CI, remove old numpy types
This commit is contained in:
parent
3306703741
commit
40c8e9d95d
10 changed files with 90 additions and 144 deletions
28
.github/workflows/lint.yml
vendored
Normal file
28
.github/workflows/lint.yml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
name: Lint
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ruff:
|
||||||
|
name: Ruff Linting
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: chartboost/ruff-action@v1
|
||||||
|
|
||||||
|
black:
|
||||||
|
name: Black Formatting
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: psf/black@stable
|
49
.github/workflows/tests.yml
vendored
49
.github/workflows/tests.yml
vendored
|
@ -2,14 +2,34 @@ name: Tests
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.9", "3.11", "3.12"]
|
platform: ["ubuntu-latest", "macos-latest", "windows-latest"]
|
||||||
|
numpy-version: ["<2.0.0", ">=2.0.0"]
|
||||||
|
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
||||||
|
exclude:
|
||||||
|
- numpy-version: "<2.0.0"
|
||||||
|
python-version: "3.10"
|
||||||
|
- numpy-version: "<2.0.0"
|
||||||
|
python-version: "3.11"
|
||||||
|
- platform: "macos-latest"
|
||||||
|
python-version: "3.10"
|
||||||
|
- platform: "macos-latest"
|
||||||
|
python-version: "3.11"
|
||||||
|
- platform: "windows-latest"
|
||||||
|
python-version: "3.10"
|
||||||
|
- platform: "windows-latest"
|
||||||
|
python-version: "3.11"
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -23,19 +43,24 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pip install -e ".[tests,linkml]"
|
run: pip install -e ".[tests,linkml]"
|
||||||
|
|
||||||
|
- name: Install numpy version
|
||||||
|
run: pip install "numpy${{ matrix.numpy-version }}"
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: pytest
|
run: pytest
|
||||||
|
|
||||||
- name: Report coverage
|
- name: Coveralls Parallel
|
||||||
if: ${{ matrix.python-version }} == "3.11"
|
uses: coverallsapp/github-action@v2
|
||||||
run: "coveralls --service=github"
|
with:
|
||||||
env:
|
flag-name: run-${{ join(matrix.*, '-') }}
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
parallel: true
|
||||||
|
|
||||||
lint:
|
finish-coverage:
|
||||||
|
needs: test
|
||||||
|
if: ${{ always() }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
continue-on-error: true
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Coveralls Finished
|
||||||
- uses: chartboost/ruff-action@v1
|
uses: coverallsapp/github-action@v2
|
||||||
- uses: psf/black@stable
|
with:
|
||||||
|
parallel-finished: true
|
|
@ -7,8 +7,8 @@ authors = [
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pydantic>=2.3.0",
|
"pydantic>=2.3.0",
|
||||||
"nptyping>=2.5.0",
|
|
||||||
"numpy>=1.24.0",
|
"numpy>=1.24.0",
|
||||||
|
"typing-extensions>=4.11.0;python_version<'3.11'"
|
||||||
]
|
]
|
||||||
homepage = "https://numpydantic.readthedocs.io"
|
homepage = "https://numpydantic.readthedocs.io"
|
||||||
requires-python = "<4.0,>=3.9"
|
requires-python = "<4.0,>=3.9"
|
||||||
|
@ -40,7 +40,6 @@ tests = [
|
||||||
"coverage>=6.1.1",
|
"coverage>=6.1.1",
|
||||||
"pytest-cov<5.0.0,>=4.1.0",
|
"pytest-cov<5.0.0,>=4.1.0",
|
||||||
"coveralls<4.0.0,>=3.3.1",
|
"coveralls<4.0.0,>=3.3.1",
|
||||||
"typing-extensions>=4.11.0;python_version<'3.11'",
|
|
||||||
]
|
]
|
||||||
docs = [
|
docs = [
|
||||||
"sphinx<8.0.0,>=7.2.6",
|
"sphinx<8.0.0,>=7.2.6",
|
||||||
|
|
|
@ -78,14 +78,12 @@ Float = (
|
||||||
)
|
)
|
||||||
Floating = Float
|
Floating = Float
|
||||||
|
|
||||||
ComplexFloating = np.complexfloating
|
|
||||||
Complex64 = np.complex64
|
Complex64 = np.complex64
|
||||||
Complex128 = np.complex128
|
Complex128 = np.complex128
|
||||||
CSingle = np.csingle
|
CSingle = np.csingle
|
||||||
CDouble = np.cdouble
|
CDouble = np.cdouble
|
||||||
CLongDouble = np.clongdouble
|
CLongDouble = np.clongdouble
|
||||||
Complex = (
|
Complex = (
|
||||||
np.complexfloating,
|
|
||||||
np.complex64,
|
np.complex64,
|
||||||
np.complex128,
|
np.complex128,
|
||||||
np.csingle,
|
np.csingle,
|
||||||
|
|
|
@ -50,7 +50,7 @@ def _lol_dtype(dtype: DtypeType, _handler: _handler_type) -> CoreSchema:
|
||||||
|
|
||||||
if isinstance(dtype, tuple):
|
if isinstance(dtype, tuple):
|
||||||
# if it's a meta-type that refers to a generic float/int, just make that
|
# if it's a meta-type that refers to a generic float/int, just make that
|
||||||
if dtype == dt.Float:
|
if dtype in (dt.Float, dt.Number):
|
||||||
array_type = core_schema.float_schema()
|
array_type = core_schema.float_schema()
|
||||||
elif dtype == dt.Integer:
|
elif dtype == dt.Integer:
|
||||||
array_type = core_schema.int_schema()
|
array_type = core_schema.int_schema()
|
||||||
|
|
7
src/numpydantic/vendor/nptyping/__init__.py
vendored
7
src/numpydantic/vendor/nptyping/__init__.py
vendored
|
@ -42,10 +42,8 @@ from numpydantic.vendor.nptyping.shape_expression import (
|
||||||
from numpydantic.vendor.nptyping.structure import Structure
|
from numpydantic.vendor.nptyping.structure import Structure
|
||||||
from numpydantic.vendor.nptyping.typing_ import (
|
from numpydantic.vendor.nptyping.typing_ import (
|
||||||
Bool,
|
Bool,
|
||||||
Bool8,
|
|
||||||
Byte,
|
Byte,
|
||||||
Bytes,
|
Bytes,
|
||||||
Bytes0,
|
|
||||||
CDouble,
|
CDouble,
|
||||||
CFloat,
|
CFloat,
|
||||||
Character,
|
Character,
|
||||||
|
@ -68,7 +66,6 @@ from numpydantic.vendor.nptyping.typing_ import (
|
||||||
Half,
|
Half,
|
||||||
Inexact,
|
Inexact,
|
||||||
Int,
|
Int,
|
||||||
Int0,
|
|
||||||
Int8,
|
Int8,
|
||||||
Int16,
|
Int16,
|
||||||
Int32,
|
Int32,
|
||||||
|
@ -82,17 +79,14 @@ from numpydantic.vendor.nptyping.typing_ import (
|
||||||
LongLong,
|
LongLong,
|
||||||
Number,
|
Number,
|
||||||
Object,
|
Object,
|
||||||
Object0,
|
|
||||||
Short,
|
Short,
|
||||||
SignedInteger,
|
SignedInteger,
|
||||||
Single,
|
Single,
|
||||||
SingleComplex,
|
SingleComplex,
|
||||||
Str0,
|
|
||||||
String,
|
String,
|
||||||
Timedelta64,
|
Timedelta64,
|
||||||
UByte,
|
UByte,
|
||||||
UInt,
|
UInt,
|
||||||
UInt0,
|
|
||||||
UInt8,
|
UInt8,
|
||||||
UInt16,
|
UInt16,
|
||||||
UInt32,
|
UInt32,
|
||||||
|
@ -104,7 +98,6 @@ from numpydantic.vendor.nptyping.typing_ import (
|
||||||
UnsignedInteger,
|
UnsignedInteger,
|
||||||
UShort,
|
UShort,
|
||||||
Void,
|
Void,
|
||||||
Void0,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
12
src/numpydantic/vendor/nptyping/typing_.py
vendored
12
src/numpydantic/vendor/nptyping/typing_.py
vendored
|
@ -22,11 +22,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import ( # type: ignore[attr-defined,misc] # pylint: disable=unused-import
|
import sys
|
||||||
Tuple,
|
from typing import Tuple, Union
|
||||||
TypeAlias,
|
|
||||||
Union,
|
if sys.version_info.minor >= 10:
|
||||||
)
|
from typing import TypeAlias
|
||||||
|
else:
|
||||||
|
from typing_extensions import TypeAlias
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
114
src/numpydantic/vendor/nptyping/typing_.pyi
vendored
114
src/numpydantic/vendor/nptyping/typing_.pyi
vendored
|
@ -1,114 +0,0 @@
|
||||||
"""
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2023 Ramon Hagenaars
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
from typing import ( # type: ignore[attr-defined] # pylint: disable=unused-import
|
|
||||||
Dict,
|
|
||||||
TypeAlias,
|
|
||||||
)
|
|
||||||
except ImportError: # pragma: no cover
|
|
||||||
from typing_extensions import (
|
|
||||||
TypeAlias,
|
|
||||||
)
|
|
||||||
|
|
||||||
from typing import (
|
|
||||||
Any,
|
|
||||||
Tuple,
|
|
||||||
Union,
|
|
||||||
)
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
ShapeExpression: TypeAlias = str
|
|
||||||
StructureExpression: TypeAlias = str
|
|
||||||
DType: TypeAlias = Union[np.generic, StructureExpression]
|
|
||||||
ShapeTuple: TypeAlias = Tuple[int, ...]
|
|
||||||
|
|
||||||
Number: TypeAlias = np.dtype[np.number[Any]]
|
|
||||||
Bool: TypeAlias = np.dtype[np.bool_]
|
|
||||||
Bool8: TypeAlias = np.dtype[np.bool8]
|
|
||||||
Object: TypeAlias = np.dtype[np.object_]
|
|
||||||
Object0: TypeAlias = np.dtype[np.object0]
|
|
||||||
Datetime64: TypeAlias = np.dtype[np.datetime64]
|
|
||||||
Integer: TypeAlias = np.dtype[np.integer[Any]]
|
|
||||||
SignedInteger: TypeAlias = np.dtype[np.signedinteger[Any]]
|
|
||||||
Int8: TypeAlias = np.dtype[np.int8]
|
|
||||||
Int16: TypeAlias = np.dtype[np.int16]
|
|
||||||
Int32: TypeAlias = np.dtype[np.int32]
|
|
||||||
Int64: TypeAlias = np.dtype[np.int64]
|
|
||||||
Byte: TypeAlias = np.dtype[np.byte]
|
|
||||||
Short: TypeAlias = np.dtype[np.short]
|
|
||||||
IntC: TypeAlias = np.dtype[np.intc]
|
|
||||||
IntP: TypeAlias = np.dtype[np.intp]
|
|
||||||
Int0: TypeAlias = np.dtype[np.int0]
|
|
||||||
Int: TypeAlias = np.dtype[np.int_]
|
|
||||||
LongLong: TypeAlias = np.dtype[np.longlong]
|
|
||||||
Timedelta64: TypeAlias = np.dtype[np.timedelta64]
|
|
||||||
UnsignedInteger: TypeAlias = np.dtype[np.unsignedinteger[Any]]
|
|
||||||
UInt8: TypeAlias = np.dtype[np.uint8]
|
|
||||||
UInt16: TypeAlias = np.dtype[np.uint16]
|
|
||||||
UInt32: TypeAlias = np.dtype[np.uint32]
|
|
||||||
UInt64: TypeAlias = np.dtype[np.uint64]
|
|
||||||
UByte: TypeAlias = np.dtype[np.ubyte]
|
|
||||||
UShort: TypeAlias = np.dtype[np.ushort]
|
|
||||||
UIntC: TypeAlias = np.dtype[np.uintc]
|
|
||||||
UIntP: TypeAlias = np.dtype[np.uintp]
|
|
||||||
UInt0: TypeAlias = np.dtype[np.uint0]
|
|
||||||
UInt: TypeAlias = np.dtype[np.uint]
|
|
||||||
ULongLong: TypeAlias = np.dtype[np.ulonglong]
|
|
||||||
Inexact: TypeAlias = np.dtype[np.inexact[Any]]
|
|
||||||
Floating: TypeAlias = np.dtype[np.floating[Any]]
|
|
||||||
Float16: TypeAlias = np.dtype[np.float16]
|
|
||||||
Float32: TypeAlias = np.dtype[np.float32]
|
|
||||||
Float64: TypeAlias = np.dtype[np.float64]
|
|
||||||
Half: TypeAlias = np.dtype[np.half]
|
|
||||||
Single: TypeAlias = np.dtype[np.single]
|
|
||||||
Double: TypeAlias = np.dtype[np.double]
|
|
||||||
Float: TypeAlias = np.dtype[np.float_]
|
|
||||||
LongDouble: TypeAlias = np.dtype[np.longdouble]
|
|
||||||
LongFloat: TypeAlias = np.dtype[np.longfloat]
|
|
||||||
ComplexFloating: TypeAlias = np.dtype[np.complexfloating[Any, Any]]
|
|
||||||
Complex64: TypeAlias = np.dtype[np.complex64]
|
|
||||||
Complex128: TypeAlias = np.dtype[np.complex128]
|
|
||||||
CSingle: TypeAlias = np.dtype[np.csingle]
|
|
||||||
SingleComplex: TypeAlias = np.dtype[np.singlecomplex]
|
|
||||||
CDouble: TypeAlias = np.dtype[np.cdouble]
|
|
||||||
Complex: TypeAlias = np.dtype[np.complex_]
|
|
||||||
CFloat: TypeAlias = np.dtype[np.cfloat]
|
|
||||||
CLongDouble: TypeAlias = np.dtype[np.clongdouble]
|
|
||||||
CLongFloat: TypeAlias = np.dtype[np.clongfloat]
|
|
||||||
LongComplex: TypeAlias = np.dtype[np.longcomplex]
|
|
||||||
Flexible: TypeAlias = np.dtype[np.flexible]
|
|
||||||
Void: TypeAlias = np.dtype[np.void]
|
|
||||||
Void0: TypeAlias = np.dtype[np.void0]
|
|
||||||
Character: TypeAlias = np.dtype[np.character]
|
|
||||||
Bytes: TypeAlias = np.dtype[np.bytes_]
|
|
||||||
Str: TypeAlias = np.dtype[np.str_]
|
|
||||||
String: TypeAlias = np.dtype[np.string_]
|
|
||||||
Bytes0: TypeAlias = np.dtype[np.bytes0]
|
|
||||||
Unicode: TypeAlias = np.dtype[np.unicode_]
|
|
||||||
Str0: TypeAlias = np.dtype[np.str0]
|
|
||||||
|
|
||||||
dtype_per_name: Dict[str, np.dtype[Any]]
|
|
||||||
name_per_dtype: Dict[np.dtype[Any], str]
|
|
|
@ -7,11 +7,12 @@ import json
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pydantic import BaseModel, ValidationError, Field
|
from pydantic import BaseModel, ValidationError, Field
|
||||||
from nptyping import Number
|
|
||||||
|
|
||||||
from numpydantic import NDArray, Shape
|
from numpydantic import NDArray, Shape
|
||||||
from numpydantic.exceptions import ShapeError, DtypeError
|
from numpydantic.exceptions import ShapeError, DtypeError
|
||||||
from numpydantic import dtype
|
from numpydantic import dtype
|
||||||
|
from numpydantic.dtype import Number
|
||||||
|
|
||||||
|
|
||||||
def test_ndarray_type():
|
def test_ndarray_type():
|
||||||
|
|
14
tox.ini
Normal file
14
tox.ini
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[tox]
|
||||||
|
requires =
|
||||||
|
tox>=4
|
||||||
|
env_list = py{39,310,311,312}-numpy{1,2}
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
package = editable
|
||||||
|
extras =
|
||||||
|
tests
|
||||||
|
deps =
|
||||||
|
py{39,310,311,312}-numpy1: numpy<2.0.0
|
||||||
|
py{39,310,311,312}-numpy2: numpy>=2.0.0
|
||||||
|
commands =
|
||||||
|
python -m pytest
|
Loading…
Reference in a new issue