brainflow 5.12.0__py3-none-any.whl → 5.13.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|