hoa-tools 1.0.9__tar.gz → 2.0.0b1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hoa-tools might be problematic. Click here for more details.

Files changed (355) hide show
  1. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/PKG-INFO +2 -2
  2. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/release-notes.md +4 -0
  3. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/pyproject.toml +2 -9
  4. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/ruff.toml +4 -1
  5. hoa_tools-2.0.0b1/src/hoa_tools/_n5.py +436 -0
  6. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/_version.py +3 -3
  7. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/dataset.py +15 -10
  8. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools.egg-info/PKG-INFO +2 -2
  9. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools.egg-info/requires.txt +1 -1
  10. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/tests/cassettes/test_remote_array.yaml +392 -0
  11. hoa_tools-2.0.0b1/tests/cassettes/test_remote_array_zarr.yaml +1162 -0
  12. hoa_tools-1.0.9/src/hoa_tools/_n5.py +0 -10
  13. hoa_tools-1.0.9/tests/cassettes/test_remote_array_zarr.yaml +0 -460
  14. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.github/dependabot.yml +0 -0
  15. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.github/workflows/publish.yml +0 -0
  16. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.github/workflows/tests.yml +0 -0
  17. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.gitignore +0 -0
  18. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.gitmodules +0 -0
  19. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.pre-commit-config.yaml +0 -0
  20. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.readthedocs.yml +0 -0
  21. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/.vscode/settings.json +0 -0
  22. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/CITATION.cff +0 -0
  23. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/LICENSE.md +0 -0
  24. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/MANIFEST.in +0 -0
  25. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/README.md +0 -0
  26. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/dataset.md +0 -0
  27. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/index.md +0 -0
  28. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/inventory.md +0 -0
  29. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/metadata.md +0 -0
  30. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/types.md +0 -0
  31. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/api/voi.md +0 -0
  32. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/development.md +0 -0
  33. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/how_to.md +0 -0
  34. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/index.md +0 -0
  35. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/dataset.py +0 -0
  36. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/fetching_data.py +0 -0
  37. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/index.md +0 -0
  38. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/inventory.py +0 -0
  39. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/registration.py +0 -0
  40. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/docs/tutorial/vois.py +0 -0
  41. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/mkdocs.yml +0 -0
  42. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/schemas/github-issue-forms.json +0 -0
  43. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/setup.cfg +0 -0
  44. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/__init__.py +0 -0
  45. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/A129_lung_VOI-02_2.0um_bm18.json +0 -0
  46. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/A186_lung_right_VOI-3_4.26um_bm18.json +0 -0
  47. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/A186_lung_right_complete-organ_24.132um_bm18.json +0 -0
  48. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/AUMC-005_uterus_complete-organ_20.026um_bm18.json +0 -0
  49. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-01_2.5um_bm05.json +0 -0
  50. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-01_6.5um_bm05.json +0 -0
  51. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-02_2.5um_bm05.json +0 -0
  52. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-02_6.5um_bm05.json +0 -0
  53. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-03_2.5um_bm05.json +0 -0
  54. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-03_6.5um_bm05.json +0 -0
  55. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-04_6.5um_bm05.json +0 -0
  56. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-07_2.5um_bm05.json +0 -0
  57. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-08_2.5um_bm05.json +0 -0
  58. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_central-column_6.24um_bm05.json +0 -0
  59. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_complete-organ_26.38um_bm05.json +0 -0
  60. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-125_lung_complete-organ_26.38um_bm05.json +0 -0
  61. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2_2.22um_bm05.json +0 -0
  62. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2b_2.22um_bm05.json +0 -0
  63. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01_6.24um_bm05.json +0 -0
  64. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02.2_2.22um_bm05.json +0 -0
  65. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02_6.24um_bm05.json +0 -0
  66. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03.2_2.22um_bm05.json +0 -0
  67. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03_6.24um_bm05.json +0 -0
  68. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03b-bis_2.2um_bm05.json +0 -0
  69. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04-bis_6.5um_bm05.json +0 -0
  70. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04.2_2.22um_bm05.json +0 -0
  71. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04_6.24um_bm05.json +0 -0
  72. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05.2_2.22um_bm05.json +0 -0
  73. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05_6.24um_bm05.json +0 -0
  74. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-08.2_2.22um_bm05.json +0 -0
  75. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-09.2_2.22um_bm05.json +0 -0
  76. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-10.2_2.22um_bm05.json +0 -0
  77. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa-bis_2.2um_bm05.json +0 -0
  78. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa_0.65um_bm05.json +0 -0
  79. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-sx20_6.24um_bm05.json +0 -0
  80. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe-bis_25.25um_bm05.json +0 -0
  81. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe_26.38um_bm05.json +0 -0
  82. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-129_lung_right_upper_lobe_core-biopsy_2.25um_bm05.json +0 -0
  83. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-135_lung_complete-organ_25.25um_bm05.json +0 -0
  84. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-153_lung_complete-organ_25.25um_bm05.json +0 -0
  85. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col1_2.5um_bm05.json +0 -0
  86. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col1_6.5um_bm05.json +0 -0
  87. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col2_2.5um_bm05.json +0 -0
  88. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col2_6.5um_bm05.json +0 -0
  89. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col3_2.5um_bm05.json +0 -0
  90. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col4_2.5um_bm05.json +0 -0
  91. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col5_2.5um_bm05.json +0 -0
  92. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col6_2.5um_bm05.json +0 -0
  93. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_col7_2.5um_bm05.json +0 -0
  94. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-154_lung_complete-organ_25.25um_bm05.json +0 -0
  95. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col1_2.5um_bm05.json +0 -0
  96. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col1_6.5um_bm05.json +0 -0
  97. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col2_2.5um_bm05.json +0 -0
  98. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col2_6.5um_bm05.json +0 -0
  99. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col3_2.5um_bm05.json +0 -0
  100. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col3_6.5um_bm05.json +0 -0
  101. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col4_6.5um_bm05.json +0 -0
  102. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_col6_2.5um_bm05.json +0 -0
  103. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-155_lung_complete-organ_25.28um_bm05.json +0 -0
  104. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/FO-20-160_lung_complete-organ_25.0um_bm05.json +0 -0
  105. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/GLR-163_lung_right_lower_lobe_core-biopsy_2.45um_bm05.json +0 -0
  106. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_L-vent-muscle_2.22um_bm05.json +0 -0
  107. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_LR-vent-muscles-ramus-interventricularis-anterior_6.05um_bm05.json +0 -0
  108. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-01_6.5um_bm18.json +0 -0
  109. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-02_6.5um_bm18.json +0 -0
  110. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-03_6.5um_bm18.json +0 -0
  111. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_19.89um_bm18.json +0 -0
  112. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_25.08um_bm05.json +0 -0
  113. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_1.29um_bm05.json +0 -0
  114. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_6.05um_bm05.json +0 -0
  115. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_complete-organ_25.08um_bm05.json +0 -0
  116. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_right_complete-organ_25.0um_bm05.json +0 -0
  117. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_liver_complete-organ_19.61um_bm18.json +0 -0
  118. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_liver_complete-organ_25.25um_bm05.json +0 -0
  119. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_2.51um_bm05.json +0 -0
  120. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_25.25um_bm05.json +0 -0
  121. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_6.5um_bm05.json +0 -0
  122. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_2.51um_bm05.json +0 -0
  123. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_25.25um_bm05.json +0 -0
  124. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_6.5um_bm05.json +0 -0
  125. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.45um_bm05.json +0 -0
  126. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.5um_bm05.json +0 -0
  127. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.05um_bm05.json +0 -0
  128. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.5um_bm05.json +0 -0
  129. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_2.45um_bm05.json +0 -0
  130. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_6.05um_bm05.json +0 -0
  131. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-apical_2.5um_bm05.json +0 -0
  132. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-medial_6.5um_bm05.json +0 -0
  133. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03-upper-lobe-apical_2.5um_bm05.json +0 -0
  134. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03_6.5um_bm05.json +0 -0
  135. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03b-interlobular-fissure_6.5um_bm05.json +0 -0
  136. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04-upper-lobe-medial_2.5um_bm05.json +0 -0
  137. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04b-lower-lobe-basal-medial_6.5um_bm05.json +0 -0
  138. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-lower-lobe-basal_2.5um_bm05.json +0 -0
  139. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-upper-lobe-apical_6.5um_bm05.json +0 -0
  140. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_2.45um_bm05.json +0 -0
  141. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_6.05um_bm05.json +0 -0
  142. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_complete-organ_25.08um_bm05.json +0 -0
  143. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_right_complete-organ_19.61um_bm18.json +0 -0
  144. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_1.29um_bm05.json +0 -0
  145. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_6.05um_bm05.json +0 -0
  146. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_complete-organ_25.08um_bm05.json +0 -0
  147. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum-occipital_6.05um_bm05.json +0 -0
  148. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum_2.45um_bm05.json +0 -0
  149. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_complete-organ_25.08um_bm05.json +0 -0
  150. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_frontal_2.45um_bm05.json +0 -0
  151. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_2.45um_bm05.json +0 -0
  152. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_6.05um_bm05.json +0 -0
  153. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.36um_bm18.json +0 -0
  154. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.5um_bm05.json +0 -0
  155. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.36um_bm18.json +0 -0
  156. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.5um_bm05.json +0 -0
  157. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.36um_bm18.json +0 -0
  158. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.5um_bm05.json +0 -0
  159. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-04_6.5um_bm05.json +0 -0
  160. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-05_6.36um_bm18.json +0 -0
  161. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-06_6.36um_bm18.json +0 -0
  162. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-07_6.36um_bm18.json +0 -0
  163. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_19.89um_bm18.json +0 -0
  164. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_25.17um_bm05.json +0 -0
  165. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_complete-organ_25.0um_bm05.json +0 -0
  166. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_lateral-transect_2.5um_bm05.json +0 -0
  167. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-01_6.54um_bm18.json +0 -0
  168. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-02_6.54um_bm18.json +0 -0
  169. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-03_6.54um_bm18.json +0 -0
  170. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-04_6.54um_bm18.json +0 -0
  171. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-05_6.54um_bm18.json +0 -0
  172. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-06_6.54um_bm18.json +0 -0
  173. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-07_6.54um_bm18.json +0 -0
  174. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-08_6.54um_bm18.json +0 -0
  175. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-09_6.54um_bm18.json +0 -0
  176. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-10_6.54um_bm18.json +0 -0
  177. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-11_6.36um_bm18.json +0 -0
  178. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-12_6.36um_bm18.json +0 -0
  179. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-13_6.36um_bm18.json +0 -0
  180. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-14_6.36um_bm18.json +0 -0
  181. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-15_6.36um_bm18.json +0 -0
  182. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-02.1_2.256um_bm18.json +0 -0
  183. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-03.2_2.256um_bm18.json +0 -0
  184. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-13.1_2.256um_bm18.json +0 -0
  185. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_23.42um_bm18.json +0 -0
  186. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_25.25um_bm05.json +0 -0
  187. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_7.72um_bm18.json +0 -0
  188. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-01_1.444um_bm05.json +0 -0
  189. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-01_4.502um_bm18.json +0 -0
  190. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-07_1.444um_bm05.json +0 -0
  191. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-11_4.502um_bm18.json +0 -0
  192. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_complete-organ_20.025um_bm18.json +0 -0
  193. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.36um_bm18.json +0 -0
  194. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.5um_bm05.json +0 -0
  195. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.36um_bm18.json +0 -0
  196. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.5um_bm05.json +0 -0
  197. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.36um_bm18.json +0 -0
  198. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.5um_bm05.json +0 -0
  199. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-04_6.36um_bm18.json +0 -0
  200. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-05_6.36um_bm18.json +0 -0
  201. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-06_6.36um_bm18.json +0 -0
  202. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-07_6.36um_bm18.json +0 -0
  203. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.1_2.256um_bm18.json +0 -0
  204. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.2_2.256um_bm18.json +0 -0
  205. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-3.1_2.256um_bm18.json +0 -0
  206. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.1_2.256um_bm18.json +0 -0
  207. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.2_2.256um_bm18.json +0 -0
  208. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.3_2.256um_bm18.json +0 -0
  209. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-5.1_2.256um_bm18.json +0 -0
  210. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-7.1_2.256um_bm18.json +0 -0
  211. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_19.85um_bm18.json +0 -0
  212. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_25.08um_bm05.json +0 -0
  213. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01.1_2.6um_bm05.json +0 -0
  214. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01_6.49um_bm05.json +0 -0
  215. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02.1_2.6um_bm05.json +0 -0
  216. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02_6.49um_bm05.json +0 -0
  217. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_complete-organ_25.14um_bm05.json +0 -0
  218. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01.1_2.6um_bm05.json +0 -0
  219. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01_6.5um_bm05.json +0 -0
  220. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02.1_2.6um_bm05.json +0 -0
  221. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02_6.5um_bm05.json +0 -0
  222. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03.1_2.6um_bm05.json +0 -0
  223. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03_6.5um_bm05.json +0 -0
  224. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_complete-organ_25.0um_bm05.json +0 -0
  225. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-01_4.14um_bm18.json +0 -0
  226. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-02_4.14um_bm18.json +0 -0
  227. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-03_4.14um_bm18.json +0 -0
  228. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-08_4.14um_bm18.json +0 -0
  229. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_complete-organ_22.56um_bm18.json +0 -0
  230. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_left_complete-organ_22.56um_bm18.json +0 -0
  231. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-01_5.05um_bm18.json +0 -0
  232. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-03_5.05um_bm18.json +0 -0
  233. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-04_5.05um_bm18.json +0 -0
  234. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-05_5.05um_bm18.json +0 -0
  235. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-06_5.05um_bm18.json +0 -0
  236. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-07_5.05um_bm18.json +0 -0
  237. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-08_5.05um_bm18.json +0 -0
  238. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-09_5.05um_bm18.json +0 -0
  239. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-10_5.05um_bm18.json +0 -0
  240. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-11_5.05um_bm18.json +0 -0
  241. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_complete-organ_21.64um_bm18.json +0 -0
  242. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_prostate_complete-scan_23.42um_bm18.json +0 -0
  243. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_spleen_complete-organ_25.0um_bm05.json +0 -0
  244. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_1_VOI-01_2.02um_bm18.json +0 -0
  245. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_1_complete-organ_9.595um_bm18.json +0 -0
  246. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_2_VOI-02_2.02um_bm18.json +0 -0
  247. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_2_complete-organ_9.595um_bm18.json +0 -0
  248. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-01_6.51um_bm18.json +0 -0
  249. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-02_6.51um_bm18.json +0 -0
  250. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-04_6.51um_bm18.json +0 -0
  251. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-05_6.51um_bm18.json +0 -0
  252. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-06_6.51um_bm18.json +0 -0
  253. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-07_6.51um_bm18.json +0 -0
  254. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.1_2.26um_bm18.json +0 -0
  255. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.2_2.26um_bm18.json +0 -0
  256. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-3.1_2.26um_bm18.json +0 -0
  257. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.1_2.26um_bm18.json +0 -0
  258. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.2_2.26um_bm18.json +0 -0
  259. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-5.1_2.26um_bm18.json +0 -0
  260. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-6.1_2.26um_bm18.json +0 -0
  261. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-7.1_2.26um_bm18.json +0 -0
  262. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_complete-organ_19.89um_bm18.json +0 -0
  263. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-13_kidney_1_complete-organ_15.77um_bm18.json +0 -0
  264. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-13_kidney_2_complete-organ_15.77um_bm18.json +0 -0
  265. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-13_prostate_complete-organ_14.72um_bm18.json +0 -0
  266. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-16_prostate_complete-organ_15.75um_bm18.json +0 -0
  267. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-16_spleen_complete-organ_15.75um_bm18.json +0 -0
  268. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-27_kidney_bottom_complete-organ_15.75um_bm18.json +0 -0
  269. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/LADAF-2022-27_kidney_top_complete-organ_15.75um_bm18.json +0 -0
  270. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-01-tricuspid-valve_12.02um_bm05.json +0 -0
  271. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-01_6.51um_bm18.json +0 -0
  272. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-02_6.51um_bm18.json +0 -0
  273. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-03_6.51um_bm18.json +0 -0
  274. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-04_6.51um_bm18.json +0 -0
  275. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-05_6.51um_bm18.json +0 -0
  276. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-06_6.51um_bm18.json +0 -0
  277. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-08_6.51um_bm18.json +0 -0
  278. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_19.85um_bm18.json +0 -0
  279. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_25.27um_bm05.json +0 -0
  280. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-01_2.5um_bm05.json +0 -0
  281. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-01_6.51um_bm05.json +0 -0
  282. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-02_2.5um_bm05.json +0 -0
  283. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-02_6.51um_bm05.json +0 -0
  284. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-03_2.5um_bm05.json +0 -0
  285. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-04_2.5um_bm05.json +0 -0
  286. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-05_2.5um_bm05.json +0 -0
  287. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-06_2.5um_bm05.json +0 -0
  288. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-07_2.5um_bm05.json +0 -0
  289. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_kidney_complete-organ_25.0um_bm05.json +0 -0
  290. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-28_lung_right_lower_lobe_overview_19.89um_bm18.json +0 -0
  291. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_2.5um_bm05.json +0 -0
  292. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_6.54um_bm18.json +0 -0
  293. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_6.5um_bm05.json +0 -0
  294. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01b_6.5um_bm05.json +0 -0
  295. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_2.5um_bm05.json +0 -0
  296. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_6.54um_bm18.json +0 -0
  297. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_6.5um_bm05.json +0 -0
  298. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_2.5um_bm05.json +0 -0
  299. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_6.54um_bm18.json +0 -0
  300. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_6.5um_bm05.json +0 -0
  301. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_2.5um_bm05.json +0 -0
  302. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_6.54um_bm18.json +0 -0
  303. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_6.5um_bm05.json +0 -0
  304. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_2.5um_bm05.json +0 -0
  305. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_6.54um_bm18.json +0 -0
  306. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_6.5um_bm05.json +0 -0
  307. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-06_6.54um_bm18.json +0 -0
  308. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-07_6.54um_bm18.json +0 -0
  309. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_19.57um_bm18.json +0 -0
  310. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_25.33um_bm05.json +0 -0
  311. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_ROI-03_6.5um_bm05.json +0 -0
  312. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_2.5um_bm05.json +0 -0
  313. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_6.51um_bm18.json +0 -0
  314. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_6.5um_bm05.json +0 -0
  315. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_2.5um_bm05.json +0 -0
  316. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_6.51um_bm18.json +0 -0
  317. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_6.5um_bm05.json +0 -0
  318. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-03_6.51um_bm18.json +0 -0
  319. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-04_6.51um_bm18.json +0 -0
  320. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-04_6.5um_bm05.json +0 -0
  321. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-05_6.51um_bm18.json +0 -0
  322. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-05b_6.5um_bm05.json +0 -0
  323. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-06_6.51um_bm18.json +0 -0
  324. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-07_6.51um_bm18.json +0 -0
  325. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_19.89um_bm18.json +0 -0
  326. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_25.25um_bm05.json +0 -0
  327. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_1.4um_bm05.json +0 -0
  328. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_6.5um_bm05.json +0 -0
  329. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-02_6.5um_bm05.json +0 -0
  330. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-03_6.5um_bm05.json +0 -0
  331. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_kidney_complete-organ_25.38um_bm05.json +0 -0
  332. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-2.1_2.256um_bm18.json +0 -0
  333. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-3.1_2.256um_bm18.json +0 -0
  334. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-5.3_2.256um_bm18.json +0 -0
  335. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-01_6.5um_bm05.json +0 -0
  336. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-02_6.5um_bm05.json +0 -0
  337. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-04_6.5um_bm05.json +0 -0
  338. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-05_6.5um_bm05.json +0 -0
  339. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-20-29_lung_left_complete-organ_25.31um_bm05.json +0 -0
  340. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-21-33_brain_complete-organ_19.57um_bm18.json +0 -0
  341. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-21-46_brain_complete-organ_19.57um_bm18.json +0 -0
  342. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/data/metadata/metadata/S-22-16_brain_complete-organ_19.59um_bm18.json +0 -0
  343. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/inventory.py +0 -0
  344. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/metadata.py +0 -0
  345. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/py.typed +0 -0
  346. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/registration.py +0 -0
  347. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/types.py +0 -0
  348. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools/voi.py +0 -0
  349. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools.egg-info/SOURCES.txt +0 -0
  350. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools.egg-info/dependency_links.txt +0 -0
  351. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/src/hoa_tools.egg-info/top_level.txt +0 -0
  352. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/tests/test_dataset.py +0 -0
  353. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/tests/test_inventory.py +0 -0
  354. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/tests/test_registration.py +0 -0
  355. {hoa_tools-1.0.9 → hoa_tools-2.0.0b1}/tests/test_voi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hoa-tools
