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

1import collections.abc 

2 

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 

10 

11 

12def convert_from_older_format(data: BioimageioYamlContent) -> None: 

13 fv = data.get("format_version") 

14 if not isinstance(fv, str): 

15 return 

16 

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 

22 

23 if data["format_version"] == "0.4.0": 

24 _convert_model_from_v0_4_0_to_0_4_1(data) 

25 

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) 

28 

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" 

32 

33 if data["format_version"] in ("0.4.7", "0.4.8"): 

34 data["format_version"] = "0.4.9" 

35 

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 

42 

43 if (nickname_icon := bconfig.get("nickname_icon")) is not None: 

44 data["id_emoji"] = nickname_icon 

45 

46 data["format_version"] = "0.4.10" 

47 

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"] 

54 

55 # remove 'config' if now empty 

56 if data.get("config") == {}: 

57 del data["config"] 

58 

59 

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 

68 

69 data["format_version"] = "0.4.1" 

70 

71 

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"] 

76 

77 data["format_version"] = "0.4.5"