testing.fast_array_utils

Testing utilities.

Ideally used through the testing.fast_array_utils.pytest plugin.

testing.fast_array_utils.SUPPORTED_TYPES: tuple[ArrayType, ...] = (numpy.ndarray, cupy.ndarray, scipy.sparse.csr_array, scipy.sparse.csc_array, scipy.sparse.csr_matrix, cupyx.scipy.sparse.csr_matrix, scipy.sparse.csc_matrix, cupyx.scipy.sparse.csc_matrix, dask.array.Array[numpy.ndarray], dask.array.Array[cupy.ndarray], dask.array.Array[scipy.sparse.csr_array], dask.array.Array[scipy.sparse.csc_array], dask.array.Array[scipy.sparse.csr_matrix], dask.array.Array[cupyx.scipy.sparse.csr_matrix], dask.array.Array[scipy.sparse.csc_matrix], dask.array.Array[cupyx.scipy.sparse.csc_matrix], h5py.Dataset, zarr.Array, anndata.abc.CSRDataset[h5py.Dataset], anndata.abc.CSCDataset[h5py.Dataset], anndata.abc.CSRDataset[zarr.Array], anndata.abc.CSCDataset[zarr.Array])

All supported array types.

class testing.fast_array_utils.ArrayType(mod: str, name: str, flags: ~testing.fast_array_utils._array_type.Flags = <Flags.Any: 1>, *, inner: ~testing.fast_array_utils._array_type.Inner = None, conversion_context: ~testing.fast_array_utils._array_type.ConversionContext | None = None)

Supported array type with methods for conversion and random generation.

Examples

>>> at = ArrayType("numpy", "ndarray")
>>> arr = at([1, 2, 3])
>>> arr
array([1, 2, 3])
>>> assert isinstance(arr, at.cls)
__call__(x: ArrayLike | Array, /, *, dtype: DTypeLike | None = None) Arr

Convert to this array type.

property cls: type[Arr]

Array class for isinstance() checks.

conversion_context: ConversionContext | None = None

Conversion context required for converting to h5py.

flags: Flags = 1

Classification flags.

inner: Inner = None

Inner array type (e.g. for dask).

random(shape: tuple[int, int], *, dtype: _DTypeLikeNum | None = None, gen: np.random.Generator | None = None, density: float | np.floating[Any] = 0.01) Arr

Create a random array.

mod: str

Module name.

name: str

Array class name.

class testing.fast_array_utils.ConversionContext(hdf5_file: h5py.File)

Conversion context required for h5py.

class testing.fast_array_utils.Flags(*values)

Array classification flags.

None_ = 0

No array type.

Any = 1

Any array type.

Sparse = 2

Sparse array.

Matrix = 4

Matrix API (A * B means A @ B).

Gpu = 8

GPU array.

Dask = 16

Dask array.

Disk = 32

On-disk array.

testing.fast_array_utils.random_mat(shape: tuple[int, int], *, density: float | np.floating[Any] = 0.01, format: Literal['csr', 'csc'] = 'csr', dtype: _DTypeLikeNum | None = None, container: Literal['array', 'matrix'] = 'array', rng: np.random.Generator | None = None) types.CSBase

Create a random sparse matrix/array.

testing.fast_array_utils.pytest

Pytest fixtures to get supported array types.

Can be used as pytest plugin: pytest -p testing.fast_array_utils.pytest.

fixture testing.fast_array_utils.pytest.array_type

Scope:    function

Fixture for a supported ArrayType.

Use testing.fast_array_utils.Flags to select or skip array types:

  1. using select=/args[0]:

    @pytest.mark.array_type(Flags.Sparse)
    def test_something(array_type: ArrayType) -> None:
        ...
    
  2. and/or using skip=/args[1]:

    @pytest.mark.array_type(skip=Flags.Dask | Flags.Disk | Flags.Gpu)
    def test_something(array_type: ArrayType) -> None:
        ...
    

For special cases, you can also specify a set of array types and flags. This is useful if you want to select or skip only specific array types.

from testing.fast_array_utils import SUPPORTED_TYPES

SPARSE_AND_DASK = {
    at for at in SUPPORTED_TYPES if at.flags & Flags.Sparse and at.flags & Flags.Dask
}

@pytest.mark.array_type(skip={*SPARSE_AND_DASK, Flags.Disk})
def test_something(array_type: ArrayType) -> None:
    ...