numpydantic/tests/test_interface/conftest.py

81 lines
2.2 KiB
Python
Raw Normal View History

2024-04-09 01:36:47 +00:00
import pytest
from typing import Callable, Tuple, Type
2024-04-09 01:36:47 +00:00
import numpy as np
import dask.array as da
2024-04-30 02:49:38 +00:00
import zarr
from pydantic import BaseModel
2024-04-09 01:36:47 +00:00
from numpydantic import interface, NDArray
2024-04-09 01:36:47 +00:00
@pytest.fixture(
scope="function",
params=[
2024-09-23 20:28:38 +00:00
pytest.param(
([[1, 2], [3, 4]], interface.NumpyInterface),
marks=pytest.mark.numpy,
id="numpy-list",
),
pytest.param(
(np.zeros((3, 4)), interface.NumpyInterface),
marks=pytest.mark.numpy,
id="numpy",
),
pytest.param(
("hdf5_array", interface.H5Interface),
marks=pytest.mark.hdf5,
id="h5-array-path",
),
pytest.param(
(da.random.random((10, 10)), interface.DaskInterface),
marks=pytest.mark.dask,
id="dask",
),
pytest.param(
(zarr.ones((10, 10)), interface.ZarrInterface),
marks=pytest.mark.zarr,
id="zarr-memory",
),
pytest.param(
("zarr_nested_array", interface.ZarrInterface),
marks=pytest.mark.zarr,
id="zarr-nested",
),
pytest.param(
("zarr_array", interface.ZarrInterface),
marks=pytest.mark.zarr,
id="zarr-array",
),
pytest.param(
("avi_video", interface.VideoInterface), marks=pytest.mark.video, id="video"
),
2024-04-09 01:36:47 +00:00
],
)
def interface_type(request) -> Tuple[NDArray, Type[interface.Interface]]:
"""
Test cases for each interface's ``check`` method - each input should match the
provided interface and that interface only
"""
2024-05-09 05:06:41 +00:00
if isinstance(request.param[0], str):
return (request.getfixturevalue(request.param[0]), request.param[1])
else:
return request.param
@pytest.fixture()
def all_interfaces(interface_type) -> BaseModel:
"""
An instantiated version of each interface within a basemodel,
with the array in an `array` field
"""
array, interface = interface_type
if isinstance(array, Callable):
array = array()
class MyModel(BaseModel):
array: NDArray
instance = MyModel(array=array)
return instance