synaptipy 0.1.1b4__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 (217) hide show
  1. synaptipy-0.1.1b4/CHANGELOG.md +272 -0
  2. synaptipy-0.1.1b4/CITATION.cff +35 -0
  3. synaptipy-0.1.1b4/LICENSE +657 -0
  4. synaptipy-0.1.1b4/MANIFEST.in +25 -0
  5. synaptipy-0.1.1b4/PKG-INFO +635 -0
  6. synaptipy-0.1.1b4/README.md +568 -0
  7. synaptipy-0.1.1b4/docs/_build/html/_images/analyser_tab.png +0 -0
  8. synaptipy-0.1.1b4/docs/_build/html/_images/explorer_tab.png +0 -0
  9. synaptipy-0.1.1b4/docs/_build/html/_images/exporter_tab.png +0 -0
  10. synaptipy-0.1.1b4/docs/_build/html/_sphinx_design_static/sphinx-design.min.css +1 -0
  11. synaptipy-0.1.1b4/docs/_build/html/_static/basic.css +906 -0
  12. synaptipy-0.1.1b4/docs/_build/html/_static/check-solid.svg +4 -0
  13. synaptipy-0.1.1b4/docs/_build/html/_static/copy-button.svg +5 -0
  14. synaptipy-0.1.1b4/docs/_build/html/_static/copybutton.css +94 -0
  15. synaptipy-0.1.1b4/docs/_build/html/_static/css/badge_only.css +1 -0
  16. synaptipy-0.1.1b4/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  17. synaptipy-0.1.1b4/docs/_build/html/_static/css/theme.css +4 -0
  18. synaptipy-0.1.1b4/docs/_build/html/_static/custom.css +26 -0
  19. synaptipy-0.1.1b4/docs/_build/html/_static/file.png +0 -0
  20. synaptipy-0.1.1b4/docs/_build/html/_static/minus.png +0 -0
  21. synaptipy-0.1.1b4/docs/_build/html/_static/plus.png +0 -0
  22. synaptipy-0.1.1b4/docs/_build/html/_static/pygments.css +75 -0
  23. synaptipy-0.1.1b4/docs/_build/html/_static/sphinx-design.min.css +1 -0
  24. synaptipy-0.1.1b4/docs/_static/custom.css +26 -0
  25. synaptipy-0.1.1b4/docs/_static/logo.png +0 -0
  26. synaptipy-0.1.1b4/docs/algorithmic_definitions.md +1001 -0
  27. synaptipy-0.1.1b4/docs/api_reference.md +271 -0
  28. synaptipy-0.1.1b4/docs/conf.py +208 -0
  29. synaptipy-0.1.1b4/docs/decisions/LOG_ERROR_ANALYSIS.md +491 -0
  30. synaptipy-0.1.1b4/docs/decisions/PERFORMANCE_OPTIMIZATIONS.md +238 -0
  31. synaptipy-0.1.1b4/docs/decisions/REFACTORING_GUIDE.md +208 -0
  32. synaptipy-0.1.1b4/docs/decisions/RENDERING_OPTIMIZATIONS.md +418 -0
  33. synaptipy-0.1.1b4/docs/decisions/index.md +14 -0
  34. synaptipy-0.1.1b4/docs/developer_guide.md +487 -0
  35. synaptipy-0.1.1b4/docs/development/index.md +61 -0
  36. synaptipy-0.1.1b4/docs/development/styling_guide.md +131 -0
  37. synaptipy-0.1.1b4/docs/development_logs/ALL_TESTS_PASSING.md +109 -0
  38. synaptipy-0.1.1b4/docs/development_logs/ANALYSER_TAB_REFACTORING.md +220 -0
  39. synaptipy-0.1.1b4/docs/development_logs/ANALYSIS_FUNCTIONS_AND_FAILURE_POINTS.md +525 -0
  40. synaptipy-0.1.1b4/docs/development_logs/BUGFIX_SUMMARY.md +357 -0
  41. synaptipy-0.1.1b4/docs/development_logs/BUGFIX_VERIFICATION_REPORT.md +523 -0
  42. synaptipy-0.1.1b4/docs/development_logs/BUG_13_FIX.md +135 -0
  43. synaptipy-0.1.1b4/docs/development_logs/BUG_14_AUTO_TRIGGER_FIX.md +164 -0
  44. synaptipy-0.1.1b4/docs/development_logs/BUG_15_DATA_CLEARED_FIX.md +135 -0
  45. synaptipy-0.1.1b4/docs/development_logs/DEBOUNCING_IMPLEMENTATION.md +106 -0
  46. synaptipy-0.1.1b4/docs/development_logs/DEBOUNCING_VERIFICATION.md +221 -0
  47. synaptipy-0.1.1b4/docs/development_logs/ERROR_REPORT.md +274 -0
  48. synaptipy-0.1.1b4/docs/development_logs/EXPLORER_TAB_RIGHT_PANEL_UPDATE.md +217 -0
  49. synaptipy-0.1.1b4/docs/development_logs/EXPLORER_XAXIS_SHIFT_FIX.md +112 -0
  50. synaptipy-0.1.1b4/docs/development_logs/FINAL_IMPLEMENTATION_REPORT.md +327 -0
  51. synaptipy-0.1.1b4/docs/development_logs/FINAL_VERIFICATION_GUIDE.md +248 -0
  52. synaptipy-0.1.1b4/docs/development_logs/IMPLEMENTATION_SUMMARY.md +169 -0
  53. synaptipy-0.1.1b4/docs/development_logs/INTERACTION_DEBOUNCING_COMPLETE.md +322 -0
  54. synaptipy-0.1.1b4/docs/development_logs/PHASE1_COMPLETE.md +100 -0
  55. synaptipy-0.1.1b4/docs/development_logs/PHASE1_FINAL_SUMMARY.md +207 -0
  56. synaptipy-0.1.1b4/docs/development_logs/PHASE2_AND_3_COMPLETE.md +247 -0
  57. synaptipy-0.1.1b4/docs/development_logs/PHASES_2_3_COMPLETE.md +262 -0
  58. synaptipy-0.1.1b4/docs/development_logs/REFACTORING_FINAL_SUMMARY.md +219 -0
  59. synaptipy-0.1.1b4/docs/development_logs/REFACTORING_IMPLEMENTATION_SUMMARY.md +244 -0
  60. synaptipy-0.1.1b4/docs/development_logs/REFACTORING_SUCCESS.md +204 -0
  61. synaptipy-0.1.1b4/docs/development_logs/REFACTORING_TEST_PLAN.md +153 -0
  62. synaptipy-0.1.1b4/docs/development_logs/REFACTORING_TEST_RESULTS.md +202 -0
  63. synaptipy-0.1.1b4/docs/development_logs/USER_EXPERIENCE_FIX.md +163 -0
  64. synaptipy-0.1.1b4/docs/development_logs/index.md +55 -0
  65. synaptipy-0.1.1b4/docs/extending_synaptipy.md +1061 -0
  66. synaptipy-0.1.1b4/docs/index.rst +172 -0
  67. synaptipy-0.1.1b4/docs/manuals/CROSS_PLATFORM_SETUP.md +174 -0
  68. synaptipy-0.1.1b4/docs/manuals/MANUAL_TESTING_GUIDE.md +210 -0
  69. synaptipy-0.1.1b4/docs/manuals/index.md +12 -0
  70. synaptipy-0.1.1b4/docs/nwb_mapping.md +213 -0
  71. synaptipy-0.1.1b4/docs/tutorial/index.md +1369 -0
  72. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability.png +0 -0
  73. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_burst_analysis.png +0 -0
  74. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_excitability.png +0 -0
  75. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_spike_train_dynamics.png +0 -0
  76. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties.png +0 -0
  77. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_baseline_rmp.png +0 -0
  78. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_capacitance.png +0 -0
  79. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_i-v_curve.png +0 -0
  80. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_input_resistance.png +0 -0
  81. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_sag_ratio_ih.png +0 -0
  82. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_tau_time_constant.png +0 -0
  83. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_max_repolarization_rate.png +0 -0
  84. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_opto_latency_jitter.png +0 -0
  85. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_optogenetics.png +0 -0
  86. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_optogenetics_optogenetic_sync.png +0 -0
  87. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis.png +0 -0
  88. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis_phase_plane.png +0 -0
  89. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis_spike_detection.png +0 -0
  90. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_charge_auc.png +0 -0
  91. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events.png +0 -0
  92. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_baseline__peak__kinetics.png +0 -0
  93. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_deconvolution_custom.png +0 -0
  94. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_threshold_based.png +0 -0
  95. synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_tab.png +0 -0
  96. synaptipy-0.1.1b4/docs/tutorial/screenshots/explorer_tab.png +0 -0
  97. synaptipy-0.1.1b4/docs/tutorial/screenshots/exporter_tab.png +0 -0
  98. synaptipy-0.1.1b4/docs/user_guide.md +730 -0
  99. synaptipy-0.1.1b4/environment.yml +56 -0
  100. synaptipy-0.1.1b4/examples/01_batch_analysis.ipynb +322 -0
  101. synaptipy-0.1.1b4/examples/02_optogenetics.ipynb +364 -0
  102. synaptipy-0.1.1b4/examples/03_custom_plugin.ipynb +331 -0
  103. synaptipy-0.1.1b4/examples/README.md +65 -0
  104. synaptipy-0.1.1b4/examples/basic_usage.py +168 -0
  105. synaptipy-0.1.1b4/examples/data/2023_04_11_0018.abf +0 -0
  106. synaptipy-0.1.1b4/examples/data/2023_04_11_0019.abf +0 -0
  107. synaptipy-0.1.1b4/examples/data/2023_04_11_0021.abf +0 -0
  108. synaptipy-0.1.1b4/examples/data/2023_04_11_0022.abf +0 -0
  109. synaptipy-0.1.1b4/examples/data/240326_003.wcp +0 -0
  110. synaptipy-0.1.1b4/examples/plugins/ap_repolarization.py +190 -0
  111. synaptipy-0.1.1b4/examples/plugins/opto_jitter.py +289 -0
  112. synaptipy-0.1.1b4/examples/plugins/synaptic_charge.py +346 -0
  113. synaptipy-0.1.1b4/pyproject.toml +138 -0
  114. synaptipy-0.1.1b4/requirements.txt +40 -0
  115. synaptipy-0.1.1b4/setup.cfg +4 -0
  116. synaptipy-0.1.1b4/src/Synaptipy/__init__.py +21 -0
  117. synaptipy-0.1.1b4/src/Synaptipy/__main__.py +86 -0
  118. synaptipy-0.1.1b4/src/Synaptipy/application/__init__.py +11 -0
  119. synaptipy-0.1.1b4/src/Synaptipy/application/__main__.py +251 -0
  120. synaptipy-0.1.1b4/src/Synaptipy/application/cli/__init__.py +11 -0
  121. synaptipy-0.1.1b4/src/Synaptipy/application/cli/main.py +10 -0
  122. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/__init__.py +19 -0
  123. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/analysis_formatter.py +539 -0
  124. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/analysis_plot_manager.py +181 -0
  125. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/file_io_controller.py +188 -0
  126. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/live_analysis_controller.py +145 -0
  127. synaptipy-0.1.1b4/src/Synaptipy/application/controllers/shortcut_manager.py +57 -0
  128. synaptipy-0.1.1b4/src/Synaptipy/application/data_loader.py +160 -0
  129. synaptipy-0.1.1b4/src/Synaptipy/application/gui/__init__.py +12 -0
  130. synaptipy-0.1.1b4/src/Synaptipy/application/gui/about_dialog.py +123 -0
  131. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analyser_tab.py +961 -0
  132. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_config_dialog.py +196 -0
  133. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/__init__.py +10 -0
  134. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/base.py +2704 -0
  135. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/metadata_driven.py +1789 -0
  136. synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_worker.py +215 -0
  137. synaptipy-0.1.1b4/src/Synaptipy/application/gui/batch_dialog.py +1184 -0
  138. synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/export_manager.py +224 -0
  139. synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/plot_export_dialog.py +68 -0
  140. synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/trial_selection_dialog.py +93 -0
  141. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/__init__.py +6 -0
  142. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/config_panel.py +327 -0
  143. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/explorer_tab.py +2217 -0
  144. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/plot_canvas.py +231 -0
  145. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/sidebar.py +414 -0
  146. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/toolbar.py +131 -0
  147. synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/y_controls.py +258 -0
  148. synaptipy-0.1.1b4/src/Synaptipy/application/gui/exporter_tab.py +606 -0
  149. synaptipy-0.1.1b4/src/Synaptipy/application/gui/main_window.py +1096 -0
  150. synaptipy-0.1.1b4/src/Synaptipy/application/gui/nwb_dialog.py +341 -0
  151. synaptipy-0.1.1b4/src/Synaptipy/application/gui/plot_customization_dialog.py +862 -0
  152. synaptipy-0.1.1b4/src/Synaptipy/application/gui/plot_save_dialog.py +336 -0
  153. synaptipy-0.1.1b4/src/Synaptipy/application/gui/preferences_dialog.py +374 -0
  154. synaptipy-0.1.1b4/src/Synaptipy/application/gui/session_summary_dialog.py +97 -0
  155. synaptipy-0.1.1b4/src/Synaptipy/application/gui/ui_generator.py +230 -0
  156. synaptipy-0.1.1b4/src/Synaptipy/application/gui/welcome_screen.py +482 -0
  157. synaptipy-0.1.1b4/src/Synaptipy/application/gui/widgets/plot_canvas.py +620 -0
  158. synaptipy-0.1.1b4/src/Synaptipy/application/gui/widgets/preprocessing.py +329 -0
  159. synaptipy-0.1.1b4/src/Synaptipy/application/plugin_manager.py +276 -0
  160. synaptipy-0.1.1b4/src/Synaptipy/application/services/__init__.py +3 -0
  161. synaptipy-0.1.1b4/src/Synaptipy/application/services/data_loader_service.py +108 -0
  162. synaptipy-0.1.1b4/src/Synaptipy/application/session_manager.py +235 -0
  163. synaptipy-0.1.1b4/src/Synaptipy/application/startup_manager.py +280 -0
  164. synaptipy-0.1.1b4/src/Synaptipy/core/__init__.py +19 -0
  165. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/__init__.py +42 -0
  166. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/batch_engine.py +1127 -0
  167. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/cross_file_utils.py +151 -0
  168. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/epoch_manager.py +291 -0
  169. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/evoked_responses.py +910 -0
  170. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/firing_dynamics.py +679 -0
  171. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/passive_properties.py +2185 -0
  172. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/registry.py +244 -0
  173. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/single_spike.py +925 -0
  174. synaptipy-0.1.1b4/src/Synaptipy/core/analysis/synaptic_events.py +1397 -0
  175. synaptipy-0.1.1b4/src/Synaptipy/core/data_model.py +548 -0
  176. synaptipy-0.1.1b4/src/Synaptipy/core/processing_pipeline.py +345 -0
  177. synaptipy-0.1.1b4/src/Synaptipy/core/results.py +147 -0
  178. synaptipy-0.1.1b4/src/Synaptipy/core/signal_processor.py +839 -0
  179. synaptipy-0.1.1b4/src/Synaptipy/core/source_interfaces.py +28 -0
  180. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/__init__.py +12 -0
  181. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/__init__.py +15 -0
  182. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/csv_exporter.py +618 -0
  183. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/nwb_exporter.py +454 -0
  184. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/__init__.py +16 -0
  185. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/abf_reader.py +1 -0
  186. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/neo_adapter.py +702 -0
  187. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/neo_source_handle.py +83 -0
  188. synaptipy-0.1.1b4/src/Synaptipy/infrastructure/neo_patches.py +281 -0
  189. synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.afdesign +0 -0
  190. synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.icns +0 -0
  191. synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.ico +0 -0
  192. synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.png +0 -0
  193. synaptipy-0.1.1b4/src/Synaptipy/shared/__init__.py +103 -0
  194. synaptipy-0.1.1b4/src/Synaptipy/shared/constants.py +49 -0
  195. synaptipy-0.1.1b4/src/Synaptipy/shared/data_cache.py +279 -0
  196. synaptipy-0.1.1b4/src/Synaptipy/shared/error_handling.py +70 -0
  197. synaptipy-0.1.1b4/src/Synaptipy/shared/logging_config.py +135 -0
  198. synaptipy-0.1.1b4/src/Synaptipy/shared/plot_customization.py +924 -0
  199. synaptipy-0.1.1b4/src/Synaptipy/shared/plot_exporter.py +245 -0
  200. synaptipy-0.1.1b4/src/Synaptipy/shared/plot_factory.py +297 -0
  201. synaptipy-0.1.1b4/src/Synaptipy/shared/plot_zoom_sync.py +550 -0
  202. synaptipy-0.1.1b4/src/Synaptipy/shared/scroll_settings.py +131 -0
  203. synaptipy-0.1.1b4/src/Synaptipy/shared/styling.py +326 -0
  204. synaptipy-0.1.1b4/src/Synaptipy/shared/theme_manager.py +708 -0
  205. synaptipy-0.1.1b4/src/Synaptipy/shared/utils.py +46 -0
  206. synaptipy-0.1.1b4/src/Synaptipy/shared/viewbox.py +116 -0
  207. synaptipy-0.1.1b4/src/Synaptipy/shared/zoom_theme.py +350 -0
  208. synaptipy-0.1.1b4/src/Synaptipy/templates/analysis_template.py +62 -0
  209. synaptipy-0.1.1b4/src/Synaptipy/templates/plugin_template.py +168 -0
  210. synaptipy-0.1.1b4/src/Synaptipy/templates/tab_template.py +89 -0
  211. synaptipy-0.1.1b4/src/Synaptipy/templates/test_template.py +45 -0
  212. synaptipy-0.1.1b4/src/synaptipy.egg-info/PKG-INFO +635 -0
  213. synaptipy-0.1.1b4/src/synaptipy.egg-info/SOURCES.txt +215 -0
  214. synaptipy-0.1.1b4/src/synaptipy.egg-info/dependency_links.txt +1 -0
  215. synaptipy-0.1.1b4/src/synaptipy.egg-info/entry_points.txt +2 -0
  216. synaptipy-0.1.1b4/src/synaptipy.egg-info/requires.txt +42 -0
  217. synaptipy-0.1.1b4/src/synaptipy.egg-info/top_level.txt +1 -0
