brainflow 5.12.0__py3-none-any.whl → 5.13.0__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.
- brainflow/board_shim.py +7 -7
- brainflow/data_filter.py +62 -64
- brainflow/lib/BoardController.dll +0 -0
- brainflow/lib/BoardController32.dll +0 -0
- brainflow/lib/BrainBitLib.dll +0 -0
- brainflow/lib/BrainBitLib32.dll +0 -0
- brainflow/lib/BrainFlowBluetooth.dll +0 -0
- brainflow/lib/BrainFlowBluetooth32.dll +0 -0
- brainflow/lib/DataHandler.dll +0 -0
- brainflow/lib/DataHandler32.dll +0 -0
- brainflow/lib/GanglionLib.dll +0 -0
- brainflow/lib/GanglionLib32.dll +0 -0
- brainflow/lib/MLModule.dll +0 -0
- brainflow/lib/MuseLib.dll +0 -0
- brainflow/lib/MuseLib32.dll +0 -0
- brainflow/lib/gForceSDKWrapper.dll +0 -0
- brainflow/lib/gForceSDKWrapper32.dll +0 -0
- brainflow/lib/libBoardController.dylib +0 -0
- brainflow/lib/libBoardController.so +0 -0
- brainflow/lib/libBrainBitLib.dylib +0 -0
- brainflow/lib/libBrainBitLib.so +0 -0
- brainflow/lib/libBrainFlowBluetooth.dylib +0 -0
- brainflow/lib/libBrainFlowBluetooth.so +0 -0
- brainflow/lib/libDataHandler.dylib +0 -0
- brainflow/lib/libDataHandler.so +0 -0
- brainflow/lib/libGanglionLib.dylib +0 -0
- brainflow/lib/libGanglionLib.so +0 -0
- brainflow/lib/libMLModule.dylib +0 -0
- brainflow/lib/libMLModule.so +0 -0
- brainflow/lib/libMuseLib.dylib +0 -0
- brainflow/lib/libMuseLib.so +0 -0
- brainflow/lib/libsimpleble-c.dylib +0 -0
- brainflow/lib/libsimpleble-c.so +0 -0
- brainflow/lib/simpleble-c.dll +0 -0
- brainflow/lib/simpleble-c32.dll +0 -0
- brainflow/ml_model.py +2 -3
- {brainflow-5.12.0.dist-info → brainflow-5.13.0.dist-info}/METADATA +2 -2
- brainflow-5.13.0.dist-info/RECORD +60 -0
- {brainflow-5.12.0.dist-info → brainflow-5.13.0.dist-info}/WHEEL +1 -1
- brainflow-5.12.0.dist-info/RECORD +0 -60
- {brainflow-5.12.0.dist-info → brainflow-5.13.0.dist-info}/LICENSE.txt +0 -0
- {brainflow-5.12.0.dist-info → brainflow-5.13.0.dist-info}/top_level.txt +0 -0
- {brainflow-5.12.0.dist-info → brainflow-5.13.0.dist-info}/zip-safe +0 -0
brainflow/board_shim.py
CHANGED
@@ -10,7 +10,6 @@ import numpy
|
|
10
10
|
import pkg_resources
|
11
11
|
from brainflow.exit_codes import BrainFlowExitCodes, BrainFlowError
|
12
12
|
from brainflow.utils import LogLevels
|
13
|
-
from nptyping import NDArray, Float64
|
14
13
|
from numpy.ctypeslib import ndpointer
|
15
14
|
|
16
15
|
|
@@ -74,6 +73,7 @@ class BoardIds(enum.IntEnum):
|
|
74
73
|
AAVAA_V3_BOARD = 53 #:
|
75
74
|
EXPLORE_PLUS_8_CHAN_BOARD = 54 #:
|
76
75
|
EXPLORE_PLUS_32_CHAN_BOARD = 55 #:
|
76
|
+
PIEEG_BOARD = 56 #:
|
77
77
|
|
78
78
|
|
79
79
|
class IpProtocolTypes(enum.IntEnum):
|
@@ -777,7 +777,7 @@ class BoardShim(object):
|
|
777
777
|
:type board_id: int
|
778
778
|
:return: presets for this board id
|
779
779
|
:rtype: List[str]
|
780
|
-
:raises BrainFlowError
|
780
|
+
:raises BrainFlowError: In case of internal error or invalid args
|
781
781
|
"""
|
782
782
|
|
783
783
|
num_presets = numpy.zeros(1).astype(numpy.int32)
|
@@ -795,7 +795,7 @@ class BoardShim(object):
|
|
795
795
|
|
796
796
|
:return: version
|
797
797
|
:rtype: str
|
798
|
-
:raises BrainFlowError
|
798
|
+
:raises BrainFlowError: In case of internal error or invalid args
|
799
799
|
"""
|
800
800
|
string = numpy.zeros(64).astype(numpy.ubyte)
|
801
801
|
string_len = numpy.zeros(1).astype(numpy.int32)
|
@@ -1266,7 +1266,7 @@ class BoardShim(object):
|
|
1266
1266
|
if res != BrainFlowExitCodes.STATUS_OK.value:
|
1267
1267
|
raise BrainFlowError('unable to release streaming session', res)
|
1268
1268
|
|
1269
|
-
def get_current_board_data(self, num_samples: int, preset: int = BrainFlowPresets.DEFAULT_PRESET)
|
1269
|
+
def get_current_board_data(self, num_samples: int, preset: int = BrainFlowPresets.DEFAULT_PRESET):
|
1270
1270
|
"""Get specified amount of data or less if there is not enough data, doesnt remove data from ringbuffer
|
1271
1271
|
|
1272
1272
|
:param num_samples: max number of samples
|
@@ -1274,7 +1274,7 @@ class BoardShim(object):
|
|
1274
1274
|
:param preset: preset
|
1275
1275
|
:type preset: int
|
1276
1276
|
:return: latest data from a board
|
1277
|
-
:rtype: NDArray[Float64]
|
1277
|
+
:rtype: NDArray[Shape["*, *"], Float64]
|
1278
1278
|
"""
|
1279
1279
|
|
1280
1280
|
package_length = BoardShim.get_num_rows(self._master_board_id, preset)
|
@@ -1345,7 +1345,7 @@ class BoardShim(object):
|
|
1345
1345
|
raise BrainFlowError('unable to check session status', res)
|
1346
1346
|
return bool(prepared[0])
|
1347
1347
|
|
1348
|
-
def get_board_data(self, num_samples=None, preset: int = BrainFlowPresets.DEFAULT_PRESET)
|
1348
|
+
def get_board_data(self, num_samples=None, preset: int = BrainFlowPresets.DEFAULT_PRESET):
|
1349
1349
|
"""Get board data and remove data from ringbuffer
|
1350
1350
|
|
1351
1351
|
:param num_samples: number of packages to get
|
@@ -1353,7 +1353,7 @@ class BoardShim(object):
|
|
1353
1353
|
:param preset: preset
|
1354
1354
|
:type preset: int
|
1355
1355
|
:return: all data from a board if num_samples is None, num_samples packages or less if not None
|
1356
|
-
:rtype: NDArray[Float64]
|
1356
|
+
:rtype: NDArray[Shape["*, *"], Float64]
|
1357
1357
|
"""
|
1358
1358
|
|
1359
1359
|
data_size = self.get_board_data_count(preset)
|
brainflow/data_filter.py
CHANGED
@@ -9,7 +9,6 @@ import numpy
|
|
9
9
|
import pkg_resources
|
10
10
|
from brainflow.exit_codes import BrainFlowExitCodes, BrainFlowError
|
11
11
|
from brainflow.utils import check_memory_layout_row_major, LogLevels
|
12
|
-
from nptyping import NDArray, Float64, Complex128
|
13
12
|
from numpy.ctypeslib import ndpointer
|
14
13
|
|
15
14
|
|
@@ -583,12 +582,12 @@ class DataFilter(object):
|
|
583
582
|
raise BrainFlowError('unable to redirect logs to a file', res)
|
584
583
|
|
585
584
|
@classmethod
|
586
|
-
def perform_lowpass(cls, data
|
585
|
+
def perform_lowpass(cls, data, sampling_rate: int, cutoff: float, order: int, filter_type: int,
|
587
586
|
ripple: float) -> None:
|
588
587
|
"""apply low pass filter to provided data
|
589
588
|
|
590
589
|
:param data: data to filter, filter works in-place
|
591
|
-
:type data: NDArray[Float64]
|
590
|
+
:type data: NDArray[Shape["*"], Float64]
|
592
591
|
:param sampling_rate: board's sampling rate
|
593
592
|
:type sampling_rate: int
|
594
593
|
:param cutoff: cutoff frequency
|
@@ -611,12 +610,12 @@ class DataFilter(object):
|
|
611
610
|
raise BrainFlowError('unable to perform low pass filter', res)
|
612
611
|
|
613
612
|
@classmethod
|
614
|
-
def perform_highpass(cls, data
|
613
|
+
def perform_highpass(cls, data, sampling_rate: int, cutoff: float, order: int, filter_type: int,
|
615
614
|
ripple: float) -> None:
|
616
615
|
"""apply high pass filter to provided data
|
617
616
|
|
618
617
|
:param data: data to filter, filter works in-place
|
619
|
-
:type data: NDArray[Float64]
|
618
|
+
:type data: NDArray[Shape["*"], Float64]
|
620
619
|
:param sampling_rate: board's sampling rate
|
621
620
|
:type sampling_rate: int
|
622
621
|
:param cutoff: cutoff frequency
|
@@ -639,12 +638,12 @@ class DataFilter(object):
|
|
639
638
|
raise BrainFlowError('unable to apply high pass filter', res)
|
640
639
|
|
641
640
|
@classmethod
|
642
|
-
def perform_bandpass(cls, data
|
641
|
+
def perform_bandpass(cls, data, sampling_rate: int, start_freq: float,
|
643
642
|
stop_freq: float, order: int, filter_type: int, ripple: float) -> None:
|
644
643
|
"""apply band pass filter to provided data
|
645
644
|
|
646
645
|
:param data: data to filter, filter works in-place
|
647
|
-
:type data: NDArray[Float64]
|
646
|
+
:type data: NDArray[Shape["*"], Float64]
|
648
647
|
:param sampling_rate: board's sampling rate
|
649
648
|
:type sampling_rate: int
|
650
649
|
:param start_freq: start frequency
|
@@ -669,12 +668,12 @@ class DataFilter(object):
|
|
669
668
|
raise BrainFlowError('unable to apply band pass filter', res)
|
670
669
|
|
671
670
|
@classmethod
|
672
|
-
def perform_bandstop(cls, data
|
671
|
+
def perform_bandstop(cls, data, sampling_rate: int, start_freq: float,
|
673
672
|
stop_freq: float, order: int, filter_type: int, ripple: float) -> None:
|
674
673
|
"""apply band stop filter to provided data
|
675
674
|
|
676
675
|
:param data: data to filter, filter works in-place
|
677
|
-
:type data: NDArray[Float64]
|
676
|
+
:type data: NDArray[Shape["*"], Float64]
|
678
677
|
:param sampling_rate: board's sampling rate
|
679
678
|
:type sampling_rate: int
|
680
679
|
:param start_freq: start frequency
|
@@ -699,11 +698,11 @@ class DataFilter(object):
|
|
699
698
|
raise BrainFlowError('unable to apply band stop filter', res)
|
700
699
|
|
701
700
|
@classmethod
|
702
|
-
def remove_environmental_noise(cls, data
|
701
|
+
def remove_environmental_noise(cls, data, sampling_rate: int, noise_type: float) -> None:
|
703
702
|
"""remove env noise using notch filter
|
704
703
|
|
705
704
|
:param data: data to filter, filter works in-place
|
706
|
-
:type data: NDArray[Float64]
|
705
|
+
:type data: NDArray[Shape["*"], Float64]
|
707
706
|
:param sampling_rate: board's sampling rate
|
708
707
|
:type sampling_rate: int
|
709
708
|
:param noise_type: noise type
|
@@ -719,11 +718,11 @@ class DataFilter(object):
|
|
719
718
|
raise BrainFlowError('unable to apply notch filter', res)
|
720
719
|
|
721
720
|
@classmethod
|
722
|
-
def perform_rolling_filter(cls, data
|
721
|
+
def perform_rolling_filter(cls, data, period: int, operation: int) -> None:
|
723
722
|
"""smooth data using moving average or median
|
724
723
|
|
725
724
|
:param data: data to smooth, it works in-place
|
726
|
-
:type data: NDArray[Float64]
|
725
|
+
:type data: NDArray[Shape["*"], Float64]
|
727
726
|
:param period: window size
|
728
727
|
:type period: int
|
729
728
|
:param operation: int value from AggOperation enum
|
@@ -739,11 +738,11 @@ class DataFilter(object):
|
|
739
738
|
raise BrainFlowError('unable to smooth data', res)
|
740
739
|
|
741
740
|
@classmethod
|
742
|
-
def calc_stddev(cls, data
|
741
|
+
def calc_stddev(cls, data):
|
743
742
|
"""calc stddev
|
744
743
|
|
745
744
|
:param data: input array
|
746
|
-
:type data: NDArray[Float64]
|
745
|
+
:type data: NDArray[Shape["*"], Float64]
|
747
746
|
:return: stddev
|
748
747
|
:rtype: float
|
749
748
|
"""
|
@@ -755,11 +754,11 @@ class DataFilter(object):
|
|
755
754
|
return output[0]
|
756
755
|
|
757
756
|
@classmethod
|
758
|
-
def get_railed_percentage(cls, data
|
757
|
+
def get_railed_percentage(cls, data, gain: int):
|
759
758
|
"""get railed percentage
|
760
759
|
|
761
760
|
:param data: input array
|
762
|
-
:type data: NDArray[Float64]
|
761
|
+
:type data: NDArray[Shape["*"], Float64]
|
763
762
|
:param gain: gain
|
764
763
|
:type gain: int
|
765
764
|
:return: railed percentage
|
@@ -773,14 +772,14 @@ class DataFilter(object):
|
|
773
772
|
return output[0]
|
774
773
|
|
775
774
|
@classmethod
|
776
|
-
def get_oxygen_level(cls, ppg_ir
|
775
|
+
def get_oxygen_level(cls, ppg_ir, ppg_red, sampling_rate: int,
|
777
776
|
coef1=1.5958422, coef2=-34.6596622, coef3=112.6898759):
|
778
777
|
"""get oxygen level from ppg
|
779
778
|
|
780
779
|
:param ppg_ir: input array
|
781
|
-
:type ppg_ir: NDArray[Float64]
|
780
|
+
:type ppg_ir: NDArray[Shape["*"], Float64]
|
782
781
|
:param ppg_red: input array
|
783
|
-
:type ppg_red: NDArray[Float64]
|
782
|
+
:type ppg_red: NDArray[Shape["*"], Float64]
|
784
783
|
:param sampling_rate: sampling rate
|
785
784
|
:type sampling_rate: int
|
786
785
|
:return: oxygen level
|
@@ -798,13 +797,13 @@ class DataFilter(object):
|
|
798
797
|
return output[0]
|
799
798
|
|
800
799
|
@classmethod
|
801
|
-
def get_heart_rate(cls, ppg_ir
|
800
|
+
def get_heart_rate(cls, ppg_ir, ppg_red, sampling_rate: int, fft_size: int):
|
802
801
|
"""get heart rate
|
803
802
|
|
804
803
|
:param ppg_ir: input array
|
805
|
-
:type ppg_ir: NDArray[Float64]
|
804
|
+
:type ppg_ir: NDArray[Shape["*"], Float64]
|
806
805
|
:param ppg_red: input array
|
807
|
-
:type ppg_red: NDArray[Float64]
|
806
|
+
:type ppg_red: NDArray[Shape["*"], Float64]
|
808
807
|
:param sampling_rate: sampling rate
|
809
808
|
:type sampling_rate: int
|
810
809
|
:param fft_size: recommended 8192
|
@@ -824,17 +823,17 @@ class DataFilter(object):
|
|
824
823
|
return output[0]
|
825
824
|
|
826
825
|
@classmethod
|
827
|
-
def perform_downsampling(cls, data
|
826
|
+
def perform_downsampling(cls, data, period: int, operation: int):
|
828
827
|
"""perform data downsampling, it doesnt apply lowpass filter for you, it just aggregates several data points
|
829
828
|
|
830
829
|
:param data: initial data
|
831
|
-
:type data: NDArray[Float64]
|
830
|
+
:type data: NDArray[Shape["*"], Float64]
|
832
831
|
:param period: downsampling period
|
833
832
|
:type period: int
|
834
833
|
:param operation: int value from AggOperation enum
|
835
834
|
:type operation: int
|
836
835
|
:return: downsampled data
|
837
|
-
:rtype: NDArray[Float64]
|
836
|
+
:rtype: NDArray[Shape["*"], Float64]
|
838
837
|
"""
|
839
838
|
check_memory_layout_row_major(data, 1)
|
840
839
|
if not isinstance(period, int):
|
@@ -853,12 +852,12 @@ class DataFilter(object):
|
|
853
852
|
return downsampled_data
|
854
853
|
|
855
854
|
@classmethod
|
856
|
-
def perform_wavelet_transform(cls, data
|
855
|
+
def perform_wavelet_transform(cls, data, wavelet: int, decomposition_level: int,
|
857
856
|
extension_type=WaveletExtensionTypes.SYMMETRIC) -> Tuple:
|
858
857
|
"""perform wavelet transform
|
859
858
|
|
860
859
|
:param data: initial data
|
861
|
-
:type data: NDArray[Float64]
|
860
|
+
:type data: NDArray[Shape["*"], Float64]
|
862
861
|
:param wavelet: use WaveletTypes enum
|
863
862
|
:type wavelet: int
|
864
863
|
:param decomposition_level: level of decomposition
|
@@ -881,11 +880,11 @@ class DataFilter(object):
|
|
881
880
|
return wavelet_coeffs[0: sum(lengths)], lengths
|
882
881
|
|
883
882
|
@classmethod
|
884
|
-
def restore_data_from_wavelet_detailed_coeffs(cls, data
|
883
|
+
def restore_data_from_wavelet_detailed_coeffs(cls, data, wavelet, decomposition_level, level_to_restore):
|
885
884
|
"""restore data from a single wavelet coeff
|
886
885
|
|
887
886
|
:param data: initial data
|
888
|
-
:type data: NDArray[Float64]
|
887
|
+
:type data: NDArray[Shape["*"], Float64]
|
889
888
|
:param wavelet: use WaveletTypes enum
|
890
889
|
:type wavelet: int
|
891
890
|
:param decomposition_level: level of decomposition
|
@@ -893,7 +892,7 @@ class DataFilter(object):
|
|
893
892
|
:param level_to_restore: level of coeffs
|
894
893
|
:type level_to_restore: int
|
895
894
|
:return:
|
896
|
-
:rtype: NDArray[Float64]
|
895
|
+
:rtype: NDArray[Shape["*"], Float64]
|
897
896
|
"""
|
898
897
|
check_memory_layout_row_major(data, 1)
|
899
898
|
|
@@ -906,11 +905,11 @@ class DataFilter(object):
|
|
906
905
|
return output
|
907
906
|
|
908
907
|
@classmethod
|
909
|
-
def detect_peaks_z_score(cls, data
|
908
|
+
def detect_peaks_z_score(cls, data, lag=5, threshold=3.5, influence=0.1):
|
910
909
|
"""z score algorithm for peak detection
|
911
910
|
|
912
911
|
:param data: initial data
|
913
|
-
:type data: NDArray[Float64]
|
912
|
+
:type data: NDArray[Shape["*"], Float64]
|
914
913
|
:param lag: window size for averaging
|
915
914
|
:type lag: int
|
916
915
|
:param threshold: in stddev units
|
@@ -918,7 +917,7 @@ class DataFilter(object):
|
|
918
917
|
:param influence: contribution of peaks to mean value, between 0 and 1
|
919
918
|
:type influence: float
|
920
919
|
:return:
|
921
|
-
:rtype: NDArray[Float64]
|
920
|
+
:rtype: NDArray[Shape["*"], Float64]
|
922
921
|
"""
|
923
922
|
check_memory_layout_row_major(data, 1)
|
924
923
|
|
@@ -932,8 +931,7 @@ class DataFilter(object):
|
|
932
931
|
|
933
932
|
@classmethod
|
934
933
|
def perform_inverse_wavelet_transform(cls, wavelet_output: Tuple, original_data_len: int, wavelet: int,
|
935
|
-
decomposition_level: int, extension_type=WaveletExtensionTypes.SYMMETRIC)
|
936
|
-
NDArray[Float64]:
|
934
|
+
decomposition_level: int, extension_type=WaveletExtensionTypes.SYMMETRIC):
|
937
935
|
"""perform wavelet transform
|
938
936
|
|
939
937
|
:param wavelet_output: tuple of wavelet_coeffs and array with lengths
|
@@ -947,7 +945,7 @@ class DataFilter(object):
|
|
947
945
|
:param extension_type: extension type, use WaveletExtensionTypes
|
948
946
|
:type externsion_type: int
|
949
947
|
:return: restored data
|
950
|
-
:rtype: NDArray[Float64]
|
948
|
+
:rtype: NDArray[Shape["*"], Float64]
|
951
949
|
"""
|
952
950
|
original_data = numpy.zeros(original_data_len).astype(numpy.float64)
|
953
951
|
res = DataHandlerDLL.get_instance().perform_inverse_wavelet_transform(wavelet_output[0], original_data_len,
|
@@ -960,7 +958,7 @@ class DataFilter(object):
|
|
960
958
|
return original_data
|
961
959
|
|
962
960
|
@classmethod
|
963
|
-
def perform_wavelet_denoising(cls, data
|
961
|
+
def perform_wavelet_denoising(cls, data, wavelet: int, decomposition_level: int,
|
964
962
|
wavelet_denoising=WaveletDenoisingTypes.SURESHRINK,
|
965
963
|
threshold=ThresholdTypes.HARD,
|
966
964
|
extension_type=WaveletExtensionTypes.SYMMETRIC,
|
@@ -968,7 +966,7 @@ class DataFilter(object):
|
|
968
966
|
"""perform wavelet denoising
|
969
967
|
|
970
968
|
:param data: data to denoise
|
971
|
-
:type data: NDArray[Float64]
|
969
|
+
:type data: NDArray[Shape["*"], Float64]
|
972
970
|
:param wavelet: use WaveletTypes enum
|
973
971
|
:type wavelet: int
|
974
972
|
:param decomposition_level: decomposition level
|
@@ -991,13 +989,13 @@ class DataFilter(object):
|
|
991
989
|
raise BrainFlowError('unable to denoise data', res)
|
992
990
|
|
993
991
|
@classmethod
|
994
|
-
def get_csp(cls, data
|
992
|
+
def get_csp(cls, data, labels) -> Tuple:
|
995
993
|
"""calculate filters and the corresponding eigenvalues using the Common Spatial Patterns
|
996
994
|
|
997
995
|
:param data: [epochs x channels x times]-shaped 3D array of data for two classes
|
998
|
-
:type data: NDArray[Float64]
|
996
|
+
:type data: NDArray[Shape["*, *, *"], Float64]
|
999
997
|
:param labels: n_epochs-length 1D array of zeros and ones that assigns class labels for each epoch. Zero corresponds to the first class
|
1000
|
-
:type labels: NDArray[
|
998
|
+
:type labels: NDArray[Shape["*"], Float64]
|
1001
999
|
:return: [channels x channels]-shaped 2D array of filters and [channels]-length 1D array of the corresponding eigenvalues
|
1002
1000
|
:rtype: Tuple
|
1003
1001
|
"""
|
@@ -1024,14 +1022,14 @@ class DataFilter(object):
|
|
1024
1022
|
return output_filters, output_eigenvalues
|
1025
1023
|
|
1026
1024
|
@classmethod
|
1027
|
-
def get_window(cls, window_function: int, window_len: int)
|
1025
|
+
def get_window(cls, window_function: int, window_len: int):
|
1028
1026
|
"""perform data windowing
|
1029
1027
|
|
1030
1028
|
:param window_function: window function
|
1031
1029
|
:type window: int
|
1032
1030
|
:param window_len: len of the window function
|
1033
1031
|
:return: numpy array, len of the array is the same as data
|
1034
|
-
:rtype: NDArray[Float64]
|
1032
|
+
:rtype: NDArray[Shape["*"], Float64]
|
1035
1033
|
"""
|
1036
1034
|
window_data = numpy.zeros(int(window_len)).astype(numpy.float64)
|
1037
1035
|
res = DataHandlerDLL.get_instance().get_window(window_function, window_len, window_data)
|
@@ -1041,15 +1039,15 @@ class DataFilter(object):
|
|
1041
1039
|
return window_data
|
1042
1040
|
|
1043
1041
|
@classmethod
|
1044
|
-
def perform_fft(cls, data
|
1042
|
+
def perform_fft(cls, data, window: int):
|
1045
1043
|
"""perform direct fft
|
1046
1044
|
|
1047
1045
|
:param data: data for fft, len of data must be even
|
1048
|
-
:type data: NDArray[Float64]
|
1046
|
+
:type data: NDArray[Shape["*"], Float64]
|
1049
1047
|
:param window: window function
|
1050
1048
|
:type window: int
|
1051
1049
|
:return: numpy array of complex values, len of this array is N / 2 + 1
|
1052
|
-
:rtype: NDArray[Complex128]
|
1050
|
+
:rtype: NDArray[Shape["*"], Complex128]
|
1053
1051
|
"""
|
1054
1052
|
|
1055
1053
|
check_memory_layout_row_major(data, 1)
|
@@ -1067,11 +1065,11 @@ class DataFilter(object):
|
|
1067
1065
|
return output
|
1068
1066
|
|
1069
1067
|
@classmethod
|
1070
|
-
def get_psd(cls, data
|
1068
|
+
def get_psd(cls, data, sampling_rate: int, window: int) -> Tuple:
|
1071
1069
|
"""calculate PSD
|
1072
1070
|
|
1073
1071
|
:param data: data to calc psd, len of data must be even
|
1074
|
-
:type data: NDArray[Float64]
|
1072
|
+
:type data: NDArray[Shape["*"], Float64]
|
1075
1073
|
:param sampling_rate: sampling rate
|
1076
1074
|
:type sampling_rate: int
|
1077
1075
|
:param window: window function
|
@@ -1091,11 +1089,11 @@ class DataFilter(object):
|
|
1091
1089
|
return ampls, freqs
|
1092
1090
|
|
1093
1091
|
@classmethod
|
1094
|
-
def get_psd_welch(cls, data
|
1092
|
+
def get_psd_welch(cls, data, nfft: int, overlap: int, sampling_rate: int, window: int) -> Tuple:
|
1095
1093
|
"""calculate PSD using Welch method
|
1096
1094
|
|
1097
1095
|
:param data: data to calc psd
|
1098
|
-
:type data: NDArray[Float64]
|
1096
|
+
:type data: NDArray[Shape["*"], Float64]
|
1099
1097
|
:param nfft: FFT Window size, must be even
|
1100
1098
|
:type nfft: int
|
1101
1099
|
:param overlap: overlap of FFT Windows, must be between 0 and nfft
|
@@ -1120,11 +1118,11 @@ class DataFilter(object):
|
|
1120
1118
|
return ampls, freqs
|
1121
1119
|
|
1122
1120
|
@classmethod
|
1123
|
-
def detrend(cls, data
|
1121
|
+
def detrend(cls, data, detrend_operation: int) -> None:
|
1124
1122
|
"""detrend data
|
1125
1123
|
|
1126
1124
|
:param data: data to calc psd
|
1127
|
-
:type data: NDArray[Float64]
|
1125
|
+
:type data: NDArray[Shape["*"], Float64]
|
1128
1126
|
:param detrend_operation: Type of detrend operation
|
1129
1127
|
:type detrend_operation: int
|
1130
1128
|
"""
|
@@ -1156,11 +1154,11 @@ class DataFilter(object):
|
|
1156
1154
|
return band_power[0]
|
1157
1155
|
|
1158
1156
|
@classmethod
|
1159
|
-
def get_avg_band_powers(cls, data
|
1157
|
+
def get_avg_band_powers(cls, data, channels: List, sampling_rate: int, apply_filter: bool) -> Tuple:
|
1160
1158
|
"""calculate avg and stddev of BandPowers across all channels, bands are 1-4,4-8,8-13,13-30,30-50
|
1161
1159
|
|
1162
1160
|
:param data: 2d array for calculation
|
1163
|
-
:type data: NDArray
|
1161
|
+
:type data: NDArray[Shape["*, *"], Float64]
|
1164
1162
|
:param channels: channels - rows of data array which should be used for calculation
|
1165
1163
|
:type channels: List
|
1166
1164
|
:param sampling_rate: sampling rate
|
@@ -1175,12 +1173,12 @@ class DataFilter(object):
|
|
1175
1173
|
return cls.get_custom_band_powers(data, bands, channels, sampling_rate, apply_filter)
|
1176
1174
|
|
1177
1175
|
@classmethod
|
1178
|
-
def get_custom_band_powers(cls, data
|
1176
|
+
def get_custom_band_powers(cls, data, bands: List, channels: List, sampling_rate: int,
|
1179
1177
|
apply_filter: bool) -> Tuple:
|
1180
1178
|
"""calculate avg and stddev of BandPowers across selected channels
|
1181
1179
|
|
1182
1180
|
:param data: 2d array for calculation
|
1183
|
-
:type data: NDArray
|
1181
|
+
:type data: NDArray[Shape["*, *"], Float64]
|
1184
1182
|
:param bands: List of typles with bands to use. E.g [(1.5, 4.0), (4.0, 8.0), (8.0, 13.0), (13.0, 30.0), (30.0, 45.0)]
|
1185
1183
|
:type bands: List
|
1186
1184
|
:param channels: channels - rows of data array which should be used for calculation
|
@@ -1218,11 +1216,11 @@ class DataFilter(object):
|
|
1218
1216
|
return avg_bands, stddev_bands
|
1219
1217
|
|
1220
1218
|
@classmethod
|
1221
|
-
def perform_ica(cls, data
|
1219
|
+
def perform_ica(cls, data, num_components: int, channels=None) -> Tuple:
|
1222
1220
|
"""perform ICA
|
1223
1221
|
|
1224
1222
|
:param data: 2d array for calculation
|
1225
|
-
:type data: NDArray
|
1223
|
+
:type data: NDArray[Shape["*, *"], Float64]
|
1226
1224
|
:param num_components: number of components
|
1227
1225
|
:type num_components: int
|
1228
1226
|
:param channels: channels - rows of data array which should be used for calculation, if None use all
|
@@ -1265,13 +1263,13 @@ class DataFilter(object):
|
|
1265
1263
|
return w, k, a, s
|
1266
1264
|
|
1267
1265
|
@classmethod
|
1268
|
-
def perform_ifft(cls, data
|
1266
|
+
def perform_ifft(cls, data):
|
1269
1267
|
"""perform inverse fft
|
1270
1268
|
|
1271
1269
|
:param data: data from fft
|
1272
|
-
:type data: NDArray[Complex128]
|
1270
|
+
:type data: NDArray[Shape["*"], Complex128]
|
1273
1271
|
:return: restored data
|
1274
|
-
:rtype: NDArray[Float64]
|
1272
|
+
:rtype: NDArray[Shape["*"], Float64]
|
1275
1273
|
"""
|
1276
1274
|
temp_re = numpy.zeros(data.shape[0]).astype(numpy.float64)
|
1277
1275
|
temp_im = numpy.zeros(data.shape[0]).astype(numpy.float64)
|
@@ -1307,7 +1305,7 @@ class DataFilter(object):
|
|
1307
1305
|
"""write data to file, in file data will be transposed
|
1308
1306
|
|
1309
1307
|
:param data: data to store in a file
|
1310
|
-
:type data:
|
1308
|
+
:type data: NDArray[Shape["*, *"], Float64]
|
1311
1309
|
:param file_name: file name to store data
|
1312
1310
|
:type file_name: str
|
1313
1311
|
:param file_mode: 'w' to rewrite file or 'a' to append data to file
|
@@ -1335,7 +1333,7 @@ class DataFilter(object):
|
|
1335
1333
|
:param file_name: file name to read
|
1336
1334
|
:type file_name: str
|
1337
1335
|
:return: 2d numpy array with data from this file, data will be transposed to original dimensions
|
1338
|
-
:rtype:
|
1336
|
+
:rtype: NDArray[Shape["*, *"], Float64]
|
1339
1337
|
"""
|
1340
1338
|
try:
|
1341
1339
|
file = file_name.encode()
|
Binary file
|
Binary file
|
brainflow/lib/BrainBitLib.dll
CHANGED
Binary file
|
brainflow/lib/BrainBitLib32.dll
CHANGED
Binary file
|
Binary file
|
Binary file
|
brainflow/lib/DataHandler.dll
CHANGED
Binary file
|
brainflow/lib/DataHandler32.dll
CHANGED
Binary file
|
brainflow/lib/GanglionLib.dll
CHANGED
Binary file
|
brainflow/lib/GanglionLib32.dll
CHANGED
Binary file
|
brainflow/lib/MLModule.dll
CHANGED
Binary file
|
brainflow/lib/MuseLib.dll
CHANGED
Binary file
|
brainflow/lib/MuseLib32.dll
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
brainflow/lib/libBrainBitLib.so
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
brainflow/lib/libDataHandler.so
CHANGED
Binary file
|
Binary file
|
brainflow/lib/libGanglionLib.so
CHANGED
Binary file
|
brainflow/lib/libMLModule.dylib
CHANGED
Binary file
|
brainflow/lib/libMLModule.so
CHANGED
Binary file
|
brainflow/lib/libMuseLib.dylib
CHANGED
Binary file
|
brainflow/lib/libMuseLib.so
CHANGED
Binary file
|
Binary file
|
brainflow/lib/libsimpleble-c.so
CHANGED
Binary file
|
brainflow/lib/simpleble-c.dll
CHANGED
Binary file
|
brainflow/lib/simpleble-c32.dll
CHANGED
Binary file
|
brainflow/ml_model.py
CHANGED
@@ -10,7 +10,6 @@ import numpy
|
|
10
10
|
import pkg_resources
|
11
11
|
from brainflow.board_shim import BrainFlowError, LogLevels
|
12
12
|
from brainflow.exit_codes import BrainFlowExitCodes
|
13
|
-
from nptyping import NDArray
|
14
13
|
from numpy.ctypeslib import ndpointer
|
15
14
|
|
16
15
|
|
@@ -262,11 +261,11 @@ class MLModel(object):
|
|
262
261
|
if res != BrainFlowExitCodes.STATUS_OK.value:
|
263
262
|
raise BrainFlowError('unable to release classifier', res)
|
264
263
|
|
265
|
-
def predict(self, data
|
264
|
+
def predict(self, data) -> List:
|
266
265
|
"""calculate metric from data
|
267
266
|
|
268
267
|
:param data: input array
|
269
|
-
:type data: NDArray
|
268
|
+
:type data: NDArray[Shape["*"], Float64]
|
270
269
|
:return: metric value
|
271
270
|
:rtype: List
|
272
271
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: brainflow
|
3
|
-
Version: 5.
|
3
|
+
Version: 5.13.0
|
4
4
|
Summary: Python Binding for BrainFlow
|
5
5
|
Home-page: https://github.com/brainflow-dev/brainflow
|
6
6
|
Author: Andrey Parfenov
|
@@ -11,7 +11,7 @@ Requires-Python: >=3.5.6
|
|
11
11
|
Description-Content-Type: text/markdown
|
12
12
|
License-File: LICENSE.txt
|
13
13
|
Requires-Dist: numpy
|
14
|
-
Requires-Dist:
|
14
|
+
Requires-Dist: setuptools
|
15
15
|
|
16
16
|
<p align="center">
|
17
17
|
<img width="400" height="160" src="https://live.staticflickr.com/65535/49908747533_f359f83610_w.jpg">
|
@@ -0,0 +1,60 @@
|
|
1
|
+
brainflow/__init__.py,sha256=hLPUIdLE5O5phuo-Er2-Tyu2lGvuRL4bgDbWptWlF8s,172
|
2
|
+
brainflow/board_shim.py,sha256=5o_o7MfDJQpCOmSdMGW_WFLDoVELOihq6Bj_NnAEhV8,56930
|
3
|
+
brainflow/data_filter.py,sha256=2oWE54olofGOpF7-2aIGYcMoJUzbN-GCw6RLK4piZRY,56269
|
4
|
+
brainflow/exit_codes.py,sha256=1Epnek2ZCvpStluIpwyR_ReFAX8CRp-tyfCV_DfzBEw,1449
|
5
|
+
brainflow/ml_model.py,sha256=T1RIoFEXZ1cTOb40PyL79pTCdERU5kOKYlJN4DyhvAo,10000
|
6
|
+
brainflow/utils.py,sha256=lIkavPF0SuzGpsqxoJohyxmSdffyR8lHZzIBDiWIdPk,995
|
7
|
+
brainflow/lib/BoardController.dll,sha256=VtOhxGxLW7m8u85gWyeB0ead9ELMuSQ9WJb2MgL-GqM,1823744
|
8
|
+
brainflow/lib/BoardController32.dll,sha256=vnMxFjkJOFaU2ndrrOlo1BE0rp7f4yJMYdHZMQpxU6Y,1552384
|
9
|
+
brainflow/lib/BrainBitLib.dll,sha256=v-lCpl2xGKGqLKTKrXudSxhRnNdbS5rdFQsqr29Lqu0,202240
|
10
|
+
brainflow/lib/BrainBitLib32.dll,sha256=lHrT8fyojOyk4-UTcdJnf-StAXifGJoRVmtzZdBtRVs,156160
|
11
|
+
brainflow/lib/BrainFlowBluetooth.dll,sha256=vJYdR8XzyvlMF_e-QPA_Ly_vWIePZJNvLc7cVW0u_Jo,459264
|
12
|
+
brainflow/lib/BrainFlowBluetooth32.dll,sha256=LUlQRKP9l5KYaJfvChTbDve7wI_qUTy9uTsyUJ-t9rU,337408
|
13
|
+
brainflow/lib/DataHandler.dll,sha256=CluEPBzuSV11B-bSc2Wb6dW1xaAelYFjlsbCohY1yIk,999424
|
14
|
+
brainflow/lib/DataHandler32.dll,sha256=Gr5yStvTUJuQDKnRt4ZLzYB4_XLS1mo3Bc6W0a1J5gw,807424
|
15
|
+
brainflow/lib/GanglionLib.dll,sha256=uiWJFpq-RhCk957M6JOICCHFBF10oPYVWzKoVWNrcX0,197632
|
16
|
+
brainflow/lib/GanglionLib32.dll,sha256=h_YFHvfhGM6Tiw_oSIpyb2-MNhyahmt6OvPRB3b1viU,152576
|
17
|
+
brainflow/lib/MLModule.dll,sha256=LNO9LXAJsN_3kl24ySOPCdqNLdP2x1SGGcbcWvJX5g8,435712
|
18
|
+
brainflow/lib/MuseLib.dll,sha256=f3T8qz73YXWa7daJGXPw9newWUkCyB7B5Bjl8uzEMYQ,215552
|
19
|
+
brainflow/lib/MuseLib32.dll,sha256=nQiKTZl8g9Xd8g_oyzzXKlQv1mc4vLBA7ehUePTs3hc,167936
|
20
|
+
brainflow/lib/Unicorn.dll,sha256=0-4uNSkVrBI6-CM0OkmqV96L6Uc31iJ7Xb7qK_XzNUY,174080
|
21
|
+
brainflow/lib/eego-SDK.dll,sha256=_iLR51S5VFNA7R9XoqFrjqAaGZrEvI0oxqCdOGi-mAk,683520
|
22
|
+
brainflow/lib/eego-SDK32.dll,sha256=xbMG7bdTjM4D-BcRwignaPUiGn5B1ZM2eIn7x9u2YPI,590336
|
23
|
+
brainflow/lib/gForceSDKWrapper.dll,sha256=idDwREnBpU8ZLdFst1zvybJ3Y9DlNjNzyBcHr75sNI4,291328
|
24
|
+
brainflow/lib/gForceSDKWrapper32.dll,sha256=XBqUTeJhZenpViF1hmq4_E7mLBxip2Nls6tG9UKmigc,227840
|
25
|
+
brainflow/lib/gforce32.dll,sha256=-i5O7sQS0oETjtXXMvVn4zL7wmj2xUET_blIIgyZ3FQ,278528
|
26
|
+
brainflow/lib/gforce64.dll,sha256=xkyFG6ZqNMtrmsI6Vgv1rpmS8bPCBIDZmGfypUMTldE,343040
|
27
|
+
brainflow/lib/libBoardController.dylib,sha256=RwXkmfVZhbtqjZa1gWS543mxeZ7Dd7GFBIW1KxiwCPg,3355813
|
28
|
+
brainflow/lib/libBoardController.so,sha256=Q0C2OmRE7urufi565Gn8aIywaDKh88j2EsLbFuttY8Q,2138520
|
29
|
+
brainflow/lib/libBrainBitLib.dylib,sha256=HwQWSEYhep_TkcGeTchrgSKfnU7HZTYzSwAN-b5hANE,162721
|
30
|
+
brainflow/lib/libBrainBitLib.so,sha256=65fjs6SWRO3iTWElbsoIHes3kUgHq461mDLTUwUEo3M,73680
|
31
|
+
brainflow/lib/libBrainFlowBluetooth.dylib,sha256=2i7sGSnQ88YjmIlbBjsptHKtLVa4WtvLdBMzZklY4sg,199976
|
32
|
+
brainflow/lib/libBrainFlowBluetooth.so,sha256=o6TYK5bOGg6CBDgwQHQuWrihSjG2ZEmwhdgXLAykihM,34848
|
33
|
+
brainflow/lib/libDataHandler.dylib,sha256=qs1O4XXB_hp-29OsW2RdwwhVzviZDAYdN6lG1PNeqAw,2257105
|
34
|
+
brainflow/lib/libDataHandler.so,sha256=i3PFqIFIA_QpKjpC1wsMzDOhMXyMWC-sqLK0eE8Fa1A,1002080
|
35
|
+
brainflow/lib/libGanglionLib.dylib,sha256=VvSOg7klhGLiNydXUDoDZg7NUB0Req1tUhkNHDdiBFo,145537
|
36
|
+
brainflow/lib/libGanglionLib.so,sha256=AEXndZBEf4PdgzYcTmKl5klJaxFYOv_XVYbMUmmir2E,64176
|
37
|
+
brainflow/lib/libMLModule.dylib,sha256=dhgbE9o8SD-9DL7aR8JG_tRUEtyd3aAmsKKBxwFWDfE,730142
|
38
|
+
brainflow/lib/libMLModule.so,sha256=uRA9MWHIeaYW6H_XdhLE2p2MzGeACRxO3-LTRm40yVc,361792
|
39
|
+
brainflow/lib/libMuseLib.dylib,sha256=IYzzf95ZhRBaUYNcnpJaJiNZs7SDa_kkfXpKleAderM,241773
|
40
|
+
brainflow/lib/libMuseLib.so,sha256=VguDdYVWxXXET_WG-exxrVafqtArPYLq0N_uj61zxWA,143728
|
41
|
+
brainflow/lib/libeego-SDK.so,sha256=iChntYTOtSxbErwnZDARX_soyQtQiE7mhQc9-uRzqUs,1108192
|
42
|
+
brainflow/lib/libneurosdk-shared.dylib,sha256=u8tqrSXOfUBJ6Ln6qOnhkQsCU_ATNt28ujE901hchCM,4508910
|
43
|
+
brainflow/lib/libonnxruntime_x64.dylib,sha256=m0-DSzRR39Y3-5rrIAWPNKxlQK6QNKmyj-fc2kyCLLM,20919840
|
44
|
+
brainflow/lib/libonnxruntime_x64.so,sha256=SwQQpIw-nofytM-eg7Iub53obG_0jAcFjpQ2MYF8vCo,15086128
|
45
|
+
brainflow/lib/libsimpleble-c.dylib,sha256=4lcHC7PyxB_dkcUJ7YLXNnYHlzXUuHY2z_6P-jhYg5o,940977
|
46
|
+
brainflow/lib/libsimpleble-c.so,sha256=7zcU9a-h-VTR3dmsRc4VSiQy19fNexO81LwtN1vtRDM,1090024
|
47
|
+
brainflow/lib/libunicorn.so,sha256=dd92CvGljHYJjPPRKp9RhIaecF0papaH7XvOYSTNGjw,103872
|
48
|
+
brainflow/lib/libunicorn_raspberry.so,sha256=HbD94odtlROBLhrWfvu_irUNVuuMJ8LEeCHLDE_7rp8,87728
|
49
|
+
brainflow/lib/neurosdk-x64.dll,sha256=gRDzloZLQG6ZKmVHztxfGtCODOS4mZ9m0L1bNBWdi0U,1137664
|
50
|
+
brainflow/lib/neurosdk-x86.dll,sha256=Z7m1WAcJTel1Adk3ttue6t8Q8gezu6EpOzPvjZ-IaBs,949760
|
51
|
+
brainflow/lib/onnxruntime_x64.dll,sha256=HSiLxc-ICCXpquTJIXeZ0JIlfca-KxCU02GpXVMqAJo,7900072
|
52
|
+
brainflow/lib/onnxruntime_x86.dll,sha256=IlnyXK8HDCKiSJgf1UAQg5QPJhXfstzc9fKoS2M-bfI,6950312
|
53
|
+
brainflow/lib/simpleble-c.dll,sha256=ze58l_YE12TTec_fmZKlnlMIMiAVga89wn98taZka8U,557056
|
54
|
+
brainflow/lib/simpleble-c32.dll,sha256=rkGqCCADIGwtrysToSuWEZ5Y_TbxJ2u7Lj906s51qfU,452096
|
55
|
+
brainflow-5.13.0.dist-info/LICENSE.txt,sha256=7pv76HozF_6Ha-gVQGgYSCJb68NvP3WVwI4XA-CHZ1Y,1093
|
56
|
+
brainflow-5.13.0.dist-info/METADATA,sha256=1o4gXkqMQpQyfIr7Q0ruC1S9AYDvL5kNLqeZ9V0oY10,5736
|
57
|
+
brainflow-5.13.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
58
|
+
brainflow-5.13.0.dist-info/top_level.txt,sha256=7GjJ0gopuPbhviU8h2x0BXpiJzpS-qrJMe0vnwAFTwA,10
|
59
|
+
brainflow-5.13.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
60
|
+
brainflow-5.13.0.dist-info/RECORD,,
|
@@ -1,60 +0,0 @@
|
|
1
|
-
brainflow/__init__.py,sha256=hLPUIdLE5O5phuo-Er2-Tyu2lGvuRL4bgDbWptWlF8s,172
|
2
|
-
brainflow/board_shim.py,sha256=xdfFoGJS5Af7TtH1UMk7Ax0dtA-6cRgC5r2_YsVO7Z8,56867
|
3
|
-
brainflow/data_filter.py,sha256=0EENmJGDcar-vjjveymVxqIyXcCMyptuBupI_FiuM2c,56415
|
4
|
-
brainflow/exit_codes.py,sha256=1Epnek2ZCvpStluIpwyR_ReFAX8CRp-tyfCV_DfzBEw,1449
|
5
|
-
brainflow/ml_model.py,sha256=dnKwWznjK44hjJGTnIeYQK_wfJNJy73TGEpoIGBaKMk,10018
|
6
|
-
brainflow/utils.py,sha256=lIkavPF0SuzGpsqxoJohyxmSdffyR8lHZzIBDiWIdPk,995
|
7
|
-
brainflow/lib/BoardController.dll,sha256=SuJRhNR5wX_UaSu2iNV5Fwyvg3mao7wSGlBF1fBBL70,1826304
|
8
|
-
brainflow/lib/BoardController32.dll,sha256=EyvgLYQ1myfFJdFUpgffkXNIZHMYutZRX6BZH3umlJc,1544704
|
9
|
-
brainflow/lib/BrainBitLib.dll,sha256=rTsHOk4jhGXZ7dWup2Sn1N1e6xZC7eAVNK_AcjGIwlM,201728
|
10
|
-
brainflow/lib/BrainBitLib32.dll,sha256=avorI9sPk-o5WN7EIN3m-aed6OvutuUQpm2zqmFbLFk,155136
|
11
|
-
brainflow/lib/BrainFlowBluetooth.dll,sha256=yVV7F5qC_saHDJR96dhS-oY4kQZkgVV8R2JIkcvFmSc,461824
|
12
|
-
brainflow/lib/BrainFlowBluetooth32.dll,sha256=pQrrYLyHKSeq0Udi52vhGpHX4yY2p9RN83h39gZBtyc,335360
|
13
|
-
brainflow/lib/DataHandler.dll,sha256=Np5pPe2HwcICw3kfMfGJaxs1uHZDjqP6vbDWOMeEmSQ,995328
|
14
|
-
brainflow/lib/DataHandler32.dll,sha256=rYo-ztruurzMyh3WoUWNgdNqY4i8ThavUxV_AZMrR14,805376
|
15
|
-
brainflow/lib/GanglionLib.dll,sha256=Nvk-rVYBdPWHPSEIVqCKIC4h9w7xH3XPRwe5Zrcp8Ks,196608
|
16
|
-
brainflow/lib/GanglionLib32.dll,sha256=Vz8b5eFuAJvbyVrt1w__7Xl5U7yFlCfgtIVt682eYsQ,151552
|
17
|
-
brainflow/lib/MLModule.dll,sha256=8yRChofjBXLibqouHh93mY_cCQxzNzyqfGyxcE95RU0,438272
|
18
|
-
brainflow/lib/MuseLib.dll,sha256=Gjvo4mazgDeRceKfOVbLzf4VTwu-hwcvrtZMRAixRzs,214016
|
19
|
-
brainflow/lib/MuseLib32.dll,sha256=_N2ZDS4Pw-l4tNi9WJ4zDlegRFFultv-Pc6oCNE2vjU,166400
|
20
|
-
brainflow/lib/Unicorn.dll,sha256=0-4uNSkVrBI6-CM0OkmqV96L6Uc31iJ7Xb7qK_XzNUY,174080
|
21
|
-
brainflow/lib/eego-SDK.dll,sha256=_iLR51S5VFNA7R9XoqFrjqAaGZrEvI0oxqCdOGi-mAk,683520
|
22
|
-
brainflow/lib/eego-SDK32.dll,sha256=xbMG7bdTjM4D-BcRwignaPUiGn5B1ZM2eIn7x9u2YPI,590336
|
23
|
-
brainflow/lib/gForceSDKWrapper.dll,sha256=Ap5ywCmbmkwagj6PGYrp08I3dQpag64Pv0Qvcojsczo,291840
|
24
|
-
brainflow/lib/gForceSDKWrapper32.dll,sha256=bhOMQ--Ak1cLS2zUXpCoszJMN5etrT-Y7nRrwv9x2k4,229376
|
25
|
-
brainflow/lib/gforce32.dll,sha256=-i5O7sQS0oETjtXXMvVn4zL7wmj2xUET_blIIgyZ3FQ,278528
|
26
|
-
brainflow/lib/gforce64.dll,sha256=xkyFG6ZqNMtrmsI6Vgv1rpmS8bPCBIDZmGfypUMTldE,343040
|
27
|
-
brainflow/lib/libBoardController.dylib,sha256=CNDUTSfeTfff24P51bp97JwP9qPAJzqD42iW2EReLv0,3264856
|
28
|
-
brainflow/lib/libBoardController.so,sha256=ozm6GBPbdwOZjBlLVTwStq2nzvw9TWhq7x4jSlvaCiw,2320136
|
29
|
-
brainflow/lib/libBrainBitLib.dylib,sha256=tEAFE1k7SZWpLNBZ3_JuM85u_fcG0Sd2xFYNp897DRE,162616
|
30
|
-
brainflow/lib/libBrainBitLib.so,sha256=ItBeU4LCRhUICzrb97BBdo8gc-JhnHgZLVNZrtUKVXI,172360
|
31
|
-
brainflow/lib/libBrainFlowBluetooth.dylib,sha256=Z-SB3Av1z5vEdPM1Xyac5-YAubUteLyim4QysWQtbkA,180568
|
32
|
-
brainflow/lib/libBrainFlowBluetooth.so,sha256=V2bObXlS66F60kfoulmVOg05Hrit-TJkcpuhklcETEM,34408
|
33
|
-
brainflow/lib/libDataHandler.dylib,sha256=RNRZnoAggWEmDxJT2jbXH1chhRBIsn0KsZhNVqvybp0,2176168
|
34
|
-
brainflow/lib/libDataHandler.so,sha256=UW9G1Xjr57QBWMFhWX1nigsriUnYqhEZmrK3qed9-rU,1126160
|
35
|
-
brainflow/lib/libGanglionLib.dylib,sha256=IX6kkCIcQegQrHDXWMvLcPfJd2Px9v9q6PGmb1fAOBE,161960
|
36
|
-
brainflow/lib/libGanglionLib.so,sha256=mfIBIxqIdDg12gRaQlrX_SseShNvVBGPt7Yk_ZhO780,162912
|
37
|
-
brainflow/lib/libMLModule.dylib,sha256=Mf6SGKm8sts0yqaPyAW5V2Sb8FXIaWLev3JVXoCNrNo,713080
|
38
|
-
brainflow/lib/libMLModule.so,sha256=6SQVDl_PUK4Evzit9840drJMHPbc43bvP2P-PoDxG9k,474656
|
39
|
-
brainflow/lib/libMuseLib.dylib,sha256=iHY_tJx0E0XTHC-AsKIeu2pa6kF-qtgahg5eqsnpcmQ,241032
|
40
|
-
brainflow/lib/libMuseLib.so,sha256=V2wLfSZPvipSjEe6VP0OMSHE-WxxAAzUoQybA2sQ45g,245448
|
41
|
-
brainflow/lib/libeego-SDK.so,sha256=iChntYTOtSxbErwnZDARX_soyQtQiE7mhQc9-uRzqUs,1108192
|
42
|
-
brainflow/lib/libneurosdk-shared.dylib,sha256=u8tqrSXOfUBJ6Ln6qOnhkQsCU_ATNt28ujE901hchCM,4508910
|
43
|
-
brainflow/lib/libonnxruntime_x64.dylib,sha256=m0-DSzRR39Y3-5rrIAWPNKxlQK6QNKmyj-fc2kyCLLM,20919840
|
44
|
-
brainflow/lib/libonnxruntime_x64.so,sha256=SwQQpIw-nofytM-eg7Iub53obG_0jAcFjpQ2MYF8vCo,15086128
|
45
|
-
brainflow/lib/libsimpleble-c.dylib,sha256=TWkpnqE991oX82dyQwmdmik_rI8_wR6dJQUBZXX3ngo,919432
|
46
|
-
brainflow/lib/libsimpleble-c.so,sha256=QDt9UOqIS9NDsa5Wc06H3kcPr-QLNTS7ft3aODN14nc,1095432
|
47
|
-
brainflow/lib/libunicorn.so,sha256=dd92CvGljHYJjPPRKp9RhIaecF0papaH7XvOYSTNGjw,103872
|
48
|
-
brainflow/lib/libunicorn_raspberry.so,sha256=HbD94odtlROBLhrWfvu_irUNVuuMJ8LEeCHLDE_7rp8,87728
|
49
|
-
brainflow/lib/neurosdk-x64.dll,sha256=gRDzloZLQG6ZKmVHztxfGtCODOS4mZ9m0L1bNBWdi0U,1137664
|
50
|
-
brainflow/lib/neurosdk-x86.dll,sha256=Z7m1WAcJTel1Adk3ttue6t8Q8gezu6EpOzPvjZ-IaBs,949760
|
51
|
-
brainflow/lib/onnxruntime_x64.dll,sha256=HSiLxc-ICCXpquTJIXeZ0JIlfca-KxCU02GpXVMqAJo,7900072
|
52
|
-
brainflow/lib/onnxruntime_x86.dll,sha256=IlnyXK8HDCKiSJgf1UAQg5QPJhXfstzc9fKoS2M-bfI,6950312
|
53
|
-
brainflow/lib/simpleble-c.dll,sha256=c7QwVvr2IRFaDYTP3rH_yI7uzofTaEujMjnMBm-AaOw,559616
|
54
|
-
brainflow/lib/simpleble-c32.dll,sha256=5yfUa3OPoUdnD7RSc30-KxS6FW073NFH8JeNeGSs7Eo,453632
|
55
|
-
brainflow-5.12.0.dist-info/LICENSE.txt,sha256=7pv76HozF_6Ha-gVQGgYSCJb68NvP3WVwI4XA-CHZ1Y,1093
|
56
|
-
brainflow-5.12.0.dist-info/METADATA,sha256=8ZUBQcvC67G40baBUO5ArK7wBvK_864EodVYwB5_gXg,5742
|
57
|
-
brainflow-5.12.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
58
|
-
brainflow-5.12.0.dist-info/top_level.txt,sha256=7GjJ0gopuPbhviU8h2x0BXpiJzpS-qrJMe0vnwAFTwA,10
|
59
|
-
brainflow-5.12.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
60
|
-
brainflow-5.12.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|