py-neuromodulation 0.0.3__py3-none-any.whl → 0.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. py_neuromodulation/ConnectivityDecoding/Automated Anatomical Labeling 3 (Rolls 2020).nii +0 -0
  2. py_neuromodulation/ConnectivityDecoding/_get_grid_hull.m +34 -0
  3. py_neuromodulation/ConnectivityDecoding/_get_grid_whole_brain.py +95 -0
  4. py_neuromodulation/ConnectivityDecoding/_helper_write_connectome.py +107 -0
  5. py_neuromodulation/ConnectivityDecoding/mni_coords_cortical_surface.mat +0 -0
  6. py_neuromodulation/ConnectivityDecoding/mni_coords_whole_brain.mat +0 -0
  7. py_neuromodulation/ConnectivityDecoding/rmap_func_all.nii +0 -0
  8. py_neuromodulation/ConnectivityDecoding/rmap_struc.nii +0 -0
  9. py_neuromodulation/FieldTrip.py +589 -589
  10. py_neuromodulation/__init__.py +74 -13
  11. py_neuromodulation/_write_example_dataset_helper.py +83 -65
  12. py_neuromodulation/data/README +6 -0
  13. py_neuromodulation/data/dataset_description.json +8 -0
  14. py_neuromodulation/data/participants.json +32 -0
  15. py_neuromodulation/data/participants.tsv +2 -0
  16. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +5 -0
  17. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +11 -0
  18. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +11 -0
  19. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
  20. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +18 -0
  21. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +35 -0
  22. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +13 -0
  23. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +2 -0
  24. py_neuromodulation/grid_cortex.tsv +40 -0
  25. py_neuromodulation/grid_subcortex.tsv +1429 -0
  26. py_neuromodulation/liblsl/libpugixml.so.1.12 +0 -0
  27. py_neuromodulation/liblsl/linux/bionic_amd64/liblsl.1.16.2.so +0 -0
  28. py_neuromodulation/liblsl/linux/bookworm_amd64/liblsl.1.16.2.so +0 -0
  29. py_neuromodulation/liblsl/linux/focal_amd46/liblsl.1.16.2.so +0 -0
  30. py_neuromodulation/liblsl/linux/jammy_amd64/liblsl.1.16.2.so +0 -0
  31. py_neuromodulation/liblsl/linux/jammy_x86/liblsl.1.16.2.so +0 -0
  32. py_neuromodulation/liblsl/linux/noble_amd64/liblsl.1.16.2.so +0 -0
  33. py_neuromodulation/liblsl/macos/amd64/liblsl.1.16.2.dylib +0 -0
  34. py_neuromodulation/liblsl/macos/arm64/liblsl.1.16.0.dylib +0 -0
  35. py_neuromodulation/liblsl/windows/amd64/liblsl.1.16.2.dll +0 -0
  36. py_neuromodulation/liblsl/windows/x86/liblsl.1.16.2.dll +0 -0
  37. py_neuromodulation/nm_IO.py +413 -417
  38. py_neuromodulation/nm_RMAP.py +496 -531
  39. py_neuromodulation/nm_analysis.py +993 -1074
  40. py_neuromodulation/nm_artifacts.py +30 -25
  41. py_neuromodulation/nm_bispectra.py +154 -168
  42. py_neuromodulation/nm_bursts.py +292 -198
  43. py_neuromodulation/nm_coherence.py +251 -205
  44. py_neuromodulation/nm_database.py +149 -0
  45. py_neuromodulation/nm_decode.py +918 -992
  46. py_neuromodulation/nm_define_nmchannels.py +300 -302
  47. py_neuromodulation/nm_features.py +144 -116
  48. py_neuromodulation/nm_filter.py +219 -219
  49. py_neuromodulation/nm_filter_preprocessing.py +79 -91
  50. py_neuromodulation/nm_fooof.py +139 -159
  51. py_neuromodulation/nm_generator.py +45 -37
  52. py_neuromodulation/nm_hjorth_raw.py +52 -73
  53. py_neuromodulation/nm_kalmanfilter.py +71 -58
  54. py_neuromodulation/nm_linelength.py +21 -33
  55. py_neuromodulation/nm_logger.py +66 -0
  56. py_neuromodulation/nm_mne_connectivity.py +149 -112
  57. py_neuromodulation/nm_mnelsl_generator.py +90 -0
  58. py_neuromodulation/nm_mnelsl_stream.py +116 -0
  59. py_neuromodulation/nm_nolds.py +96 -93
  60. py_neuromodulation/nm_normalization.py +173 -214
  61. py_neuromodulation/nm_oscillatory.py +423 -448
  62. py_neuromodulation/nm_plots.py +585 -612
  63. py_neuromodulation/nm_preprocessing.py +83 -0
  64. py_neuromodulation/nm_projection.py +370 -394
  65. py_neuromodulation/nm_rereference.py +97 -95
  66. py_neuromodulation/nm_resample.py +59 -50
  67. py_neuromodulation/nm_run_analysis.py +325 -435
  68. py_neuromodulation/nm_settings.py +289 -68
  69. py_neuromodulation/nm_settings.yaml +244 -0
  70. py_neuromodulation/nm_sharpwaves.py +423 -401
  71. py_neuromodulation/nm_stats.py +464 -480
  72. py_neuromodulation/nm_stream.py +398 -0
  73. py_neuromodulation/nm_stream_abc.py +166 -218
  74. py_neuromodulation/nm_types.py +193 -0
  75. py_neuromodulation/plots/STN_surf.mat +0 -0
  76. py_neuromodulation/plots/Vertices.mat +0 -0
  77. py_neuromodulation/plots/faces.mat +0 -0
  78. py_neuromodulation/plots/grid.mat +0 -0
  79. {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.5.dist-info}/METADATA +185 -182
  80. py_neuromodulation-0.0.5.dist-info/RECORD +83 -0
  81. {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.5.dist-info}/WHEEL +1 -2
  82. {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.5.dist-info/licenses}/LICENSE +21 -21
  83. docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
  84. docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -233
  85. docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  86. docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
  87. docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  88. docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
  89. docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  90. docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
  91. docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -239
  92. docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  93. docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
  94. docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  95. docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
  96. docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  97. docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -76
  98. docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py +0 -97
  99. docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -240
  100. docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py +0 -233
  101. docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py +0 -63
  102. docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  103. docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py +0 -210
  104. docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py +0 -192
  105. docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py +0 -219
  106. docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -121
  107. docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py +0 -68
  108. docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  109. docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -189
  110. docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  111. docs/source/auto_examples/plot_0_first_demo.py +0 -189
  112. docs/source/auto_examples/plot_1_example_BIDS.py +0 -240
  113. docs/source/auto_examples/plot_2_example_add_feature.py +0 -76
  114. docs/source/auto_examples/plot_3_example_sharpwave_analysis.py +0 -219
  115. docs/source/auto_examples/plot_4_example_gridPointProjection.py +0 -210
  116. docs/source/auto_examples/plot_5_example_rmap_computing.py +0 -64
  117. docs/source/auto_examples/plot_6_real_time_demo.py +0 -121
  118. docs/source/conf.py +0 -105
  119. examples/plot_0_first_demo.py +0 -189
  120. examples/plot_1_example_BIDS.py +0 -240
  121. examples/plot_2_example_add_feature.py +0 -76
  122. examples/plot_3_example_sharpwave_analysis.py +0 -219
  123. examples/plot_4_example_gridPointProjection.py +0 -210
  124. examples/plot_5_example_rmap_computing.py +0 -64
  125. examples/plot_6_real_time_demo.py +0 -121
  126. packages/realtime_decoding/build/lib/realtime_decoding/__init__.py +0 -4
  127. packages/realtime_decoding/build/lib/realtime_decoding/decoder.py +0 -104
  128. packages/realtime_decoding/build/lib/realtime_decoding/features.py +0 -163
  129. packages/realtime_decoding/build/lib/realtime_decoding/helpers.py +0 -15
  130. packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py +0 -345
  131. packages/realtime_decoding/build/lib/realtime_decoding/trainer.py +0 -54
  132. packages/tmsi/build/lib/TMSiFileFormats/__init__.py +0 -37
  133. packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py +0 -36
  134. packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py +0 -200
  135. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py +0 -496
  136. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py +0 -236
  137. packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py +0 -977
  138. packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py +0 -35
  139. packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py +0 -116
  140. packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py +0 -294
  141. packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py +0 -229
  142. packages/tmsi/build/lib/TMSiFileFormats/file_writer.py +0 -102
  143. packages/tmsi/build/lib/TMSiPlotters/__init__.py +0 -2
  144. packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py +0 -39
  145. packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py +0 -234
  146. packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py +0 -440
  147. packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py +0 -44
  148. packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py +0 -446
  149. packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py +0 -589
  150. packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py +0 -1326
  151. packages/tmsi/build/lib/TMSiSDK/__init__.py +0 -54
  152. packages/tmsi/build/lib/TMSiSDK/device.py +0 -588
  153. packages/tmsi/build/lib/TMSiSDK/devices/__init__.py +0 -34
  154. packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py +0 -1764
  155. packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py +0 -34
  156. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py +0 -1366
  157. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py +0 -520
  158. packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py +0 -165
  159. packages/tmsi/build/lib/TMSiSDK/error.py +0 -95
  160. packages/tmsi/build/lib/TMSiSDK/sample_data.py +0 -63
  161. packages/tmsi/build/lib/TMSiSDK/sample_data_server.py +0 -99
  162. packages/tmsi/build/lib/TMSiSDK/settings.py +0 -45
  163. packages/tmsi/build/lib/TMSiSDK/tmsi_device.py +0 -111
  164. packages/tmsi/build/lib/__init__.py +0 -4
  165. packages/tmsi/build/lib/apex_sdk/__init__.py +0 -34
  166. packages/tmsi/build/lib/apex_sdk/device/__init__.py +0 -41
  167. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py +0 -1009
  168. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py +0 -239
  169. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py +0 -668
  170. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py +0 -1611
  171. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py +0 -38
  172. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py +0 -57
  173. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py +0 -44
  174. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py +0 -150
  175. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py +0 -36
  176. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py +0 -48
  177. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py +0 -108
  178. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py +0 -39
  179. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py +0 -77
  180. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py +0 -150
  181. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py +0 -129
  182. packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py +0 -59
  183. packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py +0 -57
  184. packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py +0 -83
  185. packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py +0 -201
  186. packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py +0 -103
  187. packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py +0 -43
  188. packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py +0 -50
  189. packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py +0 -118
  190. packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py +0 -33
  191. packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py +0 -44
  192. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py +0 -50
  193. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py +0 -136
  194. packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py +0 -126
  195. packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py +0 -113
  196. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py +0 -134
  197. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py +0 -60
  198. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py +0 -42
  199. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py +0 -42
  200. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py +0 -72
  201. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py +0 -98
  202. py_neuromodulation/nm_EpochStream.py +0 -92
  203. py_neuromodulation/nm_across_patient_decoding.py +0 -927
  204. py_neuromodulation/nm_cohortwrapper.py +0 -435
  205. py_neuromodulation/nm_eval_timing.py +0 -239
  206. py_neuromodulation/nm_features_abc.py +0 -39
  207. py_neuromodulation/nm_stream_offline.py +0 -358
  208. py_neuromodulation/utils/_logging.py +0 -24
  209. py_neuromodulation-0.0.3.dist-info/RECORD +0 -188
  210. py_neuromodulation-0.0.3.dist-info/top_level.txt +0 -5
  211. tests/__init__.py +0 -0
  212. tests/conftest.py +0 -117
  213. tests/test_all_examples.py +0 -10
  214. tests/test_all_features.py +0 -63
  215. tests/test_bispectra.py +0 -70
  216. tests/test_bursts.py +0 -105
  217. tests/test_feature_sampling_rates.py +0 -143
  218. tests/test_fooof.py +0 -16
  219. tests/test_initalization_offline_stream.py +0 -41
  220. tests/test_multiprocessing.py +0 -58
  221. tests/test_nan_values.py +0 -29
  222. tests/test_nm_filter.py +0 -95
  223. tests/test_nm_resample.py +0 -63
  224. tests/test_normalization_settings.py +0 -146
  225. tests/test_notch_filter.py +0 -31
  226. tests/test_osc_features.py +0 -424
  227. tests/test_preprocessing_filter.py +0 -151
  228. tests/test_rereference.py +0 -171
  229. tests/test_sampling.py +0 -57
  230. tests/test_settings_change_after_init.py +0 -76
  231. tests/test_sharpwave.py +0 -165
  232. tests/test_target_channel_add.py +0 -100
  233. tests/test_timing.py +0 -80
