@@ -1120,6 +1120,7 @@ def _rd_segment(
11201120 no_file = False ,
11211121 sig_data = None ,
11221122 return_res = 64 ,
1123+ wfdb_archive = None ,
11231124):
11241125 """
11251126 Read the digital samples from a single segment record's associated
@@ -1264,6 +1265,7 @@ def _rd_segment(
12641265 sampto = sampto ,
12651266 no_file = no_file ,
12661267 sig_data = sig_data ,
1268+ wfdb_archive = wfdb_archive ,
12671269 )
12681270
12691271 # Copy over the wanted signals
@@ -1288,6 +1290,7 @@ def _rd_dat_signals(
12881290 sampto ,
12891291 no_file = False ,
12901292 sig_data = None ,
1293+ wfdb_archive = None ,
12911294):
12921295 """
12931296 Read all signals from a WFDB dat file.
@@ -1390,7 +1393,8 @@ def _rd_dat_signals(
13901393 )
13911394 else :
13921395 data_to_read = _rd_dat_file (
1393- file_name , dir_name , pn_dir , fmt , start_byte , n_read_samples
1396+ file_name , dir_name , pn_dir , fmt , start_byte , n_read_samples ,
1397+ wfdb_archive = wfdb_archive
13941398 )
13951399
13961400 if extra_flat_samples :
@@ -1630,7 +1634,8 @@ def _required_byte_num(mode, fmt, n_samp):
16301634 return int (n_bytes )
16311635
16321636
1633- def _rd_dat_file (file_name , dir_name , pn_dir , fmt , start_byte , n_samp ):
1637+ def _rd_dat_file (file_name , dir_name , pn_dir , fmt , start_byte , n_samp ,
1638+ wfdb_archive = None ):
16341639 """
16351640 Read data from a dat file, either local or remote, into a 1d numpy
16361641 array.
@@ -1688,14 +1693,19 @@ def _rd_dat_file(file_name, dir_name, pn_dir, fmt, start_byte, n_samp):
16881693 element_count = n_samp
16891694 byte_count = n_samp * BYTES_PER_SAMPLE [fmt ]
16901695
1691- # Local or cloud dat file
1692- if pn_dir is None :
1696+ # Local file or .wfdb archive
1697+ if wfdb_archive is not None :
1698+ with wfdb_archive .open (file_name , "rb" ) as fp :
1699+ fp .seek (start_byte )
1700+ sig_data = util .fromfile (
1701+ fp , dtype = np .dtype (DATA_LOAD_TYPES [fmt ]), count = element_count
1702+ )
1703+ elif pn_dir is None :
16931704 with fsspec .open (os .path .join (dir_name , file_name ), "rb" ) as fp :
16941705 fp .seek (start_byte )
16951706 sig_data = util .fromfile (
16961707 fp , dtype = np .dtype (DATA_LOAD_TYPES [fmt ]), count = element_count
16971708 )
1698-
16991709 # Stream dat file from PhysioNet
17001710 else :
17011711 # check to make sure a cloud path isn't being passed under pn_dir
0 commit comments