2
2
from contextlib import contextmanager
3
3
from pathlib import Path
4
4
5
+ import numpy as np
5
6
import pandas as pd
6
7
import pytest
7
8
@@ -35,44 +36,44 @@ def test_extract(self):
35
36
self .extract_algo .extract (ecg = self .ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
36
37
37
38
assert isinstance (self .extract_algo .points_ , pd .DataFrame )
38
- assert "q_wave_onset_sample " in self .extract_algo .points_ .columns
39
+ assert "q_peak_sample " in self .extract_algo .points_ .columns
39
40
assert "nan_reason" in self .extract_algo .points_ .columns
40
41
41
- # add regression test to check if the extracted q-wave onsets match with the saved reference
42
+ # add regression test to check if the extracted q-peaks match with the saved reference
42
43
def test_regression_extract_dataframe (self ):
43
44
self .setup ()
44
45
45
46
ecg_data = self .ecg_data
46
47
_assert_is_dtype (ecg_data , pd .DataFrame )
47
48
48
- reference_q_wave_onsets = self ._get_regression_reference ()
49
+ reference_q_peaks = self ._get_regression_reference ()
49
50
self .extract_algo .extract (ecg = ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
50
51
51
- self ._check_q_wave_onset_equal ( reference_q_wave_onsets , self .extract_algo .points_ )
52
+ self ._check_q_peaks_equal ( reference_q_peaks , self .extract_algo .points_ )
52
53
53
54
def test_regression_extract_series (self ):
54
55
self .setup ()
55
56
56
57
ecg_data = self .ecg_data .squeeze ()
57
58
_assert_is_dtype (ecg_data , pd .Series )
58
59
59
- reference_q_wave_onsets = self ._get_regression_reference ()
60
+ reference_q_peaks = self ._get_regression_reference ()
60
61
self .extract_algo .extract (ecg = ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
61
62
62
- self ._check_q_wave_onset_equal ( reference_q_wave_onsets , self .extract_algo .points_ )
63
+ self ._check_q_peaks_equal ( reference_q_peaks , self .extract_algo .points_ )
63
64
64
65
@staticmethod
65
66
def _get_regression_reference ():
66
- data = pd .read_csv (TEST_FILE_PATH .joinpath ("pep_test_q_wave_onset_reference_neurokit_dwt .csv" ), index_col = 0 )
67
- data = data .convert_dtypes ( infer_objects = True )
67
+ data = pd .read_csv (TEST_FILE_PATH .joinpath ("pep_test_q_peak_reference_neurokit_dwt .csv" ), index_col = 0 )
68
+ data = data .astype ({ "q_peak_sample" : "Int64" , "nan_reason" : "object" } )
68
69
return data
69
70
70
71
@staticmethod
71
- def _check_q_wave_onset_equal (reference_heartbeats , extracted_heartbeats ):
72
+ def _check_q_peaks_equal (reference_heartbeats , extracted_heartbeats ):
72
73
pd .testing .assert_frame_equal (reference_heartbeats , extracted_heartbeats )
73
74
74
75
75
- class TestQWaveOnsetExtractionVanLien2013 :
76
+ class TestQPeakExtractionVanLien2013 :
76
77
def setup (self , time_interval_ms : int = 40 ):
77
78
# Sample ECG data
78
79
self .ecg_data = pd .read_csv (TEST_FILE_PATH .joinpath ("pep_test_ecg.csv" ), index_col = 0 )
@@ -98,9 +99,9 @@ def test_extract(self):
98
99
self .extract_algo .extract (ecg = self .ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
99
100
100
101
assert isinstance (self .extract_algo .points_ , pd .DataFrame )
101
- assert "q_wave_onset_sample " in self .extract_algo .points_ .columns
102
+ assert "q_peak_sample " in self .extract_algo .points_ .columns
102
103
103
- # add regression test to check if the extracted q-wave onsets match with the saved reference
104
+ # add regression test to check if the extracted q-peaks match with the saved reference
104
105
@pytest .mark .parametrize (
105
106
("time_interval_ms" ),
106
107
[34 , 36 , 38 , 40 ],
@@ -111,9 +112,9 @@ def test_regression_extract_dataframe(self, time_interval_ms):
111
112
ecg_data = self .ecg_data
112
113
_assert_is_dtype (ecg_data , pd .DataFrame )
113
114
114
- reference_q_wave_onsets = self ._get_regression_reference (time_interval_ms )
115
+ reference_q_peaks = self ._get_regression_reference (time_interval_ms )
115
116
self .extract_algo .extract (ecg = ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
116
- self ._check_q_wave_onset_equal ( reference_q_wave_onsets , self .extract_algo .points_ )
117
+ self ._check_q_peaks_equal ( reference_q_peaks , self .extract_algo .points_ )
117
118
118
119
@pytest .mark .parametrize (
119
120
("time_interval_ms" ),
@@ -125,20 +126,20 @@ def test_regression_extract_series(self, time_interval_ms):
125
126
ecg_data = self .ecg_data .squeeze ()
126
127
_assert_is_dtype (ecg_data , pd .Series )
127
128
128
- reference_q_wave_onsets = self ._get_regression_reference (time_interval_ms )
129
+ reference_q_peaks = self ._get_regression_reference (time_interval_ms )
129
130
self .extract_algo .extract (ecg = ecg_data , heartbeats = self .heartbeats , sampling_rate_hz = self .sampling_rate_hz )
130
- self ._check_q_wave_onset_equal ( reference_q_wave_onsets , self .extract_algo .points_ )
131
+ self ._check_q_peaks_equal ( reference_q_peaks , self .extract_algo .points_ )
131
132
132
133
def _get_regression_reference (self , time_interval_ms : int = 40 ):
133
134
data = pd .read_csv (
134
135
TEST_FILE_PATH .joinpath ("pep_test_heartbeat_reference_variable_length.csv" ), index_col = 0 , parse_dates = True
135
136
)
136
- data = data .convert_dtypes (infer_objects = True )
137
137
data = data [["r_peak_sample" ]] - int ((time_interval_ms / self .sampling_rate_hz ) * 1000 )
138
- data .columns = ["q_wave_onset_sample" ]
139
-
138
+ data = data .assign (nan_reason = np .NAN )
139
+ data .columns = ["q_peak_sample" , "nan_reason" ]
140
+ data = data .astype ({"q_peak_sample" : "Int64" , "nan_reason" : "object" })
140
141
return data
141
142
142
143
@staticmethod
143
- def _check_q_wave_onset_equal (reference_heartbeats , extracted_heartbeats ):
144
+ def _check_q_peaks_equal (reference_heartbeats , extracted_heartbeats ):
144
145
pd .testing .assert_frame_equal (reference_heartbeats , extracted_heartbeats )
0 commit comments