@@ -1,39 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- import numpy as np
3
- from typing import Iterable
4
-
5
-
6
- class Feature(ABC):
7
- @abstractmethod
8
- def __init__(
9
- self, settings: dict, ch_names: Iterable[str], sfreq: int | float
10
- ) -> None:
11
- pass
12
-
13
- @staticmethod
14
- @abstractmethod
15
- def test_settings(
16
- settings: dict,
17
- ch_names: Iterable[str],
18
- sfreq: int | float,
19
- ):
20
- """Method to check passed settings"""
21
- pass
22
-
23
- @abstractmethod
24
- def calc_feature(self, data: np.array, features_compute: dict) -> dict:
25
- """
26
- Feature calculation method. Each method needs to loop through all channels
27
-
28
- Parameters
29
- ----------
30
- data : np.array
31
- (channels, time)
32
- features_compute : dict
33
- ch_names : Iterable[str]
34
-
35
- Returns
36
- -------
37
- dict
38
- """
39
- pass
@@ -1,358 +0,0 @@
1
- """Module for offline data streams."""
2
-
3
- import os
4
- from joblib import Parallel, delayed
5
- import numpy as np
6
- import pandas as pd
7
- from itertools import count
8
- import logging
9
-
10
- logger = logging.getLogger("PynmLogger")
11
-
12
- import mne
13
-
14
- from py_neuromodulation import (
15
- nm_generator,
16
- nm_IO,
17
- nm_stream_abc,
18
- nm_define_nmchannels,
19
- )
20
-
21
- _PathLike = str | os.PathLike
22
-
23
-
24
- class _OfflineStream(nm_stream_abc.PNStream):
25
- """Offline stream base class.
26
- This class can be inhereted for different types of offline streams, e.g. epoch-based or continuous.
27
-
28
- Parameters
29
- ----------
30
- nm_stream_abc : nm_stream_abc.PNStream
31
- """
32
-
33
- def _add_target(
34
- self, feature_series: pd.Series, data: np.ndarray
35
- ) -> pd.Series:
36
- """Add target channels to feature series.
37
-
38
- Parameters
39
- ----------
40
- feature_series : pd.Series
41
- data : np.ndarray
42
- Raw data with shape (n_channels, n_samples). Channels not for feature computation are also included
43
-
44
- Returns
45
- -------
46
- pd.Series
47
- feature series with target channels added
48
- """
49
-
50
- if self.nm_channels["target"].sum() > 0:
51
- if not self.target_idx_initialized:
52
- self.target_indexes = self.nm_channels[
53
- self.nm_channels["target"] == 1
54
- ].index
55
- self.target_names = self.nm_channels.loc[
56
- self.target_indexes, "name"
57
- ].to_list()
58
- self.target_idx_initialized = True
59
-
60
- for target_idx, target_name in zip(
61
- self.target_indexes, self.target_names
62
- ):
63
- feature_series[target_name] = data[target_idx, -1]
64
- return feature_series
65
-
66
- def _add_timestamp(
67
- self, feature_series: pd.Series, cnt_samples: int
68
- ) -> pd.Series:
69
- """Add time stamp in ms.
70
-
71
- Due to normalization run_analysis needs to keep track of the counted
72
- samples. These are accessed here for time conversion.
73
- """
74
- feature_series["time"] = cnt_samples * 1000 / self.sfreq
75
-
76
- if self.verbose:
77
- logging.info(
78
- str(np.round(feature_series["time"] / 1000, 2))
79
- + " seconds of data processed"
80
- )
81
-
82
- return feature_series
83
-
84
- def _handle_data(self, data: np.ndarray | pd.DataFrame) -> np.ndarray:
85
- names_expected = self.nm_channels["name"].to_list()
86
-
87
- if isinstance(data, np.ndarray):
88
- if not len(names_expected) == data.shape[0]:
89
- raise ValueError(
90
- "If data is passed as an array, the first dimension must"
91
- " match the number of channel names in `nm_channels`. Got:"
92
- f" Data columns: {data.shape[0]}, nm_channels.name:"
93
- f" {len(names_expected)}."
94
- )
95
- return data
96
- names_data = data.columns.to_list()
97
- if not (
98
- len(names_expected) == len(names_data)
99
- and sorted(names_expected) == sorted(names_data)
100
- ):
101
- raise ValueError(
102
- "If data is passed as a DataFrame, the"
103
- "columns must match the channel names in `nm_channels`. Got:"
104
- f"Data columns: {names_data}, nm_channels.name: {names_data}."
105
- )
106
- return data.to_numpy()
107
-
108
- def _check_settings_for_parallel(self):
109
- """Check specified settings and raise error if parallel processing is not possible.
110
-
111
- Raises:
112
- ValueError: depending on the settings, parallel processing is not possible
113
- """
114
-
115
- if "raw_normalization" in self.settings["preprocessing"]:
116
- raise ValueError(
117
- "Parallel processing is not possible with raw_normalization normalization."
118
- )
119
- if self.settings["postprocessing"]["feature_normalization"] is True:
120
- raise ValueError(
121
- "Parallel processing is not possible with feature normalization."
122
- )
123
- if self.settings["features"]["bursts"] is True:
124
- raise ValueError(
125
- "Parallel processing is not possible with burst estimation."
126
- )
127
-
128
- def _process_batch(self, data_batch, cnt_samples):
129
- feature_series = self.run_analysis.process(
130
- data_batch.astype(np.float64)
131
- )
132
- feature_series = self._add_timestamp(feature_series, cnt_samples)
133
- feature_series = self._add_target(
134
- feature_series=feature_series, data=data_batch
135
- )
136
- return feature_series
137
-
138
- def _run_offline(
139
- self,
140
- data: np.ndarray,
141
- out_path_root: _PathLike | None = None,
142
- folder_name: str = "sub",
143
- parallel: bool = False,
144
- n_jobs: int = -2,
145
- ) -> pd.DataFrame:
146
- generator = nm_generator.raw_data_generator(
147
- data=data,
148
- settings=self.settings,
149
- sfreq=self.sfreq,
150
- )
151
-
152
- sample_add = self.sfreq / self.run_analysis.sfreq_features
153
-
154
- offset_time = self.settings["segment_length_features_ms"]
155
- # offset_start = np.ceil(offset_time / 1000 * self.sfreq).astype(int)
156
- offset_start = offset_time / 1000 * self.sfreq
157
-
158
- if parallel:
159
- l_features = Parallel(n_jobs=n_jobs, verbose=10)(
160
- delayed(self._process_batch)(data_batch, cnt_samples)
161
- for data_batch, cnt_samples in zip(
162
- generator, count(offset_start, sample_add)
163
- )
164
- )
165
-
166
- else:
167
- l_features = []
168
- cnt_samples = offset_start
169
- while True:
170
- data_batch = next(generator, None)
171
- if data_batch is None:
172
- break
173
- feature_series = self.run_analysis.process(
174
- data_batch.astype(np.float64)
175
- )
176
- feature_series = self._add_timestamp(
177
- feature_series, cnt_samples
178
- )
179
-
180
- feature_series = self._add_target(
181
- feature_series=feature_series, data=data_batch
182
- )
183
-
184
- l_features.append(feature_series)
185
-
186
- cnt_samples += sample_add
187
- feature_df = pd.DataFrame(l_features)
188
-
189
- self.save_after_stream(out_path_root, folder_name, feature_df)
190
-
191
- return feature_df
192
-
193
- def plot_raw_signal(
194
- self,
195
- sfreq: float = None,
196
- data: np.array = None,
197
- lowpass: float = None,
198
- highpass: float = None,
199
- picks: list = None,
200
- plot_time: bool = True,
201
- plot_psd: bool = False,
202
- ) -> None:
203
- """Use MNE-RawArray Plot to investigate PSD or raw_signal plot.
204
-
205
- Parameters
206
- ----------
207
- sfreq : float
208
- sampling frequency [Hz]
209
- data : np.array, optional
210
- data (n_channels, n_times), by default None
211
- plot_time : bool, optional
212
- mne.io.RawArray.plot(), by default True
213
- plot_psd : bool, optional
214
- mne.io.RawArray.plot(), by default True
215
-
216
- Raises
217
- ------
218
- ValueError
219
- raise Exception when no data is passed
220
- """
221
- if self.data is None and data is None:
222
- raise ValueError("No data passed to plot_raw_signal function.")
223
-
224
- if data is None and self.data is not None:
225
- data = self.data
226
-
227
- if sfreq is None:
228
- sfreq = self.sfreq
229
-
230
- if self.nm_channels is not None:
231
- ch_names = self.nm_channels["name"].to_list()
232
- ch_types = self.nm_channels["type"].to_list()
233
- else:
234
- ch_names = [f"ch_{i}" for i in range(data.shape[0])]
235
- ch_types = ["ecog" for i in range(data.shape[0])]
236
-
237
- # create mne.RawArray
238
- info = mne.create_info(
239
- ch_names=ch_names, sfreq=sfreq, ch_types=ch_types
240
- )
241
- raw = mne.io.RawArray(data, info)
242
-
243
- if picks is not None:
244
- raw = raw.pick(picks)
245
- self.raw = raw
246
- if plot_time:
247
- raw.plot(highpass=highpass, lowpass=lowpass)
248
- if plot_psd:
249
- raw.compute_psd().plot()
250
-
251
-
252
- class Stream(_OfflineStream):
253
- def __init__(
254
- self,
255
- sfreq: int | float,
256
- data: np.ndarray | pd.DataFrame = None,
257
- nm_channels: pd.DataFrame | _PathLike = None,
258
- settings: dict | _PathLike | None = None,
259
- sampling_rate_features_hz: float = None,
260
- line_noise: int | float | None = 50,
261
- path_grids: _PathLike | None = None,
262
- coord_names: list | None = None,
263
- coord_list: list | None = None,
264
- verbose: bool = True,
265
- ) -> None:
266
- """Stream initialization
267
-
268
- Parameters
269
- ----------
270
- sfreq : int | float
271
- sampling frequency of data in Hertz
272
- data : np.ndarray | pd.DataFrame | None, optional
273
- data to be streamed with shape (n_channels, n_time), by default None
274
- nm_channels : pd.DataFrame | _PathLike
275
- parametrization of channels (see nm_define_channels.py for initialization)
276
- settings : dict | _PathLike | None, optional
277
- features settings can be a dictionary or path to the nm_settings.json, by default the py_neuromodulation/nm_settings.json are read
278
- line_noise : int | float | None, optional
279
- line noise, by default 50
280
- sampling_rate_features_hz : int | float | None, optional
281
- feature sampling rate, by default None
282
- path_grids : _PathLike | None, optional
283
- path to grid_cortex.tsv and/or gird_subcortex.tsv, by default Non
284
- coord_names : list | None, optional
285
- coordinate name in the form [coord_1_name, coord_2_name, etc], by default None
286
- coord_list : list | None, optional
287
- coordinates in the form [[coord_1_x, coord_1_y, coord_1_z], [coord_2_x, coord_2_y, coord_2_z],], by default None
288
- verbose : bool, optional
289
- log stream computation time information, by default True
290
- """
291
-
292
- if nm_channels is None and data is not None:
293
- nm_channels = nm_define_nmchannels.get_default_channels_from_data(
294
- data
295
- )
296
-
297
- if nm_channels is None and data is None:
298
- raise ValueError(
299
- "Either `nm_channels` or `data` must be passed to `Stream`."
300
- )
301
-
302
- super().__init__(
303
- sfreq,
304
- nm_channels,
305
- settings,
306
- line_noise,
307
- sampling_rate_features_hz,
308
- path_grids,
309
- coord_names,
310
- coord_list,
311
- verbose,
312
- )
313
-
314
- self.data = data
315
-
316
- self.target_idx_initialized = False
317
-
318
- def run(
319
- self,
320
- data: np.ndarray | pd.DataFrame = None,
321
- out_path_root: _PathLike | None = None,
322
- folder_name: str = "sub",
323
- parallel: bool = False,
324
- n_jobs: int = -2,
325
- ) -> pd.DataFrame:
326
- """Call run function for offline stream.
327
-
328
- Parameters
329
- ----------
330
- data : np.ndarray | pd.DataFrame
331
- shape (n_channels, n_time)
332
- out_path_root : _PathLike | None, optional
333
- Full path to store estimated features, by default None
334
- If None, data is simply returned and not saved
335
- folder_name : str, optional
336
- folder output name, commonly subject or run name, by default "sub"
337
-
338
- Returns
339
- -------
340
- pd.DataFrame
341
- feature DataFrame
342
- """
343
-
344
- super().run() # reinitialize the stream
345
-
346
- if data is not None:
347
- data = self._handle_data(data)
348
- elif self.data is not None:
349
- data = self._handle_data(self.data)
350
- elif self.data is None and data is None:
351
- raise ValueError("No data passed to run function.")
352
-
353
- if parallel is True:
354
- self._check_settings_for_parallel()
355
-
356
- return self._run_offline(
357
- data, out_path_root, folder_name, parallel=parallel, n_jobs=n_jobs
358
- )
@@ -1,24 +0,0 @@
1
- import logging
2
-
3
- # include the filename in the log output
4
- # Configure the logger
5
- logger = logging.getLogger("PynmLogger")
6
- logger.setLevel(logging.INFO)
7
-
8
- # Create a file handler and set its level to DEBUG
9
- file_handler = logging.FileHandler("logfile_pynm.log")
10
- file_handler.setLevel(logging.INFO)
11
-
12
- # console_handler = logging.StreamHandler()
13
- # console_handler.setLevel(logging.DEBUG)
14
-
15
- # Create a formatter and add it to the handler
16
- formatter = logging.Formatter(
17
- "%(asctime)s:%(levelname)s:%(name)s:%(filename)s:%(message)s"
18
- )
19
- file_handler.setFormatter(formatter)
20
- # console_handler.setFormatter(formatter)
21
-
22
- # Add the file handler to the logger
23
- logger.addHandler(file_handler)
24
- # logger.addHandler(console_handler)
@@ -1,188 +0,0 @@
1
- docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py,sha256=lMwnMXL9HlCrL6JZf1UtRtLM2YrW1quZo2rtDH5Pg0k,2332
2
- docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py,sha256=v1DmUQmA_99F0_WpLnPLXM5B7mV0RNi1HoYIj3E_yH8,6908
3
- docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py,sha256=p66dwewIyX_gx4CAHtBh0qJy55QaLL95WGjXoS5Wwis,9620
4
- docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py,sha256=bTHUteIHgZKbb43u3Y06Spx4YnZs4O3MuDX5m5CfBK8,4847
5
- docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py,sha256=VWp8b7SUgkmGeLUpeIbAJCE5QkVVqSr-1_IX4QIWeqM,2844
6
- docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py,sha256=G6cj82Z9meuh-SQ-U6h_TMsJCjdDUfIV076w5x_BSrI,7687
7
- docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
8
- docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py,sha256=lMwnMXL9HlCrL6JZf1UtRtLM2YrW1quZo2rtDH5Pg0k,2332
9
- docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py,sha256=d_AFxEqezYCjTP7-34508qzQ8u53g_2gyuV2jW4ac_o,6937
10
- docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py,sha256=p66dwewIyX_gx4CAHtBh0qJy55QaLL95WGjXoS5Wwis,9620
11
- docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py,sha256=bTHUteIHgZKbb43u3Y06Spx4YnZs4O3MuDX5m5CfBK8,4847
12
- docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py,sha256=VWp8b7SUgkmGeLUpeIbAJCE5QkVVqSr-1_IX4QIWeqM,2844
13
- docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py,sha256=G6cj82Z9meuh-SQ-U6h_TMsJCjdDUfIV076w5x_BSrI,7687
14
- docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
15
- docs/source/conf.py,sha256=-10zCfbUXqpeYqZKS8WEGiN2kLXYu9W5bwHmaKperfM,3109
16
- docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py,sha256=GE9isYmHf8PmGQGYTsJakE0F3yMdoISnEjuW8z6h_aw,2353
17
- docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py,sha256=bTHUteIHgZKbb43u3Y06Spx4YnZs4O3MuDX5m5CfBK8,4847
18
- docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py,sha256=Q8ASUBssHg6fd28dTRcRTmyaVxdWnhevngxIb8YsYbk,6967
19
- docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py,sha256=QTntcJmIe67-zMgJ6J45GAgmSXb0KE202PzgJPKuNc0,6901
20
- docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py,sha256=3_ZUJQHY0eH0NrmZsGvg403KmJvKqnSpLAABxdG_1xU,2859
21
- docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py,sha256=p66dwewIyX_gx4CAHtBh0qJy55QaLL95WGjXoS5Wwis,9620
22
- docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
23
- docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py,sha256=G6cj82Z9meuh-SQ-U6h_TMsJCjdDUfIV076w5x_BSrI,7687
24
- docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py,sha256=DB9mGoliri-nvQGMfQmZo5DrnZLsYM7faE0oso-Hp_M,9640
25
- docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py,sha256=QubNW2mbJ-HXDLx24Jd2oCykrlwHEaPt7mOuh5CHcbA,4938
26
- docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py,sha256=lMwnMXL9HlCrL6JZf1UtRtLM2YrW1quZo2rtDH5Pg0k,2332
27
- docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py,sha256=VWp8b7SUgkmGeLUpeIbAJCE5QkVVqSr-1_IX4QIWeqM,2844
28
- docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py,sha256=NJHXQ2x4bZmLEFimo0hM13oWrAcA_pd8Dr3NL7v5Zc8,7650
29
- docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
30
- docs/source/auto_examples/plot_0_first_demo.py,sha256=NJHXQ2x4bZmLEFimo0hM13oWrAcA_pd8Dr3NL7v5Zc8,7650
31
- docs/source/auto_examples/plot_1_example_BIDS.py,sha256=Q8ASUBssHg6fd28dTRcRTmyaVxdWnhevngxIb8YsYbk,6967
32
- docs/source/auto_examples/plot_2_example_add_feature.py,sha256=GE9isYmHf8PmGQGYTsJakE0F3yMdoISnEjuW8z6h_aw,2353
33
- docs/source/auto_examples/plot_3_example_sharpwave_analysis.py,sha256=p66dwewIyX_gx4CAHtBh0qJy55QaLL95WGjXoS5Wwis,9620
34
- docs/source/auto_examples/plot_4_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
35
- docs/source/auto_examples/plot_5_example_rmap_computing.py,sha256=VWp8b7SUgkmGeLUpeIbAJCE5QkVVqSr-1_IX4QIWeqM,2844
36
- docs/source/auto_examples/plot_6_real_time_demo.py,sha256=QubNW2mbJ-HXDLx24Jd2oCykrlwHEaPt7mOuh5CHcbA,4938
37
- examples/plot_0_first_demo.py,sha256=NJHXQ2x4bZmLEFimo0hM13oWrAcA_pd8Dr3NL7v5Zc8,7650
38
- examples/plot_1_example_BIDS.py,sha256=Q8ASUBssHg6fd28dTRcRTmyaVxdWnhevngxIb8YsYbk,6967
39
- examples/plot_2_example_add_feature.py,sha256=GE9isYmHf8PmGQGYTsJakE0F3yMdoISnEjuW8z6h_aw,2353
40
- examples/plot_3_example_sharpwave_analysis.py,sha256=p66dwewIyX_gx4CAHtBh0qJy55QaLL95WGjXoS5Wwis,9620
41
- examples/plot_4_example_gridPointProjection.py,sha256=AyVMbn7KPdI6TpUHxiUChCMH7HRTCvOp70b2E8OA4Is,8105
42
- examples/plot_5_example_rmap_computing.py,sha256=VWp8b7SUgkmGeLUpeIbAJCE5QkVVqSr-1_IX4QIWeqM,2844
43
- examples/plot_6_real_time_demo.py,sha256=QubNW2mbJ-HXDLx24Jd2oCykrlwHEaPt7mOuh5CHcbA,4938
44
- packages/realtime_decoding/build/lib/realtime_decoding/__init__.py,sha256=ASzcT8ktbukMQ3T9PPoVAlcazknE-ACVFOuNw24rMPo,127
45
- packages/realtime_decoding/build/lib/realtime_decoding/decoder.py,sha256=Sff2JWYCF2vFNEGtaReUrNX5LntV9wrbcg8tC1pozGA,3229
46
- packages/realtime_decoding/build/lib/realtime_decoding/features.py,sha256=ZWLngSWuenXLaH-ks19fTUaqwMPA-MUB8-UNTQgmi-g,6021
47
- packages/realtime_decoding/build/lib/realtime_decoding/helpers.py,sha256=nQFtybuvXpM7xDzfCWtw23pyQoGMJIDeZOMGd7KkK_U,337
48
- packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py,sha256=ieKS134CxfZcL0yOh3Bvl8rKp4Bfu4s6SCohXx52bkI,11950
49
- packages/realtime_decoding/build/lib/realtime_decoding/trainer.py,sha256=ICBnm4Up3K8a0ovaMGPFDNr8Y5vwLKVrI2knzvXrfxE,1536
50
- packages/tmsi/build/lib/__init__.py,sha256=OFqnFN-GHeicZgsQx7-QtQIc7f8p3tOZSdxgu8DdbCg,145
51
- packages/tmsi/build/lib/TMSiFileFormats/__init__.py,sha256=WTGDqaSJvjiX6lDZz7TC7FcNfgeE_WTxTiPesdKCDC4,1076
52
- packages/tmsi/build/lib/TMSiFileFormats/file_writer.py,sha256=uvfh2TXmbrKo1jmfqFS_0KATL5GPKqzxdO08uvEUbvA,3482
53
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py,sha256=QX-f7vQApRPyIlmmcjmhOPc4NkBcB_b4qrNNUKNQUHA,1136
54
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py,sha256=SBD62cZmKSVacbPAkXqVyipZfx4-lCHwAPE5LymqRUM,6987
55
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py,sha256=2zI-zLr4w8XAkv0vjaNdRSLbSR3tNqmidXbCLS4_kh8,17298
56
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py,sha256=anFbDwrBtc1RzkV4s1oW5vYf0oLN4nZE_--xZP2NU10,9221
57
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py,sha256=LLVRA_70gfMgou4hiT3v8IZ88LIYosMZ30BxsGCEWlo,39017
58
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py,sha256=VmWAbvOR5bejE_Y69kJx-WngMeOXXu41fHgfuPR_fKY,1060
59
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py,sha256=UylKmzea11Mq3RKfuXXbN5g1OkvCj96BdOocGb1r-XY,4090
60
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py,sha256=2vGY1wxdd-9cFWBnEITKyn1dZ49dToP3LFs6SsPoX_4,10297
61
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py,sha256=bSrzvqaysfegtFOkYgmNora49lJyXQUNIeqz5-cluSM,8579
62
- packages/tmsi/build/lib/TMSiPlotters/__init__.py,sha256=PGUQlRcrWFlpe7y7ld1yY26LAFt1Rhwc7xB9C7_OHhk,43
63
- packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py,sha256=R0nvhP4z9rspQWIIo-DqAdAt1pWU0s6wDeZFZgeC7uk,1219
64
- packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py,sha256=XXWoJXeI6nwg2O450taa5eXlKcxZgwyVdPhMoPyvUHk,10981
65
- packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py,sha256=xgf2a1J9KEwdcs5wDIOHz3OBcXD9yneONlMCLX-RGN4,21679
66
- packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py,sha256=yH_xWZGRUwUuPoVlE71KEkpH5aV15of92Um_X4uxTp8,1318
67
- packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py,sha256=nJehvy5inr2Xf4pNP2X1FMFivTa3Hj7d3S8ldd6_HpM,20868
68
- packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py,sha256=gMr4aebPmkqrlwxB_jNL-gkPTQmYGg0gvw-tZoG5JkI,28170
69
- packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py,sha256=Ek2BpdwqwQb8pIhRbafEATYwphRI6LDs6cV2qpzi7I4,56052
70
- packages/tmsi/build/lib/TMSiSDK/__init__.py,sha256=ofaDxFC1LWaTBKOxSEhsG8TeSuby56vJP2s2MEUSpYE,1637
71
- packages/tmsi/build/lib/TMSiSDK/device.py,sha256=8z00HY9GNiYBdugiPd8ctcLlGniWPLEtzEy7p4tM01Y,18540
72
- packages/tmsi/build/lib/TMSiSDK/error.py,sha256=W2uMpRReYlRMw6jv7bVeAuK0GJLBe8I-gvs0I8DrDoQ,3969
73
- packages/tmsi/build/lib/TMSiSDK/sample_data.py,sha256=ujSmF0xljVuFn71ls7A6XxWevheR3ux-ym9lx7qIHWE,2078
74
- packages/tmsi/build/lib/TMSiSDK/sample_data_server.py,sha256=AQTC9Yk-ZISbISBqJWLrQRXNGAAQArKA32hP2fDnVu4,3179
75
- packages/tmsi/build/lib/TMSiSDK/settings.py,sha256=f9wD8eTG4uSbudSSQ2dF0P9Ldset24qeD4F8vAcBjHQ,1303
76
- packages/tmsi/build/lib/TMSiSDK/tmsi_device.py,sha256=g8PKBMDpCbdQ7lD-a0te1ovdhx_0Zr2WSjiHuYxG9XA,3872
77
- packages/tmsi/build/lib/TMSiSDK/devices/__init__.py,sha256=qKBSReRCR9RP5iIprQ-2yR16c0C66PaQdhF_dLdLHhE,987
78
- packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py,sha256=lZxyMA-YKWaqVAHikBbL50a3gRJkAYEIoTyh1DM_tsc,64350
79
- packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py,sha256=hesQE4rGyBn_EIzk0V9OPzrvd82gVf8W4Qg9GZPMGv8,1104
80
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py,sha256=f7xayd5xEjjetPOde2B8LAHCHIML0tHE7lI9hrlxpUE,56014
81
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py,sha256=9AW78NbGVv7y3AOSubvK3-TEQcEu6iYGUqAw6U8Q4V0,19323
82
- packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py,sha256=AoRAyQa2duNd2OTpN1xUS2ohjWYJcknPkAtlzkQHk6A,5811
83
- packages/tmsi/build/lib/apex_sdk/__init__.py,sha256=2HeK5m-t17JTkImtGgzxbKW_NTlcUM2VzftdvqP_VvY,1029
84
- packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py,sha256=KmOAer7XO2JihagQB3fUVNr6RDezPIMcYffm4UxawQc,4208
85
- packages/tmsi/build/lib/apex_sdk/device/__init__.py,sha256=1J0v2m1dpzB6Z01bwzK_WKCM3y7lInB8UdPxQp08-hk,1317
86
- packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py,sha256=21WC_lo24kWJDOp-6Mg0mbKLGQcPOsDfyRZSJfjDNWE,2349
87
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py,sha256=bueUoq5xDnZqk64CPivViBG_OddL0aBr7QZLWaYaJCk,7904
88
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py,sha256=ISm_Sgc8NlB5kZc4CLdvDRlnz7J0-SyAIKHzSy4sgmU,2182
89
- packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py,sha256=tS7s8EyS4T4ES2D0c_LxGI8tmQLufKPWW-XPdoBr5RE,1207
90
- packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py,sha256=ChICOlqMV4g2cepKKakU4nYj6tOcxXFPlPMRLKw03a0,1475
91
- packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py,sha256=aklYuP8JujBPBU8FcoBb63zU2lSRdbd8ewpr5JqIoR0,3996
92
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py,sha256=ltOEnPy1PI0oKWOEbvPZP1CqRuHbOjaF__9VVm0xNz0,39789
93
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py,sha256=t_w8e-P9Pzex_XGWiOoLVt-aAWcmkTgyEkeKtAChMBw,6480
94
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py,sha256=UQv1xK3mIVnxzNjh0Kq1pLnKFvUf-HdA4KTIx8pgjcU,19330
95
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py,sha256=98M7INyQnb688AhfZn12yjCcl430ouWpSMVY7SY8cc0,66903
96
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py,sha256=uu3Pw6isEim73L5p9-UcPZMXrl3dM6sQkWYx7c9Bvo8,1094
97
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py,sha256=ks6i5ZRb6AA0g6iT0jhVQdwBY5rR3SoiNGpS89nDOD4,1847
98
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py,sha256=koUs_9rMsgXLh5482jeTjSRSOZjpaD556RbqXm2I074,1479
99
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py,sha256=s7gvjnV3ZTUPzZC8wctWGbzrYV0OFmy3Ye85yDkmf7Y,5607
100
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py,sha256=Kh0tyxtjb8wge8JllgFI69vOR04IRTw5OzaYaTg714E,1000
101
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py,sha256=ERbbvaH2SoqOSYnotfUygUv_u5pb7zibQkSfrVmPNd8,1616
102
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py,sha256=bO0cyarC52Hj5DVwFDyjAxEPxxK7V16nTDeO-Ln-90U,3280
103
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py,sha256=QMqVPsgPiHgBKWtpzVCOQvHuJdN3rs_K_g9yINbde54,1123
104
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py,sha256=WqeJk_V8yRj6SSU7DDyD6XGrw5gk8nnDOfXUldYGAl4,2628
105
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py,sha256=n8tIuF7KxvMj8r2SHrzoc80W8m2ahrUqFhBR6ufkI9g,6110
106
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py,sha256=GMu1Rda8PE-RDVisohKsAgbIXvGTgareDN6SAUy2jhI,5040
107
- packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py,sha256=oPHKoOllOzrzzonNr96MLIMTK0EbFqUvTW5oxDEtjp8,1604
108
- packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py,sha256=wgwO3piD9grcoo6aTsIt8W9NsqWFhpLIouYg6gfqX3s,1565
109
- packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py,sha256=6Di1HJjx6OgxS75GsVn6ILRCBHlV1JW4lSc2cq4dpDY,986
110
- packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py,sha256=XOTzgnAW_IVEu0XtqjApLv7PWamne-I0lZRQA-3cunQ,1180
111
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py,sha256=FNuqQqdZDfTAZF3jP25rFsnnq3R7MiktiGCuHYJrLfI,1416
112
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py,sha256=Yap6iqoJ7Opb6BFdK22CTreifXYGch5Ojx4Uig-Juog,4816
113
- packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py,sha256=p0_VEr9W-sQ07b5KE5YFGkkr4jV0GBSRoBsMuaZi2Qg,5047
114
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py,sha256=ce2M6Fr4YKvKcRicTCQuBUYVnfy5Z-Wf1aw33LpZP3U,1782
115
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py,sha256=Xw1Vsf-aRyCwPG4W38V8IoTIiofmRGn7ARuS6JOurDw,1150
116
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py,sha256=rotFF0Hh97tMN68gHm702yOuGscue3Qs73nu8N9ccko,1196
117
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py,sha256=ysuvPQejAIW3NFcb2XhC7qTWqFfSac_wXUULbTyrATQ,1949
118
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py,sha256=vqcGHCg-bmKjlggFv_4j2q1TRjQIkIaHQ1tT6GqAdyw,3459
119
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py,sha256=aPpLmeYXtoMGNUGEGunF6gtk7Z6Q4UYPHixEm29s8MA,5414
120
- py_neuromodulation/FieldTrip.py,sha256=cq4BIibMvcpyAHd7U8eEK4AhVSOTrRKXcywtgtc-Mg4,18597
121
- py_neuromodulation/__init__.py,sha256=3aujkEqF4dzt8WKtK7gaolh782UsR5FFkqcg7fOtze4,296
122
- py_neuromodulation/_write_example_dataset_helper.py,sha256=b-kG1JiuIhebVSNCrumTOgdXPTmxXkkduCpUFlmMlOg,2530
123
- py_neuromodulation/nm_EpochStream.py,sha256=fqLNIQRVtcQOMtOyw-omu3KegEs6tWxZI-GQWqdAeG0,2595
124
- py_neuromodulation/nm_IO.py,sha256=SFOsCMwu2XOYUjFaDauciVkZsq0YG-Vx4rrevqNDd4g,11688
125
- py_neuromodulation/nm_RMAP.py,sha256=2wHHD9gwW6Y3XZnGUwmDrWHcz7HjwwLqcwwSjADA0-Q,15791
126
- py_neuromodulation/nm_across_patient_decoding.py,sha256=9Mwu5o5cUAbtSP8BTx4c-BJfJZtk8wsMx_WH0VIegdI,38690
127
- py_neuromodulation/nm_analysis.py,sha256=ZIuc1cqG5_2DvoTwvSDL88nyYa_XglANq90xUqeSEXM,38528
128
- py_neuromodulation/nm_artifacts.py,sha256=KZZ68Q13P64vp05vRiLZ9CPmyWurhcB6K0ldY91axCI,692
129
- py_neuromodulation/nm_bispectra.py,sha256=7XduXwvryckEMlNeRqKLioNK90rW8AZpvA_Z2I7gThI,6322
130
- py_neuromodulation/nm_bursts.py,sha256=2xMJjluXttjeijm9e7EaaJJ2fcnnX1kLb600TiJvCzY,7710
131
- py_neuromodulation/nm_coherence.py,sha256=Iy8FtYBb7qaRFGpzHwOK_IA6O4bvtrumcIyS_Umh0aY,7435
132
- py_neuromodulation/nm_cohortwrapper.py,sha256=eJVCBW745DB5MX7OBVJh2ZAT1vy-3-_2MCHnjrsO9qI,16643
133
- py_neuromodulation/nm_decode.py,sha256=d15D-l0RUAcW8FfXyDcPaNwRpS9wuq1XK-pWmImPHDg,35645
134
- py_neuromodulation/nm_define_nmchannels.py,sha256=8rjZoDIwhsIgdqfSxScaJvY9tNGWNLecTLxEmvhHMuE,11074
135
- py_neuromodulation/nm_eval_timing.py,sha256=JcnLYyxjH8hvNX7rbJ4PEj-NZzqs2NMGOhyuQQuGiYc,8800
136
- py_neuromodulation/nm_features.py,sha256=IsfN6nFE_f0OPFaHPjFhjPxMO7pKc6pxkylt6V09LEk,3527
137
- py_neuromodulation/nm_features_abc.py,sha256=6CX8NHbtpGDY-l9K4CUomlRJVZHPmo6KHJX4RJ1YolM,917
138
- py_neuromodulation/nm_filter.py,sha256=dusgRby4xDxrj62uINuucm0juCwpGb7Lr3iN4IOs8R4,7542
139
- py_neuromodulation/nm_filter_preprocessing.py,sha256=rR1QKaf9q_7sWB5J129rBTz5H2PO6rvGxMmU86-npi4,3366
140
- py_neuromodulation/nm_fooof.py,sha256=rOpKyKzTTnMWBplujsw5kzHAvILBGuCjP0q0UozTIiM,6147
141
- py_neuromodulation/nm_generator.py,sha256=YPa-1X5gCUVSpxTT9upbbY4kjqoVlRd5njQHBjgpAgk,1088
142
- py_neuromodulation/nm_hjorth_raw.py,sha256=EvXOBr3k9Q5xypv1Gj8GFqa5EJ_wRYNDGgGnXCUekiM,2180
143
- py_neuromodulation/nm_kalmanfilter.py,sha256=dgs7_XMBpLEE49l6aAVNA4d6ovTS63CZsAI472eG3JA,2006
144
- py_neuromodulation/nm_linelength.py,sha256=0iZO7j6g7IeprvlEvWG6a_CaUL2p0sQKGiFgDrzYtxk,954
145
- py_neuromodulation/nm_mne_connectivity.py,sha256=UCgLRQSrzl0OpOhHdUc1iqWr6fPiHZeU0zNeZfaplJE,3907
146
- py_neuromodulation/nm_nolds.py,sha256=KZr3ZKqvKJkYKh2BMYuuUMkP8hhmJTUgtLZrE8l-DqQ,3660
147
- py_neuromodulation/nm_normalization.py,sha256=9v3fiNT0HexD9ycp2gB6BPp_ch86kYez_YNI9yB3zGw,7574
148
- py_neuromodulation/nm_oscillatory.py,sha256=dvxiytWXwd9_gsvroUhDQkQZBTIZzQEhl2XS2QzmOIQ,16476
149
- py_neuromodulation/nm_plots.py,sha256=B5A91ejZwoxx2YRa3fB6G_fNamdCm27JSOInqF1OfWc,17869
150
- py_neuromodulation/nm_projection.py,sha256=g8VersyOGiWj3PjR_U6dvLttsp6CHi_GCyYnu_ha8uc,15309
151
- py_neuromodulation/nm_rereference.py,sha256=SApVkeWdMmMfD1sr77HSs7MW3eQwVHKEhfm-0zyBu9M,3381
152
- py_neuromodulation/nm_resample.py,sha256=MSMu8gvmrYZ194fAVJdlB_4yEkuGKHgHrLd11zBDRY0,1122
153
- py_neuromodulation/nm_run_analysis.py,sha256=kZKcVkAbeAhKzoXyFaNK4Vo_aJTTSAVZxxr8y3GMyCc,15046
154
- py_neuromodulation/nm_settings.py,sha256=7d17vwSGrABxQJ7C6x3FqP8kdboUFpm5LrN4djoVlFA,1775
155
- py_neuromodulation/nm_sharpwaves.py,sha256=mk6DYjO-834aCEk9-x24DP6b1rSA9gC1Jf6in8GPAgA,16891
156
- py_neuromodulation/nm_stats.py,sha256=wgYk3jzrfSNEZEWdPSpxQcGcsdNs-vhfKvRhMptSbXM,16029
157
- py_neuromodulation/nm_stream_abc.py,sha256=hQHFVOnCdZiVfq9NyS5npFQ4DFqJUsY4jbaegEhMvgk,7755
158
- py_neuromodulation/nm_stream_offline.py,sha256=OCXUCgVzbXKnmyWJ8aeMBFFuoWwZozQEBxygaSzCkts,12366
159
- py_neuromodulation/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- py_neuromodulation/utils/_logging.py,sha256=vADt0XAWSzDAvhuOfaOjyZRSZCA11Pym2wi0uvPIoTo,738
161
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
- tests/conftest.py,sha256=u4p-GjX85YVITrUYxH35ZqKdjLWqMZQZm3J29OtjEYw,3107
163
- tests/test_all_examples.py,sha256=t9DulIlDkhjSXw9oZ4B-CChB1Q3_V48fFUOaOowA1RE,285
164
- tests/test_all_features.py,sha256=KyfR3HMxVUkuBibVp8lnnhG29aOiSO0gvY91wt2QUpo,1708
165
- tests/test_bispectra.py,sha256=5llgbiDmYzxlUCvrmjPP5SYUcpLgASiiGOcrXI-IR4U,1599
166
- tests/test_bursts.py,sha256=NRkG8AutSfgZlNBTriSWuiBGdktoVZKrV9VJgcCMULc,2806
167
- tests/test_feature_sampling_rates.py,sha256=IJM_vQ9ykrInXGg1EyThaBu6WdquIVYxSFgy5hPDtsg,4377
168
- tests/test_fooof.py,sha256=oOY9O44Icj4tDhG8G_QtTMcy24RgN7JP7nKZeAR2RBM,601
169
- tests/test_initalization_offline_stream.py,sha256=iWr5xu6m5TfD-_EpK3Tk_OXAPKb97XOYdK_p5WJt0w8,1326
170
- tests/test_multiprocessing.py,sha256=uuJZDPEAN_WriXB7boHU-Pukf88Oj9xokwNk1e8uglY,2020
171
- tests/test_nan_values.py,sha256=-rVU4XyaTufAKu1lywiaHjpqeqAV2lRDbimYm-C5-7w,808
172
- tests/test_nm_filter.py,sha256=tLyP8kV5On4BrkO5hC4GSYFmV_w9JYJ19WxdkEGjC5s,3050
173
- tests/test_nm_resample.py,sha256=0MD_X5fbztOEqYG6NbR_0yEV_ztH7BcyqRAyzbVrFM0,2104
174
- tests/test_normalization_settings.py,sha256=_-KcFdsJOgThL_DtY9BCFmoDhZ70nT-Cjtxi369sPeE,3981
175
- tests/test_notch_filter.py,sha256=CQbuqIn9MhTzvs4st2z4dXpxTGU2b2N3vTb71EW3S-A,987
176
- tests/test_osc_features.py,sha256=UHPtlRr7WMyT5xrWBs4TJe793QRQJtk_iPqknfrw_F4,13046
177
- tests/test_preprocessing_filter.py,sha256=_i6IrFJMhTBO7TuvDQgchRv7led1MXg7n6Rv4Kvdunk,5622
178
- tests/test_rereference.py,sha256=Hrx8zwsNJDE2AEcaMpgSWEMmBmO-jRYOtfOeaPdKA3Q,5174
179
- tests/test_sampling.py,sha256=63Eu5NZrExZI7UdnlFq9b3FA8n6KxhW-zkqlaL6bMTQ,2000
180
- tests/test_settings_change_after_init.py,sha256=joG6_urbu941dmF-zo1JQstgjpVlM0wdRnKe-aMTd-M,2262
181
- tests/test_sharpwave.py,sha256=lyzo8hWMO19sMccR-1vl5FGRajl7hVZXrM46uS8Sfyg,5588
182
- tests/test_target_channel_add.py,sha256=N15l4vW9H73RveEx3irwcYmKQEvBk9Nzysblc-Z0KI8,3045
183
- tests/test_timing.py,sha256=o2Sxbx9LMEpG6jIvU2kI1D1_AhoVuz3_nphWbSbRqZM,2592
184
- py_neuromodulation-0.0.3.dist-info/LICENSE,sha256=V6yfss2JKJxeY-TsaEVqVomfd8ttziMyB9ik5L-BI7o,1139
185
- py_neuromodulation-0.0.3.dist-info/METADATA,sha256=YSRxaxhxOF8Mq_1rO67M4I9TMx3ut2Olvd2B-5_y94c,7229
186
- py_neuromodulation-0.0.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
187
- py_neuromodulation-0.0.3.dist-info/top_level.txt,sha256=RAWmR9vjiJ8zRtHRd0SlX4FrBkrgSujkFEJI1wU6GlQ,48
188
- py_neuromodulation-0.0.3.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- docs
2
- examples
3
- packages
4
- py_neuromodulation
5
- tests
tests/__init__.py DELETED
File without changes