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.
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/CITATION.cff +1 -1
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/MANIFEST.in +2 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/PKG-INFO +58 -19
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/README.md +54 -17
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/WhatsNew.md +41 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/app.py +630 -33
- driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.icns +0 -0
- driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.ico +0 -0
- driftlessmap-1.4.0/driftlessmap/icons/app/driftlessmap.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_reader.py +48 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_view.py +37 -3
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/main_window.ui +12 -3
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/persistence.py +89 -8
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_utiles.py +21 -0
- driftlessmap-1.4.0/driftlessmap/provenance.py +317 -0
- driftlessmap-1.4.0/driftlessmap/run_driftlessmap.py +13 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/toolbox.py +22 -1
- driftlessmap-1.4.0/driftlessmap/version.py +9 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/PKG-INFO +58 -19
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/SOURCES.txt +6 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/requires.txt +4 -1
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/pyproject.toml +6 -1
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_image_reader.py +22 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_packaging_metadata.py +30 -1
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_persistence.py +59 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_mapping.py +23 -0
- driftlessmap-1.4.0/tests/test_project_persistence.py +163 -0
- driftlessmap-1.4.0/tests/test_provenance.py +97 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_runtime_paths.py +17 -4
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_version.py +23 -2
- driftlessmap-1.2.0/driftlessmap/run_driftlessmap.py +0 -4
- driftlessmap-1.2.0/driftlessmap/version.py +0 -3
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/AUTHOR.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/CONTRIBUTORS.md +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/LICENSE.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/ORIGINS.md +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/THANKS.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/__init__.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/__main__.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/about.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/allen_downloader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_downloader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_loader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_processor.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_transform.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/atlas_view.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/cell_detection.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/coordinate_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/czi_reader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/WHS_atlas_labels.pkl +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/allen_mice_atlas_labels.pkl +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/atlas_labels.pkl +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/data/query.csv +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/download_utils.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/herbs.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/backward.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/dot.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/down-arrow.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_backward.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/fast_forward.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/forward.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/add.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/ai.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_off.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_on.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/eye_white.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/hi.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/layers/trash.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/object.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/add.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/atlascontrol.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/bnd.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/c_section2.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/cell.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/check.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/compare.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/contour.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/h_section.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/info.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/layers.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/line.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/link_off.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/merge.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/object.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/probe.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_horizontal.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/rotation_vertical.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/s_section.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tool.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/trash.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/tree_checked.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/treeview2.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/sidebar/virus.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tdown.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/accept2.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/aim_not.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anchor.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/anticlockwise_rotation.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/atlas_icon.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/boundary_register.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cancel.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/cell_select_not.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/check.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/clockwise_rotation.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2 copy.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/closed_path2.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eraser.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/eye_closed.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/fill.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/gps.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/h_flip.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/handle.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/image_icon.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/info.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/inpart.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/lasso.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/left90.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/line_sites.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/linear_silicon.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/list.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/location.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic-wand.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/magic_white.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/mask.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/match.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matchbnd.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/matching.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/merge.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_down.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_left.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_right.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/move_up.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/moving.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi-probe.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_pencil.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/multi_probe.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/object.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/open_path.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/outpart.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/pencil.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/plasso.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/probe.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/radar.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_clockwise.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/rotation_counter_clockwise.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/ruler.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/separate_sites.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/single_pencil.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toa_delete.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toaa.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/toh_delete.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/tohh.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/trans.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/triangulation.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/two_window.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/unmerge.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/v_flip.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/virus_register.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/vis2d.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window2.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window3.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/toolbar/window4.png +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_close.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/tree_open.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/icons/up-arrow.svg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_curves.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/image_stacks.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/images_reader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/label_tree.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/layer_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/layers_control.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/movable_points.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/obj_items.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/object_control.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/popup_message.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_csv.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/probe_reconstruction.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/atlas_view_group_box.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/box_label.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/channel_selector.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/color_combo.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/decor_label.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/dialogs.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/hidden_line_edit.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/label_tree.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/main_window.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/menu_bar.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/multi_handle_slider.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/obj_ctrl_bottom_button.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/object_text_button.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/page_control.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/rotation_button.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/side_bar.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/spinbox.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/tabs.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/qss/tool_bar.qss +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/resources.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/roi_analysis.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/slice_stacks.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/slice_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/triangulation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/triangulation_points.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/user_settings.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/uuuuuu.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/widgets_utils.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap/wtiles.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/dependency_links.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/entry_points.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/driftlessmap.egg-info/top_level.txt +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/setup.cfg +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/setup.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_allen_downloader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_loader.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_transform.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_atlas_view.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_cell_detection.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_coordinate_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_download_utils.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_label_tree.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_layer_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_layers_control.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_object_control.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_csv.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_probe_reconstruction.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_roi_analysis.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_slice_validation.py +0 -0
- {driftlessmap-1.2.0 → driftlessmap-1.4.0}/tests/test_triangulation.py +0 -0
|
@@ -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.
|
|
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
|
-
##
|
|
103
|
+
## Installation
|
|
102
104
|
|
|
103
|
-
DriftlessMap 1.
|
|
104
|
-
|
|
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
|
-
|
|
108
|
+
### Mode 1: desktop application for end users
|
|
107
109
|
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
129
|
-
|
|
156
|
+
Compare it against the latest stable release on
|
|
157
|
+
[PyPI](https://pypi.org/project/driftlessmap/):
|
|
130
158
|
|
|
131
|
-
|
|
159
|
+
```bash
|
|
160
|
+
pip index versions driftlessmap
|
|
132
161
|
```
|
|
133
162
|
|
|
134
|
-
|
|
135
|
-
`python -m pip install -e .`.
|
|
163
|
+
Upgrade to the latest stable release:
|
|
136
164
|
|
|
137
|
-
|
|
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
|
-
##
|
|
46
|
+
## Installation
|
|
47
47
|
|
|
48
|
-
DriftlessMap 1.
|
|
49
|
-
|
|
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
|
-
|
|
51
|
+
### Mode 1: desktop application for end users
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
99
|
+
Compare it against the latest stable release on
|
|
100
|
+
[PyPI](https://pypi.org/project/driftlessmap/):
|
|
75
101
|
|
|
76
|
-
|
|
102
|
+
```bash
|
|
103
|
+
pip index versions driftlessmap
|
|
77
104
|
```
|
|
78
105
|
|
|
79
|
-
|
|
80
|
-
`python -m pip install -e .`.
|
|
106
|
+
Upgrade to the latest stable release:
|
|
81
107
|
|
|
82
|
-
|
|
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
|