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.
Files changed (261) hide show
  1. {twopy-0.3.4 → twopy-0.3.5}/PKG-INFO +1 -1
  2. {twopy-0.3.4 → twopy-0.3.5}/pyproject.toml +1 -1
  3. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/converted.py +1 -1
  4. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/version_check.py +14 -1
  5. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/viewer.py +4 -1
  6. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/PKG-INFO +1 -1
  7. {twopy-0.3.4 → twopy-0.3.5}/tests/test_api.py +0 -1
  8. {twopy-0.3.4 → twopy-0.3.5}/tests/test_database.py +0 -1
  9. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari.py +4 -1
  10. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_group_matching_responses.py +0 -1
  11. {twopy-0.3.4 → twopy-0.3.5}/tests/test_pixel_calibration.py +0 -1
  12. {twopy-0.3.4 → twopy-0.3.5}/tests/test_session.py +0 -1
  13. {twopy-0.3.4 → twopy-0.3.5}/tests/test_version_check.py +18 -0
  14. {twopy-0.3.4 → twopy-0.3.5}/README.md +0 -0
  15. {twopy-0.3.4 → twopy-0.3.5}/setup.cfg +0 -0
  16. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/__init__.py +0 -0
  17. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/__init__.pyi +0 -0
  18. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/_segments.py +0 -0
  19. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/_version.py +0 -0
  20. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/__init__.py +0 -0
  21. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/background_subtraction.py +0 -0
  22. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/dff.py +0 -0
  23. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/dff_options.py +0 -0
  24. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/epoch_mapping.py +0 -0
  25. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/group_matching.py +0 -0
  26. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/__init__.py +0 -0
  27. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/_fitting.py +0 -0
  28. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/kernels/_stimulus.py +0 -0
  29. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/motion.py +0 -0
  30. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/persistence.py +0 -0
  31. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_context.py +0 -0
  32. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_maps.py +0 -0
  33. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_plotting.py +0 -0
  34. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/__init__.py +0 -0
  35. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/apply.py +0 -0
  36. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/options.py +0 -0
  37. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/persistence.py +0 -0
  38. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/qc.py +0 -0
  39. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_processing/signals.py +0 -0
  40. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/response_window_options.py +0 -0
  41. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/responses.py +0 -0
  42. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/timing.py +0 -0
  43. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/trials.py +0 -0
  44. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis/workflow.py +0 -0
  45. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/analysis_cache.py +0 -0
  46. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/api.py +0 -0
  47. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/cache_inventory.py +0 -0
  48. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/calibrations/pixel_calibration_profiles.csv +0 -0
  49. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/calibrations/pixel_size.csv +0 -0
  50. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/config.example.yml +0 -0
  51. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/config.py +0 -0
  52. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/__init__.py +0 -0
  53. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/alignment_crop.py +0 -0
  54. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/api.py +0 -0
  55. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/hdf5_writing.py +0 -0
  56. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/matlab_values.py +0 -0
  57. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/orientation.py +0 -0
  58. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/source_loading.py +0 -0
  59. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/stimulus_code.py +0 -0
  60. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/conversion/types.py +0 -0
  61. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/__init__.py +0 -0
  62. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/context.py +0 -0
  63. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/discovery.py +0 -0
  64. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/metadata.py +0 -0
  65. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native.py +0 -0
  66. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/__init__.py +0 -0
  67. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/direction_selectivity.py +0 -0
  68. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/native_workflows/response_kernels.py +0 -0
  69. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/parameters.py +0 -0
  70. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/provenance.py +0 -0
  71. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/registry.py +0 -0
  72. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/results.py +0 -0
  73. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/runner.py +0 -0
  74. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/custom/workflows.py +0 -0
  75. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/__init__.py +0 -0
  76. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/cache.py +0 -0
  77. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/catalog.py +0 -0
  78. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/connection.py +0 -0
  79. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/generic.py +0 -0
  80. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/modeled.py +0 -0
  81. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/search.py +0 -0
  82. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/sql.py +0 -0
  83. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/database/types.py +0 -0
  84. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/filenames.py +0 -0
  85. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/frame_ranges.py +0 -0
  86. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/hdf5_utils.py +0 -0
  87. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/inspection.py +0 -0
  88. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/matlab.py +0 -0
  89. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/__init__.py +0 -0
  90. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/__main__.py +0 -0
  91. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-128.png +0 -0
  92. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-16.png +0 -0
  93. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-256.png +0 -0
  94. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-32.png +0 -0
  95. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-512.png +0 -0
  96. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon-64.png +0 -0
  97. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon.icns +0 -0
  98. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/assets/twopy-app-icon.png +0 -0
  99. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/controls.py +0 -0
  100. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/custom_tab.py +0 -0
  101. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_favorite_editor.py +0 -0
  102. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_favorites.py +0 -0
  103. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/database_search.py +0 -0
  104. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/dims.py +0 -0
  105. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/display.py +0 -0
  106. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/display_paths.py +0 -0
  107. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/empty_state.py +0 -0
  108. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/errors.py +0 -0
  109. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/__init__.py +0 -0
  110. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/cards.py +0 -0
  111. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/fov_assignment.py +0 -0
  112. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/fov_cards.py +0 -0
  113. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/images.py +0 -0
  114. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/protocols.py +0 -0
  115. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/response_preview.py +0 -0
  116. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/responses.py +0 -0
  117. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/roi_assignment.py +0 -0
  118. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/roi_cards.py +0 -0
  119. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/style.py +0 -0
  120. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/tables.py +0 -0
  121. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/group_matching/window.py +0 -0
  122. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/interactive.py +0 -0
  123. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/latest_worker.py +0 -0
  124. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/launcher.py +0 -0
  125. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/live_analysis.py +0 -0
  126. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_controller.py +0 -0
  127. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_progress.py +0 -0
  128. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/load_workflow.py +0 -0
  129. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/loaded_recordings_csv.py +0 -0
  130. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/loading.py +0 -0
  131. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/movie.py +0 -0
  132. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/output_routing.py +0 -0
  133. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/paths.py +0 -0
  134. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/__init__.py +0 -0
  135. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/data.py +0 -0
  136. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/dff_options.py +0 -0
  137. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/__init__.py +0 -0
  138. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/api.py +0 -0
  139. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/dynamic_options.py +0 -0
  140. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/options_panel.py +0 -0
  141. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/paths.py +0 -0
  142. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/plot_area.py +0 -0
  143. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/response_map_area.py +0 -0
  144. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/response_plot_widget.py +0 -0
  145. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/save_actions.py +0 -0
  146. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/docks/visibility_state.py +0 -0
  147. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/export.py +0 -0
  148. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/export_controls.py +0 -0
  149. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/form_controls.py +0 -0
  150. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/label_visibility.py +0 -0
  151. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/normalization_options.py +0 -0
  152. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/options.py +0 -0
  153. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/panels.py +0 -0
  154. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/preview_strip.py +0 -0
  155. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/processing_options.py +0 -0
  156. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_colors.py +0 -0
  157. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_display.py +0 -0
  158. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_map_options.py +0 -0
  159. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/response_window_options.py +0 -0
  160. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/__init__.py +0 -0
  161. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/actions.py +0 -0
  162. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/controls.py +0 -0
  163. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/roi_generation/options.py +0 -0
  164. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/plotting/widgets.py +0 -0
  165. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/protocols.py +0 -0
  166. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/responses.py +0 -0
  167. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/roi.py +0 -0
  168. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/roi_signatures.py +0 -0
  169. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/session.py +0 -0
  170. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/sidebar.py +0 -0
  171. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/state.py +0 -0
  172. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/text.py +0 -0
  173. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/trial_timeline.py +0 -0
  174. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/napari/types.py +0 -0
  175. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/__init__.py +0 -0
  176. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/dff.py +0 -0
  177. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/psycho5.py +0 -0
  178. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/roi.py +0 -0
  179. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/roi_extraction.py +0 -0
  180. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/parity/saved_analysis.py +0 -0
  181. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/photodiode.py +0 -0
  182. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/photodiode_classification.py +0 -0
  183. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/pixel_calibration.py +0 -0
  184. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/pixel_calibration_profiles.py +0 -0
  185. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/response_roi_extraction.py +0 -0
  186. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi.py +0 -0
  187. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi_extraction.py +0 -0
  188. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/roi_mask_cleanup.py +0 -0
  189. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/session.py +0 -0
  190. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/spatial.py +0 -0
  191. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/spatial_orientation.py +0 -0
  192. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/stimulus.py +0 -0
  193. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/synchronization.py +0 -0
  194. {twopy-0.3.4 → twopy-0.3.5}/src/twopy/typing_guards.py +0 -0
  195. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/SOURCES.txt +0 -0
  196. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/dependency_links.txt +0 -0
  197. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/entry_points.txt +0 -0
  198. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/requires.txt +0 -0
  199. {twopy-0.3.4 → twopy-0.3.5}/src/twopy.egg-info/top_level.txt +0 -0
  200. {twopy-0.3.4 → twopy-0.3.5}/tests/test_background_subtraction.py +0 -0
  201. {twopy-0.3.4 → twopy-0.3.5}/tests/test_cache_inventory.py +0 -0
  202. {twopy-0.3.4 → twopy-0.3.5}/tests/test_config.py +0 -0
  203. {twopy-0.3.4 → twopy-0.3.5}/tests/test_conversion.py +0 -0
  204. {twopy-0.3.4 → twopy-0.3.5}/tests/test_converted.py +0 -0
  205. {twopy-0.3.4 → twopy-0.3.5}/tests/test_custom_workflows.py +0 -0
  206. {twopy-0.3.4 → twopy-0.3.5}/tests/test_dff.py +0 -0
  207. {twopy-0.3.4 → twopy-0.3.5}/tests/test_epoch_mapping.py +1 -1
  208. {twopy-0.3.4 → twopy-0.3.5}/tests/test_filenames.py +0 -0
  209. {twopy-0.3.4 → twopy-0.3.5}/tests/test_frame_ranges.py +0 -0
  210. {twopy-0.3.4 → twopy-0.3.5}/tests/test_function_inventory.py +0 -0
  211. {twopy-0.3.4 → twopy-0.3.5}/tests/test_group_matching.py +0 -0
  212. {twopy-0.3.4 → twopy-0.3.5}/tests/test_hdf5_utils.py +1 -1
  213. {twopy-0.3.4 → twopy-0.3.5}/tests/test_import.py +0 -0
  214. {twopy-0.3.4 → twopy-0.3.5}/tests/test_inspection.py +1 -1
  215. {twopy-0.3.4 → twopy-0.3.5}/tests/test_kernels.py +0 -0
  216. {twopy-0.3.4 → twopy-0.3.5}/tests/test_load_workflow.py +0 -0
  217. {twopy-0.3.4 → twopy-0.3.5}/tests/test_matlab.py +1 -1
  218. {twopy-0.3.4 → twopy-0.3.5}/tests/test_motion.py +1 -1
  219. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_database_search.py +0 -0
  220. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_display.py +0 -0
  221. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_export.py +0 -0
  222. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_group_matching_roi_cards.py +0 -0
  223. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_live_controller.py +0 -0
  224. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_controller.py +0 -0
  225. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_progress.py +0 -0
  226. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_load_tab.py +0 -0
  227. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_loaded_recordings.py +0 -0
  228. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_path_resolution.py +0 -0
  229. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_controls.py +0 -0
  230. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_data.py +0 -0
  231. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_plot_widgets.py +0 -0
  232. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_processing_controls.py +0 -0
  233. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_response_map_display.py +0 -0
  234. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_response_workflow.py +0 -0
  235. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_roi_generation.py +0 -0
  236. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_roi_visibility.py +0 -0
  237. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_text.py +0 -0
  238. {twopy-0.3.4 → twopy-0.3.5}/tests/test_napari_timeline.py +0 -0
  239. {twopy-0.3.4 → twopy-0.3.5}/tests/test_packaging.py +0 -0
  240. {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity.py +1 -1
  241. {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity_psycho5.py +1 -1
  242. {twopy-0.3.4 → twopy-0.3.5}/tests/test_parity_roi_extraction.py +0 -0
  243. {twopy-0.3.4 → twopy-0.3.5}/tests/test_persistence.py +0 -0
  244. {twopy-0.3.4 → twopy-0.3.5}/tests/test_photodiode_classification.py +1 -1
  245. {twopy-0.3.4 → twopy-0.3.5}/tests/test_pixel_calibration_profiles.py +0 -0
  246. {twopy-0.3.4 → twopy-0.3.5}/tests/test_real_fixture.py +1 -1
  247. {twopy-0.3.4 → twopy-0.3.5}/tests/test_recording_timing.py +1 -1
  248. {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_map_area.py +0 -0
  249. {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_maps.py +0 -0
  250. {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_processing.py +0 -0
  251. {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_roi_extraction.py +2 -2
  252. {twopy-0.3.4 → twopy-0.3.5}/tests/test_response_window_options.py +0 -0
  253. {twopy-0.3.4 → twopy-0.3.5}/tests/test_responses.py +0 -0
  254. {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi.py +0 -0
  255. {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi_extraction.py +0 -0
  256. {twopy-0.3.4 → twopy-0.3.5}/tests/test_roi_mask_cleanup.py +0 -0
  257. {twopy-0.3.4 → twopy-0.3.5}/tests/test_saved_analysis.py +1 -1
  258. {twopy-0.3.4 → twopy-0.3.5}/tests/test_stimulus.py +1 -1
  259. {twopy-0.3.4 → twopy-0.3.5}/tests/test_synchronization.py +1 -1
  260. {twopy-0.3.4 → twopy-0.3.5}/tests/test_trials.py +0 -0
  261. {twopy-0.3.4 → twopy-0.3.5}/tests/test_workflow.py +1 -1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: twopy
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Two-photon imaging analysis tool with a napari interface.
5
5
  Author-email: Gustavo Madeira Santana <fromweb1@gumadeiras.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "twopy"
7
- version = "0.3.4"
7
+ version = "0.3.5"
8
8
  description = "Two-photon imaging analysis tool with a napari interface."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.14"
@@ -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 = cast(tuple[int, int, int], movie_shape)
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(cache, now=checked_now, max_age=max_age):
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(NapariViewer, napari.Viewer(title=APPLICATION_TITLE))
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: twopy
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Two-photon imaging analysis tool with a napari interface.
5
5
  Author-email: Gustavo Madeira Santana <fromweb1@gumadeiras.com>
6
6
  License-Expression: MIT
@@ -9,7 +9,6 @@ import unittest
9
9
  from pathlib import Path
10
10
 
11
11
  from tests.tempdir import temporary_directory
12
-
13
12
  from twopy import find_recordings, finite_mean_and_sem
14
13
  from twopy.api import finite_mean_and_sem as api_finite_mean_and_sem
15
14
 
@@ -9,7 +9,6 @@ import unittest
9
9
  from pathlib import Path
10
10
 
11
11
  from tests.tempdir import temporary_directory
12
-
13
12
  from twopy.config import TwopyConfig
14
13
  from twopy.database import (
15
14
  ExperimentSearchFilters,
@@ -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(title=APPLICATION_TITLE)
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"))
@@ -20,7 +20,6 @@ from tests.napari_support import (
20
20
  temporary_directory,
21
21
  unittest,
22
22
  )
23
-
24
23
  from twopy.napari.group_matching.responses import SelectedRoiResponseCache
25
24
 
26
25
 
@@ -9,7 +9,6 @@ from datetime import date
9
9
  from pathlib import Path
10
10
 
11
11
  from tests.tempdir import temporary_directory
12
-
13
12
  from twopy import (
14
13
  DEFAULT_PIXEL_CALIBRATION_PATH,
15
14
  PixelCalibrationRow,
@@ -8,7 +8,6 @@ import unittest
8
8
  from pathlib import Path
9
9
 
10
10
  from tests.tempdir import temporary_directory
11
-
12
11
  from twopy.session import discover_session_files
13
12
 
14
13
 
@@ -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