3
- Version: 1.0.9
3
+ Version: 2.0.0b1
4
4
  Summary: Tools for working with the Human Organ Atlas
5
5
  Author-email: David Stansby <d.stansby@ucl.ac.uk>
6
6
  License: Copyright (c) 2024, David Stansby
@@ -49,7 +49,7 @@ Requires-Dist: pandas>=2
49
49
  Requires-Dist: pydantic>=2
50
50
  Requires-Dist: simpleitk
51
51
  Requires-Dist: xarray
52
- Requires-Dist: zarr<3,>2.16
52
+ Requires-Dist: zarr>=3
53
53
  Provides-Extra: dev
54
54
  Requires-Dist: build; extra == "dev"
55
55
  Requires-Dist: mypy; extra == "dev"
@@ -1,5 +1,9 @@
1
1
  # Release notes
2
2
 
3
+ ## 2.0.0
4
+
5
+ - Updated the `zarr-python` dependency from v2 to v3.
6
+
3
7
  ## 1.0.9
4
8
 
5
9
  - Fixed a bug in 1.0.8 where the internal data model was not updated to agree with the new metadata schema.
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "pydantic>=2",
32
32
  "simpleitk",
33
33
  "xarray",
34
- "zarr<3,>2.16",
34
+ "zarr>=3",
35
35
  ]
