driftlessmap 1.1.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.1.0 → driftlessmap-1.4.0}/CITATION.cff +1 -1
  2. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/MANIFEST.in +2 -0
  3. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/PKG-INFO +61 -14
  4. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/README.md +57 -12
  5. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/WhatsNew.md +79 -0
  6. {driftlessmap-1.1.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.1.0 → driftlessmap-1.4.0}/driftlessmap/image_reader.py +48 -0
  11. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/image_view.py +37 -3
  12. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/main_window.ui +12 -3
  13. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/object_control.py +3 -3
  14. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/persistence.py +89 -8
  15. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/probe_csv.py +78 -3
  16. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/probe_reconstruction.py +79 -1
  17. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/probe_utiles.py +49 -0
  18. driftlessmap-1.4.0/driftlessmap/provenance.py +317 -0
  19. driftlessmap-1.4.0/driftlessmap/run_driftlessmap.py +13 -0
  20. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/toolbox.py +22 -1
  21. driftlessmap-1.4.0/driftlessmap/version.py +9 -0
  22. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/PKG-INFO +61 -14
  23. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/SOURCES.txt +6 -0
  24. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/requires.txt +4 -1
  25. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/pyproject.toml +6 -1
  26. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_image_reader.py +22 -0
  27. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_object_control.py +2 -1
  28. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_packaging_metadata.py +31 -1
  29. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_persistence.py +59 -0
  30. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_probe_csv.py +28 -1
  31. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_probe_mapping.py +32 -0
  32. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_probe_reconstruction.py +17 -1
  33. driftlessmap-1.4.0/tests/test_project_persistence.py +163 -0
  34. driftlessmap-1.4.0/tests/test_provenance.py +97 -0
  35. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_runtime_paths.py +17 -4
  36. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_version.py +23 -2
  37. driftlessmap-1.1.0/driftlessmap/run_driftlessmap.py +0 -4
  38. driftlessmap-1.1.0/driftlessmap/version.py +0 -3
  39. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/AUTHOR.txt +0 -0
  40. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/CONTRIBUTORS.md +0 -0
  41. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/LICENSE.txt +0 -0
  42. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/ORIGINS.md +0 -0
  43. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/THANKS.txt +0 -0
  44. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/__init__.py +0 -0
  45. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/__main__.py +0 -0
  46. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/about.py +0 -0
  47. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/allen_downloader.py +0 -0
  48. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/atlas_downloader.py +0 -0
  49. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/atlas_loader.py +0 -0
  50. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/atlas_processor.py +0 -0
  51. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/atlas_transform.py +0 -0
  52. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/atlas_view.py +0 -0
  53. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/cell_detection.py +0 -0
  54. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/coordinate_validation.py +0 -0
  55. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/czi_reader.py +0 -0
  56. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/data/WHS_atlas_labels.pkl +0 -0
  57. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/data/allen_mice_atlas_labels.pkl +0 -0
  58. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/data/atlas_labels.pkl +0 -0
  59. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/data/query.csv +0 -0
  60. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/download_utils.py +0 -0
  61. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/herbs.png +0 -0
  62. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/backward.svg +0 -0
  63. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/dot.svg +0 -0
  64. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/down-arrow.svg +0 -0
  65. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_backward.svg +0 -0
  66. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_forward.svg +0 -0
  67. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/forward.svg +0 -0
  68. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/add.png +0 -0
  69. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/ai.png +0 -0
  70. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_off.png +0 -0
  71. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_on.png +0 -0
  72. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_white.png +0 -0
  73. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/hi.png +0 -0
  74. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/trash.png +0 -0
  75. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/object.svg +0 -0
  76. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/add.png +0 -0
  77. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.png +0 -0
  78. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.svg +0 -0
  79. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/bnd.svg +0 -0
  80. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section.png +0 -0
  81. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section2.png +0 -0
  82. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/cell.svg +0 -0
  83. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/check.svg +0 -0
  84. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/compare.svg +0 -0
  85. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/contour.svg +0 -0
  86. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/h_section.png +0 -0
  87. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/info.svg +0 -0
  88. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.png +0 -0
  89. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.svg +0 -0
  90. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/line.svg +0 -0
  91. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link.svg +0 -0
  92. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link_off.svg +0 -0
  93. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/merge.svg +0 -0
  94. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/object.svg +0 -0
  95. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.png +0 -0
  96. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.svg +0 -0
  97. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_horizontal.svg +0 -0
  98. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_vertical.svg +0 -0
  99. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/s_section.png +0 -0
  100. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.png +0 -0
  101. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.svg +0 -0
  102. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/trash.png +0 -0
  103. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tree_checked.svg +0 -0
  104. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.png +0 -0
  105. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.svg +0 -0
  106. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview2.png +0 -0
  107. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/virus.svg +0 -0
  108. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/tdown.svg +0 -0
  109. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept.svg +0 -0
  110. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept2.svg +0 -0
  111. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim.svg +0 -0
  112. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim_not.svg +0 -0
  113. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anchor.svg +0 -0
  114. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anticlockwise_rotation.svg +0 -0
  115. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/atlas_icon.png +0 -0
  116. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/boundary_register.svg +0 -0
  117. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cancel.svg +0 -0
  118. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select.svg +0 -0
  119. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select_not.svg +0 -0
  120. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/check.svg +0 -0
  121. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/clockwise_rotation.svg +0 -0
  122. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path.svg +0 -0
  123. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2 copy.svg +0 -0
  124. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2.svg +0 -0
  125. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.png +0 -0
  126. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.svg +0 -0
  127. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye.svg +0 -0
  128. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye_closed.svg +0 -0
  129. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/fill.svg +0 -0
  130. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/gps.svg +0 -0
  131. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/h_flip.png +0 -0
  132. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/handle.png +0 -0
  133. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.png +0 -0
  134. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.svg +0 -0
  135. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/info.svg +0 -0
  136. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.png +0 -0
  137. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.svg +0 -0
  138. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.png +0 -0
  139. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.svg +0 -0
  140. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/left90.png +0 -0
  141. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line.svg +0 -0
  142. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line_sites.svg +0 -0
  143. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.png +0 -0
  144. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.svg +0 -0
  145. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/list.svg +0 -0
  146. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/location.svg +0 -0
  147. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic-wand.svg +0 -0
  148. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic_white.png +0 -0
  149. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/mask.svg +0 -0
  150. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/match.svg +0 -0
  151. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matchbnd.svg +0 -0
  152. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matching.svg +0 -0
  153. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/merge.svg +0 -0
  154. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_down.png +0 -0
  155. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_left.png +0 -0
  156. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_right.png +0 -0
  157. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_up.png +0 -0
  158. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/moving.png +0 -0
  159. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi-probe.svg +0 -0
  160. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_pencil.svg +0 -0
  161. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_probe.png +0 -0
  162. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/object.svg +0 -0
  163. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/open_path.svg +0 -0
  164. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.png +0 -0
  165. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.svg +0 -0
  166. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.png +0 -0
  167. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.svg +0 -0
  168. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/plasso.png +0 -0
  169. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/probe.svg +0 -0
  170. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/radar.svg +0 -0
  171. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation.svg +0 -0
  172. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_clockwise.svg +0 -0
  173. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_counter_clockwise.svg +0 -0
  174. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/ruler.svg +0 -0
  175. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/separate_sites.svg +0 -0
  176. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/single_pencil.svg +0 -0
  177. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa.svg +0 -0
  178. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa_delete.svg +0 -0
  179. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toaa.svg +0 -0
  180. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh.svg +0 -0
  181. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh_delete.svg +0 -0
  182. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/tohh.svg +0 -0
  183. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.png +0 -0
  184. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.svg +0 -0
  185. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/triangulation.svg +0 -0
  186. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/two_window.png +0 -0
  187. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/unmerge.svg +0 -0
  188. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/v_flip.png +0 -0
  189. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus.svg +0 -0
  190. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus_register.svg +0 -0
  191. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/vis2d.svg +0 -0
  192. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window2.png +0 -0
  193. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window3.png +0 -0
  194. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window4.png +0 -0
  195. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_close.svg +0 -0
  196. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_open.svg +0 -0
  197. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/icons/up-arrow.svg +0 -0
  198. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/image_curves.py +0 -0
  199. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/image_stacks.py +0 -0
  200. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/images_reader.py +0 -0
  201. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/label_tree.py +0 -0
  202. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/layer_validation.py +0 -0
  203. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/layers_control.py +0 -0
  204. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/movable_points.py +0 -0
  205. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/obj_items.py +0 -0
  206. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/popup_message.py +0 -0
  207. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/atlas_view_group_box.qss +0 -0
  208. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/box_label.qss +0 -0
  209. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/channel_selector.qss +0 -0
  210. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/color_combo.qss +0 -0
  211. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/decor_label.qss +0 -0
  212. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/dialogs.qss +0 -0
  213. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/hidden_line_edit.qss +0 -0
  214. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/label_tree.qss +0 -0
  215. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/main_window.qss +0 -0
  216. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/menu_bar.qss +0 -0
  217. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/multi_handle_slider.qss +0 -0
  218. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/obj_ctrl_bottom_button.qss +0 -0
  219. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/object_text_button.qss +0 -0
  220. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/page_control.qss +0 -0
  221. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/rotation_button.qss +0 -0
  222. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/side_bar.qss +0 -0
  223. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/spinbox.qss +0 -0
  224. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/tabs.qss +0 -0
  225. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/qss/tool_bar.qss +0 -0
  226. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/resources.py +0 -0
  227. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/roi_analysis.py +0 -0
  228. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/slice_stacks.py +0 -0
  229. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/slice_validation.py +0 -0
  230. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/triangulation.py +0 -0
  231. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/triangulation_points.py +0 -0
  232. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/user_settings.py +0 -0
  233. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/uuuuuu.py +0 -0
  234. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/widgets_utils.py +0 -0
  235. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap/wtiles.py +0 -0
  236. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/dependency_links.txt +0 -0
  237. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/entry_points.txt +0 -0
  238. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/top_level.txt +0 -0
  239. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/setup.cfg +0 -0
  240. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/setup.py +0 -0
  241. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_allen_downloader.py +0 -0
  242. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_atlas_loader.py +0 -0
  243. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_atlas_transform.py +0 -0
  244. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_atlas_view.py +0 -0
  245. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_cell_detection.py +0 -0
  246. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_coordinate_validation.py +0 -0
  247. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_download_utils.py +0 -0
  248. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_label_tree.py +0 -0
  249. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_layer_validation.py +0 -0
  250. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_layers_control.py +0 -0
  251. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_roi_analysis.py +0 -0
  252. {driftlessmap-1.1.0 → driftlessmap-1.4.0}/tests/test_slice_validation.py +0 -0
  253. {driftlessmap-1.1.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.1.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.1.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,35 +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
103
+ ## Installation
102
104
 
103
- DriftlessMap 1.1.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.
107
+
108
+ ### Mode 1: desktop application for end users
109
+
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.
124
+
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:
105
129
 
106
130
  ```bash
107
131
  conda create --name DriftlessMap python=3.14 -y
108
132
  conda activate DriftlessMap
109
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
110
145
  python -m pip install driftlessmap
111
146
  ```
112
147
 
113
- Launch the application with any of:
148
+ #### Check your version and upgrade
149
+
150
+ Check the installed version:
114
151
 
115
152
  ```bash
116
- driftlessmap
117
- python -m driftlessmap
153
+ python -m driftlessmap --version
118
154
  ```
119
155
 
120
- ```python
121
- import driftlessmap
156
+ Compare it against the latest stable release on
157
+ [PyPI](https://pypi.org/project/driftlessmap/):
122
158
 
123
- driftlessmap.run()
159
+ ```bash
160
+ pip index versions driftlessmap
124
161
  ```
125
162
 
126
- For an editable development install, clone the repository and use
127
- `python -m pip install -e .`.
163
+ Upgrade to the latest stable release:
128
164
 
129
- ### Zeiss CZI files
165
+ ```bash
166
+ python -m pip install --upgrade driftlessmap
167
+ ```
168
+
169
+ #### Zeiss CZI files
130
170
 
131
171
  CZI support uses the optional `aicspylibczi` package, whose prebuilt packages
132
172
  currently support Python through 3.13:
@@ -138,6 +178,13 @@ python -m pip install --upgrade pip
138
178
  python -m pip install "driftlessmap[czi]"
139
179
  ```
140
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
+
141
188
  ## Compatibility with HERBS
142
189
 
143
190
  The rebrand is designed not to strand existing research data:
@@ -43,35 +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
46
+ ## Installation
47
47
 
48
- DriftlessMap 1.1.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
+
51
+ ### Mode 1: desktop application for end users
52
+
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.
67
+
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:
50
72
 
51
73
  ```bash
52
74
  conda create --name DriftlessMap python=3.14 -y
53
75
  conda activate DriftlessMap
54
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
55
88
  python -m pip install driftlessmap
56
89
  ```
57
90
 
58
- Launch the application with any of:
91
+ #### Check your version and upgrade
92
+
93
+ Check the installed version:
59
94
 
60
95
  ```bash
61
- driftlessmap
62
- python -m driftlessmap
96
+ python -m driftlessmap --version
63
97
  ```
64
98
 
65
- ```python
66
- import driftlessmap
99
+ Compare it against the latest stable release on
100
+ [PyPI](https://pypi.org/project/driftlessmap/):
67
101
 
68
- driftlessmap.run()
102
+ ```bash
103
+ pip index versions driftlessmap
69
104
  ```
70
105
 
71
- For an editable development install, clone the repository and use
72
- `python -m pip install -e .`.
106
+ Upgrade to the latest stable release:
73
107
 
74
- ### Zeiss CZI files
108
+ ```bash
109
+ python -m pip install --upgrade driftlessmap
110
+ ```
111
+
112
+ #### Zeiss CZI files
75
113
 
76
114
  CZI support uses the optional `aicspylibczi` package, whose prebuilt packages
77
115
  currently support Python through 3.13:
@@ -83,6 +121,13 @@ python -m pip install --upgrade pip
83
121
  python -m pip install "driftlessmap[czi]"
84
122
  ```
85
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
+
86
131
  ## Compatibility with HERBS
87
132
 
88
133
  The rebrand is designed not to strand existing research data:
@@ -3,6 +3,85 @@
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
+
47
+ ## DriftlessMap 1.2.0
48
+
49
+ Release date: 27 July 2026
50
+
51
+ This release adds a versioned probe-localization export designed for
52
+ downstream electrophysiology and NWB workflows.
53
+
54
+ ### Probe-localization export schema 2
55
+
56
+ The **Export probe localization files** action now creates four companion
57
+ files:
58
+
59
+ - `_contacts.csv` contains physical probe contacts, ordered deepest to
60
+ shallowest, with atlas coordinates and anatomical assignments.
61
+ - `_track.csv` contains labeled samples along the fitted centerline, ordered
62
+ from insertion to tip and spaced no farther apart than one atlas voxel. This
63
+ is the appropriate input for localizing continuously estimated unit depths.
64
+ - `_trajectory.csv` records insertion, tip, angles, fit quality, atlas and
65
+ coordinate-system metadata, export schema, software version, and the
66
+ probe-model tip-to-contact offset.
67
+ - `_regions.csv` summarizes region IDs, names, acronyms, contact totals, and
68
+ reconstructed path lengths.
69
+
70
+ Track samples include distance from insertion and tip, atlas-space
71
+ coordinates, and the structure ID, acronym, and name at each point. For
72
+ recognized Allen CCFv3 atlases, the export includes Allen voxel coordinates
73
+ and physical coordinates alongside the existing explicitly qualified
74
+ estimated Bregma values.
75
+
76
+ ### Upgrade notes
77
+
78
+ Downstream tools that assign unit locations should require schema 2 and use
79
+ the track table rather than inferring region boundaries from the contact or
80
+ region summaries. Re-merge probes saved by older versions to generate the
81
+ complete reconstruction and export metadata.
82
+
83
+ ---
84
+
6
85
  ## DriftlessMap 1.1.0
7
86
 
8
87
  Release date: 27 July 2026