driftlessmap 1.2.0__tar.gz → 1.4.0__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.
Files changed (253) hide show
  1. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/CITATION.cff +1 -1
  2. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/MANIFEST.in +2 -0
  3. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/PKG-INFO +58 -19
  4. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/README.md +54 -17
  5. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/WhatsNew.md +41 -0
  6. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/app.py +630 -33
  7. driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.icns +0 -0
  8. driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.ico +0 -0
  9. driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.png +0 -0
  10. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_reader.py +48 -0
  11. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_view.py +37 -3
  12. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/main_window.ui +12 -3
  13. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/persistence.py +89 -8
  14. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_utiles.py +21 -0
  15. driftlessmap-1.4.0/driftlessmap/provenance.py +317 -0
  16. driftlessmap-1.4.0/driftlessmap/run_driftlessmap.py +13 -0
  17. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/toolbox.py +22 -1
  18. driftlessmap-1.4.0/driftlessmap/version.py +9 -0
  19. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/PKG-INFO +58 -19
  20. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/SOURCES.txt +6 -0
  21. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/requires.txt +4 -1
  22. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/pyproject.toml +6 -1
  23. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_image_reader.py +22 -0
  24. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_packaging_metadata.py +30 -1
  25. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_persistence.py +59 -0
  26. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_mapping.py +23 -0
  27. driftlessmap-1.4.0/tests/test_project_persistence.py +163 -0
  28. driftlessmap-1.4.0/tests/test_provenance.py +97 -0
  29. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_runtime_paths.py +17 -4
  30. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_version.py +23 -2
  31. driftlessmap-1.2.0/driftlessmap/run_driftlessmap.py +0 -4
  32. driftlessmap-1.2.0/driftlessmap/version.py +0 -3
  33. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/AUTHOR.txt +0 -0
  34. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/CONTRIBUTORS.md +0 -0
  35. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/LICENSE.txt +0 -0
  36. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/ORIGINS.md +0 -0
  37. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/THANKS.txt +0 -0
  38. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/__init__.py +0 -0
  39. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/__main__.py +0 -0
  40. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/about.py +0 -0
  41. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/allen_downloader.py +0 -0
  42. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_downloader.py +0 -0
  43. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_loader.py +0 -0
  44. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_processor.py +0 -0
  45. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_transform.py +0 -0
  46. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_view.py +0 -0
  47. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/cell_detection.py +0 -0
  48. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/coordinate_validation.py +0 -0
  49. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/czi_reader.py +0 -0
  50. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/WHS_atlas_labels.pkl +0 -0
  51. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/allen_mice_atlas_labels.pkl +0 -0
  52. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/atlas_labels.pkl +0 -0
  53. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/query.csv +0 -0
  54. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/download_utils.py +0 -0
  55. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/herbs.png +0 -0
  56. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/backward.svg +0 -0
  57. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/dot.svg +0 -0
  58. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/down-arrow.svg +0 -0
  59. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_backward.svg +0 -0
  60. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_forward.svg +0 -0
  61. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/forward.svg +0 -0
  62. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/add.png +0 -0
  63. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/ai.png +0 -0
  64. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_off.png +0 -0
  65. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_on.png +0 -0
  66. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_white.png +0 -0
  67. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/hi.png +0 -0
  68. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/trash.png +0 -0
  69. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/object.svg +0 -0
  70. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/add.png +0 -0
  71. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.png +0 -0
  72. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.svg +0 -0
  73. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/bnd.svg +0 -0
  74. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section.png +0 -0
  75. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section2.png +0 -0
  76. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/cell.svg +0 -0
  77. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/check.svg +0 -0
  78. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/compare.svg +0 -0
  79. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/contour.svg +0 -0
  80. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/h_section.png +0 -0
  81. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/info.svg +0 -0
  82. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.png +0 -0
  83. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.svg +0 -0
  84. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/line.svg +0 -0
  85. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link.svg +0 -0
  86. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link_off.svg +0 -0
  87. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/merge.svg +0 -0
  88. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/object.svg +0 -0
  89. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.png +0 -0
  90. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.svg +0 -0
  91. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_horizontal.svg +0 -0
  92. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_vertical.svg +0 -0
  93. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/s_section.png +0 -0
  94. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.png +0 -0
  95. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.svg +0 -0
  96. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/trash.png +0 -0
  97. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tree_checked.svg +0 -0
  98. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.png +0 -0
  99. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.svg +0 -0
  100. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview2.png +0 -0
  101. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/virus.svg +0 -0
  102. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tdown.svg +0 -0
  103. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept.svg +0 -0
  104. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept2.svg +0 -0
  105. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim.svg +0 -0
  106. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim_not.svg +0 -0
  107. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anchor.svg +0 -0
  108. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anticlockwise_rotation.svg +0 -0
  109. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/atlas_icon.png +0 -0
  110. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/boundary_register.svg +0 -0
  111. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cancel.svg +0 -0
  112. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select.svg +0 -0
  113. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select_not.svg +0 -0
  114. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/check.svg +0 -0
  115. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/clockwise_rotation.svg +0 -0
  116. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path.svg +0 -0
  117. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2 copy.svg +0 -0
  118. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2.svg +0 -0
  119. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.png +0 -0
  120. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.svg +0 -0
  121. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye.svg +0 -0
  122. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye_closed.svg +0 -0
  123. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/fill.svg +0 -0
  124. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/gps.svg +0 -0
  125. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/h_flip.png +0 -0
  126. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/handle.png +0 -0
  127. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.png +0 -0
  128. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.svg +0 -0
  129. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/info.svg +0 -0
  130. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.png +0 -0
  131. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.svg +0 -0
  132. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.png +0 -0
  133. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.svg +0 -0
  134. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/left90.png +0 -0
  135. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line.svg +0 -0
  136. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line_sites.svg +0 -0
  137. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.png +0 -0
  138. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.svg +0 -0
  139. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/list.svg +0 -0
  140. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/location.svg +0 -0
  141. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic-wand.svg +0 -0
  142. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic_white.png +0 -0
  143. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/mask.svg +0 -0
  144. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/match.svg +0 -0
  145. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matchbnd.svg +0 -0
  146. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matching.svg +0 -0
  147. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/merge.svg +0 -0
  148. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_down.png +0 -0
  149. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_left.png +0 -0
  150. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_right.png +0 -0
  151. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_up.png +0 -0
  152. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/moving.png +0 -0
  153. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi-probe.svg +0 -0
  154. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_pencil.svg +0 -0
  155. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_probe.png +0 -0
  156. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/object.svg +0 -0
  157. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/open_path.svg +0 -0
  158. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.png +0 -0
  159. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.svg +0 -0
  160. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.png +0 -0
  161. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.svg +0 -0
  162. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/plasso.png +0 -0
  163. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/probe.svg +0 -0
  164. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/radar.svg +0 -0
  165. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation.svg +0 -0
  166. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_clockwise.svg +0 -0
  167. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_counter_clockwise.svg +0 -0
  168. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/ruler.svg +0 -0
  169. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/separate_sites.svg +0 -0
  170. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/single_pencil.svg +0 -0
  171. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa.svg +0 -0
  172. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa_delete.svg +0 -0
  173. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toaa.svg +0 -0
  174. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh.svg +0 -0
  175. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh_delete.svg +0 -0
  176. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/tohh.svg +0 -0
  177. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.png +0 -0
  178. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.svg +0 -0
  179. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/triangulation.svg +0 -0
  180. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/two_window.png +0 -0
  181. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/unmerge.svg +0 -0
  182. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/v_flip.png +0 -0
  183. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus.svg +0 -0
  184. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus_register.svg +0 -0
  185. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/vis2d.svg +0 -0
  186. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window2.png +0 -0
  187. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window3.png +0 -0
  188. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window4.png +0 -0
  189. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_close.svg +0 -0
  190. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_open.svg +0 -0
  191. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/up-arrow.svg +0 -0
  192. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_curves.py +0 -0
  193. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_stacks.py +0 -0
  194. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/images_reader.py +0 -0
  195. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/label_tree.py +0 -0
  196. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/layer_validation.py +0 -0
  197. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/layers_control.py +0 -0
  198. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/movable_points.py +0 -0
  199. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/obj_items.py +0 -0
  200. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/object_control.py +0 -0
  201. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/popup_message.py +0 -0
  202. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_csv.py +0 -0
  203. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_reconstruction.py +0 -0
  204. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/atlas_view_group_box.qss +0 -0
  205. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/box_label.qss +0 -0
  206. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/channel_selector.qss +0 -0
  207. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/color_combo.qss +0 -0
  208. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/decor_label.qss +0 -0
  209. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/dialogs.qss +0 -0
  210. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/hidden_line_edit.qss +0 -0
  211. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/label_tree.qss +0 -0
  212. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/main_window.qss +0 -0
  213. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/menu_bar.qss +0 -0
  214. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/multi_handle_slider.qss +0 -0
  215. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/obj_ctrl_bottom_button.qss +0 -0
  216. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/object_text_button.qss +0 -0
  217. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/page_control.qss +0 -0
  218. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/rotation_button.qss +0 -0
  219. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/side_bar.qss +0 -0
  220. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/spinbox.qss +0 -0
  221. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/tabs.qss +0 -0
  222. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/tool_bar.qss +0 -0
  223. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/resources.py +0 -0
  224. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/roi_analysis.py +0 -0
  225. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/slice_stacks.py +0 -0
  226. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/slice_validation.py +0 -0
  227. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/triangulation.py +0 -0
  228. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/triangulation_points.py +0 -0
  229. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/user_settings.py +0 -0
  230. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/uuuuuu.py +0 -0
  231. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/widgets_utils.py +0 -0
  232. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/wtiles.py +0 -0
  233. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/dependency_links.txt +0 -0
  234. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/entry_points.txt +0 -0
  235. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/top_level.txt +0 -0
  236. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/setup.cfg +0 -0
  237. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/setup.py +0 -0
  238. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_allen_downloader.py +0 -0
  239. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_loader.py +0 -0
  240. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_transform.py +0 -0
  241. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_view.py +0 -0
  242. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_cell_detection.py +0 -0
  243. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_coordinate_validation.py +0 -0
  244. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_download_utils.py +0 -0
  245. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_label_tree.py +0 -0
  246. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_layer_validation.py +0 -0
  247. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_layers_control.py +0 -0
  248. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_object_control.py +0 -0
  249. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_csv.py +0 -0
  250. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_reconstruction.py +0 -0
  251. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_roi_analysis.py +0 -0
  252. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_slice_validation.py +0 -0
  253. {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_triangulation.py +0 -0
@@ -4,7 +4,7 @@ message: >-
4
4
  HERBS paper listed under references.
5
5
  title: DriftlessMap
6
6
  type: software
7
- version: 1.2.0
7
+ version: 1.4.0
8
8
  authors:
9
9
  - name: Mohebi & Associates
10
10
  website: https://www.mohebi-associates.org/
@@ -25,6 +25,8 @@ include driftlessmap/data/atlas_labels.pkl
25
25
  # Included are: icons/, data/, qss/
26
26
  recursive-include driftlessmap/icons *.svg
27
27
  recursive-include driftlessmap/icons *.png
28
+ recursive-include driftlessmap/icons *.ico
29
+ recursive-include driftlessmap/icons *.icns
28
30
 
29
31
  recursive-include driftlessmap/qss *.qss
30
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: driftlessmap
3
- Version: 1.2.0
3
+ Version: 1.4.0
4
4
  Summary: Interactive histology registration and brain-atlas mapping
5
5
  Author: Pearl Saldanha, Jacopo Paglia, Jonathan R. Whitlock, Mohebi & Associates, Ali Mohebi
6
6
  Author-email: Jingyi Guo Fuglstad <jingyi.g.fuglstad@gmail.com>
@@ -34,7 +34,7 @@ Requires-Dist: PyQt6<7,>=6.8
34
34
  Requires-Dist: pyqtgraph<0.15,>=0.14
35
35
  Requires-Dist: PyOpenGL<4,>=3.1.7
36
36
  Requires-Dist: superqt<0.9,>=0.8
37
- Requires-Dist: opencv-python<6,>=4.10
37
+ Requires-Dist: opencv-python-headless<6,>=4.10
38
38
  Requires-Dist: numba<1,>=0.61
39
39
  Requires-Dist: numpy<3,>=2.0
40
40
  Requires-Dist: scipy<2,>=1.13
@@ -51,6 +51,8 @@ Provides-Extra: test
51
51
  Requires-Dist: pytest>=8.3; extra == "test"
52
52
  Requires-Dist: ruff>=0.9; extra == "test"
53
53
  Requires-Dist: tomli>=2; python_version < "3.11" and extra == "test"
54
+ Provides-Extra: desktop-build
55
+ Requires-Dist: pyinstaller<7,>=6.11; extra == "desktop-build"
54
56
  Dynamic: license-file
55
57
 
56
58
  # DriftlessMap
@@ -98,43 +100,73 @@ See [CITATION.cff](CITATION.cff) for machine-readable citation metadata.
98
100
  - Safe, versioned project and object archives.
99
101
  - Support for custom compatible atlases.
100
102
 
101
- ## Install from PyPI
103
+ ## Installation
102
104
 
103
- DriftlessMap 1.2.0 supports Python 3.10–3.14 and Qt 6 through PyQt6. Python
104
- 3.14 in a dedicated environment is recommended for new installations.
105
+ DriftlessMap 1.4.0 is available as a desktop application for end users and as
106
+ a Python package for developers.
105
107
 
106
- Install the latest stable release:
108
+ ### Mode 1: desktop application for end users
107
109
 
108
- ```bash
109
- python -m pip install driftlessmap
110
- ```
110
+ No Python or Conda installation is required. Download the asset for your
111
+ computer from [GitHub Releases](https://github.com/mohebi-n-associates/DriftlessMap/releases):
112
+
113
+ - **Windows 64-bit:** download `DriftlessMap-1.4.0-Windows-x64.zip`, extract
114
+ the complete folder, and double-click `DriftlessMap.exe`. Do not move the
115
+ executable out of its extracted folder.
116
+ - **macOS:** download `DriftlessMap-1.4.0-macOS.dmg`, open it, and drag
117
+ `DriftlessMap.app` to Applications. The application bundle includes the
118
+ DriftlessMap icon and all Python dependencies.
119
+
120
+ Release builds are currently unsigned. If Windows SmartScreen or macOS
121
+ Gatekeeper displays a warning, verify that the file came from the official
122
+ release page. On macOS, Control-click the app, choose **Open**, and confirm the
123
+ first launch. Code signing and notarization are planned for a future release.
111
124
 
112
- For a dedicated Conda environment:
125
+ ### Mode 2: Conda and pip for developers
126
+
127
+ DriftlessMap supports Python 3.10–3.14 and Qt 6 through PyQt6. Python 3.14 is
128
+ recommended for core development:
113
129
 
114
130
  ```bash
115
131
  conda create --name DriftlessMap python=3.14 -y
116
132
  conda activate DriftlessMap
117
133
  python -m pip install --upgrade pip
134
+ git clone https://github.com/mohebi-n-associates/DriftlessMap.git
135
+ cd DriftlessMap
136
+ python -m pip install -e ".[test]"
137
+ ```
138
+
139
+ Launch the editable installation with `driftlessmap` or
140
+ `python -m driftlessmap`. Library users can call `driftlessmap.run()`.
141
+
142
+ To use the stable PyPI package instead of an editable checkout, run:
143
+
144
+ ```bash
118
145
  python -m pip install driftlessmap
119
146
  ```
120
147
 
121
- Launch the application with any of:
148
+ #### Check your version and upgrade
149
+
150
+ Check the installed version:
122
151
 
123
152
  ```bash
124
- driftlessmap
125
- python -m driftlessmap
153
+ python -m driftlessmap --version
126
154
  ```
127
155
 
128
- ```python
129
- import driftlessmap
156
+ Compare it against the latest stable release on
157
+ [PyPI](https://pypi.org/project/driftlessmap/):
130
158
 
131
- driftlessmap.run()
159
+ ```bash
160
+ pip index versions driftlessmap
132
161
  ```
133
162
 
134
- For an editable development install, clone the repository and use
135
- `python -m pip install -e .`.
163
+ Upgrade to the latest stable release:
136
164
 
137
- ### Zeiss CZI files
165
+ ```bash
166
+ python -m pip install --upgrade driftlessmap
167
+ ```
168
+
169
+ #### Zeiss CZI files
138
170
 
139
171
  CZI support uses the optional `aicspylibczi` package, whose prebuilt packages
140
172
  currently support Python through 3.13:
@@ -146,6 +178,13 @@ python -m pip install --upgrade pip
146
178
  python -m pip install "driftlessmap[czi]"
147
179
  ```
148
180
 
181
+ #### Building the desktop applications
182
+
183
+ Native applications must be built on their target operating system. The
184
+ release workflow builds both platforms automatically; maintainers can also run
185
+ `packaging/build_windows.ps1` on Windows or `packaging/build_macos.sh` on
186
+ macOS. Outputs are written to `dist/` as a Windows ZIP and a macOS DMG.
187
+
149
188
  ## Compatibility with HERBS
150
189
 
151
190
  The rebrand is designed not to strand existing research data:
@@ -43,43 +43,73 @@ See [CITATION.cff](CITATION.cff) for machine-readable citation metadata.
43
43
  - Safe, versioned project and object archives.
44
44
  - Support for custom compatible atlases.
45
45
 
46
- ## Install from PyPI
46
+ ## Installation
47
47
 
48
- DriftlessMap 1.2.0 supports Python 3.10–3.14 and Qt 6 through PyQt6. Python
49
- 3.14 in a dedicated environment is recommended for new installations.
48
+ DriftlessMap 1.4.0 is available as a desktop application for end users and as
49
+ a Python package for developers.
50
50
 
51
- Install the latest stable release:
51
+ ### Mode 1: desktop application for end users
52
52
 
53
- ```bash
54
- python -m pip install driftlessmap
55
- ```
53
+ No Python or Conda installation is required. Download the asset for your
54
+ computer from [GitHub Releases](https://github.com/mohebi-n-associates/DriftlessMap/releases):
55
+
56
+ - **Windows 64-bit:** download `DriftlessMap-1.4.0-Windows-x64.zip`, extract
57
+ the complete folder, and double-click `DriftlessMap.exe`. Do not move the
58
+ executable out of its extracted folder.
59
+ - **macOS:** download `DriftlessMap-1.4.0-macOS.dmg`, open it, and drag
60
+ `DriftlessMap.app` to Applications. The application bundle includes the
61
+ DriftlessMap icon and all Python dependencies.
62
+
63
+ Release builds are currently unsigned. If Windows SmartScreen or macOS
64
+ Gatekeeper displays a warning, verify that the file came from the official
65
+ release page. On macOS, Control-click the app, choose **Open**, and confirm the
66
+ first launch. Code signing and notarization are planned for a future release.
56
67
 
57
- For a dedicated Conda environment:
68
+ ### Mode 2: Conda and pip for developers
69
+
70
+ DriftlessMap supports Python 3.10–3.14 and Qt 6 through PyQt6. Python 3.14 is
71
+ recommended for core development:
58
72
 
59
73
  ```bash
60
74
  conda create --name DriftlessMap python=3.14 -y
61
75
  conda activate DriftlessMap
62
76
  python -m pip install --upgrade pip
77
+ git clone https://github.com/mohebi-n-associates/DriftlessMap.git
78
+ cd DriftlessMap
79
+ python -m pip install -e ".[test]"
80
+ ```
81
+
82
+ Launch the editable installation with `driftlessmap` or
83
+ `python -m driftlessmap`. Library users can call `driftlessmap.run()`.
84
+
85
+ To use the stable PyPI package instead of an editable checkout, run:
86
+
87
+ ```bash
63
88
  python -m pip install driftlessmap
64
89
  ```
65
90
 
66
- Launch the application with any of:
91
+ #### Check your version and upgrade
92
+
93
+ Check the installed version:
67
94
 
68
95
  ```bash
69
- driftlessmap
70
- python -m driftlessmap
96
+ python -m driftlessmap --version
71
97
  ```
72
98
 
73
- ```python
74
- import driftlessmap
99
+ Compare it against the latest stable release on
100
+ [PyPI](https://pypi.org/project/driftlessmap/):
75
101
 
76
- driftlessmap.run()
102
+ ```bash
103
+ pip index versions driftlessmap
77
104
  ```
78
105
 
79
- For an editable development install, clone the repository and use
80
- `python -m pip install -e .`.
106
+ Upgrade to the latest stable release:
81
107
 
82
- ### Zeiss CZI files
108
+ ```bash
109
+ python -m pip install --upgrade driftlessmap
110
+ ```
111
+
112
+ #### Zeiss CZI files
83
113
 
84
114
  CZI support uses the optional `aicspylibczi` package, whose prebuilt packages
85
115
  currently support Python through 3.13:
@@ -91,6 +121,13 @@ python -m pip install --upgrade pip
91
121
  python -m pip install "driftlessmap[czi]"
92
122
  ```
93
123
 
124
+ #### Building the desktop applications
125
+
126
+ Native applications must be built on their target operating system. The
127
+ release workflow builds both platforms automatically; maintainers can also run
128
+ `packaging/build_windows.ps1` on Windows or `packaging/build_macos.sh` on
129
+ macOS. Outputs are written to `dist/` as a Windows ZIP and a macOS DMG.
130
+
94
131
  ## Compatibility with HERBS
95
132
 
96
133
  The rebrand is designed not to strand existing research data:
@@ -3,6 +3,47 @@
3
3
  This cumulative release history is maintained as a single document. New
4
4
  releases are added at the top; earlier release notes remain below them.
5
5
 
6
+ ## DriftlessMap 1.4.0
7
+
8
+ Release date: 27 August 2026
9
+
10
+ This release adds native desktop distribution for Windows and macOS. Official
11
+ GitHub releases can now include a Windows ZIP containing `DriftlessMap.exe` and
12
+ a macOS DMG containing `DriftlessMap.app`, built reproducibly on native GitHub
13
+ Actions runners with PyInstaller. Both bundles include the application runtime,
14
+ optional CZI support, and a new DriftlessMap application icon.
15
+
16
+ The running version is now visible in both the main-window title and the
17
+ dashboard status bar, and the application exposes its name, version,
18
+ organization, and icon through Qt desktop metadata. The README and manual now
19
+ separate the no-Python desktop installation intended for end users from the
20
+ Conda/pip workflow intended for developers.
21
+
22
+ ---
23
+
24
+ ## DriftlessMap 1.3.0
25
+
26
+ Release date: 27 August 2026
27
+
28
+ This release makes project persistence suitable for reproducible scientific
29
+ work. Projects now record software/schema metadata, relative and absolute path
30
+ hints, SHA-256 identities for source histology and processed atlas resources,
31
+ complete registration topology, complete probe-planning state, and all object
32
+ pieces and merged objects.
33
+
34
+ The exact active histology raster remains embedded in every project and can be
35
+ restored when the original source has moved. **Save Portable Project** also
36
+ packages the original histology source for multi-scene or future reprocessing
37
+ work. Processed volume atlases remain external to avoid very large duplicate
38
+ archives, but they are verified before use and can be relocated interactively.
39
+
40
+ Object files now carry atlas and coordinate-frame provenance. The former Save
41
+ Object/Load Objects wording is now Export Object/Import Objects to clarify that
42
+ objects are already included in a project. Standalone `.dmapprobe` save/load is
43
+ implemented for probe geometry, face, multi-probe offsets, and merge choices.
44
+
45
+ ---
46
+
6
47
  ## DriftlessMap 1.2.0
7
48
 
8
49
  Release date: 27 July 2026