py-neuromodulation 0.0.5__tar.gz → 0.0.6__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.
- py_neuromodulation-0.0.6/.github/workflows/docs_pages.yml +57 -0
- py_neuromodulation-0.0.6/.github/workflows/python-publish.yml +39 -0
- py_neuromodulation-0.0.6/.github/workflows/tests.yml +59 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/PKG-INFO +3 -11
- py_neuromodulation-0.0.6/docs/Makefile +20 -0
- py_neuromodulation-0.0.6/docs/make.bat +35 -0
- py_neuromodulation-0.0.6/docs/source/_static/CEBRA_embedding.png +0 -0
- py_neuromodulation-0.0.6/docs/source/_static/RMAP_figure.png +0 -0
- py_neuromodulation-0.0.6/docs/source/_static/css/RMAP_figure.png +0 -0
- py_neuromodulation-0.0.6/docs/source/_static/css/project-template.css +16 -0
- py_neuromodulation-0.0.6/docs/source/_templates/custom-class-template.rst +7 -0
- py_neuromodulation-0.0.6/docs/source/_templates/custom-module-template.rst +67 -0
- py_neuromodulation-0.0.6/docs/source/api_documentation.rst +51 -0
- py_neuromodulation-0.0.6/docs/source/conf.py +95 -0
- py_neuromodulation-0.0.6/docs/source/contributing.rst +36 -0
- py_neuromodulation-0.0.6/docs/source/index.rst +66 -0
- py_neuromodulation-0.0.6/docs/source/installation.rst +46 -0
- py_neuromodulation-0.0.6/docs/source/nm_IO.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_RMAP.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_analysis.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_bursts.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_coherence.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_decode.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_define_nmchannels.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_features.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_filter.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_fooof.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_generator.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_hjorth.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_kalmanfilter.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_linelength.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_mne_connectivity.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_nolds.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_normalization.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_oscillatory.rst +11 -0
- py_neuromodulation-0.0.6/docs/source/nm_plots.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_projection.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_rereference.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_resample.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_run_analysis.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_settings.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_sharpwaves.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_stats.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_stream.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/nm_stream_abc.rst +5 -0
- py_neuromodulation-0.0.6/docs/source/usage.rst +559 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_2_example_add_feature.py +3 -3
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_3_example_sharpwave_analysis.py +10 -14
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_4_example_gridPointProjection.py +53 -55
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_5_example_rmap_computing.py +6 -6
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_6_real_time_demo.py +5 -7
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_7_lsl_example.py +13 -23
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/__init__.py +16 -10
- py_neuromodulation-0.0.5/py_neuromodulation/nm_RMAP.py → py_neuromodulation-0.0.6/py_neuromodulation/analysis/RMAP.py +2 -2
- py_neuromodulation-0.0.6/py_neuromodulation/analysis/__init__.py +4 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_decode.py → py_neuromodulation-0.0.6/py_neuromodulation/analysis/decode.py +4 -4
- py_neuromodulation-0.0.5/py_neuromodulation/nm_analysis.py → py_neuromodulation-0.0.6/py_neuromodulation/analysis/feature_reader.py +21 -20
- py_neuromodulation-0.0.5/py_neuromodulation/nm_plots.py → py_neuromodulation-0.0.6/py_neuromodulation/analysis/plots.py +54 -12
- py_neuromodulation-0.0.5/py_neuromodulation/nm_stats.py → py_neuromodulation-0.0.6/py_neuromodulation/analysis/stats.py +2 -8
- py_neuromodulation-0.0.5/py_neuromodulation/nm_settings.yaml → py_neuromodulation-0.0.6/py_neuromodulation/default_settings.yaml +6 -9
- py_neuromodulation-0.0.6/py_neuromodulation/features/__init__.py +31 -0
- py_neuromodulation-0.0.6/py_neuromodulation/features/bandpower.py +165 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_bispectra.py → py_neuromodulation-0.0.6/py_neuromodulation/features/bispectra.py +8 -5
- py_neuromodulation-0.0.5/py_neuromodulation/nm_bursts.py → py_neuromodulation-0.0.6/py_neuromodulation/features/bursts.py +14 -9
- py_neuromodulation-0.0.5/py_neuromodulation/nm_coherence.py → py_neuromodulation-0.0.6/py_neuromodulation/features/coherence.py +17 -13
- py_neuromodulation-0.0.5/py_neuromodulation/nm_features.py → py_neuromodulation-0.0.6/py_neuromodulation/features/feature_processor.py +30 -53
- py_neuromodulation-0.0.5/py_neuromodulation/nm_fooof.py → py_neuromodulation-0.0.6/py_neuromodulation/features/fooof.py +11 -8
- py_neuromodulation-0.0.5/py_neuromodulation/nm_hjorth_raw.py → py_neuromodulation-0.0.6/py_neuromodulation/features/hjorth_raw.py +10 -5
- py_neuromodulation-0.0.5/py_neuromodulation/nm_linelength.py → py_neuromodulation-0.0.6/py_neuromodulation/features/linelength.py +1 -1
- py_neuromodulation-0.0.5/py_neuromodulation/nm_mne_connectivity.py → py_neuromodulation-0.0.6/py_neuromodulation/features/mne_connectivity.py +5 -6
- py_neuromodulation-0.0.5/py_neuromodulation/nm_nolds.py → py_neuromodulation-0.0.6/py_neuromodulation/features/nolds.py +5 -7
- py_neuromodulation-0.0.5/py_neuromodulation/nm_oscillatory.py → py_neuromodulation-0.0.6/py_neuromodulation/features/oscillatory.py +7 -181
- py_neuromodulation-0.0.5/py_neuromodulation/nm_sharpwaves.py → py_neuromodulation-0.0.6/py_neuromodulation/features/sharpwaves.py +13 -4
- py_neuromodulation-0.0.6/py_neuromodulation/filter/__init__.py +3 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_kalmanfilter.py → py_neuromodulation-0.0.6/py_neuromodulation/filter/kalman_filter.py +67 -71
- py_neuromodulation-0.0.6/py_neuromodulation/filter/kalman_filter_external.py +1890 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_filter.py → py_neuromodulation-0.0.6/py_neuromodulation/filter/mne_filter.py +128 -219
- py_neuromodulation-0.0.6/py_neuromodulation/filter/notch_filter.py +93 -0
- py_neuromodulation-0.0.6/py_neuromodulation/processing/__init__.py +10 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_artifacts.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/artifacts.py +2 -3
- py_neuromodulation-0.0.5/py_neuromodulation/nm_preprocessing.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/data_preprocessor.py +19 -25
- py_neuromodulation-0.0.5/py_neuromodulation/nm_filter_preprocessing.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/filter_preprocessing.py +3 -4
- py_neuromodulation-0.0.5/py_neuromodulation/nm_normalization.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/normalization.py +9 -7
- py_neuromodulation-0.0.5/py_neuromodulation/nm_projection.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/projection.py +14 -14
- py_neuromodulation-0.0.5/py_neuromodulation/nm_rereference.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/rereference.py +13 -13
- py_neuromodulation-0.0.5/py_neuromodulation/nm_resample.py → py_neuromodulation-0.0.6/py_neuromodulation/processing/resample.py +1 -4
- py_neuromodulation-0.0.6/py_neuromodulation/stream/__init__.py +3 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_run_analysis.py → py_neuromodulation-0.0.6/py_neuromodulation/stream/data_processor.py +42 -42
- py_neuromodulation-0.0.6/py_neuromodulation/stream/generator.py +53 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_mnelsl_generator.py → py_neuromodulation-0.0.6/py_neuromodulation/stream/mnelsl_player.py +10 -6
- py_neuromodulation-0.0.5/py_neuromodulation/nm_mnelsl_stream.py → py_neuromodulation-0.0.6/py_neuromodulation/stream/mnelsl_stream.py +13 -9
- py_neuromodulation-0.0.5/py_neuromodulation/nm_settings.py → py_neuromodulation-0.0.6/py_neuromodulation/stream/settings.py +27 -24
- py_neuromodulation-0.0.5/py_neuromodulation/nm_stream.py → py_neuromodulation-0.0.6/py_neuromodulation/stream/stream.py +217 -188
- py_neuromodulation-0.0.6/py_neuromodulation/utils/__init__.py +2 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_define_nmchannels.py → py_neuromodulation-0.0.6/py_neuromodulation/utils/channels.py +14 -9
- py_neuromodulation-0.0.5/py_neuromodulation/nm_database.py → py_neuromodulation-0.0.6/py_neuromodulation/utils/database.py +2 -2
- py_neuromodulation-0.0.5/py_neuromodulation/nm_IO.py → py_neuromodulation-0.0.6/py_neuromodulation/utils/io.py +42 -77
- py_neuromodulation-0.0.6/py_neuromodulation/utils/keyboard.py +52 -0
- py_neuromodulation-0.0.5/py_neuromodulation/nm_logger.py → py_neuromodulation-0.0.6/py_neuromodulation/utils/logging.py +3 -3
- py_neuromodulation-0.0.5/py_neuromodulation/nm_types.py → py_neuromodulation-0.0.6/py_neuromodulation/utils/types.py +72 -14
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/pyproject.toml +24 -52
- py_neuromodulation-0.0.6/sub_SETTINGS.yaml +112 -0
- py_neuromodulation-0.0.6/sub_SIDECAR.json +6 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/conftest.py +24 -26
- py_neuromodulation-0.0.6/tests/test_all_features.py +55 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_bispectra.py +12 -13
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_bursts.py +15 -43
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_database.py +11 -6
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_feature_sampling_rates.py +31 -48
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_fooof.py +11 -3
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_initalization_offline_stream.py +5 -5
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_lsl_stream.py +24 -25
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_nan_values.py +4 -2
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_nm_filter.py +4 -4
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_nm_resample.py +4 -4
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_normalization_settings.py +13 -13
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_notch_filter.py +2 -2
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_osc_features.py +19 -20
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_preprocessing_filter.py +9 -4
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_rereference.py +29 -31
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_sampling.py +3 -1
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_settings_change_after_init.py +25 -15
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_sharpwave.py +12 -11
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_target_channel_add.py +29 -31
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_timing.py +13 -18
- py_neuromodulation-0.0.5/py_neuromodulation/FieldTrip.py +0 -589
- py_neuromodulation-0.0.5/py_neuromodulation/_write_example_dataset_helper.py +0 -83
- py_neuromodulation-0.0.5/py_neuromodulation/nm_generator.py +0 -45
- py_neuromodulation-0.0.5/py_neuromodulation/nm_stream_abc.py +0 -166
- py_neuromodulation-0.0.5/tests/__init__.py +0 -0
- py_neuromodulation-0.0.5/tests/test_all_features.py +0 -55
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/.gitignore +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/LICENSE +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/README.rst +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/README.rst +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/example_cebra_decoding.html +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/example_cebra_decoding.ipynb +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/example_rmap.ipynb +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/examples/plot_8_cebra_example.py +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/Automated Anatomical Labeling 3 (Rolls 2020).nii +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/_get_grid_hull.m +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/_get_grid_whole_brain.py +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/_helper_write_connectome.py +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/mni_coords_cortical_surface.mat +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/mni_coords_whole_brain.mat +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/rmap_func_all.nii +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/ConnectivityDecoding/rmap_struc.nii +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/README +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/dataset_description.json +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/participants.json +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/participants.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/grid_cortex.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/grid_subcortex.tsv +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/libpugixml.so.1.12 +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/bionic_amd64/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/bookworm_amd64/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/focal_amd46/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/jammy_amd64/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/jammy_x86/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/linux/noble_amd64/liblsl.1.16.2.so +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/macos/amd64/liblsl.1.16.2.dylib +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/macos/arm64/liblsl.1.16.0.dylib +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/windows/amd64/liblsl.1.16.2.dll +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/liblsl/windows/x86/liblsl.1.16.2.dll +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/plots/STN_surf.mat +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/plots/Vertices.mat +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/plots/faces.mat +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/py_neuromodulation/plots/grid.mat +0 -0
- {py_neuromodulation-0.0.5/py_neuromodulation/utils → py_neuromodulation-0.0.6/tests}/__init__.py +0 -0
- {py_neuromodulation-0.0.5 → py_neuromodulation-0.0.6}/tests/test_all_examples.py +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: docs_pages_workflow
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
|
|
9
|
+
build_docs_job:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
env:
|
|
12
|
+
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v2.3.4
|
|
17
|
+
|
|
18
|
+
- name: Install and cache Linux packages
|
|
19
|
+
if: ${{ runner.os == 'Linux' }}
|
|
20
|
+
uses: tecolicom/actions-use-apt-tools@v1
|
|
21
|
+
with:
|
|
22
|
+
tools: binutils qtbase5-dev qt5-qmake libpugixml1v5
|
|
23
|
+
|
|
24
|
+
- name: Set up Python with uv
|
|
25
|
+
uses: drivendataorg/setup-python-uv-action@v1
|
|
26
|
+
with:
|
|
27
|
+
python-version: '3.10'
|
|
28
|
+
cache: packages
|
|
29
|
+
cache-dependency-path: pyproject.toml
|
|
30
|
+
|
|
31
|
+
- name: Install dependencies
|
|
32
|
+
run: |
|
|
33
|
+
uv pip install .[docs]
|
|
34
|
+
|
|
35
|
+
- name: make the sphinx docs
|
|
36
|
+
run: |
|
|
37
|
+
make -C docs clean
|
|
38
|
+
make -C docs html
|
|
39
|
+
|
|
40
|
+
- name: Init new repo in dist folder and commit generated files
|
|
41
|
+
run: |
|
|
42
|
+
cd docs/build/html/
|
|
43
|
+
git init
|
|
44
|
+
touch .nojekyll
|
|
45
|
+
git add -A
|
|
46
|
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
47
|
+
git config --local user.name "github-actions[bot]"
|
|
48
|
+
git commit -m 'deploy'
|
|
49
|
+
git config --global --add safe.directory /github/workspace/docs/build/html
|
|
50
|
+
|
|
51
|
+
- name: Force push to destination branch
|
|
52
|
+
uses: ad-m/github-push-action@master
|
|
53
|
+
with:
|
|
54
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
branch: gh-pages
|
|
56
|
+
force: true
|
|
57
|
+
directory: ./docs/build/html
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Publish Python Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*' # Only trigger on tag pushes like v1.0.0
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout code
|
|
14
|
+
uses: actions/checkout@v3
|
|
15
|
+
|
|
16
|
+
- name: Set up Python
|
|
17
|
+
uses: actions/setup-python@v4
|
|
18
|
+
with:
|
|
19
|
+
python-version: '3.11' # Specify your Python version
|
|
20
|
+
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: |
|
|
23
|
+
python -m pip install --upgrade pip
|
|
24
|
+
pip install build
|
|
25
|
+
|
|
26
|
+
- name: Build package
|
|
27
|
+
run: python -m build
|
|
28
|
+
|
|
29
|
+
- name: Publish to PyPI
|
|
30
|
+
uses: pypa/gh-action-pypi-publish@v1.10.0
|
|
31
|
+
with:
|
|
32
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
33
|
+
|
|
34
|
+
- name: Create GitHub release
|
|
35
|
+
uses: softprops/action-gh-release@v1
|
|
36
|
+
with:
|
|
37
|
+
files: dist/*
|
|
38
|
+
env:
|
|
39
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
- "**"
|
|
7
|
+
paths-ignore:
|
|
8
|
+
- "docs/**"
|
|
9
|
+
- "*.md"
|
|
10
|
+
- "*.rst"
|
|
11
|
+
- "*.txt"
|
|
12
|
+
pull_request:
|
|
13
|
+
branches:
|
|
14
|
+
- main
|
|
15
|
+
- "*.x"
|
|
16
|
+
paths-ignore:
|
|
17
|
+
- "docs/**"
|
|
18
|
+
- "*.md"
|
|
19
|
+
- "*.rst"
|
|
20
|
+
- "*.txt"
|
|
21
|
+
jobs:
|
|
22
|
+
tests:
|
|
23
|
+
name: ${{ matrix.platform.name }} Python ${{ matrix.python }}
|
|
24
|
+
runs-on: ${{ matrix.platform.os }}
|
|
25
|
+
strategy:
|
|
26
|
+
fail-fast: false
|
|
27
|
+
matrix:
|
|
28
|
+
platform:
|
|
29
|
+
- os: ubuntu-latest
|
|
30
|
+
name: Linux
|
|
31
|
+
- os: macos-latest
|
|
32
|
+
name: MacOS
|
|
33
|
+
- os: windows-latest
|
|
34
|
+
name: Windows
|
|
35
|
+
python:
|
|
36
|
+
- "3.11"
|
|
37
|
+
- "3.12"
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
- name: Install and cache Linux packages
|
|
41
|
+
if: ${{ runner.os == 'Linux' }}
|
|
42
|
+
uses: awalsh128/cache-apt-pkgs-action@latest
|
|
43
|
+
with:
|
|
44
|
+
packages: binutils qtbase5-dev qt5-qmake libpugixml1v5
|
|
45
|
+
- name: Install uv
|
|
46
|
+
uses: astral-sh/setup-uv@v3
|
|
47
|
+
with:
|
|
48
|
+
version: "0.4.12"
|
|
49
|
+
enable-cache: true
|
|
50
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
51
|
+
- name: Install Python and dependencies
|
|
52
|
+
run: |
|
|
53
|
+
uv python install ${{ matrix.python }}
|
|
54
|
+
uv venv
|
|
55
|
+
uv pip install .[test]
|
|
56
|
+
- name: Run tests
|
|
57
|
+
run: |
|
|
58
|
+
${{ (runner.os == 'Windows' && '.venv\Scripts\activate') || 'source .venv/bin/activate' }}
|
|
59
|
+
pytest -n auto tests/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: py_neuromodulation
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.6
|
|
4
4
|
Summary: Real-time analysis of intracranial neurophysiology recordings.
|
|
5
5
|
Project-URL: bugtracker, https://github.com/neuromodulation/py_neuromodulation/issues
|
|
6
6
|
Project-URL: repository, https://github.com/neuromodulation/py_neuromodulation
|
|
@@ -33,11 +33,8 @@ Classifier: Development Status :: 2 - Pre-Alpha
|
|
|
33
33
|
Classifier: License :: OSI Approved :: MIT License
|
|
34
34
|
Classifier: Programming Language :: Python
|
|
35
35
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
36
|
-
Requires-Python: >=3.
|
|
37
|
-
Requires-Dist: filterpy>=1.4.5
|
|
36
|
+
Requires-Python: >=3.11
|
|
38
37
|
Requires-Dist: fooof
|
|
39
|
-
Requires-Dist: hatch>=1.9.4
|
|
40
|
-
Requires-Dist: imbalanced-learn
|
|
41
38
|
Requires-Dist: joblib>=1.3.2
|
|
42
39
|
Requires-Dist: matplotlib>=3.9.0
|
|
43
40
|
Requires-Dist: mne
|
|
@@ -45,23 +42,18 @@ Requires-Dist: mne-bids>=0.8
|
|
|
45
42
|
Requires-Dist: mne-connectivity
|
|
46
43
|
Requires-Dist: mne-lsl>=1.2.0
|
|
47
44
|
Requires-Dist: mrmr-selection
|
|
48
|
-
Requires-Dist: nibabel>=5.2.1
|
|
49
45
|
Requires-Dist: nolds
|
|
50
46
|
Requires-Dist: numpy>=1.21.2
|
|
51
47
|
Requires-Dist: pandas>=2.0.0
|
|
52
|
-
Requires-Dist: pip>=24.2
|
|
53
48
|
Requires-Dist: pyarrow>=14.0.2
|
|
54
|
-
Requires-Dist: pybispectra>=1.
|
|
49
|
+
Requires-Dist: pybispectra>=1.2.0
|
|
55
50
|
Requires-Dist: pydantic>=2.7.3
|
|
56
|
-
Requires-Dist: pynput
|
|
57
51
|
Requires-Dist: pyparrm
|
|
58
52
|
Requires-Dist: pyqt5
|
|
59
|
-
Requires-Dist: scikit-image
|
|
60
53
|
Requires-Dist: scikit-learn>=0.24.2
|
|
61
54
|
Requires-Dist: scikit-optimize
|
|
62
55
|
Requires-Dist: scipy>=1.7.1
|
|
63
56
|
Requires-Dist: seaborn>=0.11
|
|
64
|
-
Requires-Dist: statsmodels
|
|
65
57
|
Provides-Extra: dev
|
|
66
58
|
Requires-Dist: notebook; extra == 'dev'
|
|
67
59
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Minimal makefile for Sphinx documentation
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
# You can set these variables from the command line, and also
|
|
5
|
+
# from the environment for the first two.
|
|
6
|
+
SPHINXOPTS ?=
|
|
7
|
+
SPHINXBUILD ?= sphinx-build
|
|
8
|
+
SOURCEDIR = source
|
|
9
|
+
BUILDDIR = build
|
|
10
|
+
|
|
11
|
+
# Put it first so that "make" without argument is like "make help".
|
|
12
|
+
help:
|
|
13
|
+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
14
|
+
|
|
15
|
+
.PHONY: help Makefile
|
|
16
|
+
|
|
17
|
+
# Catch-all target: route all unknown targets to Sphinx using the new
|
|
18
|
+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
|
19
|
+
%: Makefile
|
|
20
|
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
@ECHO OFF
|
|
2
|
+
|
|
3
|
+
pushd %~dp0
|
|
4
|
+
|
|
5
|
+
REM Command file for Sphinx documentation
|
|
6
|
+
|
|
7
|
+
if "%SPHINXBUILD%" == "" (
|
|
8
|
+
set SPHINXBUILD=sphinx-build
|
|
9
|
+
)
|
|
10
|
+
set SOURCEDIR=source
|
|
11
|
+
set BUILDDIR=build
|
|
12
|
+
|
|
13
|
+
if "%1" == "" goto help
|
|
14
|
+
|
|
15
|
+
%SPHINXBUILD% >NUL 2>NUL
|
|
16
|
+
if errorlevel 9009 (
|
|
17
|
+
echo.
|
|
18
|
+
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
|
19
|
+
echo.installed, then set the SPHINXBUILD environment variable to point
|
|
20
|
+
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
|
21
|
+
echo.may add the Sphinx directory to PATH.
|
|
22
|
+
echo.
|
|
23
|
+
echo.If you don't have Sphinx installed, grab it from
|
|
24
|
+
echo.http://sphinx-doc.org/
|
|
25
|
+
exit /b 1
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
29
|
+
goto end
|
|
30
|
+
|
|
31
|
+
:help
|
|
32
|
+
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
33
|
+
|
|
34
|
+
:end
|
|
35
|
+
popd
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
@import url("theme.css");
|
|
2
|
+
|
|
3
|
+
.highlight a {
|
|
4
|
+
text-decoration: underline;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.deprecated p {
|
|
8
|
+
padding: 10px 7px 10px 10px;
|
|
9
|
+
color: #b94a48;
|
|
10
|
+
background-color: #F3E5E5;
|
|
11
|
+
border: 1px solid #eed3d7;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.deprecated p span.versionmodified {
|
|
15
|
+
font-weight: bold;
|
|
16
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{{ fullname | escape | underline}}
|
|
2
|
+
|
|
3
|
+
.. automodule:: {{ fullname }}
|
|
4
|
+
|
|
5
|
+
{% block attributes %}
|
|
6
|
+
{% if attributes %}
|
|
7
|
+
.. rubric:: Module Attributes
|
|
8
|
+
|
|
9
|
+
.. autosummary::
|
|
10
|
+
:toctree:
|
|
11
|
+
{% for item in attributes %}
|
|
12
|
+
{{ item }}
|
|
13
|
+
{%- endfor %}
|
|
14
|
+
{% endif %}
|
|
15
|
+
{% endblock %}
|
|
16
|
+
|
|
17
|
+
{% block functions %}
|
|
18
|
+
{% if functions %}
|
|
19
|
+
.. rubric:: {{ _('Functions') }}
|
|
20
|
+
|
|
21
|
+
.. autosummary::
|
|
22
|
+
:toctree:
|
|
23
|
+
:nosignatures:
|
|
24
|
+
{% for item in functions %}
|
|
25
|
+
{{ item }}
|
|
26
|
+
{%- endfor %}
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% endblock %}
|
|
29
|
+
|
|
30
|
+
{% block classes %}
|
|
31
|
+
{% if classes %}
|
|
32
|
+
.. rubric:: {{ _('Classes') }}
|
|
33
|
+
|
|
34
|
+
.. autosummary::
|
|
35
|
+
:toctree:
|
|
36
|
+
:template: custom-class-template.rst
|
|
37
|
+
{% for item in classes %}
|
|
38
|
+
{{ item }}
|
|
39
|
+
{%- endfor %}
|
|
40
|
+
{% endif %}
|
|
41
|
+
{% endblock %}
|
|
42
|
+
|
|
43
|
+
{% block exceptions %}
|
|
44
|
+
{% if exceptions %}
|
|
45
|
+
.. rubric:: {{ _('Exceptions') }}
|
|
46
|
+
|
|
47
|
+
.. autosummary::
|
|
48
|
+
:toctree:
|
|
49
|
+
{% for item in exceptions %}
|
|
50
|
+
{{ item }}
|
|
51
|
+
{%- endfor %}
|
|
52
|
+
{% endif %}
|
|
53
|
+
{% endblock %}
|
|
54
|
+
|
|
55
|
+
{% block modules %}
|
|
56
|
+
{% if modules %}
|
|
57
|
+
.. rubric:: Modules
|
|
58
|
+
|
|
59
|
+
.. autosummary::
|
|
60
|
+
:toctree:
|
|
61
|
+
:template: custom-module-template.rst
|
|
62
|
+
:recursive:
|
|
63
|
+
{% for item in modules %}
|
|
64
|
+
{{ item }}
|
|
65
|
+
{%- endfor %}
|
|
66
|
+
{% endif %}
|
|
67
|
+
{% endblock %}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
API Documentation
|
|
2
|
+
=================
|
|
3
|
+
|
|
4
|
+
Parametrization
|
|
5
|
+
---------------
|
|
6
|
+
|
|
7
|
+
.. toctree::
|
|
8
|
+
:maxdepth: 4
|
|
9
|
+
|
|
10
|
+
nm_stream_abc
|
|
11
|
+
nm_stream
|
|
12
|
+
nm_settings
|
|
13
|
+
nm_define_nmchannels
|
|
14
|
+
nm_generator
|
|
15
|
+
nm_run_analysis
|
|
16
|
+
nm_resample
|
|
17
|
+
nm_normalization
|
|
18
|
+
nm_rereference
|
|
19
|
+
nm_projection
|
|
20
|
+
nm_IO
|
|
21
|
+
|
|
22
|
+
Feature Estimation
|
|
23
|
+
------------------
|
|
24
|
+
|
|
25
|
+
.. toctree::
|
|
26
|
+
:maxdepth: 4
|
|
27
|
+
|
|
28
|
+
nm_features
|
|
29
|
+
nm_filter
|
|
30
|
+
nm_oscillatory
|
|
31
|
+
nm_fooof
|
|
32
|
+
nm_kalmanfilter
|
|
33
|
+
nm_hjorth
|
|
34
|
+
nm_sharpwaves
|
|
35
|
+
nm_bursts
|
|
36
|
+
nm_coherence
|
|
37
|
+
nm_nolds
|
|
38
|
+
nm_mne_connectivity
|
|
39
|
+
nm_linelength
|
|
40
|
+
|
|
41
|
+
Analysis
|
|
42
|
+
--------
|
|
43
|
+
|
|
44
|
+
.. toctree::
|
|
45
|
+
:maxdepth: 4
|
|
46
|
+
|
|
47
|
+
nm_analysis
|
|
48
|
+
nm_decode
|
|
49
|
+
nm_plots
|
|
50
|
+
nm_RMAP
|
|
51
|
+
nm_stats
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Configuration file for the Sphinx documentation builder.
|
|
2
|
+
#
|
|
3
|
+
# This file only contains a selection of the most common options. For a full
|
|
4
|
+
# list see the documentation:
|
|
5
|
+
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
6
|
+
|
|
7
|
+
# -- Path setup --------------------------------------------------------------
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from sphinx_gallery.sorting import FileNameSortKey
|
|
11
|
+
|
|
12
|
+
print("CURRENT WORKING DIRECTORY")
|
|
13
|
+
print(Path.cwd())
|
|
14
|
+
|
|
15
|
+
SCRIPT_DIR = Path(__file__).absolute().parent
|
|
16
|
+
|
|
17
|
+
if SCRIPT_DIR.name == "source":
|
|
18
|
+
# this check is necessary, so we can also run the script from the root directory
|
|
19
|
+
SCRIPT_DIR = SCRIPT_DIR.parent.parent / "py_neuromodulation"
|
|
20
|
+
|
|
21
|
+
print(f"Script Directory to add: {SCRIPT_DIR}")
|
|
22
|
+
sys.path.append(str(SCRIPT_DIR))
|
|
23
|
+
|
|
24
|
+
print(sys.path)
|
|
25
|
+
|
|
26
|
+
exclude_patterns = ["_build", "_templates"]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# -- Project information -----------------------------------------------------
|
|
30
|
+
project = "py_neuromodulation"
|
|
31
|
+
copyright = "2021, Timon Merk"
|
|
32
|
+
author = "Timon Merk"
|
|
33
|
+
|
|
34
|
+
source_parsers = {
|
|
35
|
+
".md": "recommonmark.parser.CommonMarkParser",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
extensions = [
|
|
39
|
+
"sphinx.ext.autodoc",
|
|
40
|
+
"sphinx.ext.autosummary",
|
|
41
|
+
"sphinx.ext.doctest",
|
|
42
|
+
"sphinx.ext.intersphinx",
|
|
43
|
+
"sphinx.ext.viewcode",
|
|
44
|
+
"sphinx.ext.mathjax",
|
|
45
|
+
"sphinx.ext.napoleon",
|
|
46
|
+
"sphinx.ext.autosectionlabel",
|
|
47
|
+
"sphinx_gallery.gen_gallery",
|
|
48
|
+
"sphinx_togglebutton",
|
|
49
|
+
# "nbsphinx",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
source_suffix = [
|
|
53
|
+
".rst",
|
|
54
|
+
".md",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
autosummary_generate = True
|
|
58
|
+
|
|
59
|
+
PYDEVD_DISABLE_FILE_VALIDATION = 1
|
|
60
|
+
|
|
61
|
+
sphinx_gallery_conf = {
|
|
62
|
+
"examples_dirs": "../../examples",
|
|
63
|
+
"gallery_dirs": "auto_examples",
|
|
64
|
+
"within_subsection_order": FileNameSortKey,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
templates_path = ["_templates"]
|
|
68
|
+
exclude_patterns = []
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
html_theme = "pydata_sphinx_theme"
|
|
72
|
+
html_static_path = ["_static"]
|
|
73
|
+
|
|
74
|
+
html_theme_options = {
|
|
75
|
+
"show_nav_level": 4,
|
|
76
|
+
"icon_links": [
|
|
77
|
+
dict(
|
|
78
|
+
name="GitHub",
|
|
79
|
+
url="https://github.com/neuromodulation/py_neuromodulation",
|
|
80
|
+
icon="fa-brands fa-square-github",
|
|
81
|
+
)
|
|
82
|
+
],
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# -- Intersphinx configuration -----------------------------------------------
|
|
86
|
+
|
|
87
|
+
intersphinx_mapping = {
|
|
88
|
+
"python": ("https://docs.python.org/3", None),
|
|
89
|
+
"numpy": ("https://numpy.org/doc/stable", None),
|
|
90
|
+
"scipy": ("https://docs.scipy.org/doc/scipy", None),
|
|
91
|
+
"matplotlib": ("https://matplotlib.org/stable", None),
|
|
92
|
+
"numba": ("https://numba.readthedocs.io/en/latest", None),
|
|
93
|
+
"mne": ("https://mne.tools/stable", None),
|
|
94
|
+
"pandas": ("https://pandas.pydata.org/docs", None),
|
|
95
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Contribution Guide
|
|
2
|
+
==================
|
|
3
|
+
|
|
4
|
+
Welcome to the contributing guide of py_neuromodulation! We are very happy that you are interested in our project.
|
|
5
|
+
|
|
6
|
+
In general we recommend placing questions and issues in the `GitHub issue tracker <https://github.com/neuromodulation/py_neuromodulation/issues>`_.
|
|
7
|
+
|
|
8
|
+
For code formatting we use `ruff <https://docs.astral.sh/ruff/formatter/>`_.
|
|
9
|
+
|
|
10
|
+
For code development, we recommend using the package manager `rye <https://rye.astral.sh/>`_.
|
|
11
|
+
|
|
12
|
+
To setup the python environment, type
|
|
13
|
+
|
|
14
|
+
::
|
|
15
|
+
|
|
16
|
+
rye pin 3.12
|
|
17
|
+
|
|
18
|
+
then sync the environment with
|
|
19
|
+
|
|
20
|
+
::
|
|
21
|
+
|
|
22
|
+
rye sync
|
|
23
|
+
|
|
24
|
+
Depending on your operating system, activate the rye virtual environment:
|
|
25
|
+
|
|
26
|
+
::
|
|
27
|
+
|
|
28
|
+
. .venv/bin/activate
|
|
29
|
+
|
|
30
|
+
To install the documentation dependencies use pip:
|
|
31
|
+
|
|
32
|
+
::
|
|
33
|
+
|
|
34
|
+
python -m pip install .[docs]
|
|
35
|
+
|
|
36
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
.. py_neuromodulation documentation master file, created by
|
|
2
|
+
sphinx-quickstart on Sun Apr 18 11:04:51 2021.
|
|
3
|
+
|
|
4
|
+
Welcome to py_neuromodulation's documentation!
|
|
5
|
+
==============================================
|
|
6
|
+
|
|
7
|
+
The *py_neuromodulation* toolbox allows for real time capable feature estimation of invasive electrophysiological data.
|
|
8
|
+
|
|
9
|
+
.. toctree::
|
|
10
|
+
:maxdepth: 2
|
|
11
|
+
:caption: Contents
|
|
12
|
+
|
|
13
|
+
installation
|
|
14
|
+
usage
|
|
15
|
+
auto_examples/index
|
|
16
|
+
api_documentation
|
|
17
|
+
contributing
|
|
18
|
+
|
|
19
|
+
Why py_neuromodulation?
|
|
20
|
+
-----------------------
|
|
21
|
+
|
|
22
|
+
Analyzing neural data can be a troublesome, trial and error prone,
|
|
23
|
+
and beginner unfriendly process. *py_neuromodulation* allows using a simple
|
|
24
|
+
interface for extraction of established features and includes commonly applied pre -and postprocessing methods.
|
|
25
|
+
|
|
26
|
+
Basically only **time series data** with a corresponding **sampling frequency** are required.
|
|
27
|
+
|
|
28
|
+
The output will be a pandas DataFrame including different time-resolved computed features. Internally a **stream** get's initialized,
|
|
29
|
+
which simulates an *online* data-stream that can also be be used for real-time analysis.
|
|
30
|
+
|
|
31
|
+
The following features are currently included:
|
|
32
|
+
|
|
33
|
+
* oscillatory: fft, stft or bandpass filtered band power
|
|
34
|
+
* `temporal waveform shape <https://www.sciencedirect.com/science/article/pii/S1364661316302182>`_
|
|
35
|
+
* `fooof <https://fooof-tools.github.io/fooof/>`_
|
|
36
|
+
* `mne_connectivity estimates <https://mne.tools/mne-connectivity/stable/index.html>`_
|
|
37
|
+
* `Hjorth parameter <https://en.wikipedia.org/wiki/Hjorth_parameters>`_
|
|
38
|
+
* `non-linear dynamical estimates <https://nolds.readthedocs.io/en/latest/>`_
|
|
39
|
+
* various burst features
|
|
40
|
+
* line length
|
|
41
|
+
* and more...
|
|
42
|
+
|
|
43
|
+
Find here the preprint of **py_neuromodulation** called *"Invasive neurophysiology and whole brain connectomics for neural decoding in patients with brain implants"* [1]_.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
How can those features be used?
|
|
47
|
+
-------------------------------
|
|
48
|
+
|
|
49
|
+
The original intention for writing this toolbox was movement decoding from invasive brain signals [2]_.
|
|
50
|
+
The application however could be any neural decoding and analysis problem.
|
|
51
|
+
*py_neuromodulation* offers wrappers around common practice machine learning methods for efficient analysis.
|
|
52
|
+
|
|
53
|
+
References
|
|
54
|
+
----------
|
|
55
|
+
|
|
56
|
+
.. [1] Merk, T. et al. *Invasive neurophysiology and whole brain connectomics for neural decoding in patients with brain implants*, `https://doi.org/10.21203/rs.3.rs-3212709/v1` (2023).
|
|
57
|
+
.. [2] Merk, T. et al. *Electrocorticography is superior to subthalamic local field potentials for movement decoding in Parkinson’s disease*. Elife 11, e75126, `https://doi.org/10.7554/eLife.75126` (2022).
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
Indices and tables
|
|
62
|
+
------------------
|
|
63
|
+
|
|
64
|
+
* :ref:`genindex`
|
|
65
|
+
* :ref:`modindex`
|
|
66
|
+
* :ref:`search`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Installation
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
py_neuromodulation requires at least python 3.10. For installation you can use pip:
|
|
5
|
+
|
|
6
|
+
.. code-block::
|
|
7
|
+
|
|
8
|
+
pip install py-neuromodulation
|
|
9
|
+
|
|
10
|
+
We recommend however installing the package using `rye <https://rye-up.com/guide/installation/>`_:
|
|
11
|
+
|
|
12
|
+
.. code-block::
|
|
13
|
+
|
|
14
|
+
git clone https://github.com/neuromodulation/py_neuromodulation.git
|
|
15
|
+
rye pin 3.11
|
|
16
|
+
rye sync
|
|
17
|
+
|
|
18
|
+
And then activating the virtual environment e.g. in Windows using:
|
|
19
|
+
|
|
20
|
+
.. code-block::
|
|
21
|
+
|
|
22
|
+
.\.venv\Scripts\activate
|
|
23
|
+
|
|
24
|
+
Alternatively you can also install the package in a conda environment:
|
|
25
|
+
|
|
26
|
+
conda create -n pynm-test python=3.11
|
|
27
|
+
conda activate pynm-test
|
|
28
|
+
|
|
29
|
+
Then install the packages listed in the `pyproject.toml`:
|
|
30
|
+
|
|
31
|
+
.. code-block::
|
|
32
|
+
|
|
33
|
+
pip install .
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Optionally the ipython kernel can be specified for the installed pynm-test conda environment:
|
|
37
|
+
|
|
38
|
+
.. code-block::
|
|
39
|
+
|
|
40
|
+
ipython kernel install --user --name=pynm-test
|
|
41
|
+
|
|
42
|
+
Then *py_neuromodulation* can be imported via:
|
|
43
|
+
|
|
44
|
+
.. code-block::
|
|
45
|
+
|
|
46
|
+
import py_neuromodulation as nm
|