def setup_method(self, method): self.results = [ { "rmssd": 30, "sdnn": 52, "sdsd": 30, "nn50": 2, "pnn50": 6, "mrri": 1003, "mhr": 59, }, { "rmssd": 31, "sdnn": 53, "sdsd": 31, "nn50": 3, "pnn50": 7, "mrri": 1004, "mhr": 60, }, ] self.rri_segments = [ RRi([810, 800, 815], time=[1, 2, 3]), RRi([810, 800, 815], time=[4, 5, 6]), ]
def test_rri_describe(self): rri = RRi(FAKE_RRI) rri_descr = rri.describe() assert isinstance(rri_descr, MutableMapping) expected = [ ['', 'rri', 'hr'], ['min', 750.0, 73.61963190184049], ['max', 815.0, 80.0], ['amplitude', 65.0, 6.380368098159508], ['mean', 793.75, 75.67342649397864], ['median', 805.0, 74.53703703703704], ['var', 667.1875, 6.487185483887203], ['std', 25.829972899714782, 2.546995383562209], ] expected__repr__ = ('----------------------------------------\n', ' rri hr\n', '----------------------------------------\n', 'min 750.00 73.62\n', 'max 815.00 80.00\n', 'mean 793.75 75.67\n', 'var 667.19 6.49\n', 'std 25.83 2.55\n', 'median 805.00 74.54\n', 'amplitude 65.00 6.38\n') for field in expected[1:]: assert rri_descr[field[0]]['rri'] == field[1] assert rri_descr[field[0]]['hr'] == field[2] rri_descr_rep = rri_descr.__repr__() for table_row in expected__repr__: assert table_row in rri_descr_rep
def test_class_repr_long_array(self): rri = RRi(range(1, 100000)) assert rri.__repr__() == ( "RRi array([1.0000e+00, 2.0000e+00, 3.0000e+00, ..., " "9.9997e+04, 9.9998e+04,\n 9.9999e+04])" )
def test_return_figure_objects(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) fig, ax = rri.plot() assert isinstance(fig, matplotlib.figure.Figure) assert isinstance(ax, matplotlib.figure.Axes)
def read_from_csv(pathname, rri_col_index=0, time_col_index=None, row_offset=0, time_parser=int, sep=None): with open(pathname, newline='') as csvfile: if sep is None: try: sep = csv.Sniffer().sniff(csvfile.read(1024)).delimiter except csv.Error: sep = ',' csvfile.seek(0) reader = csv.reader(csvfile, delimiter=sep) for offset in range(row_offset): next(reader) if time_col_index is None: return RRi([float(r[rri_col_index].strip()) for r in reader]) rri = [] time = [] for row in reader: rri.append(float(row[rri_col_index].strip())) time.append(time_parser(row[time_col_index].strip())) return RRi(rri, time)
def test_split_rri_using_time_informarion(self): rri = RRi([800, 810, 790, 795], time=[1, 5, 10, 20]) splitted_rri = rri.time_split(seg_size=10, overlap=0) expected = [RRi([800, 810], time=[1, 5]), RRi([790, 795], time=[10, 20])] self.assert_splitted_equal(splitted_rri, expected)
def test_rri_describe(self): rri = RRi(FAKE_RRI) rri_descr = rri.describe() assert isinstance(rri_descr, MutableMapping) expected = [ ["", "rri", "hr"], ["min", 750.0, 73.61963190184049], ["max", 815.0, 80.0], ["amplitude", 65.0, 6.380368098159508], ["mean", 793.75, 75.67342649397864], ["median", 805.0, 74.53703703703704], ["var", 667.1875, 6.487185483887203], ["std", 25.829972899714782, 2.546995383562209], ] expected__repr__ = ( "----------------------------------------\n", " rri hr\n", "----------------------------------------\n", "min 750.00 73.62\n", "max 815.00 80.00\n", "mean 793.75 75.67\n", "var 667.19 6.49\n", "std 25.83 2.55\n", "median 805.00 74.54\n", "amplitude 65.00 6.38\n", ) for field in expected[1:]: assert rri_descr[field[0]]["rri"] == field[1] assert rri_descr[field[0]]["hr"] == field[2] rri_descr_rep = rri_descr.__repr__() for table_row in expected__repr__: assert table_row in rri_descr_rep
def test_return_fig_and_axes_hist_method(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) with mock.patch('hrv.rri.plt.show'): fig, ax = rri.hist() assert isinstance(fig, matplotlib.figure.Figure) assert isinstance(ax, matplotlib.figure.Axes)
def test_rri_info(self, _stdout): rri = RRi(FAKE_RRI) rri.info() msg = 'N Points: 4\nDuration: 2.38s\nInterpolated: False\n'\ 'Detrended: False\nMemory Usage: 0.03Kb' _stdout.write.assert_called_once_with(msg)
def test_rri_class_encapsulation(self): rri = RRi(FAKE_RRI) with pytest.raises(AttributeError): rri.rri = [1, 2, 3, 4] with pytest.raises(AttributeError): rri.time = [1, 2, 3, 4]
def test_get_rri_time_interval(self): rri = RRi(FAKE_RRI + [817, 785, 910], time=[2, 4, 6, 8, 10, 12, 14]) rri_interval = rri.time_range(start=10, end=14) expected = RRi([817, 785, 910], time=[10, 12, 14]) assert isinstance(rri_interval, RRi) np.testing.assert_array_equal(rri_interval.values, expected.values) np.testing.assert_array_equal(rri_interval.time, expected.time)
def test__getitem__method(self): rri = RRi(FAKE_RRI) rri_slice = rri[:2] expected = RRi([800, 810]) assert isinstance(rri_slice, RRi) np.testing.assert_equal(rri_slice.values, expected.values) np.testing.assert_equal(rri_slice.time, expected.time)
def test_reset_time_offset_inplace(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) rri.reset_time(inplace=True) expected = RRi(FAKE_RRI, time=[0, 1, 2, 3]) assert isinstance(rri, RRi) np.testing.assert_array_equal(rri.values, expected.values) np.testing.assert_array_equal(rri.time, expected.time)
def test_quotient_filter_receiving_and_return_rri_class(self): fake_rri = RRi([810, 580, 805, 790]) rri_filt = quotient(fake_rri) expected = RRi(rri=[805, 790], time=[1.385, 2.175]) assert isinstance(rri_filt, RRi) np.testing.assert_almost_equal(rri_filt.values, expected.values, decimal=2) np.testing.assert_almost_equal(rri_filt.time, expected.time, decimal=2)
def test_rri_info_time_range(self, _stdout): rri = RRi(FAKE_RRI, time=[2, 3, 4, 5]) rri.info() msg = ( "N Points: 4\nDuration: 3.00s\nInterpolated: False\n" "Detrended: False\nMemory Usage: 0.03Kb" ) _stdout.write.assert_called_once_with(msg)
def __getitem__(self, index): assert (index < self._dataset_size) #if self._is_for_train: # random # index = random.randint(0, self._dataset_size-1) # get sample data data = self._data[index] / 1000 data = list(data) data_reverse = copy.deepcopy(data) data_reverse.reverse() filt_rri1 = list(moving_average(RRi(data), order=1)) filt_rri2 = list(moving_average(RRi(data), order=2)) filt_rri3 = list(moving_average(RRi(data), order=3)) filt_rri1_reverse = copy.deepcopy(filt_rri1) filt_rri2_reverse = copy.deepcopy(filt_rri2) filt_rri3_reverse = copy.deepcopy(filt_rri3) filt_rri1_reverse.reverse() filt_rri2_reverse.reverse() filt_rri3_reverse.reverse() order_data = [filt_rri1, filt_rri2, filt_rri3] order_data_reverse = [ filt_rri1_reverse, filt_rri2_reverse, filt_rri3_reverse ] label = int(self._label[index]) subject = self._subject[index] mean = self._mean_train[index] sdnn = self._sdnn_train[index] pnn50 = self._pnn50_train[index] rmssd = self._rmssd_train[index] lnrmssd = self._lnrmssd_train[index] vlf = self._vlf_train[index] lf = self._lf_train[index] hf = self._hf_train[index] rlh = self._rlh_train[index] features = list(np.stack((mean, sdnn, pnn50, rmssd, lnrmssd, \ vlf, lf, hf, rlh ))) makeup_length = 512 - len(data) if len(data) > 512: data = data[:512] else: data.extend(0 for _ in range(makeup_length)) return data, data_reverse, order_data, order_data_reverse, label, subject, features
def test_operations_with_other_rri_instance(self): rri = RRi(FAKE_RRI) another_rri = RRi([750, 765, 755, 742]) mul_result = rri * another_rri div_result = rri / another_rri add_result = rri + another_rri sub_result = rri - another_rri pow_result = rri**another_rri results = (mul_result, div_result, add_result, sub_result, pow_result) for result in results: assert isinstance(result, RRi)
def test_rri_statistical_values(self): rri = RRi(FAKE_RRI) np.testing.assert_array_equal(rri.mean(), np.mean(FAKE_RRI)) np.testing.assert_array_equal(rri.var(), np.var(FAKE_RRI)) np.testing.assert_array_equal(rri.std(), np.std(FAKE_RRI)) np.testing.assert_array_equal(rri.median(), np.median(FAKE_RRI)) np.testing.assert_array_equal(rri.max(), np.max(FAKE_RRI)) np.testing.assert_array_equal(rri.min(), np.min(FAKE_RRI)) np.testing.assert_array_equal( rri.amplitude(), np.max(FAKE_RRI) - np.min(FAKE_RRI), ) np.testing.assert_array_equal( rri.rms(), np.sqrt(np.mean(np.square(FAKE_RRI))), )
def test_smoothness_priors_detrend(self): fake_rri = RRi([810, 830, 860, 790, 804]) detrended_rri = smoothness_priors(fake_rri, l=500, fs=4.0) expected_rri = [ 799.0018, 794.1204, 801.8663, 817.2193, 835.156, 850.6497, 858.6705, 854.2143, 836.2049, 811.4113, 787.5311, 772.2589, 0.0, 0.0, ] np.testing.assert_almost_equal(detrended_rri, expected_rri, 4) assert isinstance(detrended_rri, RRiDetrended) assert detrended_rri.interpolated assert detrended_rri.detrended
def test_calculate_min_with_numpy_function(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) avg = np.min(rri) expected = 750.0 np.testing.assert_almost_equal(avg, expected)
def test_calculate_variance_with_numpy_function(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) avg = np.var(rri) expected = 667.1875 np.testing.assert_almost_equal(avg, expected)
def test_calculate_standard_deviation_with_numpy_function(self): rri = RRi(FAKE_RRI, time=[4, 5, 6, 7]) avg = np.std(rri) expected = 25.82 np.testing.assert_almost_equal(avg, expected, decimal=2)
def test__pow__method(self): rri = RRi(FAKE_RRI) result = rri**2 expected = [640000., 656100., 664225., 562500.] np.testing.assert_equal(result.values, expected)
def test__mul__method(self): rri = RRi(FAKE_RRI) result = rri * 10 expected = [8000, 8100, 8150, 7500] assert isinstance(result, RRi) np.testing.assert_equal(result.values, expected)
def test_raises_exception_if_rri_and_time_havent_same_length(self): with pytest.raises(ValueError) as e: _validate_time(FAKE_RRI, [1, 2, 3]) with pytest.raises(ValueError): RRi(FAKE_RRI, [1, 2, 3]) assert e.value.args[0] == ("rri and time series must have the same length")
def test__add__method(self): rri = RRi(FAKE_RRI) result = rri + 10 expected = [810, 820, 825, 760] assert isinstance(result, RRi) np.testing.assert_equal(result.values, expected)
def test__sub__method(self): rri = RRi(FAKE_RRI) result = rri - 10 expected = [790, 800, 805, 740] assert isinstance(result, RRi) np.testing.assert_equal(result.values, expected)
def test__truediv__method(self): rri = RRi(FAKE_RRI) result = rri / 10 expected = np.array(FAKE_RRI) / 10 assert isinstance(result, RRi) np.testing.assert_equal(result.values, expected)
def test__abs__method(self): rri = RRi(FAKE_RRI) result = abs(rri) expected = np.array(FAKE_RRI) assert isinstance(result, RRi) np.testing.assert_equal(result.values, expected)
def test__getitem__method_with_numpy_array(self): rri = RRi(FAKE_RRI) indexes = np.array([False, True, True, False]) rri_slice = rri[indexes] expected = [810, 815] assert isinstance(rri_slice, RRi) np.testing.assert_equal(rri_slice.values, expected)