11import numpy as np
22import pandas as pd
3- import sys
43import re
54import os
6- from IPython .display import display
75from . import _headers
86from . import downloads
97
@@ -100,7 +98,7 @@ def checkfields(self):
10098 for field in ['recordname' , 'annotator' , 'annsamp' , 'anntype' ]:
10199 if getattr (self , field ) is None :
102100 print ('The ' , field , ' field is mandatory for writing annotation files' )
103- sys . exit ( )
101+ raise Exception ( 'Missing required annotation field' )
104102
105103 # Check all set fields
106104 for field in annfields :
@@ -115,79 +113,77 @@ def checkfield(self, field):
115113 if field in ['recordname' , 'annotator' , 'fs' ]:
116114 # Check the field type
117115 if type (getattr (self , field )) not in annfieldtypes [field ]:
118- print ('The ' + field + ' field must be one of the following types:' )
119- display (annfieldtypes [field ])
120- sys .exit ()
116+ print (annfieldtypes [field ])
117+ raise TypeError ('The ' + field + ' field must be one of the above types.' )
121118
122119 # Field specific checks
123120 if field == 'recordname' :
124121 # Allow letters, digits, hyphens, and underscores.
125122 acceptedstring = re .match ('[-\w]+' , self .recordname )
126123 if not acceptedstring or acceptedstring .string != self .recordname :
127- sys . exit ('recordname must only comprise of letters, digits, hyphens, and underscores.' )
124+ raise ValueError ('recordname must only comprise of letters, digits, hyphens, and underscores.' )
128125 elif field == 'annotator' :
129126 # Allow letters only
130127 acceptedstring = re .match ('[a-zA-Z]+' , self .annotator )
131128 if not acceptedstring or acceptedstring .string != self .annotator :
132- sys . exit ('annotator must only comprise of letters' )
129+ raise ValueError ('annotator must only comprise of letters' )
133130 elif field == 'fs' :
134131 if self .fs <= 0 :
135- sys . exit ('The fs field must be a non-negative number' )
132+ raise ValueError ('The fs field must be a non-negative number' )
136133
137134 else :
138135 fielditem = getattr (self , field )
139136
140137 # Ensure the field item is a list or array.
141138 if type (fielditem ) not in [list , np .ndarray ]:
142- print ('The ' , field , ' field must be a list or numpy array' )
143- sys .exit ()
139+ raise TypeError ('The ' + field + ' field must be a list or numpy array' )
144140
145141 # Check the data types of the elements
146142 # annsamp and anntype may NOT have nones. Others may.
147143 if field in ['annsamp' ,'anntype' ]:
148144 for item in fielditem :
149145 if type (item ) not in annfieldtypes [field ]:
150146 print ("All elements of the '" , field , "' field must be one of the following types:" )
151- display (annfieldtypes [field ])
147+ print (annfieldtypes [field ])
152148 print ("All elements must be present" )
153- sys . exit ()
149+ raise Exception ()
154150 else :
155151 for item in fielditem :
156152 if item is not None and type (item ) not in annfieldtypes [field ]:
157153 print ("All elements of the '" , field , "' field must be one of the following types:" )
158- display (annfieldtypes [field ])
154+ print (annfieldtypes [field ])
159155 print ("Elements may also be set to 'None'" )
160- sys . exit ()
156+ raise Exception ()
161157
162158 # Field specific checks
163159 # The C WFDB library stores num/sub/chan as chars.
164160 if field == 'annsamp' :
165161 sampdiffs = np .concatenate (([self .annsamp [0 ]], np .diff (self .annsamp )))
166162 if min (self .annsamp ) < 0 :
167- sys . exit ("The 'annsamp' field must only contain non-negative integers" )
163+ raise ValueError ("The 'annsamp' field must only contain non-negative integers" )
168164 if min (sampdiffs ) < 0 :
169- sys . exit ("The 'annsamp' field must contain monotonically increasing sample numbers" )
165+ raise ValueError ("The 'annsamp' field must contain monotonically increasing sample numbers" )
170166 if max (sampdiffs ) > 2147483648 :
171- sys . exit ('WFDB annotation files cannot store sample differences greater than 2**31' )
167+ raise ValueError ('WFDB annotation files cannot store sample differences greater than 2**31' )
172168 elif field == 'anntype' :
173169 # Ensure all fields lie in standard WFDB annotation codes
174170 if set (self .anntype ) - set (annsyms .values ()) != set ():
175171 print ("The 'anntype' field contains items not encoded in the WFDB annotation library." )
176172 print ('To see the valid annotation codes call: showanncodes()' )
177173 print ('To transfer non-encoded anntype items into the aux field call: self.type2aux()' )
178- sys . exit ()
174+ raise Exception ()
179175 elif field == 'subtype' :
180176 # signed character
181177 if min (self .subtype ) < 0 or max (self .subtype ) > 127 :
182- sys . exit ("The 'subtype' field must only contain non-negative integers up to 127" )
178+ raise ValueError ("The 'subtype' field must only contain non-negative integers up to 127" )
183179 elif field == 'chan' :
184180 # unsigned character
185181 if min (self .chan ) < 0 or max (self .chan ) > 255 :
186- sys . exit ("The 'chan' field must only contain non-negative integers up to 255" )
182+ raise ValueErrort ("The 'chan' field must only contain non-negative integers up to 255" )
187183 elif field == 'num' :
188184 # signed character
189185 if min (self .num ) < 0 or max (self .num ) > 127 :
190- sys . exit ("The 'num' field must only contain non-negative integers up to 127" )
186+ raise ValueError ("The 'num' field must only contain non-negative integers up to 127" )
191187 #elif field == 'aux': # No further conditions for aux field.
192188
193189
@@ -199,7 +195,7 @@ def checkfieldcohesion(self):
199195 for field in ['annsamp' , 'anntype' , 'num' , 'subtype' , 'chan' , 'aux' ]:
200196 if getattr (self , field ) is not None :
201197 if len (getattr (self , field )) != nannots :
202- sys . exit ("All written annotation fields: ['annsamp', 'anntype', 'num', 'subtype', 'chan', 'aux'] must have the same length" )
198+ raise ValueError ("All written annotation fields: ['annsamp', 'anntype', 'num', 'subtype', 'chan', 'aux'] must have the same length" )
203199
204200 # Write an annotation file
205201 def wrannfile (self ):
@@ -261,10 +257,10 @@ def type2aux(self):
261257
262258 # Ensure that anntype is a list of strings
263259 if type (self .anntype )!= list :
264- sys . exit ('anntype must be a list' )
260+ raise TypeError ('anntype must be a list' )
265261 for at in self .anntype :
266262 if type (at ) != str :
267- sys . exit ('anntype elements must all be strings' )
263+ raise TypeError ('anntype elements must all be strings' )
268264
269265 external_anntypes = set (self .anntype ) - set (annsyms .values ())
270266
@@ -409,7 +405,7 @@ def showanncodes():
409405 Usage:
410406 showanncodes()
411407 """
412- display (symcodes )
408+ print (symcodes )
413409
414410## ------------- Reading Annotations ------------- ##
415411
0 commit comments