Example #1
0
 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]),
     ]
Example #2
0
    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
Example #3
0
    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])"
        )
Example #4
0
    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)
Example #5
0
File: io.py Project: jorford/hrv
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)
Example #6
0
    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)
Example #7
0
    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
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
    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]
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
    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)
Example #14
0
    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)
Example #15
0
    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)
Example #16
0
    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
Example #17
0
    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)
Example #18
0
    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))),
        )
Example #19
0
    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
Example #20
0
    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)
Example #21
0
    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)
Example #22
0
    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)
Example #23
0
    def test__pow__method(self):
        rri = RRi(FAKE_RRI)

        result = rri**2
        expected = [640000., 656100., 664225., 562500.]

        np.testing.assert_equal(result.values, expected)
Example #24
0
    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)
Example #25
0
    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")
Example #26
0
    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)
Example #27
0
    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)
Example #28
0
    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)
Example #29
0
    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)
Example #30
0
    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)