Coverage for src / bioimageio / spec / utils.py: 95%
60 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-17 16:08 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-17 16:08 +0000
1"""Utility functions for bioimage.io specifications (mostly IO)."""
3import json
4import shutil
5from typing import Any, Dict, List, TypedDict, Union
7from imageio.v3 import imread # pyright: ignore[reportUnknownVariableType]
8from loguru import logger
9from numpy.typing import NDArray
11from ._description import ensure_description_is_dataset as ensure_description_is_dataset
12from ._description import ensure_description_is_model as ensure_description_is_model
13from ._internal._settings import settings
14from ._internal.io import FileDescr
15from ._internal.io import download as download
16from ._internal.io import extract_file_name as extract_file_name
17from ._internal.io import get_reader as get_reader
18from ._internal.io import get_sha256 as get_sha256
19from ._internal.io import (
20 identify_bioimageio_yaml_file_name as identify_bioimageio_yaml_file_name,
21)
22from ._internal.io import interprete_file_source as interprete_file_source
23from ._internal.io import is_valid_bioimageio_yaml_name as is_valid_bioimageio_yaml_name
24from ._internal.io_basics import ZipPath
25from ._internal.io_utils import load_array as load_array
26from ._internal.io_utils import open_bioimageio_yaml as open_bioimageio_yaml
27from ._internal.io_utils import read_yaml as read_yaml
28from ._internal.io_utils import save_array as save_array
29from ._internal.io_utils import write_yaml as write_yaml
30from ._internal.type_guards import is_ndarray
31from ._internal.types import PermissiveFileSource, RelativeFilePath
32from ._internal.utils import files
34get_file_name = extract_file_name
37class SpdxLicenseEntry(TypedDict):
38 isDeprecatedLicenseId: bool
39 isKnownByZenodo: bool
40 isOsiApproved: bool
41 licenseId: str
42 name: str
43 reference: str
46class SpdxLicenses(TypedDict):
47 licenseListVersion: str
48 licenses: List[SpdxLicenseEntry]
49 releaseDate: str
52def get_spdx_licenses() -> SpdxLicenses:
53 """get details of the SPDX licenses known to bioimageio.spec"""
54 with (
55 files("bioimageio.spec")
56 .joinpath("static/spdx_licenses.json")
57 .open("r", encoding="utf-8")
58 ) as f:
59 return json.load(f)
62def get_bioimageio_json_schema() -> Dict[str, Any]:
63 """get the bioimageio specification as a JSON schema"""
64 with (
65 files("bioimageio.spec")
66 .joinpath("static/bioimageio_schema.json")
67 .open("r", encoding="utf-8")
68 ) as f:
69 return json.load(f)
72def load_image(source: Union[FileDescr, ZipPath, PermissiveFileSource]) -> NDArray[Any]:
73 """load a single image as numpy array
75 Args:
76 source: image source
77 """
79 if isinstance(source, (FileDescr, ZipPath)):
80 parsed_source = source
81 else:
82 parsed_source = interprete_file_source(source)
84 if isinstance(parsed_source, RelativeFilePath):
85 parsed_source = parsed_source.absolute()
87 if parsed_source.suffix == ".npy":
88 image = load_array(parsed_source)
89 else:
90 reader = get_reader(parsed_source)
91 image = imread( # pyright: ignore[reportUnknownVariableType]
92 reader.read(), extension=parsed_source.suffix
93 )
95 assert is_ndarray(image)
96 return image
99def empty_cache():
100 """Empty the bioimageio disk cache."""
102 shutil.rmtree(settings.cache_path)
103 settings.cache_path.mkdir(parents=True, exist_ok=True)
104 logger.info("Emptied cache at {}", settings.cache_path)