Coverage for bioimageio/spec/model/_v0_4_converter.py: 92%
49 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-02 14:21 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-02 14:21 +0000
1import collections.abc
3from .._internal.io import BioimageioYamlContent
4from ..generic._v0_2_converter import (
5 remove_doi_prefix,
6 remove_gh_prefix,
7 remove_slashes_from_names,
8)
9from ._v0_3_converter import convert_model_from_v0_3_to_0_4_0
12def convert_from_older_format(data: BioimageioYamlContent) -> None:
13 fv = data.get("format_version")
14 if not isinstance(fv, str):
15 return
17 major_minor = tuple(map(int, fv.split(".")[:2]))
18 if major_minor < (0, 4):
19 convert_model_from_v0_3_to_0_4_0(data)
20 elif major_minor > (0, 4):
21 return
23 if data["format_version"] == "0.4.0":
24 _convert_model_from_v0_4_0_to_0_4_1(data)
26 if data["format_version"] in ("0.4.1", "0.4.2", "0.4.3", "0.4.4"):
27 _convert_model_from_v0_4_4_to_0_4_5(data)
29 if data["format_version"] in ("0.4.5", "0.4.6"):
30 remove_slashes_from_names(data)
31 data["format_version"] = "0.4.7"
33 if data["format_version"] in ("0.4.7", "0.4.8"):
34 data["format_version"] = "0.4.9"
36 if data["format_version"] == "0.4.9":
37 if isinstance(config := data.get("config"), dict) and isinstance(
38 bconfig := config.get("bioimageio"), dict
39 ):
40 if (nickname := bconfig.get("nickname")) is not None:
41 data["id"] = nickname
43 if (nickname_icon := bconfig.get("nickname_icon")) is not None:
44 data["id_emoji"] = nickname_icon
46 data["format_version"] = "0.4.10"
48 remove_doi_prefix(data)
49 remove_gh_prefix(data)
50 # remove 'future' from config if no other than the used future entries exist
51 config = data.get("config", {})
52 if isinstance(config, dict) and config.get("future") == {}:
53 del config["future"]
55 # remove 'config' if now empty
56 if data.get("config") == {}:
57 del data["config"]
60def _convert_model_from_v0_4_0_to_0_4_1(data: BioimageioYamlContent):
61 # move dependencies from root to pytorch_state_dict weights entry
62 deps = data.pop("dependencies", None)
63 weights = data.get("weights", {})
64 if deps and weights and isinstance(weights, dict):
65 entry = weights.get("pytorch_state_dict")
66 if entry and isinstance(entry, dict):
67 entry["dependencies"] = deps
69 data["format_version"] = "0.4.1"
72def _convert_model_from_v0_4_4_to_0_4_5(data: BioimageioYamlContent) -> None:
73 parent = data.pop("parent", None)
74 if isinstance(parent, collections.abc.Mapping) and "uri" in parent:
75 data["parent"] = parent["uri"]
77 data["format_version"] = "0.4.5"