TwoPy 0.3.4__tar.gz → 0.3.5__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.
- {twopy-0.3.4 → twopy-0.3.5}/PKG-INFO +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/pyproject.toml +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/converted.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/version_check.py +14 -1
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/viewer.py +4 -1
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/PKG-INFO +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_api.py +0 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_database.py +0 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari.py +4 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_group_matching_responses.py +0 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_pixel_calibration.py +0 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_session.py +0 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_version_check.py +18 -0
- {twopy-0.3.4 → twopy-0.3.5}/README.md +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/setup.cfg +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/__init__.pyi +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/_segments.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/_version.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/background_subtraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/dff.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/dff_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/epoch_mapping.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/group_matching.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/_fitting.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/_stimulus.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/motion.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/persistence.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_context.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_maps.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_plotting.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/apply.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/persistence.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/qc.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/signals.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_window_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/responses.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/timing.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/trials.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/workflow.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis_cache.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/api.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/cache_inventory.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/calibrations/pixel_calibration_profiles.csv +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/calibrations/pixel_size.csv +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/config.example.yml +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/config.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/alignment_crop.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/api.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/hdf5_writing.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/matlab_values.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/orientation.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/source_loading.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/stimulus_code.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/types.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/context.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/discovery.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/metadata.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/direction_selectivity.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/response_kernels.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/parameters.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/provenance.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/registry.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/results.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/runner.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/workflows.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/cache.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/catalog.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/connection.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/generic.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/modeled.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/search.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/sql.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/types.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/filenames.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/frame_ranges.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/hdf5_utils.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/inspection.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/matlab.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/__main__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-128.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-16.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-256.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-32.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-512.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-64.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon.icns +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon.png +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/custom_tab.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_favorite_editor.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_favorites.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_search.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/dims.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/display.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/display_paths.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/empty_state.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/errors.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/cards.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/fov_assignment.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/fov_cards.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/images.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/protocols.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/response_preview.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/responses.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/roi_assignment.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/roi_cards.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/style.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/tables.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/window.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/interactive.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/latest_worker.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/launcher.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/live_analysis.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_controller.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_progress.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_workflow.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/loaded_recordings_csv.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/loading.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/movie.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/output_routing.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/paths.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/data.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/dff_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/api.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/dynamic_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/options_panel.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/paths.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/plot_area.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/response_map_area.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/response_plot_widget.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/save_actions.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/visibility_state.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/export.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/export_controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/form_controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/label_visibility.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/normalization_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/panels.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/preview_strip.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/processing_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_colors.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_display.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_window_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/actions.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/widgets.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/protocols.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/responses.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/roi.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/roi_signatures.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/session.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/sidebar.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/state.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/text.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/trial_timeline.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/types.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/__init__.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/dff.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/psycho5.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/roi.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/roi_extraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/saved_analysis.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/photodiode.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/photodiode_classification.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/pixel_calibration.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/pixel_calibration_profiles.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/response_roi_extraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi_extraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi_mask_cleanup.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/session.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/spatial.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/spatial_orientation.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/stimulus.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/synchronization.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy/typing_guards.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/SOURCES.txt +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/dependency_links.txt +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/entry_points.txt +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/requires.txt +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/top_level.txt +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_background_subtraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_cache_inventory.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_config.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_conversion.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_converted.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_custom_workflows.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_dff.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_epoch_mapping.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_filenames.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_frame_ranges.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_function_inventory.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_group_matching.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_hdf5_utils.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_import.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_inspection.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_kernels.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_load_workflow.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_matlab.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_motion.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_database_search.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_display.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_export.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_group_matching_roi_cards.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_live_controller.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_controller.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_progress.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_tab.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_loaded_recordings.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_path_resolution.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_data.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_widgets.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_processing_controls.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_response_map_display.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_response_workflow.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_roi_generation.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_roi_visibility.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_text.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_timeline.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_packaging.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity_psycho5.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity_roi_extraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_persistence.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_photodiode_classification.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_pixel_calibration_profiles.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_real_fixture.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_recording_timing.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_map_area.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_maps.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_processing.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_roi_extraction.py +2 -2
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_window_options.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_responses.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi_extraction.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi_mask_cleanup.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_saved_analysis.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_stimulus.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_synchronization.py +1 -1
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_trials.py +0 -0
- {twopy-0.3.4 → twopy-0.3.5}/tests/test_workflow.py +1 -1
|
@@ -234,7 +234,7 @@ def load_converted_recording(
|
|
|
234
234
|
if len(movie_shape) != 3:
|
|
235
235
|
msg = f"aligned movie shape must have 3 dimensions: {movie_shape}"
|
|
236
236
|
raise ValueError(msg)
|
|
237
|
-
movie_shape_3d =
|
|
237
|
+
movie_shape_3d = movie_shape
|
|
238
238
|
|
|
239
239
|
recording = RecordingData(
|
|
240
240
|
path=data_path,
|
|
@@ -137,7 +137,12 @@ def check_for_update(
|
|
|
137
137
|
"""
|
|
138
138
|
checked_now = _utc(now)
|
|
139
139
|
cache = read_version_check_cache(state_file=state_file)
|
|
140
|
-
if _cache_is_fresh(
|
|
140
|
+
if _cache_is_fresh(
|
|
141
|
+
cache,
|
|
142
|
+
now=checked_now,
|
|
143
|
+
max_age=max_age,
|
|
144
|
+
current_version=current_version,
|
|
145
|
+
):
|
|
141
146
|
return _notice_from_cache(current_version, cache)
|
|
142
147
|
|
|
143
148
|
try:
|
|
@@ -243,6 +248,7 @@ def _cache_is_fresh(
|
|
|
243
248
|
*,
|
|
244
249
|
now: datetime,
|
|
245
250
|
max_age: timedelta,
|
|
251
|
+
current_version: str,
|
|
246
252
|
) -> bool:
|
|
247
253
|
"""Return whether the cache is young enough to skip a network check."""
|
|
248
254
|
if cache is None:
|
|
@@ -250,6 +256,13 @@ def _cache_is_fresh(
|
|
|
250
256
|
checked_at = _parse_cached_datetime(cache.checked_at)
|
|
251
257
|
if checked_at is None:
|
|
252
258
|
return False
|
|
259
|
+
try:
|
|
260
|
+
current = Version(current_version)
|
|
261
|
+
latest = Version(cache.latest_version)
|
|
262
|
+
except InvalidVersion:
|
|
263
|
+
return False
|
|
264
|
+
if latest < current:
|
|
265
|
+
return False
|
|
253
266
|
return now - checked_at <= max_age
|
|
254
267
|
|
|
255
268
|
|
|
@@ -398,7 +398,10 @@ def create_viewer() -> NapariViewer:
|
|
|
398
398
|
"""
|
|
399
399
|
import napari
|
|
400
400
|
|
|
401
|
-
viewer = cast(
|
|
401
|
+
viewer = cast(
|
|
402
|
+
NapariViewer,
|
|
403
|
+
napari.Viewer(title=APPLICATION_TITLE, show_welcome_screen=False),
|
|
404
|
+
)
|
|
402
405
|
_set_application_icon(viewer)
|
|
403
406
|
show_empty_viewer_message(viewer)
|
|
404
407
|
return viewer
|
|
@@ -433,7 +433,10 @@ class CoreNapariAdapterTest(NapariAdapterTestCase):
|
|
|
433
433
|
|
|
434
434
|
self.assertIs(created, viewer)
|
|
435
435
|
self.assertEqual(APPLICATION_TITLE, f"twopy {__version__}")
|
|
436
|
-
viewer_constructor.assert_called_once_with(
|
|
436
|
+
viewer_constructor.assert_called_once_with(
|
|
437
|
+
title=APPLICATION_TITLE,
|
|
438
|
+
show_welcome_screen=False,
|
|
439
|
+
)
|
|
437
440
|
self.assertFalse(viewer.welcome_screen.visible)
|
|
438
441
|
self.assertEqual(viewer.text_overlay.text, EMPTY_VIEWER_MESSAGE)
|
|
439
442
|
self.assertTrue(viewer.text_overlay.text.startswith(f"{APPLICATION_TITLE}\n"))
|
|
@@ -122,6 +122,24 @@ class VersionCheckTest(unittest.TestCase):
|
|
|
122
122
|
|
|
123
123
|
self.assertIsNone(notice)
|
|
124
124
|
|
|
125
|
+
def test_fresh_cache_older_than_install_checks_network(self) -> None:
|
|
126
|
+
"""Confirm downgraded installs do not trust an older fresh cache."""
|
|
127
|
+
with temporary_directory() as temp_dir:
|
|
128
|
+
state_file = Path(temp_dir) / "state.json"
|
|
129
|
+
now = datetime(2026, 6, 18, 12, tzinfo=UTC)
|
|
130
|
+
_write_cache(state_file, checked_at=now, latest_version="0.3.2")
|
|
131
|
+
|
|
132
|
+
notice = check_for_update(
|
|
133
|
+
current_version="0.3.3",
|
|
134
|
+
now=now + timedelta(hours=1),
|
|
135
|
+
state_file=state_file,
|
|
136
|
+
fetch_latest=lambda: PublishedVersion(version="0.3.4"),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
self.assertIsNotNone(notice)
|
|
140
|
+
assert notice is not None
|
|
141
|
+
self.assertEqual(notice.latest_version, "0.3.4")
|
|
142
|
+
|
|
125
143
|
def test_fetch_pypi_published_version_validates_response_shape(self) -> None:
|
|
126
144
|
"""Confirm PyPI JSON parsing accepts only expected string fields."""
|
|
127
145
|
response = _FakeResponse(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|