neuroseq 0.30.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- neuroseq-0.30.0/.gitignore +149 -0
- neuroseq-0.30.0/LICENSE +21 -0
- neuroseq-0.30.0/PKG-INFO +103 -0
- neuroseq-0.30.0/README.md +48 -0
- neuroseq-0.30.0/docs/common_issues.md +49 -0
- neuroseq-0.30.0/docs/developer/analysis_plugins.md +43 -0
- neuroseq-0.30.0/docs/developer/contributing.md +41 -0
- neuroseq-0.30.0/docs/developer/custom_simulators.md +156 -0
- neuroseq-0.30.0/docs/developer/developer_installation.md +137 -0
- neuroseq-0.30.0/docs/developer/documentation.md +52 -0
- neuroseq-0.30.0/docs/developer/miscellaneous.md +5 -0
- neuroseq-0.30.0/docs/developer/project_history.md +37 -0
- neuroseq-0.30.0/docs/developer/releases.md +43 -0
- neuroseq-0.30.0/docs/developer/testing.md +168 -0
- neuroseq-0.30.0/docs/examples.md +64 -0
- neuroseq-0.30.0/docs/getting_started/installation.md +62 -0
- neuroseq-0.30.0/docs/getting_started/quickstart.md +11 -0
- neuroseq-0.30.0/docs/getting_started/windows_shortcut.md +112 -0
- neuroseq-0.30.0/docs/images/SutterPatch_TemplateEditor.png +0 -0
- neuroseq-0.30.0/docs/images/amplitude_selection.png +0 -0
- neuroseq-0.30.0/docs/images/button_appearance.png +0 -0
- neuroseq-0.30.0/docs/images/data_selection.png +0 -0
- neuroseq-0.30.0/docs/images/draw_mode.png +0 -0
- neuroseq-0.30.0/docs/images/favicon.svg +1 -0
- neuroseq-0.30.0/docs/images/hodgkin_huxley_neuron.png +0 -0
- neuroseq-0.30.0/docs/images/layout.png +0 -0
- neuroseq-0.30.0/docs/images/screenshot.png +0 -0
- neuroseq-0.30.0/docs/images/select_mode.png +0 -0
- neuroseq-0.30.0/docs/images/stimulus_intensity.png +0 -0
- neuroseq-0.30.0/docs/images/toggle_widgets.png +0 -0
- neuroseq-0.30.0/docs/index.md +47 -0
- neuroseq-0.30.0/docs/user_guide/analysis_and_plugins.md +69 -0
- neuroseq-0.30.0/docs/user_guide/brainscales2_delivery.md +260 -0
- neuroseq-0.30.0/docs/user_guide/chat_assistant.md +98 -0
- neuroseq-0.30.0/docs/user_guide/experiments.md +72 -0
- neuroseq-0.30.0/docs/user_guide/export_patch_clamp_stimuli.md +19 -0
- neuroseq-0.30.0/docs/user_guide/gui_overview.md +262 -0
- neuroseq-0.30.0/docs/user_guide/importing_igor2_waves.md +107 -0
- neuroseq-0.30.0/docs/user_guide/importing_imaging_data.md +207 -0
- neuroseq-0.30.0/docs/user_guide/multiphoton_holographic_stimulation.md +310 -0
- neuroseq-0.30.0/docs/user_guide/run_external_simulators.md +72 -0
- neuroseq-0.30.0/docs/user_guide/scanimage_acquisition.md +263 -0
- neuroseq-0.30.0/docs/user_guide/simulations.md +153 -0
- neuroseq-0.30.0/docs/user_guide/simulations_and_experiments.md +68 -0
- neuroseq-0.30.0/docs/user_guide/stdp_synaptic_tuning.md +178 -0
- neuroseq-0.30.0/external_simulation_example/run_brian2_externally.py +218 -0
- neuroseq-0.30.0/external_simulation_example/simulate.py +73 -0
- neuroseq-0.30.0/pyproject.toml +197 -0
- neuroseq-0.30.0/scripts/windows/install_shortcut.ps1 +67 -0
- neuroseq-0.30.0/scripts/windows/launch_neuroseq.ps1 +138 -0
- neuroseq-0.30.0/scripts/windows/neuroseq.ico +0 -0
- neuroseq-0.30.0/src/neuroseq/__init__.py +5 -0
- neuroseq-0.30.0/src/neuroseq/__main__.py +256 -0
- neuroseq-0.30.0/src/neuroseq/add_experiment_data_dialog.py +241 -0
- neuroseq-0.30.0/src/neuroseq/analysis_plugins.py +182 -0
- neuroseq-0.30.0/src/neuroseq/aoi_shapes.py +65 -0
- neuroseq-0.30.0/src/neuroseq/b2_model.py +2772 -0
- neuroseq-0.30.0/src/neuroseq/b2_units.py +105 -0
- neuroseq-0.30.0/src/neuroseq/background_jobs.py +447 -0
- neuroseq-0.30.0/src/neuroseq/cellpose_annotation.py +138 -0
- neuroseq-0.30.0/src/neuroseq/cellpose_test_data.py +285 -0
- neuroseq-0.30.0/src/neuroseq/console_art.py +98 -0
- neuroseq-0.30.0/src/neuroseq/console_widget.py +292 -0
- neuroseq-0.30.0/src/neuroseq/data.py +101 -0
- neuroseq-0.30.0/src/neuroseq/data_manager_dialog.py +197 -0
- neuroseq-0.30.0/src/neuroseq/device_control/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/device_control/bss2_connection.py +375 -0
- neuroseq-0.30.0/src/neuroseq/device_control/bss2_panel.py +908 -0
- neuroseq-0.30.0/src/neuroseq/device_control/bss2_protocol.py +975 -0
- neuroseq-0.30.0/src/neuroseq/device_control/bss2_stimulation_host.py +293 -0
- neuroseq-0.30.0/src/neuroseq/device_control/scanimage_connection.py +351 -0
- neuroseq-0.30.0/src/neuroseq/device_control/scanimage_controls.py +424 -0
- neuroseq-0.30.0/src/neuroseq/device_control/scanimage_engine_worker.py +128 -0
- neuroseq-0.30.0/src/neuroseq/device_control/scanimage_files.py +49 -0
- neuroseq-0.30.0/src/neuroseq/device_control/stimulation_setup_widget.py +38 -0
- neuroseq-0.30.0/src/neuroseq/device_control/syscon2_client.py +439 -0
- neuroseq-0.30.0/src/neuroseq/device_control/syscon2_connection_manager.py +196 -0
- neuroseq-0.30.0/src/neuroseq/device_control/syscon2_panel.py +1523 -0
- neuroseq-0.30.0/src/neuroseq/device_control/syscon2_protocol.py +207 -0
- neuroseq-0.30.0/src/neuroseq/device_control/syscon2_stimulation_host.py +689 -0
- neuroseq-0.30.0/src/neuroseq/elise_support/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/elise_support/protocol_dialog.py +92 -0
- neuroseq-0.30.0/src/neuroseq/elise_support/replay_metrics.py +298 -0
- neuroseq-0.30.0/src/neuroseq/elise_support/workflows.py +318 -0
- neuroseq-0.30.0/src/neuroseq/example_models/NN.py +70 -0
- neuroseq-0.30.0/src/neuroseq/example_models/__init__.py +0 -0
- neuroseq-0.30.0/src/neuroseq/example_models/elise.py +1603 -0
- neuroseq-0.30.0/src/neuroseq/example_models/pynn_demo.py +366 -0
- neuroseq-0.30.0/src/neuroseq/example_models/sinus_offset.py +209 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/__init__.py +81 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/_registry.py +36 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/default_project.py +178 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/elise_project.py +10 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/getting_started_project.py +48 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neuron_with_synapses.py +204 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neuron_with_synthetic_synapses.py +206 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neurons_ei_model.py +144 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neurons_with_plasticity.py +215 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/locally_connected_network.py +107 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/non_linear.py +58 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/pynn_demo_project.py +65 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/sinus_offset_project.py +57 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/networks/two_hh_neurons_with_plasticity.py +239 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/pyrho_6state_chr2_project.py +154 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_adex_neuron.py +81 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_hh_neuron.py +137 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron.py +63 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron_many_stims.py +115 -0
- neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron_without_stim.py +44 -0
- neuroseq-0.30.0/src/neuroseq/export/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/export/exporter_igor2.py +408 -0
- neuroseq-0.30.0/src/neuroseq/export/exporter_syscon2.py +4076 -0
- neuroseq-0.30.0/src/neuroseq/export/igor2_pxp_stim_export_dialog.py +106 -0
- neuroseq-0.30.0/src/neuroseq/export/igor2_single_wave_export_dialog.py +179 -0
- neuroseq-0.30.0/src/neuroseq/export/power_lut.py +142 -0
- neuroseq-0.30.0/src/neuroseq/export/stimulation_generator_dialog.py +1284 -0
- neuroseq-0.30.0/src/neuroseq/export/stimulus_export_dialog.py +244 -0
- neuroseq-0.30.0/src/neuroseq/export/syscon2_export_service.py +332 -0
- neuroseq-0.30.0/src/neuroseq/external_tools.py +73 -0
- neuroseq-0.30.0/src/neuroseq/fiji.py +128 -0
- neuroseq-0.30.0/src/neuroseq/gpu.py +102 -0
- neuroseq-0.30.0/src/neuroseq/gui.py +341 -0
- neuroseq-0.30.0/src/neuroseq/gui_settings.py +277 -0
- neuroseq-0.30.0/src/neuroseq/icon_manager.py +108 -0
- neuroseq-0.30.0/src/neuroseq/importers/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/importers/cellpose_import_dialog.py +1770 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_cellpose.py +849 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_patch_clamp_data.py +801 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_scanimage.py +111 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_scanimage_traces.py +188 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_suite2p.py +210 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_syscon2.py +1239 -0
- neuroseq-0.30.0/src/neuroseq/importers/importer_tif.py +586 -0
- neuroseq-0.30.0/src/neuroseq/importers/patch_clamp_data_input_import_dialog.py +795 -0
- neuroseq-0.30.0/src/neuroseq/importers/patch_clamp_data_output_import_dialog.py +1076 -0
- neuroseq-0.30.0/src/neuroseq/importers/suite2p_import_dialog.py +606 -0
- neuroseq-0.30.0/src/neuroseq/importers/syscon2_import_dialog.py +495 -0
- neuroseq-0.30.0/src/neuroseq/importers/tif_import_dialog.py +961 -0
- neuroseq-0.30.0/src/neuroseq/io.py +542 -0
- neuroseq-0.30.0/src/neuroseq/llm/__init__.py +25 -0
- neuroseq-0.30.0/src/neuroseq/llm/anthropic_backend.py +73 -0
- neuroseq-0.30.0/src/neuroseq/llm/backend.py +76 -0
- neuroseq-0.30.0/src/neuroseq/llm/chat_widget.py +399 -0
- neuroseq-0.30.0/src/neuroseq/llm/llm_settings_dialog.py +234 -0
- neuroseq-0.30.0/src/neuroseq/llm/ollama.py +113 -0
- neuroseq-0.30.0/src/neuroseq/llm/openai_backend.py +79 -0
- neuroseq-0.30.0/src/neuroseq/llm/plugin_write_dialog.py +100 -0
- neuroseq-0.30.0/src/neuroseq/llm/read_access.py +339 -0
- neuroseq-0.30.0/src/neuroseq/llm/secrets.py +43 -0
- neuroseq-0.30.0/src/neuroseq/llm/system_prompt.py +85 -0
- neuroseq-0.30.0/src/neuroseq/main_scroll.py +187 -0
- neuroseq-0.30.0/src/neuroseq/model_descriptions.py +140 -0
- neuroseq-0.30.0/src/neuroseq/model_editor.py +1231 -0
- neuroseq-0.30.0/src/neuroseq/project.py +1706 -0
- neuroseq-0.30.0/src/neuroseq/project_history.py +166 -0
- neuroseq-0.30.0/src/neuroseq/project_workspace.py +3966 -0
- neuroseq-0.30.0/src/neuroseq/py.typed +0 -0
- neuroseq-0.30.0/src/neuroseq/qt_helpers.py +142 -0
- neuroseq-0.30.0/src/neuroseq/resources/__init__.py +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py +147 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/elise_learning_curves.py +108 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/elise_target_mse.py +189 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/epsp_amplitudes.py +249 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/mean_activity.py +69 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/membrane_parameters.py +326 -0
- neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/replay_mse.py +176 -0
- neuroseq-0.30.0/src/neuroseq/resources/bss2/neuroseq_bss2_helper.py +532 -0
- neuroseq-0.30.0/src/neuroseq/resources/console_brain.png +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/example_data/2p_imaging_FOV.png +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/example_data/2p_imaging_FOV_seg.npy +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro.qss +583 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_down.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_down_disabled.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_up.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_up_disabled.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_check.svg +6 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_check_disabled.svg +4 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_checkbox.svg +5 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_checkbox_disabled.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_close.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_indeterminate.svg +6 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_indeterminate_disabled.svg +4 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_radio.svg +5 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_radio_disabled.svg +4 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_radio_off.svg +4 -0
- neuroseq-0.30.0/src/neuroseq/resources/retro_radio_off_disabled.svg +3 -0
- neuroseq-0.30.0/src/neuroseq/resources/rheobase_chronaxie.svg +195 -0
- neuroseq-0.30.0/src/neuroseq/resources/scanimage/neuroseq_scanimage.m +212 -0
- neuroseq-0.30.0/src/neuroseq/resources/scanimage/neuroseq_scanimage_event.m +4 -0
- neuroseq-0.30.0/src/neuroseq/resources/startup_brain.png +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/__init__.py +0 -0
- neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/default_1100nm.lut +16 -0
- neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/default_940nm.lut +9 -0
- neuroseq-0.30.0/src/neuroseq/save_imaging_dialog.py +115 -0
- neuroseq-0.30.0/src/neuroseq/save_load_options.py +89 -0
- neuroseq-0.30.0/src/neuroseq/spike_detection.py +262 -0
- neuroseq-0.30.0/src/neuroseq/startup_dialog.py +157 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/__init__.py +0 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dialog_helpers.py +66 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_blocks.py +84 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_controller.py +164 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_measurement.py +221 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_routine.py +101 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/hardware_settings_widget.py +223 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/hardware_targets.py +106 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/rheobase.py +27 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/rheobase_dialog.py +2235 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/routine_overview_dialog.py +333 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_synaptic_tuning_dialog.py +1035 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_window.py +44 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_window_dialog.py +1764 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/static_input/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/static_input/static_input_controller.py +65 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/static_input/stim_pattern_dialog.py +434 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/static_input/stim_patterns.py +336 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim.py +55 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_array_modifier.py +340 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_dialog.py +182 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_editor.py +1648 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_intensity_dialog.py +168 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_loop_dialog.py +66 -0
- neuroseq-0.30.0/src/neuroseq/stimulation/stim_timing.py +171 -0
- neuroseq-0.30.0/src/neuroseq/synthetic_data_dialog.py +985 -0
- neuroseq-0.30.0/src/neuroseq/theme.py +362 -0
- neuroseq-0.30.0/src/neuroseq/utils.py +581 -0
- neuroseq-0.30.0/src/neuroseq/visualization/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/visualization/calcium_video_widget.py +867 -0
- neuroseq-0.30.0/src/neuroseq/visualization/cell_overlay_widget.py +1655 -0
- neuroseq-0.30.0/src/neuroseq/visualization/custom_analysis_widget.py +362 -0
- neuroseq-0.30.0/src/neuroseq/visualization/data_widget.py +351 -0
- neuroseq-0.30.0/src/neuroseq/visualization/fpl_widget.py +287 -0
- neuroseq-0.30.0/src/neuroseq/visualization/heatmap_widget.py +341 -0
- neuroseq-0.30.0/src/neuroseq/visualization/spatial_footprint_widget.py +676 -0
- neuroseq-0.30.0/src/neuroseq/visualization/spike_widget.py +141 -0
- neuroseq-0.30.0/src/neuroseq/visualization/stim_widget.py +651 -0
- neuroseq-0.30.0/src/neuroseq/visualization/time_slider_widget.py +167 -0
- neuroseq-0.30.0/src/neuroseq/visualization/timeseries_widget.py +1071 -0
- neuroseq-0.30.0/src/neuroseq/visualization/trace_widget.py +827 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/__init__.py +1 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/brightness_contrast.py +282 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/cellpose_ids.py +49 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/constrained_pan_zoom_controller.py +388 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/gridlines.py +190 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/neuron_subset_dialog.py +74 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/region_of_interest.py +82 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/segmentation_brightness_dialog.py +84 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/spatial_footprint_state.py +241 -0
- neuroseq-0.30.0/src/neuroseq/visualization_support/trace_widget_state.py +69 -0
- neuroseq-0.30.0/src/neuroseq/workspace_acquisition_controller.py +708 -0
- neuroseq-0.30.0/src/neuroseq/workspace_devices.py +217 -0
- neuroseq-0.30.0/tests/__init__.py +0 -0
- neuroseq-0.30.0/tests/bss2_fake_helper.py +182 -0
- neuroseq-0.30.0/tests/conftest.py +907 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/aoi_mapping.json +1 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/image.png +0 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy.nseq +0 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy_aoi_dialog.nseq +0 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy_export.seq +245 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/make_aoi_fixture.py +46 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/make_fixture.py +88 -0
- neuroseq-0.30.0/tests/data/legacy_cellpose_v1/masks.npy +0 -0
- neuroseq-0.30.0/tests/fake_stimulation_host.py +161 -0
- neuroseq-0.30.0/tests/matlab/ScanImageTestComponent.m +22 -0
- neuroseq-0.30.0/tests/matlab/ScanImageTestRig.m +38 -0
- neuroseq-0.30.0/tests/matlab/test_scanimage_adapter.m +225 -0
- neuroseq-0.30.0/tests/sampledata/3patchclampneurons.npy +0 -0
- neuroseq-0.30.0/tests/sampledata/theme_controls_dark.png +0 -0
- neuroseq-0.30.0/tests/sampledata/theme_controls_light.png +0 -0
- neuroseq-0.30.0/tests/sampledata/theme_controls_retro.png +0 -0
- neuroseq-0.30.0/tests/test_add_experiment_data_dialog.py +69 -0
- neuroseq-0.30.0/tests/test_analysis_plugins.py +137 -0
- neuroseq-0.30.0/tests/test_b2_units.py +148 -0
- neuroseq-0.30.0/tests/test_b2model.py +1343 -0
- neuroseq-0.30.0/tests/test_background_io_worker.py +112 -0
- neuroseq-0.30.0/tests/test_background_jobs.py +271 -0
- neuroseq-0.30.0/tests/test_brightness_contrast.py +161 -0
- neuroseq-0.30.0/tests/test_bss2_connection.py +290 -0
- neuroseq-0.30.0/tests/test_bss2_helper.py +484 -0
- neuroseq-0.30.0/tests/test_bss2_panel.py +598 -0
- neuroseq-0.30.0/tests/test_bss2_protocol.py +536 -0
- neuroseq-0.30.0/tests/test_bss2_stimulation_host.py +200 -0
- neuroseq-0.30.0/tests/test_calcium_video_channels.py +136 -0
- neuroseq-0.30.0/tests/test_cellpose_annotation.py +142 -0
- neuroseq-0.30.0/tests/test_cellpose_aoi_mapping.py +459 -0
- neuroseq-0.30.0/tests/test_cellpose_import_dialog.py +577 -0
- neuroseq-0.30.0/tests/test_cellpose_importer.py +635 -0
- neuroseq-0.30.0/tests/test_cellpose_orientation.py +181 -0
- neuroseq-0.30.0/tests/test_cellpose_test_data.py +240 -0
- neuroseq-0.30.0/tests/test_chat_widget.py +226 -0
- neuroseq-0.30.0/tests/test_conftest.py +26 -0
- neuroseq-0.30.0/tests/test_console.py +202 -0
- neuroseq-0.30.0/tests/test_console_art.py +95 -0
- neuroseq-0.30.0/tests/test_constrained_pan_zoom_controller.py +185 -0
- neuroseq-0.30.0/tests/test_custom_analysis_widget.py +554 -0
- neuroseq-0.30.0/tests/test_data_manager_dialog.py +60 -0
- neuroseq-0.30.0/tests/test_data_widget.py +86 -0
- neuroseq-0.30.0/tests/test_detached_panel_window.py +41 -0
- neuroseq-0.30.0/tests/test_drop_import.py +234 -0
- neuroseq-0.30.0/tests/test_dynamic_input_blocks.py +137 -0
- neuroseq-0.30.0/tests/test_dynamic_input_controller.py +42 -0
- neuroseq-0.30.0/tests/test_dynamic_input_measurement.py +95 -0
- neuroseq-0.30.0/tests/test_dynamic_input_routine.py +55 -0
- neuroseq-0.30.0/tests/test_dynamic_input_stdp_backends.py +232 -0
- neuroseq-0.30.0/tests/test_elise_kinetics_archive_migration.py +137 -0
- neuroseq-0.30.0/tests/test_elise_opsin_kinetics.py +282 -0
- neuroseq-0.30.0/tests/test_elise_opsin_release.py +359 -0
- neuroseq-0.30.0/tests/test_elise_protocol.py +449 -0
- neuroseq-0.30.0/tests/test_elise_smoke.py +162 -0
- neuroseq-0.30.0/tests/test_elise_target_mse.py +191 -0
- neuroseq-0.30.0/tests/test_elise_workflows.py +54 -0
- neuroseq-0.30.0/tests/test_epsp_analysis.py +124 -0
- neuroseq-0.30.0/tests/test_example_models_backend.py +401 -0
- neuroseq-0.30.0/tests/test_example_project_elise.py +152 -0
- neuroseq-0.30.0/tests/test_example_project_pynn_demo.py +411 -0
- neuroseq-0.30.0/tests/test_example_project_sinus_offset.py +69 -0
- neuroseq-0.30.0/tests/test_example_projects.py +243 -0
- neuroseq-0.30.0/tests/test_exporter_igor2.py +729 -0
- neuroseq-0.30.0/tests/test_exporter_syscon2.py +2285 -0
- neuroseq-0.30.0/tests/test_external_sim_params_tree.py +198 -0
- neuroseq-0.30.0/tests/test_external_sim_worker.py +124 -0
- neuroseq-0.30.0/tests/test_external_tools.py +75 -0
- neuroseq-0.30.0/tests/test_fiji.py +115 -0
- neuroseq-0.30.0/tests/test_fpl_widget.py +209 -0
- neuroseq-0.30.0/tests/test_gpu.py +105 -0
- neuroseq-0.30.0/tests/test_gridlines.py +75 -0
- neuroseq-0.30.0/tests/test_gui.py +4617 -0
- neuroseq-0.30.0/tests/test_gui_brian2_threaded_dispatch.py +264 -0
- neuroseq-0.30.0/tests/test_gui_external_simulate_dispatch.py +437 -0
- neuroseq-0.30.0/tests/test_gui_settings.py +168 -0
- neuroseq-0.30.0/tests/test_gui_threaded_io.py +256 -0
- neuroseq-0.30.0/tests/test_hardware_settings_widget.py +111 -0
- neuroseq-0.30.0/tests/test_hardware_targets.py +45 -0
- neuroseq-0.30.0/tests/test_heatmap_widget.py +215 -0
- neuroseq-0.30.0/tests/test_icon_manager.py +113 -0
- neuroseq-0.30.0/tests/test_igor2_pxp_stim_export_dialog.py +89 -0
- neuroseq-0.30.0/tests/test_igor2_single_wave_export_dialog.py +153 -0
- neuroseq-0.30.0/tests/test_import_layering.py +70 -0
- neuroseq-0.30.0/tests/test_importer_patch_clamp_data.py +976 -0
- neuroseq-0.30.0/tests/test_importer_scanimage_traces.py +194 -0
- neuroseq-0.30.0/tests/test_importer_suite2p.py +204 -0
- neuroseq-0.30.0/tests/test_importer_syscon2.py +2033 -0
- neuroseq-0.30.0/tests/test_importer_tif.py +1050 -0
- neuroseq-0.30.0/tests/test_io.py +397 -0
- neuroseq-0.30.0/tests/test_llm_backend.py +321 -0
- neuroseq-0.30.0/tests/test_llm_read_access.py +499 -0
- neuroseq-0.30.0/tests/test_llm_settings_dialog.py +119 -0
- neuroseq-0.30.0/tests/test_llm_system_prompt.py +90 -0
- neuroseq-0.30.0/tests/test_main.py +463 -0
- neuroseq-0.30.0/tests/test_main_scroll.py +130 -0
- neuroseq-0.30.0/tests/test_membrane_parameters_analysis.py +92 -0
- neuroseq-0.30.0/tests/test_modeleditor.py +1074 -0
- neuroseq-0.30.0/tests/test_neuron_subset_dialog.py +53 -0
- neuroseq-0.30.0/tests/test_open_in_fiji.py +59 -0
- neuroseq-0.30.0/tests/test_patch_clamp_data_input_import_dialog.py +1040 -0
- neuroseq-0.30.0/tests/test_patch_clamp_data_output_import_dialog.py +920 -0
- neuroseq-0.30.0/tests/test_power_lut.py +108 -0
- neuroseq-0.30.0/tests/test_project.py +1652 -0
- neuroseq-0.30.0/tests/test_project_external_simulate.py +389 -0
- neuroseq-0.30.0/tests/test_project_history.py +404 -0
- neuroseq-0.30.0/tests/test_project_suggested_sim_time.py +104 -0
- neuroseq-0.30.0/tests/test_project_tile_to_length.py +84 -0
- neuroseq-0.30.0/tests/test_project_workspaces.py +620 -0
- neuroseq-0.30.0/tests/test_pynn_demo_smoke.py +102 -0
- neuroseq-0.30.0/tests/test_qt_threading.py +89 -0
- neuroseq-0.30.0/tests/test_replay_mse_plugin.py +226 -0
- neuroseq-0.30.0/tests/test_rheobase.py +41 -0
- neuroseq-0.30.0/tests/test_rheobase_backend.py +182 -0
- neuroseq-0.30.0/tests/test_rheobase_dialog.py +1498 -0
- neuroseq-0.30.0/tests/test_rheobase_integration.py +93 -0
- neuroseq-0.30.0/tests/test_routine_overview_dialog.py +147 -0
- neuroseq-0.30.0/tests/test_save_imaging.py +169 -0
- neuroseq-0.30.0/tests/test_save_load_options.py +49 -0
- neuroseq-0.30.0/tests/test_scanimage.py +1011 -0
- neuroseq-0.30.0/tests/test_scanimage_files.py +20 -0
- neuroseq-0.30.0/tests/test_sinus_offset_smoke.py +98 -0
- neuroseq-0.30.0/tests/test_spatial_footprint_widget.py +1965 -0
- neuroseq-0.30.0/tests/test_spike_widget.py +227 -0
- neuroseq-0.30.0/tests/test_startup_dialog.py +174 -0
- neuroseq-0.30.0/tests/test_stdp_synaptic_tuning_dialog.py +955 -0
- neuroseq-0.30.0/tests/test_stdp_window.py +51 -0
- neuroseq-0.30.0/tests/test_stdp_window_dialog.py +973 -0
- neuroseq-0.30.0/tests/test_stdp_window_integration.py +213 -0
- neuroseq-0.30.0/tests/test_stim_array_modifier.py +182 -0
- neuroseq-0.30.0/tests/test_stim_dialog.py +89 -0
- neuroseq-0.30.0/tests/test_stim_editor.py +2073 -0
- neuroseq-0.30.0/tests/test_stim_intensity_dialog.py +115 -0
- neuroseq-0.30.0/tests/test_stim_loop.py +195 -0
- neuroseq-0.30.0/tests/test_stim_pattern_dialog.py +629 -0
- neuroseq-0.30.0/tests/test_stim_patterns.py +455 -0
- neuroseq-0.30.0/tests/test_stim_timing.py +218 -0
- neuroseq-0.30.0/tests/test_stim_widget.py +1072 -0
- neuroseq-0.30.0/tests/test_stimulation_generator_dialog.py +1460 -0
- neuroseq-0.30.0/tests/test_stimulation_setup_widget.py +43 -0
- neuroseq-0.30.0/tests/test_stimulus_export_dialog.py +100 -0
- neuroseq-0.30.0/tests/test_suite2p_import_dialog.py +266 -0
- neuroseq-0.30.0/tests/test_synthetic_data_dialog.py +192 -0
- neuroseq-0.30.0/tests/test_syscon2_client.py +404 -0
- neuroseq-0.30.0/tests/test_syscon2_connection_manager.py +310 -0
- neuroseq-0.30.0/tests/test_syscon2_export_service.py +222 -0
- neuroseq-0.30.0/tests/test_syscon2_panel.py +1153 -0
- neuroseq-0.30.0/tests/test_syscon2_protocol.py +177 -0
- neuroseq-0.30.0/tests/test_syscon2_stimulation_host.py +665 -0
- neuroseq-0.30.0/tests/test_theme.py +301 -0
- neuroseq-0.30.0/tests/test_theme_retro.py +257 -0
- neuroseq-0.30.0/tests/test_threaded_external_dispatch.py +219 -0
- neuroseq-0.30.0/tests/test_tif_import_dialog.py +1061 -0
- neuroseq-0.30.0/tests/test_time_slider_widget.py +136 -0
- neuroseq-0.30.0/tests/test_trace_widget.py +1964 -0
- neuroseq-0.30.0/tests/test_utils.py +254 -0
- neuroseq-0.30.0/tests/test_windows_launcher.py +180 -0
- neuroseq-0.30.0/tests/test_workspace_acquisition_controller.py +797 -0
- neuroseq-0.30.0/tests/wait_timeout.py +9 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
pip-wheel-metadata/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
# Usually these files are written by a python script from a template
|
|
32
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
33
|
+
*.manifest
|
|
34
|
+
*.spec
|
|
35
|
+
|
|
36
|
+
# Installer logs
|
|
37
|
+
pip-log.txt
|
|
38
|
+
pip-delete-this-directory.txt
|
|
39
|
+
|
|
40
|
+
# Unit test / coverage reports
|
|
41
|
+
htmlcov/
|
|
42
|
+
.tox/
|
|
43
|
+
.nox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
*.cover
|
|
50
|
+
*.py,cover
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
/artifacts/
|
|
54
|
+
|
|
55
|
+
# Translations
|
|
56
|
+
*.mo
|
|
57
|
+
*.pot
|
|
58
|
+
|
|
59
|
+
# Django stuff:
|
|
60
|
+
*.log
|
|
61
|
+
*.prof
|
|
62
|
+
latest.prof
|
|
63
|
+
local_settings.py
|
|
64
|
+
db.sqlite3
|
|
65
|
+
db.sqlite3-journal
|
|
66
|
+
|
|
67
|
+
# Flask stuff:
|
|
68
|
+
instance/
|
|
69
|
+
.webassets-cache
|
|
70
|
+
|
|
71
|
+
# Scrapy stuff:
|
|
72
|
+
.scrapy
|
|
73
|
+
|
|
74
|
+
# Sphinx documentation
|
|
75
|
+
docs/_build/
|
|
76
|
+
|
|
77
|
+
# PyBuilder
|
|
78
|
+
target/
|
|
79
|
+
|
|
80
|
+
# Jupyter Notebook
|
|
81
|
+
.ipynb_checkpoints
|
|
82
|
+
|
|
83
|
+
# IPython
|
|
84
|
+
profile_default/
|
|
85
|
+
ipython_config.py
|
|
86
|
+
|
|
87
|
+
# pyenv
|
|
88
|
+
.python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
98
|
+
__pypackages__/
|
|
99
|
+
|
|
100
|
+
# Celery stuff
|
|
101
|
+
celerybeat-schedule
|
|
102
|
+
celerybeat.pid
|
|
103
|
+
|
|
104
|
+
# SageMath parsed files
|
|
105
|
+
*.sage.py
|
|
106
|
+
|
|
107
|
+
# Environments
|
|
108
|
+
.env
|
|
109
|
+
.venv*
|
|
110
|
+
env/
|
|
111
|
+
venv/
|
|
112
|
+
ENV/
|
|
113
|
+
env.bak/
|
|
114
|
+
venv.bak/
|
|
115
|
+
|
|
116
|
+
# Spyder project settings
|
|
117
|
+
.spyderproject
|
|
118
|
+
.spyproject
|
|
119
|
+
|
|
120
|
+
# Rope project settings
|
|
121
|
+
.ropeproject
|
|
122
|
+
|
|
123
|
+
# Generated documentation
|
|
124
|
+
/site
|
|
125
|
+
|
|
126
|
+
# mypy
|
|
127
|
+
.mypy_cache/
|
|
128
|
+
.dmypy.json
|
|
129
|
+
dmypy.json
|
|
130
|
+
|
|
131
|
+
# Pyre type checker
|
|
132
|
+
.pyre/
|
|
133
|
+
|
|
134
|
+
# OS specifics
|
|
135
|
+
*.DS_Store
|
|
136
|
+
|
|
137
|
+
# ide
|
|
138
|
+
.vscode
|
|
139
|
+
.idea
|
|
140
|
+
|
|
141
|
+
# AI tool internal files
|
|
142
|
+
.claude/
|
|
143
|
+
.codex
|
|
144
|
+
uv.lock
|
|
145
|
+
uv.lock
|
|
146
|
+
uv.lock
|
|
147
|
+
|
|
148
|
+
# Stray pytest --basetemp directories
|
|
149
|
+
.pytest-*/
|
neuroseq-0.30.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 Andrey Formozov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
neuroseq-0.30.0/PKG-INFO
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: neuroseq
|
|
3
|
+
Version: 0.30.0
|
|
4
|
+
Summary: Qt-based desktop GUI application for computational neuroscience, combining Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D .seq files).
|
|
5
|
+
Project-URL: Homepage, https://neuroseq.github.io/
|
|
6
|
+
Project-URL: Documentation, https://neuroseq.github.io/
|
|
7
|
+
Project-URL: Source, https://github.com/neuroseq/neuroseq
|
|
8
|
+
Project-URL: Issues, https://github.com/neuroseq/neuroseq/issues
|
|
9
|
+
Author: Andrey Formozov
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: brian2,calcium imaging,gui,holographic stimulation,neuroscience,optogenetics,spiking neural networks
|
|
13
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
25
|
+
Requires-Python: >=3.12
|
|
26
|
+
Requires-Dist: brian2
|
|
27
|
+
Requires-Dist: cellpose[gui]
|
|
28
|
+
Requires-Dist: click
|
|
29
|
+
Requires-Dist: fastplotlib
|
|
30
|
+
Requires-Dist: h5py
|
|
31
|
+
Requires-Dist: igor2
|
|
32
|
+
Requires-Dist: matplotlib
|
|
33
|
+
Requires-Dist: numpy
|
|
34
|
+
Requires-Dist: nvidia-ml-py
|
|
35
|
+
Requires-Dist: pillow
|
|
36
|
+
Requires-Dist: platformdirs
|
|
37
|
+
Requires-Dist: psutil
|
|
38
|
+
Requires-Dist: pyparsing!=3.2.4
|
|
39
|
+
Requires-Dist: pyqt6
|
|
40
|
+
Requires-Dist: pyqt6-qt6!=6.11.1
|
|
41
|
+
Requires-Dist: pyqtgraph!=0.14.0
|
|
42
|
+
Requires-Dist: qtawesome
|
|
43
|
+
Requires-Dist: qtpy
|
|
44
|
+
Requires-Dist: scipy
|
|
45
|
+
Requires-Dist: suite2p>=1.0
|
|
46
|
+
Requires-Dist: tifffile
|
|
47
|
+
Requires-Dist: torch
|
|
48
|
+
Requires-Dist: torchvision
|
|
49
|
+
Provides-Extra: chat
|
|
50
|
+
Requires-Dist: anthropic>=0.40; extra == 'chat'
|
|
51
|
+
Requires-Dist: httpx>=0.27; extra == 'chat'
|
|
52
|
+
Requires-Dist: keyring>=24; extra == 'chat'
|
|
53
|
+
Requires-Dist: openai>=1.40; extra == 'chat'
|
|
54
|
+
Description-Content-Type: text/markdown
|
|
55
|
+
|
|
56
|
+
# NeuroSeq - Neuronal Sequencer
|
|
57
|
+
|
|
58
|
+
[](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml)
|
|
59
|
+
[](https://pypi.org/project/neuroseq/)
|
|
60
|
+
[](https://neuroseq.github.io/)
|
|
61
|
+
|
|
62
|
+
NeuroSeq is a Qt-based desktop GUI application for computational neuroscience. It combines Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D `.seq` files).
|
|
63
|
+
|
|
64
|
+

|
|
65
|
+
|
|
66
|
+
## Installation
|
|
67
|
+
|
|
68
|
+
NeuroSeq requires Python 3.12 or newer. Install the latest release from
|
|
69
|
+
[PyPI](https://pypi.org/project/neuroseq/), ideally into a virtual environment
|
|
70
|
+
or Conda environment:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install neuroseq
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then launch the GUI with:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
neuroseq
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
To upgrade to a newer release, run `pip install --upgrade neuroseq`.
|
|
83
|
+
|
|
84
|
+
See the [installation guide](https://neuroseq.github.io/getting_started/installation/)
|
|
85
|
+
for details, including GPU setup and Cython on Windows, and the
|
|
86
|
+
[developer installation guide](https://neuroseq.github.io/developer/developer_installation/)
|
|
87
|
+
to work on NeuroSeq from a repository checkout with uv or Conda.
|
|
88
|
+
|
|
89
|
+
## Documentation
|
|
90
|
+
|
|
91
|
+
Documentation for the project is available [online](https://neuroseq.github.io/).
|
|
92
|
+
See the [documentation guide](https://neuroseq.github.io/developer/documentation/) to build or preview it locally.
|
|
93
|
+
|
|
94
|
+
## Contributing and providing feed-back
|
|
95
|
+
|
|
96
|
+
The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
|
|
97
|
+
|
|
98
|
+
To report a bug or suggest a new feature functionality please open a new issue. To implement a new feature, please fork the repository, modify the code accordingly and open a discussion with core developers via submitting a pull request.
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
NeuroSeq is released under the [MIT License](https://github.com/neuroseq/neuroseq/blob/main/LICENSE). Copyright © 2024-2026 Andrey Formozov.
|
|
103
|
+
See [AUTHORS.md](https://github.com/neuroseq/neuroseq/blob/main/AUTHORS.md) for the list of contributors.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# NeuroSeq - Neuronal Sequencer
|
|
2
|
+
|
|
3
|
+
[](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/neuroseq/)
|
|
5
|
+
[](https://neuroseq.github.io/)
|
|
6
|
+
|
|
7
|
+
NeuroSeq is a Qt-based desktop GUI application for computational neuroscience. It combines Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D `.seq` files).
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
NeuroSeq requires Python 3.12 or newer. Install the latest release from
|
|
14
|
+
[PyPI](https://pypi.org/project/neuroseq/), ideally into a virtual environment
|
|
15
|
+
or Conda environment:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install neuroseq
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then launch the GUI with:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
neuroseq
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
To upgrade to a newer release, run `pip install --upgrade neuroseq`.
|
|
28
|
+
|
|
29
|
+
See the [installation guide](https://neuroseq.github.io/getting_started/installation/)
|
|
30
|
+
for details, including GPU setup and Cython on Windows, and the
|
|
31
|
+
[developer installation guide](https://neuroseq.github.io/developer/developer_installation/)
|
|
32
|
+
to work on NeuroSeq from a repository checkout with uv or Conda.
|
|
33
|
+
|
|
34
|
+
## Documentation
|
|
35
|
+
|
|
36
|
+
Documentation for the project is available [online](https://neuroseq.github.io/).
|
|
37
|
+
See the [documentation guide](https://neuroseq.github.io/developer/documentation/) to build or preview it locally.
|
|
38
|
+
|
|
39
|
+
## Contributing and providing feed-back
|
|
40
|
+
|
|
41
|
+
The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
|
|
42
|
+
|
|
43
|
+
To report a bug or suggest a new feature functionality please open a new issue. To implement a new feature, please fork the repository, modify the code accordingly and open a discussion with core developers via submitting a pull request.
|
|
44
|
+
|
|
45
|
+
## License
|
|
46
|
+
|
|
47
|
+
NeuroSeq is released under the [MIT License](https://github.com/neuroseq/neuroseq/blob/main/LICENSE). Copyright © 2024-2026 Andrey Formozov.
|
|
48
|
+
See [AUTHORS.md](https://github.com/neuroseq/neuroseq/blob/main/AUTHORS.md) for the list of contributors.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
## Issues during installation
|
|
2
|
+
|
|
3
|
+
### Long paths in windows
|
|
4
|
+
|
|
5
|
+
During installation on windows one can encounter the following error:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 'C:\\Users\\af24\\AppData\\Local\\Temp\\pip-install-i3syxwx0\\imgui-bundle_3462a851e1e44f9caa7b8510206f002e\\external\\hello_imgui\\hello_imgui\\hello_imgui_cmake\\android\\apkCMake\\templates\\sdl\\gradle_template\\app\\src\\main\\java\\org\\libsdl\\app\\HIDDeviceBLESteamController.java'
|
|
9
|
+
HINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The issues can be fixed by entering Registry Editor and modifying _LongPathsEnabled_ variable under _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem_ from "0" to "1".
|
|
13
|
+
|
|
14
|
+
Refer to [this webpage](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later) on the instructions to fix it.
|
|
15
|
+
|
|
16
|
+
## Imaging / segmentation
|
|
17
|
+
|
|
18
|
+
### Cellpose "use GPU" is greyed out (segmentation is very slow)
|
|
19
|
+
|
|
20
|
+
Cellpose (and Suite2p) only offer GPU acceleration when **PyTorch** exposes a
|
|
21
|
+
GPU backend — **CUDA** (NVIDIA) or **MPS** (Apple Silicon). A **CPU-only**
|
|
22
|
+
PyTorch build disables the "use GPU" checkbox. This is common on **Windows**,
|
|
23
|
+
where PyPI's default `torch` wheel is CPU-only.
|
|
24
|
+
|
|
25
|
+
Check the installed build (in the NeuroSeq environment):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`…+cpu` / `False` means CPU-only. If the machine has an NVIDIA (or
|
|
32
|
+
Apple-Silicon) GPU, install a GPU build and relaunch:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uv pip install --torch-backend=auto torch
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Not using `uv` (e.g. NeuroSeq is installed into a conda environment)? Install
|
|
39
|
+
directly with pip instead:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If the machine has **only Intel integrated graphics**, Cellpose cannot use it
|
|
46
|
+
(CUDA/MPS only) — run segmentation on a GPU machine and import its `_seg.npy`
|
|
47
|
+
instead. See
|
|
48
|
+
[Importing imaging data → GPU acceleration](user_guide/importing_imaging_data.md#gpu-acceleration-cellpose-suite2p)
|
|
49
|
+
for details.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Analysis Plugins (Developer)
|
|
2
|
+
|
|
3
|
+
This page describes how the custom analysis plugin system works internally and how to implement new analysis plugins.
|
|
4
|
+
|
|
5
|
+
## Architecture Overview
|
|
6
|
+
|
|
7
|
+
Plugin support is split across three core modules:
|
|
8
|
+
|
|
9
|
+
- `src/neuroseq/analysis_plugins.py`
|
|
10
|
+
- Discovers plugin modules from `src/neuroseq/resources/analysis_plugins`
|
|
11
|
+
and from the per-user folder returned by `user_plugins_directory()`
|
|
12
|
+
(user plugins never shadow built-in filenames or `PLUGIN_ID`s)
|
|
13
|
+
- Loads each plugin file dynamically
|
|
14
|
+
- Builds `AnalysisPlugin` objects (`id`, `label`, `icon`, `render`)
|
|
15
|
+
- `src/neuroseq/visualization/timeseries_widget.py`
|
|
16
|
+
- Rebuilds right-click analysis menu on demand
|
|
17
|
+
- Adds built-in analysis actions and plugin actions
|
|
18
|
+
- Emits `custom_analysis_requested` with either a built-in `CustomAnalysisType` or an `AnalysisPlugin`
|
|
19
|
+
- `src/neuroseq/visualization/custom_analysis_widget.py`
|
|
20
|
+
- Executes built-in analysis logic
|
|
21
|
+
- Executes plugin `render` callback for plugin analyses
|
|
22
|
+
- Catches plugin exceptions, logs the plugin id, and shows a failure message in the plot
|
|
23
|
+
|
|
24
|
+
## Plugin Discovery
|
|
25
|
+
|
|
26
|
+
A plugin is a Python file in: `src/neuroseq/resources/analysis_plugins`. It must have `*.py` extention (files starting with `_` will be ignored) and define callable `render_analysis`. Each pluging has ID, NAME and ICON. The default value for ID and NAME is a filename without extention but user can also define them as `PLUGIN_ID`, `PLUGIN_NAME`, and `PLUGIN_ICON` (e.g. `mdi6.puzzle`). `PLUGIN_ID` should be stable over time. Use a machine-oriented id (for example, `mean_activity`) and keep display text in `PLUGIN_NAME`. At the present momement dropdown menu does not distinguish the type of the data that is being analysed and shows all improrted plugins regardless of datatype.
|
|
27
|
+
|
|
28
|
+
See [`src/neuroseq/resources/analysis_plugins/mean_activity.py`](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/resources/analysis_plugins/mean_activity.py) for a working example plugin.
|
|
29
|
+
|
|
30
|
+
## Advanced Interactive Example
|
|
31
|
+
|
|
32
|
+
The ELiSe plugins are thin wrappers; their supporting code is a regular
|
|
33
|
+
package, `src/neuroseq/elise_support/`: `replay_metrics.py` provides replay
|
|
34
|
+
metrics and CSV export, `workflows.py` connects project data to the analysis
|
|
35
|
+
windows, and `protocol_dialog.py` provides protocol settings. Keep core code
|
|
36
|
+
out of the plugin folder: it is scanned and executed on every right-click
|
|
37
|
+
menu and is excluded from coverage.
|
|
38
|
+
|
|
39
|
+
For an advanced plugin example with UI controls, see [`src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py`](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py).
|
|
40
|
+
|
|
41
|
+
This plugin extends the basic mean-activity analysis by adding an interactive control bar in the same analysis window.
|
|
42
|
+
|
|
43
|
+
important: for the analysis widgets opened in the same window as it is the case for "show custom analysis" pad it is important to prevent duplicating of controls when the same plugin is run repeatedly in one open analysis widget.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
|
|
4
|
+
|
|
5
|
+
## Development pipeline
|
|
6
|
+
|
|
7
|
+
1. Fork and clone repository.
|
|
8
|
+
2. Create a feature branch.
|
|
9
|
+
3. [Install](developer_installation.md) in editable mode.
|
|
10
|
+
4. Modify the code.
|
|
11
|
+
5. Test new functionality.
|
|
12
|
+
6. Run [pytests](testing.md) before opening a pull request.
|
|
13
|
+
|
|
14
|
+
## Project workspaces
|
|
15
|
+
|
|
16
|
+
`gui.py` contains the application shell. Each tab embeds a separate
|
|
17
|
+
`ProjectWorkspace` from `project_workspace.py`, which owns its project's widgets,
|
|
18
|
+
controllers, console namespace, undo history, input designers, detached windows,
|
|
19
|
+
and background jobs. The workspace uses a child `QMainWindow` to lay out its own
|
|
20
|
+
menus and toolbars. `Gui.active_workspace` is the explicit access point for the
|
|
21
|
+
current tab; `Gui.project` and forwarded attribute reads remain available for
|
|
22
|
+
integrations.
|
|
23
|
+
|
|
24
|
+
Switching tabs changes the visible workspace without calling `update_project()`
|
|
25
|
+
or copying widget state into `Project`. Playback pauses when leaving a tab;
|
|
26
|
+
background jobs continue and deliver their results to their owning workspace.
|
|
27
|
+
`update_project()` refreshes data within a workspace, for example after imports
|
|
28
|
+
or model edits. GUI state remains in memory and is not serialized to `.nseq`.
|
|
29
|
+
|
|
30
|
+
Settings and physical connections are application resources. `workspace_devices.py`
|
|
31
|
+
shares the ScanImage connection and SysCon2 transport. Each SysCon2 panel receives
|
|
32
|
+
a session that routes command replies to the requesting workspace; connection
|
|
33
|
+
status is shared. Only the active workspace receives live ScanImage frames.
|
|
34
|
+
Acquisition results are matched by run ID to the workspace that requested them.
|
|
35
|
+
Closing a tab stops its jobs and releases its resources without disconnecting
|
|
36
|
+
other tabs. Application shutdown checks unsaved projects individually and stops
|
|
37
|
+
all workspaces before shutting down the shared connections.
|
|
38
|
+
|
|
39
|
+
Run `uv run pytest tests/test_project_workspaces.py` for tab isolation, background
|
|
40
|
+
result routing, device sessions, and workspace lifecycle tests. Existing widget
|
|
41
|
+
and workflow tests exercise `ProjectWorkspace` directly.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Integration of Custom Simulators
|
|
2
|
+
|
|
3
|
+
This page describes the current structure used for NeuroSeq external simulators and how to implement a new backend.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
NeuroSeq has built-in Brian2 simulator but also supports arbitraty simulation backends. These backends are loaded through `Project.load_external_simulator()` and are expected to produce an `Experiment` object from stimulus arrays.
|
|
8
|
+
|
|
9
|
+
There are now two layers:
|
|
10
|
+
|
|
11
|
+
1. A shared base class in [src/neuroseq/example_models/NN.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/NN.py).
|
|
12
|
+
2. A backend implementation class such as [src/neuroseq/example_models/elise.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/elise.py).
|
|
13
|
+
|
|
14
|
+
The base class is intentionally lightweight. It does not use `abc`; instead, subclass methods are expected to override the base methods and the defaults raise `NotImplementedError`.
|
|
15
|
+
|
|
16
|
+
## Structure of the Base NN Class
|
|
17
|
+
|
|
18
|
+
The shared `NN` class in [src/neuroseq/example_models/NN.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/NN.py) provides common state and parameter handling.
|
|
19
|
+
|
|
20
|
+
It currently contains:
|
|
21
|
+
|
|
22
|
+
1. `__init__(default_params_schema)`
|
|
23
|
+
Stores a deep copy of the editable parameter schema, initializes flat parameter values from the schema defaults, and initializes cumulative simulated time.
|
|
24
|
+
2. `simulated_time_seconds`
|
|
25
|
+
Property exposing the amount of simulated time already accumulated by the backend instance.
|
|
26
|
+
3. `default_params_schema()`
|
|
27
|
+
Returns a deep copy of the editable parameter schema for use in the GUI.
|
|
28
|
+
4. `flat_default_params()`
|
|
29
|
+
Returns a flat `{name: default_value}` mapping derived from the schema.
|
|
30
|
+
5. `update_params(params)`
|
|
31
|
+
Merges user-provided parameter overrides onto defaults and resets backend state if anything changed.
|
|
32
|
+
6. `_flat_defaults()`
|
|
33
|
+
Internal helper that flattens the schema into default values.
|
|
34
|
+
7. `reset()`
|
|
35
|
+
Subclass hook that must clear backend-specific runtime state.
|
|
36
|
+
8. `simulate(stims_dict, simulation_time, params=None)`
|
|
37
|
+
Subclass hook that must run one simulation chunk and return an `Experiment`.
|
|
38
|
+
|
|
39
|
+
The important design point is that the base class owns parameter bookkeeping and cumulative time, while the subclass owns backend-specific runtime objects.
|
|
40
|
+
|
|
41
|
+
## Structure of a Backend Implementation
|
|
42
|
+
|
|
43
|
+
An implementation module should define a backend class derived from `NN`. The ELISE backend in [src/neuroseq/example_models/elise.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/elise.py) is the current reference implementation.
|
|
44
|
+
|
|
45
|
+
The backend class should typically provide:
|
|
46
|
+
|
|
47
|
+
1. `__init__()`
|
|
48
|
+
Calls `super().__init__(DEFAULT_PARAMS)` and initializes backend-specific runtime fields such as cached networks, signatures, RNG state, or imported backend types.
|
|
49
|
+
2. `reset()`
|
|
50
|
+
Clears runtime state that should be rebuilt when parameters change.
|
|
51
|
+
3. Backend-specific initialization helpers
|
|
52
|
+
For example, ELISE uses `_import_elise_types()` and `_initialize_network(num_vis)`.
|
|
53
|
+
4. `simulate(...)`
|
|
54
|
+
Validates inputs, applies parameter updates, initializes or reuses the backend state, advances the simulation, and returns an `Experiment` containing the generated data.
|
|
55
|
+
|
|
56
|
+
For stateful backends, `simulate(...)` should preserve runtime state between calls so repeated runs can continue from the previous state instead of starting over.
|
|
57
|
+
|
|
58
|
+
## Module-Level Entry Points
|
|
59
|
+
|
|
60
|
+
For integration with the current project and GUI code, the module should expose these entry points:
|
|
61
|
+
|
|
62
|
+
1. `simulate(stims_dict, simulation_time, params=None)`
|
|
63
|
+
Compatibility wrapper used by the existing call sites.
|
|
64
|
+
2. `get_simulator()`
|
|
65
|
+
Returns the singleton backend instance.
|
|
66
|
+
3. `NN`
|
|
67
|
+
Constructor used by `Project.load_external_simulator()` when a module exposes a class-based backend entry point.
|
|
68
|
+
4. A singleton instance such as `_SIMULATOR = Elise()`.
|
|
69
|
+
|
|
70
|
+
This keeps the current GUI and project logic simple while still allowing a class-based implementation internally.
|
|
71
|
+
|
|
72
|
+
When restoring an archive, `Project` calls the backend instance's optional
|
|
73
|
+
`migrate_project(project)` method after loading the simulator and project data.
|
|
74
|
+
Backends can use this hook to upgrade their own legacy stimulus formats. The
|
|
75
|
+
ELISE implementation keeps these conversions, its example project factory
|
|
76
|
+
(`create_project()`), and teaching-pattern helpers in
|
|
77
|
+
`src/neuroseq/example_models/elise.py`. The example menu registers a small
|
|
78
|
+
wrapper in `example_projects/networks/elise_project.py` that delegates to this factory.
|
|
79
|
+
|
|
80
|
+
Example project factories live in `src/neuroseq/example_projects/`, with one
|
|
81
|
+
project per file under `neurons/` or `networks/`. The package's `__init__.py`
|
|
82
|
+
exports the factories and imports them in their existing menu order.
|
|
83
|
+
`_registry.py` provides the `register_example_project` decorator. New examples
|
|
84
|
+
should define a decorated factory in the appropriate folder, import it in
|
|
85
|
+
the package entry point, and add it to `__all__` so it is exported and appears
|
|
86
|
+
in the example-project menu.
|
|
87
|
+
|
|
88
|
+
## Expected Data Flow
|
|
89
|
+
|
|
90
|
+
The external simulator call path is:
|
|
91
|
+
|
|
92
|
+
1. The GUI collects stimulus arrays into `stims_dict`.
|
|
93
|
+
2. `Project.load_external_simulator()` loads either:
|
|
94
|
+
a. a built-in NeuroSeq simulator module such as `neuroseq:elise`, or
|
|
95
|
+
b. a Python file containing a `simulate(...)` entry point.
|
|
96
|
+
3. The backend `simulate(...)` method returns an `Experiment`.
|
|
97
|
+
4. The GUI offers the returned experiment for import or append into the project.
|
|
98
|
+
|
|
99
|
+
## Minimal Template
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
from collections.abc import Mapping
|
|
103
|
+
|
|
104
|
+
from neuroseq.data import Experiment
|
|
105
|
+
from neuroseq.example_models.NN import ParamValue
|
|
106
|
+
from neuroseq.example_models.NN import NN
|
|
107
|
+
|
|
108
|
+
DEFAULT_PARAMS = {
|
|
109
|
+
"example_param": {
|
|
110
|
+
"value": 1.0,
|
|
111
|
+
"default": 1.0,
|
|
112
|
+
"type": "float",
|
|
113
|
+
"group": "General",
|
|
114
|
+
"description": "Example parameter.",
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class MyBackend(NN):
|
|
120
|
+
def __init__(self) -> None:
|
|
121
|
+
super().__init__(DEFAULT_PARAMS)
|
|
122
|
+
self._runtime = None
|
|
123
|
+
|
|
124
|
+
def reset(self) -> None:
|
|
125
|
+
self._runtime = None
|
|
126
|
+
self._simulated_time_s = 0.0
|
|
127
|
+
|
|
128
|
+
def simulate(
|
|
129
|
+
self,
|
|
130
|
+
stims_dict: dict,
|
|
131
|
+
simulation_time: float,
|
|
132
|
+
params: Mapping[str, ParamValue] | None = None,
|
|
133
|
+
) -> Experiment:
|
|
134
|
+
self.update_params(params)
|
|
135
|
+
# build or reuse runtime state
|
|
136
|
+
# run the backend
|
|
137
|
+
# return Experiment(...)
|
|
138
|
+
raise NotImplementedError
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def simulate(stims_dict, simulation_time, params=None):
|
|
142
|
+
return _SIMULATOR.simulate(stims_dict, simulation_time, params=params)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def get_simulator() -> MyBackend:
|
|
146
|
+
return _SIMULATOR
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
_SIMULATOR = MyBackend()
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Notes
|
|
153
|
+
|
|
154
|
+
1. The GUI parameter editor consumes the schema stored in `project.external_simulate_params`, so schema keys and value types should remain simple.
|
|
155
|
+
2. The `Experiment` returned by the backend should be self-contained for the run chunk that was just simulated.
|
|
156
|
+
3. If the backend is stateful, use `self._simulated_time_s` to align repeated runs with previously simulated time.
|