python 39 compat

This commit is contained in:
sneakers-the-rat 2024-09-23 23:42:00 -07:00
parent e334232ac4
commit 402bf09cf1
Signed by untrusted user who does not match committer: jonny
GPG key ID: 6DCB96EF1E4D232D

View file

@ -3,10 +3,6 @@ import sys
import pytest import pytest
from typing import Any, Tuple, Union, Type from typing import Any, Tuple, Union, Type
if sys.version_info.minor >= 10:
from typing import TypeAlias
else:
from typing_extensions import TypeAlias
from pydantic import BaseModel, computed_field, ConfigDict from pydantic import BaseModel, computed_field, ConfigDict
from numpydantic import NDArray, Shape from numpydantic import NDArray, Shape
from numpydantic.ndarray import NDArrayMeta from numpydantic.ndarray import NDArrayMeta
@ -15,6 +11,15 @@ import numpy as np
from tests.fixtures import * from tests.fixtures import *
if sys.version_info.minor >= 10:
from typing import TypeAlias
YES_PIPE = True
else:
from typing_extensions import TypeAlias
YES_PIPE = False
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption( parser.addoption(
@ -80,8 +85,9 @@ INTEGER: TypeAlias = NDArray[Shape["*, *, *"], Integer]
FLOAT: TypeAlias = NDArray[Shape["*, *, *"], Float] FLOAT: TypeAlias = NDArray[Shape["*, *, *"], Float]
STRING: TypeAlias = NDArray[Shape["*, *, *"], str] STRING: TypeAlias = NDArray[Shape["*, *, *"], str]
MODEL: TypeAlias = NDArray[Shape["*, *, *"], BasicModel] MODEL: TypeAlias = NDArray[Shape["*, *, *"], BasicModel]
UNION_PIPE: TypeAlias = NDArray[Shape["*, *, *"], np.uint32 | np.float32]
UNION_TYPE: TypeAlias = NDArray[Shape["*, *, *"], Union[np.uint32, np.float32]] UNION_TYPE: TypeAlias = NDArray[Shape["*, *, *"], Union[np.uint32, np.float32]]
if YES_PIPE:
UNION_PIPE: TypeAlias = NDArray[Shape["*, *, *"], np.uint32 | np.float32]
@pytest.fixture( @pytest.fixture(
@ -121,9 +127,7 @@ def shape_cases(request) -> ValidationCase:
return request.param return request.param
@pytest.fixture( DTYPE_CASES = [
scope="module",
params=[
ValidationCase(dtype=float, passes=True), ValidationCase(dtype=float, passes=True),
ValidationCase(dtype=int, passes=False), ValidationCase(dtype=int, passes=False),
ValidationCase(dtype=np.uint8, passes=False), ValidationCase(dtype=np.uint8, passes=False),
@ -149,18 +153,14 @@ def shape_cases(request) -> ValidationCase:
ValidationCase(annotation=MODEL, dtype=BadModel, passes=False), ValidationCase(annotation=MODEL, dtype=BadModel, passes=False),
ValidationCase(annotation=MODEL, dtype=int, passes=False), ValidationCase(annotation=MODEL, dtype=int, passes=False),
ValidationCase(annotation=MODEL, dtype=SubClass, passes=True), ValidationCase(annotation=MODEL, dtype=SubClass, passes=True),
ValidationCase(annotation=UNION_PIPE, dtype=np.uint32, passes=True),
ValidationCase(annotation=UNION_PIPE, dtype=np.float32, passes=True),
ValidationCase(annotation=UNION_PIPE, dtype=np.uint64, passes=False),
ValidationCase(annotation=UNION_PIPE, dtype=np.float64, passes=False),
ValidationCase(annotation=UNION_PIPE, dtype=str, passes=False),
ValidationCase(annotation=UNION_TYPE, dtype=np.uint32, passes=True), ValidationCase(annotation=UNION_TYPE, dtype=np.uint32, passes=True),
ValidationCase(annotation=UNION_TYPE, dtype=np.float32, passes=True), ValidationCase(annotation=UNION_TYPE, dtype=np.float32, passes=True),
ValidationCase(annotation=UNION_TYPE, dtype=np.uint64, passes=False), ValidationCase(annotation=UNION_TYPE, dtype=np.uint64, passes=False),
ValidationCase(annotation=UNION_TYPE, dtype=np.float64, passes=False), ValidationCase(annotation=UNION_TYPE, dtype=np.float64, passes=False),
ValidationCase(annotation=UNION_TYPE, dtype=str, passes=False), ValidationCase(annotation=UNION_TYPE, dtype=str, passes=False),
], ]
ids=[
DTYPE_IDS = [
"float", "float",
"int", "int",
"uint8", "uint8",
@ -186,17 +186,34 @@ def shape_cases(request) -> ValidationCase:
"model-badmodel", "model-badmodel",
"model-int", "model-int",
"model-subclass", "model-subclass",
"union-pipe-uint32",
"union-pipe-float32",
"union-pipe-uint64",
"union-pipe-float64",
"union-pipe-str",
"union-type-uint32", "union-type-uint32",
"union-type-float32", "union-type-float32",
"union-type-uint64", "union-type-uint64",
"union-type-float64", "union-type-float64",
"union-type-str", "union-type-str",
], ]
if YES_PIPE:
DTYPE_CASES.extend(
[
ValidationCase(annotation=UNION_PIPE, dtype=np.uint32, passes=True),
ValidationCase(annotation=UNION_PIPE, dtype=np.float32, passes=True),
ValidationCase(annotation=UNION_PIPE, dtype=np.uint64, passes=False),
ValidationCase(annotation=UNION_PIPE, dtype=np.float64, passes=False),
ValidationCase(annotation=UNION_PIPE, dtype=str, passes=False),
]
) )
DTYPE_IDS.extend(
[
"union-pipe-uint32",
"union-pipe-float32",
"union-pipe-uint64",
"union-pipe-float64",
"union-pipe-str",
]
)
@pytest.fixture(scope="module", params=DTYPE_CASES, ids=DTYPE_IDS)
def dtype_cases(request) -> ValidationCase: def dtype_cases(request) -> ValidationCase:
return request.param return request.param