@@ -0,0 +1,272 @@
1
+ # Changelog
2
+
3
+ All notable changes to Synaptipy will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.1b4] - 2026-04-29
11
+
12
+ ### Changed
13
+
14
+ - Sync `main` branch with `paper_compliance` branch; exclude `paper/` manuscript directory from PyPI distribution.
15
+ - Bump version to 0.1.1b4 across `pyproject.toml`, `src/Synaptipy/__init__.py`, `docs/conf.py`, `CITATION.cff`, `installer/windows_setup.iss`, and `synaptipy.spec`.
16
+ - Fix bundled app icon: `main_window.py` and `welcome_screen.py` now resolve icon path via `sys._MEIPASS` when running as a PyInstaller executable.
17
+ - Configure official PyPI release pipeline: OIDC Trusted Publishing with strict job chain (test -> build -> testpypi-publish -> smoke_test -> pypi-publish -> release).
18
+
19
+ ## [0.1.1b3] - 2026-04-28
20
+
21
+ ### Fixed
22
+
23
+ - CI: Replace broken `pip index versions` smoke-test check with `curl` against the TestPyPI JSON API.
24
+ - CI: `pypi-publish` job now gates on `needs: [test]`; `release` job gates on `needs: [test, build]`.
25
+ - CI: Add `twine check dist/*` validation step before TestPyPI upload.
26
+ - CI: Add `skip_existing: true` to `pypa/gh-action-pypi-publish` to prevent `400 File already exists` on workflow re-runs.
27
+ - CI: Delete existing GitHub Release for the same tag before re-creating it, preventing `already_exists` errors on re-runs.
28
+
29
+ ## [0.1.1b2] - 2026-04-28
30
+
31
+ ### Changed
32
+
33
+ - Bumped version to 0.1.1b2.
34
+ - Universal version sync: `pyproject.toml`, `__init__.py`, `docs/conf.py`, `installer/windows_setup.iss`, `CITATION.cff`, `synaptipy.spec`, `README.md`, and `docs/manuals/CROSS_PLATFORM_SETUP.md` all updated to `0.1.1b2`.
35
+ - CI: Release workflow overhauled to use OIDC Trusted Publishing (no API tokens); `pypi-publish` job is now self-contained (checkout, build, publish) with job-level `id-token: write` permissions and `environment: testpypi`.
36
+ - CI: `installer.yml` smoke tests added for all three platforms; pip caching added across all workflows.
37
+ - CI: Codecov badge added to `README.md`; `?branch=main` removed from GitHub Actions badge URLs.
38
+ - `CITATION.cff` date updated to 2026-04-28.
39
+
40
+ ### Added
41
+
42
+ - **Semantic version bounds**: All scientific dependencies (`numpy`, `scipy`, `neo`, `pyqtgraph`)
43
+ now carry upper-bound constraints (`<3.0.0`, `<2.0.0`, `<1.0.0`, `<1.0.0`) in
44
+ `requirements.txt`, `pyproject.toml`, and `environment.yml` so breaking major-version
45
+ upgrades are blocked until explicitly tested and approved.
46
+ - **Golden master integration tests** (`tests/core/test_golden_master.py`): 10 tests that
47
+ freeze exact floating-point outputs from `passive_properties` calculations (RMP, Rin,
48
+ tau, AP peak) against the three bundled ABF data files. Any silent math regression
49
+ caused by a dependency upgrade will fail these tests immediately.
50
+ - **Headless visual regression tests** (`tests/gui/test_headless_visuals.py`): 11 tests
51
+ that verify `SynaptipyPlotCanvas` correctly manages `PlotDataItem` and
52
+ `LinearRegionItem` counts in offscreen mode. Catches rendering regressions introduced
53
+ by pyqtgraph API changes.
54
+ - **CI matrix jobs**: Two new GitHub Actions jobs in `.github/workflows/test.yml`:
55
+ - `minimum-viable`: Python 3.10 with exact lower-bound versions (numpy==2.0.0,
56
+ scipy==1.13.0, neo==0.14.0, pyqtgraph==0.13.0) to ensure the stated minimums work.
57
+ - `bleeding-edge`: Python 3.12 with all upgradable deps updated to latest
58
+ (`continue-on-error: true`) to give early warning of upcoming breakage.
59
+
60
+ ## [0.1.0b6] - 2026-03-27
61
+
62
+ ### Changed
63
+
64
+ - Bumped package version to 0.1.0b6.
65
+ - Documentation: standalone installer links point to the GitHub releases page so beta/pre-release assets are visible (not only `/releases/latest`); filename examples updated to v0.1.0b6.
66
+
67
+ ### Fixed
68
+
69
+ - `README.md` and `docs/manuals/CROSS_PLATFORM_SETUP.md`: updated installer filename examples from `v0.1.0b5` to `v0.1.0b6`.
70
+ - `docs/index.rst`: replaced em-dashes with standard hyphens; fixed `sphinx-design` grid card indentation from 1-space to 3-space (resolves 12 RST warnings about `grid-item` children).
71
+ - `docs/tutorial/index.md`: replaced 124 em/en-dashes with standard hyphens; corrected 5 ToC anchor links to match MyST-generated section IDs.
72
+ - `docs/extending_synaptipy.md`: replaced 43 em/en-dashes with standard hyphens; corrected 15 ToC anchor links to match MyST-generated section IDs.
73
+ - `docs/conf.py`: added `suppress_warnings = ["myst.xref_missing"]` to suppress false-positive warnings for same-page `#anchor` links in ToC lists (MyST validates these as cross-document references before heading IDs are assigned at parse time; the rendered HTML is correct).
74
+ - Sphinx docs build: reduced warnings from 31 to 0; build now exits clean with zero warnings.
75
+
76
+
77
+ ## [0.1.0b1] - 2026-03-03
78
+
79
+ > **First beta release.** Core GUI, all 15 analysis modules, batch processing, NWB export, and plugin interface are functional. Issued as a pre-release for wider testing before a stable 0.1.0 tag.
80
+
81
+ ### Added
82
+
83
+ - **Sag Ratio Standalone Analysis**: Promoted `sag_ratio_analysis` from an inline
84
+ computation within `rin_analysis` to its own registered analysis plugin (15th
85
+ built-in module). Provides dedicated UI controls for baseline, peak, and
86
+ steady-state windows, Savitzky-Golay smoothing, and rebound depolarisation
87
+ measurement. Results: `sag_ratio`, `sag_percentage`, `v_peak`, `v_ss`,
88
+ `v_baseline`, `rebound_depolarization`.
89
+ - **Documentation**: Updated tutorial (§4.15), algorithmic definitions (§4),
90
+ API reference, user guide, developer guide, README, and extending guide to
91
+ reflect the new standalone sag ratio analysis and 15 built-in modules.
92
+ - **Deferred Initial Reset for Multichannel**: Generation-counter-protected
93
+ `_deferred_initial_reset()` catches post-layout `sigResized` shifts for
94
+ multichannel recordings without interfering with view state restoration.
95
+ - **Custom Analysis Plugin Documentation**: Comprehensive guide (`extending_synaptipy.md`) for writing analysis plugins without modifying source code
96
+ - **Plugin Template**: Ready-to-copy template at `src/Synaptipy/templates/plugin_template.py` with inline comments for all parameter types and plot overlays
97
+ - **Plugin Tests**: 16 tests validating plugin template logic, PluginManager loading, and wrapper conventions
98
+ - **Tutorial Section 3.6**: Step-by-step "Adding Your Own Analysis Tab" section in the user tutorial under the Analyser Tab
99
+ - **Stress Tests**: File cycling stress tests for plot canvas rebuild stability (100 iterations)
100
+ - **Explorer Debounce**: Debounce timer for file navigation to prevent rapid teardown cycles
101
+ - Regression tests for registry population (`test_registry_metadata.py`)
102
+ - Regression tests for preprocessing reset propagation (`test_preprocessing_reset.py`)
103
+ - Developer documentation for registry import rule, editable install, and
104
+ preprocessing reset propagation (copilot-instructions.md, developer_guide.md)
105
+
106
+ ### Fixed
107
+
108
+ - **Explorer X-Axis Shift on File Cycling**: Fixed bug where the X-axis would
109
+ shift right (not starting at 0) when cycling through files, especially with
110
+ multichannel recordings. Root cause: old ViewBoxes scheduled for
111
+ `deleteLater()` continued to emit `sigXRangeChanged` / `sigYRangeChanged` /
112
+ `sigResized` signals after the widget was replaced, corrupting slider and
113
+ scrollbar values for the new recording. Fix: explicitly disconnect all
114
+ ViewBox signals in `ExplorerPlotCanvas.rebuild_plots()` before clearing plot
115
+ items.
116
+ - **Explorer X-Link Range Corruption**: Fixed multichannel X-range corruption
117
+ caused by `linkedViewChanged()` recalculating ranges from screen-geometry
118
+ pixel offsets between stacked ViewBoxes. `_reset_view()` now blocks link
119
+ propagation via `ViewBox.blockLink(True)` while setting ranges, then unblocks.
120
+ - **Overlay Mode Y-Range Too Narrow**: Fixed `_compute_channel_y_range()` to
121
+ compute Y range from all trials (sampling up to 50 evenly spaced) instead of
122
+ only trial 0. Previously, if trial 0 was at resting potential but other
123
+ trials contained action potentials, the Y range was too narrow to display
124
+ the full signal.
125
+ - **Flaky Qt Tests**: Added `processEvents()` calls in 3 test files to resolve non-deterministic offscreen failures caused by stale deferred ViewBox geometry callbacks
126
+ - **Explorer Plot Layout**: Fixed Windows Explorer plot view state preservation during file cycling
127
+ - **Lint Errors**: Resolved all flake8 CI failures in `analysis_formatter` and `exporter_tab`
128
+ - **CSV Export**: Updated tidy per-type CSV export for batch results
129
+ - **Windows Analysis Loading**: Fixed registry import bug where `AnalysisRegistry` remained
130
+ empty on Windows because only `registry.py` was imported (not the full
131
+ `Synaptipy.core.analysis` package that triggers `@register` decorators). Added
132
+ `import Synaptipy.core.analysis` in `analyser_tab.py` and `startup_manager.py`.
133
+ - **Preprocessing Reset**: Connected the `preprocessing_reset_requested` signal in
134
+ `BaseAnalysisTab` and added `_handle_preprocessing_reset()` handler. Added
135
+ `reset_ui()` method to `PreprocessingWidget`. Reset now propagates globally to
136
+ all sibling analysis tabs via `AnalyserTab.set_global_preprocessing(None)`.
137
+
138
+ **Analysis Module Bug Fixes**
139
+ - **Tau (Time Constant)**: Added exponential fit overlay plot - `calculate_tau` now returns
140
+ fit curve data (`fit_time`, `fit_values`) alongside `tau_ms`, and the registration
141
+ includes `overlay_fit` plot metadata so the fit curve is drawn on the main trace
142
+ - **Excitability (F-I Curve)**: Added `popup_xy` plot metadata to show F-I Curve popup
143
+ (Frequency vs Current) after multi-trial analysis
144
+ - **Spike Train Dynamics**: Added ISI popup plot - wrapper now returns `isi_numbers` and
145
+ `isi_ms` arrays, and registration includes `popup_xy` plot metadata
146
+ - **Optogenetic Synchronization**: Added secondary channel selector (`requires_secondary_channel`
147
+ metadata) so users can pick a dedicated TTL/trigger channel instead of falling back to
148
+ the voltage trace; added stimulus onset vertical line markers to the plot
149
+ - **Event Detection (Template Match)**: Lowered default threshold from 4.0 SD to 3.0 SD
150
+ for better sensitivity; added `direction` parameter to UI so users can switch polarity;
151
+ fixed time-axis reconstruction to use actual `time` array instead of synthesising from
152
+ sampling rate (fixes event time accuracy when data doesn't start at t=0)
153
+ - **Event Detection (Threshold)**: Fixed noise-floor guard that could override user threshold -
154
+ the 2-SD noise guard now only activates when the user's threshold is below 1 SD, otherwise
155
+ the user's explicit threshold is honoured
156
+ - Added `overlay_fit` visualisation type to `MetadataDrivenAnalysisTab` for drawing
157
+ analysis fit curves on the main plot
158
+ - Added `_inject_secondary_channel_data` to `MetadataDrivenAnalysisTab` for loading
159
+ data from a user-selected secondary channel and passing it to analysis functions
160
+
161
+ **Publication Readiness Audit - Error Handling & Robustness**
162
+ - Replaced ~25 silent `except: pass` blocks with diagnostic `log.debug()` calls across 15 files
163
+ - Added logging to error-swallowing blocks in neo_adapter, analysis_formatter, explorer_tab,
164
+ plot_canvas (widgets & explorer), analysis_plot_manager, main_window, startup_manager,
165
+ zoom_theme, plot_customization, and analysis_tabs/base
166
+ - Added docstrings to NWB exporter fallback sentinel classes
167
+ - Removed trailing `pass` statements and dead placeholder code from explorer_tab,
168
+ shortcut_manager, main_window, file_io_controller, data_loader, and base analysis tab
169
+ - Cleaned up duplicate comment in base analysis tab error handler
170
+ - Removed unnecessary `pass` after `log.debug` in theme_manager
171
+
172
+ **Publication Readiness Audit - Code Quality**
173
+ - Fixed unused variable `param_key` in metadata_driven analysis tab
174
+ - Fixed unused variable `dt` in optogenetics wrapper
175
+ - Replaced long conditional expressions with readable intermediate variables in
176
+ optogenetics.py and train_dynamics.py
177
+ - Rewrote conversational docstring in optogenetics wrapper with proper Args/Returns format
178
+ - Fixed all flake8 violations: trailing whitespace, missing blank lines, line length, W391
179
+ - Cleaned up CLI placeholder module with proper docstrings (removed 50 lines of dead scaffolding)
180
+ - Removed stale `CSVExporter` comments from exporters `__init__.py`
181
+
182
+ **Publication Readiness Audit - Package Structure**
183
+ - Populated `__all__` exports in `application/controllers/__init__.py` (9 symbols)
184
+ - Populated `__all__` exports in `application/gui/analysis_tabs/__init__.py` (3 symbols)
185
+ - Added `__all__` and module docstring to `application/gui/explorer/__init__.py`
186
+
187
+ **Publication Readiness Audit - CI/CD**
188
+ - Added Python 3.12 to CI test matrix (now tests 3.10, 3.11, 3.12)
189
+ - Added `pytest-cov` coverage reporting to CI (`--cov=Synaptipy --cov-report=term-missing`)
190
+ - Added coverage XML artifact upload for ubuntu/3.11 builds
191
+
192
+ **Publication Readiness Audit - Scientific Accuracy**
193
+ - Fixed line-noise detection baseline overlap in `signal_processor.py`
194
+ - Fixed max/min dV/dt zeroing bias in `spike_analysis.py` (sentinel values)
195
+ - Fixed AHP depth sign convention in `spike_analysis.py`
196
+ - Fixed mean frequency calculation to use spike span instead of trace duration
197
+ - Fixed Rin unit conversion clarity (mV/pA → MOhm derivation)
198
+ - Refined sag ratio calculation to use 5th percentile for robustness
199
+ - Fixed z-score normalization in template matching (subtract median)
200
+ - Added dV/dt unit conversion documentation in `phase_plane.py`
201
+ - Removed duplicate dictionary keys in spike detection registry
202
+
203
+ **Publication Readiness Audit - Code Quality**
204
+ - Removed redundant imports, unused variables, and duplicate function definitions
205
+ - Added edge-case handling for empty spike indices
206
+ - Added docstring for `_find_stable_baseline_segment`
207
+ - Converted unresolvable TODO to NOTE (async limitation in batch load)
208
+ - Standardized all flake8 compliance to max-line-length 120
209
+
210
+ **Publication Readiness Audit - CI/CD & Infrastructure**
211
+ - Made flake8 lint failures blocking in CI (removed `--exit-zero`)
212
+ - Added `pytest-cov` to CI dependencies
213
+ - Aligned Python version floor to 3.10 in pyproject.toml, environment.yml, README
214
+ - Standardized author email and license (AGPL-3.0-or-later)
215
+ - Cleaned stale files, relocated tests, removed empty directories
216
+ - Added `.coverage`, `htmlcov/`, `.pytest_cache/` to `.gitignore`
217
+ - Removed stale Python 3.9 classifier from `pyproject.toml`
218
+ - Added `pytest-cov` and `flake8` to `environment.yml`
219
+ - Added 7 targeted scientific accuracy tests
220
+
221
+ **Phase 1: Critical Performance & Data Loading**
222
+ - **CRITICAL**: Fixed severe UI lag caused by repeated instantiation of PlotCustomizationManager in `get_plot_pens()`. Now uses singleton pattern, eliminating thousands of unnecessary disk reads.
223
+ - **CRITICAL**: Optimized `update_plot_pens()` in explorer_tab to fetch pens once outside loop instead of hundreds of times inside nested loops. Reduces function calls from N×M to 2.
224
+ - **CRITICAL**: Fixed multi-channel data loading bug in neo_adapter where only the first channel received data. Enhanced channel ID extraction with multiple fallback methods to ensure all channels load correctly.
225
+
226
+ **Phase 2: Architectural Performance Overhaul**
227
+ - **CRITICAL**: Eliminated double-loading architectural flaw where data was loaded twice (background thread + UI thread). Now passes pre-loaded Recording object directly, cutting load time by 50%.
228
+ - **CRITICAL**: Fixed plotting lag for large files by respecting plot mode - only plots single trial in CYCLE_SINGLE mode instead of all trials, resulting in 95%+ faster plot updates.
229
+ - **CRITICAL**: Enabled linked X-axis zooming across all channel plots for synchronized time-aligned inspection.
230
+ - Added comprehensive debug logging for data flow and plot operations
231
+ - Improved robustness of channel identification across different file formats (ABF, WCP, etc.)
232
+
233
+ **Phase 3: Rendering Performance Optimizations**
234
+ - **PERFORMANCE**: Optimized PyQtGraph downsampling using 'peak' mode to preserve spikes while reducing render load
235
+ - **PERFORMANCE**: Enabled setClipToView(True) on all plot items to skip rendering data outside visible viewport, reducing memory usage by 60-80%
236
+ - **PERFORMANCE**: Added "Force Opaque Single Trials" option to eliminate expensive alpha blending, providing 2-5x faster rendering with 20+ overlaid trials
237
+ - **PERFORMANCE**: Implemented 50ms debounce timers for zoom/pan sliders and scrollbars, reducing redraws by 98% during rapid interactions
238
+ - Added user-controlled performance checkbox in plot customization dialog
239
+ - Enhanced logging for all rendering optimizations
240
+
241
+ ### Performance
242
+ - Dramatically improved plot customization responsiveness (~99% reduction in disk I/O)
243
+ - Reduced pen update operations from hundreds to 2 per update cycle
244
+ - Eliminated redundant file loading (50% faster initial load)
245
+ - Instant plot updates for large files in single-trial mode (95%+ improvement)
246
+ - Synchronized multi-channel plot zooming
247
+ - **3-6x faster** rendering with optimized downsampling, clipping, and optional opaque mode
248
+ - Smoother slider interactions with 50ms debouncing (98% fewer redraws)
249
+ - Reduced memory usage during zooming (60-80% reduction with clipping)
250
+ - UI remains responsive during all operations
251
+
252
+ ## [0.1.0] - 2025-05-06
253
+
254
+ ### Added
255
+ - Initial release of Synaptipy
256
+ - GUI application with PySide6 and pyqtgraph for electrophysiology visualization
257
+ - Support for various file formats via the Neo library
258
+ - Explorer tab for viewing and navigating data files
259
+ - Analyzer tab with:
260
+ - Input Resistance/Conductance calculation
261
+ - Baseline/RMP analysis
262
+ - Exporter tab with:
263
+ - NWB export functionality
264
+ - CSV export for analysis results
265
+ - Comprehensive test suite with pytest fixtures
266
+ - Command-line interface for running the application
267
+ - Released under GNU Affero General Public License Version 3 (AGPL-3.0)
268
+
269
+ ### Known Issues
270
+ - Limited documentation
271
+ - Examples need further development
272
+ - No support for all possible Neo file formats (depends on installed backends)
@@ -0,0 +1,35 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ type: software
4
+ title: "SynaptiPy: An Open-Source Electrophysiology Visualization and Analysis Suite"
5
+ abstract: >-
6
+ SynaptiPy is an open-source, cross-platform software suite for the
7
+ visualization and automated analysis of patch-clamp electrophysiology
8
+ data. It provides experimental neuroscientists with a unified graphical
9
+ interface and a programmatic backend supporting over 30 file formats via
10
+ the Neo I/O library, covering analyses from passive membrane properties
11
+ and action potential kinetics to synaptic event detection. All extracted
12
+ metrics are returned as tidy tabular data directly traceable to their
13
+ source file, channel, and trial, enabling reproducible statistical
14
+ workflows without post-processing.
15
+ authors:
16
+ - family-names: "Shahul"
17
+ given-names: "Anzal K"
18
+ email: "anzal.ks@gmail.com"
19
+ orcid: "https://orcid.org/0009-0006-9932-7944"
20
+ affiliation: "Institute Neurosciences Cellulaires Et Intégratives (INCI), Centre National de la Recherche Scientifique (CNRS) / University of Strasbourg, Strasbourg, France"
21
+ version: "0.1.1b4"
22
+ date-released: "2026-04-28"
23
+ license: "AGPL-3.0-or-later"
24
+ repository-code: "https://github.com/anzalks/synaptipy"
25
+ keywords:
26
+ - electrophysiology
27
+ - patch-clamp
28
+ - neuroscience
29
+ - signal-processing
30
+ - data-visualization
31
+ - spike-detection
32
+ - synaptic-events
33
+ - optogenetics
34
+ - batch-analysis
35
+ - neurodata-without-borders