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.
- synaptipy-0.1.1b4/CHANGELOG.md +272 -0
- synaptipy-0.1.1b4/CITATION.cff +35 -0
- synaptipy-0.1.1b4/LICENSE +657 -0
- synaptipy-0.1.1b4/MANIFEST.in +25 -0
- synaptipy-0.1.1b4/PKG-INFO +635 -0
- synaptipy-0.1.1b4/README.md +568 -0
- synaptipy-0.1.1b4/docs/_build/html/_images/analyser_tab.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_images/explorer_tab.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_images/exporter_tab.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_sphinx_design_static/sphinx-design.min.css +1 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/basic.css +906 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/check-solid.svg +4 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/copy-button.svg +5 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/copybutton.css +94 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/css/badge_only.css +1 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/css/theme.css +4 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/custom.css +26 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/file.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/minus.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/plus.png +0 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/pygments.css +75 -0
- synaptipy-0.1.1b4/docs/_build/html/_static/sphinx-design.min.css +1 -0
- synaptipy-0.1.1b4/docs/_static/custom.css +26 -0
- synaptipy-0.1.1b4/docs/_static/logo.png +0 -0
- synaptipy-0.1.1b4/docs/algorithmic_definitions.md +1001 -0
- synaptipy-0.1.1b4/docs/api_reference.md +271 -0
- synaptipy-0.1.1b4/docs/conf.py +208 -0
- synaptipy-0.1.1b4/docs/decisions/LOG_ERROR_ANALYSIS.md +491 -0
- synaptipy-0.1.1b4/docs/decisions/PERFORMANCE_OPTIMIZATIONS.md +238 -0
- synaptipy-0.1.1b4/docs/decisions/REFACTORING_GUIDE.md +208 -0
- synaptipy-0.1.1b4/docs/decisions/RENDERING_OPTIMIZATIONS.md +418 -0
- synaptipy-0.1.1b4/docs/decisions/index.md +14 -0
- synaptipy-0.1.1b4/docs/developer_guide.md +487 -0
- synaptipy-0.1.1b4/docs/development/index.md +61 -0
- synaptipy-0.1.1b4/docs/development/styling_guide.md +131 -0
- synaptipy-0.1.1b4/docs/development_logs/ALL_TESTS_PASSING.md +109 -0
- synaptipy-0.1.1b4/docs/development_logs/ANALYSER_TAB_REFACTORING.md +220 -0
- synaptipy-0.1.1b4/docs/development_logs/ANALYSIS_FUNCTIONS_AND_FAILURE_POINTS.md +525 -0
- synaptipy-0.1.1b4/docs/development_logs/BUGFIX_SUMMARY.md +357 -0
- synaptipy-0.1.1b4/docs/development_logs/BUGFIX_VERIFICATION_REPORT.md +523 -0
- synaptipy-0.1.1b4/docs/development_logs/BUG_13_FIX.md +135 -0
- synaptipy-0.1.1b4/docs/development_logs/BUG_14_AUTO_TRIGGER_FIX.md +164 -0
- synaptipy-0.1.1b4/docs/development_logs/BUG_15_DATA_CLEARED_FIX.md +135 -0
- synaptipy-0.1.1b4/docs/development_logs/DEBOUNCING_IMPLEMENTATION.md +106 -0
- synaptipy-0.1.1b4/docs/development_logs/DEBOUNCING_VERIFICATION.md +221 -0
- synaptipy-0.1.1b4/docs/development_logs/ERROR_REPORT.md +274 -0
- synaptipy-0.1.1b4/docs/development_logs/EXPLORER_TAB_RIGHT_PANEL_UPDATE.md +217 -0
- synaptipy-0.1.1b4/docs/development_logs/EXPLORER_XAXIS_SHIFT_FIX.md +112 -0
- synaptipy-0.1.1b4/docs/development_logs/FINAL_IMPLEMENTATION_REPORT.md +327 -0
- synaptipy-0.1.1b4/docs/development_logs/FINAL_VERIFICATION_GUIDE.md +248 -0
- synaptipy-0.1.1b4/docs/development_logs/IMPLEMENTATION_SUMMARY.md +169 -0
- synaptipy-0.1.1b4/docs/development_logs/INTERACTION_DEBOUNCING_COMPLETE.md +322 -0
- synaptipy-0.1.1b4/docs/development_logs/PHASE1_COMPLETE.md +100 -0
- synaptipy-0.1.1b4/docs/development_logs/PHASE1_FINAL_SUMMARY.md +207 -0
- synaptipy-0.1.1b4/docs/development_logs/PHASE2_AND_3_COMPLETE.md +247 -0
- synaptipy-0.1.1b4/docs/development_logs/PHASES_2_3_COMPLETE.md +262 -0
- synaptipy-0.1.1b4/docs/development_logs/REFACTORING_FINAL_SUMMARY.md +219 -0
- synaptipy-0.1.1b4/docs/development_logs/REFACTORING_IMPLEMENTATION_SUMMARY.md +244 -0
- synaptipy-0.1.1b4/docs/development_logs/REFACTORING_SUCCESS.md +204 -0
- synaptipy-0.1.1b4/docs/development_logs/REFACTORING_TEST_PLAN.md +153 -0
- synaptipy-0.1.1b4/docs/development_logs/REFACTORING_TEST_RESULTS.md +202 -0
- synaptipy-0.1.1b4/docs/development_logs/USER_EXPERIENCE_FIX.md +163 -0
- synaptipy-0.1.1b4/docs/development_logs/index.md +55 -0
- synaptipy-0.1.1b4/docs/extending_synaptipy.md +1061 -0
- synaptipy-0.1.1b4/docs/index.rst +172 -0
- synaptipy-0.1.1b4/docs/manuals/CROSS_PLATFORM_SETUP.md +174 -0
- synaptipy-0.1.1b4/docs/manuals/MANUAL_TESTING_GUIDE.md +210 -0
- synaptipy-0.1.1b4/docs/manuals/index.md +12 -0
- synaptipy-0.1.1b4/docs/nwb_mapping.md +213 -0
- synaptipy-0.1.1b4/docs/tutorial/index.md +1369 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_burst_analysis.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_excitability.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_excitability_spike_train_dynamics.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_baseline_rmp.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_capacitance.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_i-v_curve.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_input_resistance.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_sag_ratio_ih.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_intrinsic_properties_tau_time_constant.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_max_repolarization_rate.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_opto_latency_jitter.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_optogenetics.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_optogenetics_optogenetic_sync.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis_phase_plane.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_spike_analysis_spike_detection.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_charge_auc.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_baseline__peak__kinetics.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_deconvolution_custom.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_synaptic_events_threshold_based.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/analyser_tab.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/explorer_tab.png +0 -0
- synaptipy-0.1.1b4/docs/tutorial/screenshots/exporter_tab.png +0 -0
- synaptipy-0.1.1b4/docs/user_guide.md +730 -0
- synaptipy-0.1.1b4/environment.yml +56 -0
- synaptipy-0.1.1b4/examples/01_batch_analysis.ipynb +322 -0
- synaptipy-0.1.1b4/examples/02_optogenetics.ipynb +364 -0
- synaptipy-0.1.1b4/examples/03_custom_plugin.ipynb +331 -0
- synaptipy-0.1.1b4/examples/README.md +65 -0
- synaptipy-0.1.1b4/examples/basic_usage.py +168 -0
- synaptipy-0.1.1b4/examples/data/2023_04_11_0018.abf +0 -0
- synaptipy-0.1.1b4/examples/data/2023_04_11_0019.abf +0 -0
- synaptipy-0.1.1b4/examples/data/2023_04_11_0021.abf +0 -0
- synaptipy-0.1.1b4/examples/data/2023_04_11_0022.abf +0 -0
- synaptipy-0.1.1b4/examples/data/240326_003.wcp +0 -0
- synaptipy-0.1.1b4/examples/plugins/ap_repolarization.py +190 -0
- synaptipy-0.1.1b4/examples/plugins/opto_jitter.py +289 -0
- synaptipy-0.1.1b4/examples/plugins/synaptic_charge.py +346 -0
- synaptipy-0.1.1b4/pyproject.toml +138 -0
- synaptipy-0.1.1b4/requirements.txt +40 -0
- synaptipy-0.1.1b4/setup.cfg +4 -0
- synaptipy-0.1.1b4/src/Synaptipy/__init__.py +21 -0
- synaptipy-0.1.1b4/src/Synaptipy/__main__.py +86 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/__init__.py +11 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/__main__.py +251 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/cli/__init__.py +11 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/cli/main.py +10 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/__init__.py +19 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/analysis_formatter.py +539 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/analysis_plot_manager.py +181 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/file_io_controller.py +188 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/live_analysis_controller.py +145 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/controllers/shortcut_manager.py +57 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/data_loader.py +160 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/__init__.py +12 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/about_dialog.py +123 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analyser_tab.py +961 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_config_dialog.py +196 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/__init__.py +10 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/base.py +2704 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_tabs/metadata_driven.py +1789 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/analysis_worker.py +215 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/batch_dialog.py +1184 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/export_manager.py +224 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/plot_export_dialog.py +68 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/dialogs/trial_selection_dialog.py +93 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/__init__.py +6 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/config_panel.py +327 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/explorer_tab.py +2217 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/plot_canvas.py +231 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/sidebar.py +414 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/toolbar.py +131 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/explorer/y_controls.py +258 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/exporter_tab.py +606 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/main_window.py +1096 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/nwb_dialog.py +341 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/plot_customization_dialog.py +862 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/plot_save_dialog.py +336 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/preferences_dialog.py +374 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/session_summary_dialog.py +97 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/ui_generator.py +230 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/welcome_screen.py +482 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/widgets/plot_canvas.py +620 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/gui/widgets/preprocessing.py +329 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/plugin_manager.py +276 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/services/__init__.py +3 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/services/data_loader_service.py +108 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/session_manager.py +235 -0
- synaptipy-0.1.1b4/src/Synaptipy/application/startup_manager.py +280 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/__init__.py +19 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/__init__.py +42 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/batch_engine.py +1127 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/cross_file_utils.py +151 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/epoch_manager.py +291 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/evoked_responses.py +910 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/firing_dynamics.py +679 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/passive_properties.py +2185 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/registry.py +244 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/single_spike.py +925 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/analysis/synaptic_events.py +1397 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/data_model.py +548 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/processing_pipeline.py +345 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/results.py +147 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/signal_processor.py +839 -0
- synaptipy-0.1.1b4/src/Synaptipy/core/source_interfaces.py +28 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/__init__.py +12 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/__init__.py +15 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/csv_exporter.py +618 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/exporters/nwb_exporter.py +454 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/__init__.py +16 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/abf_reader.py +1 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/neo_adapter.py +702 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/file_readers/neo_source_handle.py +83 -0
- synaptipy-0.1.1b4/src/Synaptipy/infrastructure/neo_patches.py +281 -0
- synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.afdesign +0 -0
- synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.icns +0 -0
- synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.ico +0 -0
- synaptipy-0.1.1b4/src/Synaptipy/resources/icons/logo.png +0 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/__init__.py +103 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/constants.py +49 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/data_cache.py +279 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/error_handling.py +70 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/logging_config.py +135 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/plot_customization.py +924 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/plot_exporter.py +245 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/plot_factory.py +297 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/plot_zoom_sync.py +550 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/scroll_settings.py +131 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/styling.py +326 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/theme_manager.py +708 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/utils.py +46 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/viewbox.py +116 -0
- synaptipy-0.1.1b4/src/Synaptipy/shared/zoom_theme.py +350 -0
- synaptipy-0.1.1b4/src/Synaptipy/templates/analysis_template.py +62 -0
- synaptipy-0.1.1b4/src/Synaptipy/templates/plugin_template.py +168 -0
- synaptipy-0.1.1b4/src/Synaptipy/templates/tab_template.py +89 -0
- synaptipy-0.1.1b4/src/Synaptipy/templates/test_template.py +45 -0
- synaptipy-0.1.1b4/src/synaptipy.egg-info/PKG-INFO +635 -0
- synaptipy-0.1.1b4/src/synaptipy.egg-info/SOURCES.txt +215 -0
- synaptipy-0.1.1b4/src/synaptipy.egg-info/dependency_links.txt +1 -0
- synaptipy-0.1.1b4/src/synaptipy.egg-info/entry_points.txt +2 -0
- synaptipy-0.1.1b4/src/synaptipy.egg-info/requires.txt +42 -0
- 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
|