36
36
  description = "Tools for working with the Human Organ Atlas"
37
37
  dynamic = ["version"]
@@ -112,18 +112,11 @@ enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
112
112
  module = "hoa_tools.metadata"
113
113
  disallow_any_generics = false # See https://github.com/koxudaxi/datamodel-code-generator/issues/1546
114
114
 
115
- [[tool.mypy.overrides]]
116
- module = "zarr.*"
117
- ignore_missing_imports = true
118
115
 
119
116
  [[tool.mypy.overrides]]
120
117
  module = "gcsfs.*"
121
118
  ignore_missing_imports = true
122
119
 
123
120
  [[tool.mypy.overrides]]
124
- module = "SimpleITK.*"
125
- ignore_missing_imports = true
126
-
127
- [[tool.mypy.overrides]]
128
- module = "matplotlib.*"
121
+ module = "numcodecs.*"
129
122
  ignore_missing_imports = true
@@ -4,7 +4,6 @@ target-version = "py311"
4
4
 
5
5
  [lint]
6
6
  ignore = [
7
- "ANN401", # Dynamically typed expressions (typing.Any) are disallowed in `**kwargs`
8
7
  "ARG001", # Unused function argument
9
8
  "COM812", # trailing commas (ruff-format recommended)
10
9
  "D200", # One-line docstring should fit on one line
@@ -23,6 +22,10 @@ ignore = [
23
22
  "A005",
24
23
  "EM101",
25
24
  "TRY003",
25
+ "PGH",
26
+ "ANN",
27
+ "ERA001",
28
+ "EM102",
26
29
  ]
27
30
  select = ["ALL"]
28
31
  isort.known-first-party = ["HOA Tools"]
@@ -0,0 +1,436 @@
1
+ import codecs
2
+ import json
3
+ import numbers
4
+ import re
5
+ import struct
6
+ import sys
7
+ from collections.abc import AsyncIterator, Iterable, Sequence
8
+ from typing import Any
9
+
10
+ import numpy as np
11
+ import numpy.typing as npt
12
+ from numcodecs.abc import Codec
13
+ from numcodecs.registry import get_codec, register_codec
14
+ from zarr.abc.store import ByteRequest
15
+ from zarr.core.buffer import Buffer, BufferPrototype, default_buffer_prototype
16
+ from zarr.storage import FsspecStore
17
+
18
+ zarr_group_meta_key = ".zgroup"
19
+ zarr_array_meta_key = ".zarray"
20
+ zarr_attrs_key = ".zattrs"
21
+ n5_attrs_key = "attributes.json"
22
+ N5_FORMAT = "2.0.0"
23
+ ZARR_FORMAT = 2
24
+
25
+ zarr_to_n5_keys = [
26
+ ("chunks", "blockSize"),
27
+ ("dtype", "dataType"),
28
+ ("compressor", "compression"),
29
+ ("shape", "dimensions"),
30
+ ]
31
+ n5_keywords = ["n5", "dataType", "dimensions", "blockSize", "compression"]
32
+
33
+
34
+ class N5FSStore(FsspecStore):
35
+ async def get(
36
+ self,
37
+ key: str,
38
+ prototype: BufferPrototype,
39
+ byte_range: ByteRequest | None = None,
40
+ ) -> Buffer | None:
41
+ if key.endswith(zarr_group_meta_key):
42
+ key_new = key.replace(zarr_group_meta_key, n5_attrs_key)
43
+ value = group_metadata_to_zarr(await self._load_n5_attrs(key_new))
44
+
45
+ return prototype.buffer.from_bytes(json_dumps(value))
46
+
47
+ if key.endswith(zarr_array_meta_key):
48
+ key_new = key.replace(zarr_array_meta_key, n5_attrs_key)
49
+ top_level = key == zarr_array_meta_key
50
+ value = array_metadata_to_zarr(
51
+ await self._load_n5_attrs(key_new), top_level=top_level
52
+ )
53
+ return prototype.buffer.from_bytes(json_dumps(value))
54
+
55
+ if key.endswith(zarr_attrs_key):
56
+ key_new = key.replace(zarr_attrs_key, n5_attrs_key)
57
+ value = attrs_to_zarr(await self._load_n5_attrs(key_new))
58
+
59
+ if len(value) == 0:
60
+ raise KeyError(key_new)
61
+ return prototype.buffer.from_bytes(json_dumps(value))
62
+
63
+ key_new = invert_chunk_coords(key) if is_chunk_key(key) else key
64
+
65
+ return await super().get(key_new, prototype=prototype, byte_range=byte_range)
66
+
67
+ async def get_partial_values(
68
+ self,
69
+ prototype: BufferPrototype,
70
+ key_ranges: Iterable[tuple[str, ByteRequest | None]],
71
+ ) -> list[Buffer | None]:
72
+ raise NotImplementedError
73
+
74
+ async def exists(self, key: str) -> bool:
75
+ if key.endswith(zarr_group_meta_key):
76
+ key_new = key.replace(zarr_group_meta_key, n5_attrs_key)
77
+ if not await super().exists(key_new):
78
+ return False
79
+ # group if not a dataset (attributes do not contain 'dimensions')
80
+ return "dimensions" not in await self._load_n5_attrs(key_new)
81
+
82
+ if key.endswith(zarr_array_meta_key):
83
+ key_new = key.replace(zarr_array_meta_key, n5_attrs_key)
84
+ # array if attributes contain 'dimensions'
85
+ return "dimensions" in await self._load_n5_attrs(key_new)
86
+
87
+ if key.endswith(zarr_attrs_key):
88
+ key_new = key.replace(zarr_attrs_key, n5_attrs_key)
89
+ return await self._contains_attrs(key_new)
90
+
91
+ key_new = invert_chunk_coords(key) if is_chunk_key(key) else key
92
+
93
+ return await super().exists(key_new)
94
+
95
+ @property
96
+ def supports_writes(self) -> bool: # type: ignore[override]
97
+ return False
98
+
99
+ async def set(
100
+ self,
101
+ key: str,
102
+ value: Buffer,
103
+ byte_range: tuple[int, int] | None = None,
104
+ ) -> None:
105
+ raise NotImplementedError
106
+
107
+ @property
108
+ def supports_deletes(self) -> bool: # type: ignore[override]
109
+ return False
110
+
111
+ async def delete(self, key: str) -> None:
112
+ raise NotImplementedError
113
+
114
+ @property
115
+ def supports_listing(self) -> bool: # type: ignore[override]
116
+ return False
117
+
118
+ def list(self) -> AsyncIterator[str]:
119
+ raise NotImplementedError
120
+
121
+ def list_prefix(self, prefix: str) -> AsyncIterator[str]:
122
+ raise NotImplementedError
123
+
124
+ def list_dir(self, prefix: str) -> AsyncIterator[str]:
125
+ # This method should be async, like overridden methods in child classes.
126
+ # However, that's not straightforward:
127
+ # https://stackoverflow.com/questions/68905848
128
+ raise NotImplementedError
129
+
130
+ async def _load_n5_attrs(self, path: str) -> dict[str, Any]:
131
+ try:
132
+ s = await super().get(path, prototype=default_buffer_prototype())
133
+ if s is None:
134
+ raise RuntimeError(f"No N5 attributes at path {path}")
135
+ return json_loads(s.to_bytes())
136
+ except KeyError:
137
+ return {}
138
+
139
+ async def _contains_attrs(self, path: str | None) -> bool:
140
+ if path is None:
141
+ attrs_key = n5_attrs_key
142
+ elif not path.endswith(n5_attrs_key):
143
+ attrs_key = f"{path}/{n5_attrs_key}"
144
+ else:
145
+ attrs_key = path
146
+
147
+ attrs = attrs_to_zarr(await self._load_n5_attrs(attrs_key))
148
+ return len(attrs) > 0
149
+
150
+
151
+ # match strings of numbers with "." between
152
+ # (e.g., "1.2.4", "1.2", "5")
153
+ _prog_ckey = re.compile(r"^(\d+)(\.\d+)+$")
154
+
155
+
156
+ def is_chunk_key(key: str) -> bool:
157
+ rv = False
158
+ segments = list(key.split("/"))
159
+ if segments:
160
+ last_segment = segments[-1]
161
+ rv = bool(_prog_ckey.match(last_segment))
162
+ return rv
163
+
164
+
165
+ def invert_chunk_coords(key: str) -> str:
166
+ segments = list(key.split("/"))
167
+ if segments:
168
+ last_segment = segments[-1]
169
+ if _prog_ckey.match(last_segment):
170
+ coords = list(last_segment.split("."))
171
+ last_segment = "/".join(coords[::-1])
172
+ segments = [*segments[:-1], last_segment]
173
+ key = "/".join(segments)
174
+ return key
175
+
176
+
177
+ def group_metadata_to_zarr(group_metadata: dict[str, Any]) -> dict[str, Any]:
178
+ """Convert group metadata from N5 to zarr format."""
179
+ return {"zarr_format": ZARR_FORMAT}
180
+
181
+
182
+ def array_metadata_to_zarr(
183
+ array_metadata: dict[str, Any], *, top_level: bool = False
184
+ ) -> dict[str, Any]:
185
+ """
186
+ Convert array metadata from N5 to zarr format.
187
+
188
+ If the `top_level` keyword argument is True,
189
+ then the `N5` key will be removed from metadata
190
+ """
191
+ for t, f in zarr_to_n5_keys:
192
+ array_metadata[t] = array_metadata.pop(f)
193
+ if top_level:
194
+ array_metadata.pop("n5")
195
+ array_metadata["zarr_format"] = ZARR_FORMAT
196
+
197
+ array_metadata["shape"] = array_metadata["shape"][::-1]
198
+ array_metadata["chunks"] = array_metadata["chunks"][::-1]
199
+ array_metadata["fill_value"] = 0 # also if None was requested
200
+ array_metadata["order"] = "C"
201
+ array_metadata["filters"] = None
202
+ array_metadata["dimension_separator"] = "."
203
+ array_metadata["dtype"] = np.dtype(array_metadata["dtype"]).str
204
+
205
+ compressor_config = array_metadata["compressor"]
206
+ compressor_config = compressor_config_to_zarr(compressor_config)
207
+ array_metadata["compressor"] = {
208
+ "id": N5ChunkWrapper.codec_id,
209
+ "compressor_config": compressor_config,
210
+ "dtype": array_metadata["dtype"],
211
+ "chunk_shape": array_metadata["chunks"],
212
+ }
213
+
214
+ return array_metadata
215
+
216
+
217
+ def attrs_to_zarr(attrs: dict[str, Any]) -> dict[str, Any]:
218
+ """
219
+ Get all zarr attributes from an N5 attributes dictionary.
220
+
221
+ (i.e.,
222
+ all non-keyword attributes).
223
+
224
+ """
225
+ # remove all N5 keywords
226
+ for n5_key in n5_keywords:
227
+ attrs.pop(n5_key, None)
228
+
229
+ return attrs
230
+
231
+
232
+ def json_loads(s: bytes | str) -> dict[str, Any]:
233
+ """Read JSON in a consistent way."""
234
+ return json.loads(ensure_text(s, "utf-8")) # type: ignore[no-any-return]
235
+
236
+
237
+ def json_dumps(o: Any) -> bytes:
238
+ """Write JSON in a consistent, human-readable way."""
239
+ return json.dumps(
240
+ o,
241
+ indent=4,
242
+ sort_keys=True,
243
+ ensure_ascii=True,
244
+ separators=(",", ": "),
245
+ cls=NumberEncoder,
246
+ ).encode("ascii")
247
+
248
+
249
+ class NumberEncoder(json.JSONEncoder):
250
+ def default(self, o: Any) -> float:
251
+ # See json.JSONEncoder.default docstring for explanation
252
+ # This is necessary to encode numpy dtype
253
+ if isinstance(o, numbers.Integral):
254
+ return int(o)
255
+ if isinstance(o, numbers.Real):
256
+ return float(o)
257
+ return json.JSONEncoder.default(self, o) # type: ignore[no-any-return]
258
+
259
+
260
+ def ensure_text(s: bytes | str, encoding: str = "utf-8") -> str:
261
+ if not isinstance(s, str):
262
+ return codecs.decode(s, encoding)
263
+ return s
264
+
265
+
266
+ def compressor_config_to_zarr(
267
+ compressor_config: dict[str, Any],
268
+ ) -> dict[str, Any] | None:
269
+ codec_id = compressor_config["type"]
270
+ zarr_config = {"id": codec_id}
271
+
272
+ if codec_id == "bzip2":
273
+ zarr_config["id"] = "bz2"
274
+ zarr_config["level"] = compressor_config["blockSize"]
275
+
276
+ elif codec_id == "blosc":
277
+ zarr_config["cname"] = compressor_config["cname"]
278
+ zarr_config["clevel"] = compressor_config["clevel"]
279
+ zarr_config["shuffle"] = compressor_config["shuffle"]
280
+ zarr_config["blocksize"] = compressor_config["blocksize"]
281
+
282
+ elif codec_id == "lzma":
283
+ zarr_config["format"] = compressor_config["format"]
284
+ zarr_config["check"] = compressor_config["check"]
285
+ zarr_config["preset"] = compressor_config["preset"]
286
+ zarr_config["filters"] = compressor_config["filters"]
287
+
288
+ elif codec_id == "xz":
289
+ zarr_config["id"] = "lzma"
290
+ zarr_config["format"] = 1 # lzma.FORMAT_XZ
291
+ zarr_config["check"] = -1
292
+ zarr_config["preset"] = compressor_config["preset"]
293
+ zarr_config["filters"] = None
294
+
295
+ elif codec_id == "gzip":
296
+ if compressor_config.get("useZlib"):
297
+ zarr_config["id"] = "zlib"
298
+ zarr_config["level"] = compressor_config["level"]
299
+ else:
300
+ zarr_config["id"] = "gzip"
301
+ zarr_config["level"] = compressor_config["level"]
302
+
303
+ elif codec_id == "raw":
304
+ return None
305
+
306
+ else:
307
+ zarr_config.update({k: v for k, v in compressor_config.items() if k != "type"})
308
+
309
+ return zarr_config
310
+
311
+
312
+ class N5ChunkWrapper(Codec): # type: ignore[misc]
313
+ codec_id = "n5_wrapper"
314
+ chunk_shape: tuple[int, ...]
315
+ dtype: np.dtype
316
+
317
+ def __init__(
318
+ self,
319
+ dtype: npt.DTypeLike,
320
+ chunk_shape: Sequence[int],
321
+ compressor_config: dict[str, Any] | None = None,
322
+ compressor: Codec | None = None,
323
+ ):
324
+ self.dtype = np.dtype(dtype)
325
+ self.chunk_shape = tuple(chunk_shape)
326
+ # is the dtype a little endian format?
327
+ self._little_endian = self.dtype.byteorder == "<" or (
328
+ self.dtype.byteorder == "=" and sys.byteorder == "little"
329
+ )
330
+
331
+ if compressor is not None:
332
+ if compressor_config is not None:
333
+ raise ValueError(
334
+ "Only one of compressor_config or compressor should be given."
335
+ )
336
+ compressor_config = compressor.get_config()
337
+
338
+ if compressor_config is None or compressor_config["id"] == "raw":
339
+ self.compressor_config = None
340
+ self._compressor = None
341
+ else:
342
+ self._compressor = get_codec(compressor_config)
343
+ self.compressor_config = self._compressor.get_config()
344
+
345
+ def get_config(self) -> dict[str, Any]:
346
+ return {"id": self.codec_id, "compressor_config": self.compressor_config}
347
+
348
+ def encode(self, chunk: npt.NDArray[Any]) -> bytes:
349
+ assert chunk.flags.c_contiguous, "Chunk is not C contiguous" # noqa: S101
350
+
351
+ header = self._create_header(chunk)
352
+ chunk = self._to_big_endian(chunk)
353
+
354
+ if self._compressor:
355
+ return header + self._compressor.encode(chunk) # type: ignore[no-any-return]
356
+ return header + chunk.tobytes(order="A")
357
+
358
+ def decode(
359
+ self, chunk: bytes, out: npt.NDArray[Any] | None = None
360
+ ) -> npt.NDArray[Any]:
361
+ len_header, chunk_shape = self._read_header(chunk)
362
+ chunk = chunk[len_header:]
363
+
364
+ if out is not None:
365
+ # out should only be used if we read a complete chunk
366
+ assert chunk_shape == self.chunk_shape, ( # noqa: S101
367
+ f"Expected chunk of shape {self.chunk_shape}, found {chunk_shape}"
368
+ )
369
+
370
+ if self._compressor:
371
+ self._compressor.decode(chunk, out)
372
+ else:
373
+ raise RuntimeError("Can't handle case with no compressor")
374
+ # ndarray_copy(chunk, out)
375
+
376
+ # we can byteswap in-place
377
+ if self._little_endian:
378
+ out.byteswap(inplace=True)
379
+
380
+ return out
381
+
382
+ if self._compressor:
383
+ chunk = self._compressor.decode(chunk)
384
+
385
+ # more expensive byteswap
386
+ chunk = self._from_big_endian(chunk) # type: ignore[assignment]
387
+
388
+ # read partial chunk
389
+ if chunk_shape != self.chunk_shape:
390
+ chunk = np.frombuffer(chunk, dtype=self.dtype) # type: ignore[assignment]
391
+ chunk = chunk.reshape(chunk_shape) # type: ignore[attr-defined]
392
+ complete_chunk = np.zeros(self.chunk_shape, dtype=self.dtype)
393
+ target_slices = tuple(slice(0, s) for s in chunk_shape)
394
+ complete_chunk[target_slices] = chunk
395
+ chunk = complete_chunk # type: ignore[assignment]
396
+
397
+ return chunk # type: ignore[return-value]
398
+
399
+ @staticmethod
400
+ def _create_header(chunk: npt.NDArray[Any]) -> bytes:
401
+ mode = struct.pack(">H", 0)
402
+ num_dims = struct.pack(">H", len(chunk.shape))
403
+ shape = b"".join(struct.pack(">I", d) for d in chunk.shape[::-1])
404
+
405
+ return mode + num_dims + shape
406
+
407
+ @staticmethod
408
+ def _read_header(chunk: bytes) -> tuple[int, tuple[int, ...]]:
409
+ num_dims = struct.unpack(">H", chunk[2:4])[0]
410
+ shape = tuple(
411
+ struct.unpack(">I", chunk[i : i + 4])[0]
412
+ for i in range(4, num_dims * 4 + 4, 4)
413
+ )[::-1]
414
+
415
+ len_header = 4 + num_dims * 4
416
+
417
+ return len_header, shape
418
+
419
+ def _to_big_endian(self, data: npt.NDArray[Any]) -> npt.NDArray[Any]:
420
+ # assumes data is ndarray
421
+
422
+ if self._little_endian:
423
+ return data.byteswap()
424
+ return data
425
+
426
+ def _from_big_endian(self, data: bytes) -> npt.NDArray[Any]:
427
+ # assumes data is byte array in big endian
428
+
429
+ if not self._little_endian:
430
+ return data # type:ignore[return-value]
431
+
432
+ a = np.frombuffer(data, self.dtype.newbyteorder(">"))
433
+ return a.astype(self.dtype)
434
+
435
+
436
+ register_codec(N5ChunkWrapper, N5ChunkWrapper.codec_id)
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.0.9'
32
- __version_tuple__ = version_tuple = (1, 0, 9)
31
+ __version__ = version = '2.0.0b1'
32
+ __version_tuple__ = version_tuple = (2, 0, 0, 'b1')
33
33
 
34
- __commit_id__ = commit_id = 'g544995990'
34
+ __commit_id__ = commit_id = 'ga2a4285e9'
@@ -20,8 +20,7 @@ import gcsfs
20
20
  import networkx as nx
21
21
  import numpy as np
22
22
  import xarray as xr
23
- import zarr.core
24
- import zarr.n5
23
+ import zarr.abc.store
25
24
  import zarr.storage
26
25
 
27
26
  from hoa_tools._n5 import N5FSStore
@@ -63,7 +62,7 @@ class Dataset(HOAMetadata):
63
62
  """
64
63
  Whether this dataset contains the whole organ or not.
65
64
  """
66
- return self.voi.startswith("complete")
65
+ return self.voi.startswith("complete") or self.voi.startswith("overview")
67
66
 
68
67
  @property
69
68
  def is_zoom(self) -> bool:
@@ -148,15 +147,21 @@ class Dataset(HOAMetadata):
148
147
 
149
148
  # n5://gs://ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/S-20-29/heart/2.5um_VOI-01_bm05/
150
149
  bucket, path = gcs_path.split("/", maxsplit=1)
151
- fs = gcsfs.GCSFileSystem(project=bucket, token="anon", access="read_only") # noqa: S106
150
+ fs = gcsfs.GCSFileSystem(
151
+ project="ucl-hip-ct",
152
+ token="anon", # noqa: S106
153
+ access="read_only",
154
+ asynchronous=True,
155
+ )
156
+ store: zarr.abc.store.Store
152
157
  if self._remote_fmt == "n5":
153
- store = N5FSStore(url=bucket, fs=fs, mode="r")
158
+ store = N5FSStore(fs=fs, path=f"/{bucket}", read_only=True)
154
159
  elif self._remote_fmt == "zarr":
155
- store = zarr.storage.FSStore(url=bucket, fs=fs, mode="r")
160
+ store = zarr.storage.FsspecStore(fs=fs, path=f"/{bucket}", read_only=True)
156
161
 
157
- return zarr.open_group(store, mode="r", path=path)
162
+ return zarr.open_group(store, mode="r", path=path, zarr_format=2)
158
163
 
159
- def _remote_array(self, *, downsample_level: int) -> zarr.core.Array:
164
+ def _remote_array(self, *, downsample_level: int) -> zarr.Array:
160
165
  """
161
166
  Get an object representing the data array in the remote Google Cloud Store.
162
167
  """
@@ -168,7 +173,7 @@ class Dataset(HOAMetadata):
168
173
  key = f"s{downsample_level}"
169
174
  else:
170
175
  key = f"{downsample_level}"
171
- return self._remote_store[key]
176
+ return self._remote_store[key] # type: ignore[return-value]
172
177
 
173
178
  def data_array(self, *, downsample_level: int) -> xr.DataArray:
174
179
  """
@@ -216,7 +221,7 @@ def _load_datasets_from_files(data_dir: Path) -> dict[str, Dataset]:
216
221
  }
217
222
  if len(datasets) == 0:
218
223
  raise FileNotFoundError(
219
- f"Did not find any dataset metadata files at {data_dir}" # noqa: EM102
224
+ f"Did not find any dataset metadata files at {data_dir}"
220
225
  )
221
226
  return datasets
222
227
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hoa-tools
3
- Version: 1.0.9
3
+ Version: 2.0.0b1
4
4
  Summary: Tools for working with the Human Organ Atlas
5
5
  Author-email: David Stansby <d.stansby@ucl.ac.uk>
6
6
  License: Copyright (c) 2024, David Stansby
@@ -49,7 +49,7 @@ Requires-Dist: pandas>=2
49
49
  Requires-Dist: pydantic>=2
50
50
  Requires-Dist: simpleitk
51
51
  Requires-Dist: xarray
52
- Requires-Dist: zarr<3,>2.16
52
+ Requires-Dist: zarr>=3
53
53
  Provides-Extra: dev
54
54
  Requires-Dist: build; extra == "dev"
55
55
  Requires-Dist: mypy; extra == "dev"
@@ -5,7 +5,7 @@ pandas>=2
5
5
  pydantic>=2
6
6
  simpleitk
7
7
  xarray
8
- zarr<3,>2.16
8
+ zarr>=3
9
9
 
10
10
  [dev]
11
11
  build