- Load a segment of EDF raw data from a signal without reading the entire file using
EdfSignal.get_data_slice
method (#58). - Load annotations from a specific time window of the EDF file without reading the entire file using
Edf.get_annotations
method (#58).
- Allow adding new EDF+ annotations and overwriting all existing ones with
Edf.add_annotations
andEdf._set_annotations
(#54).
- Retrieving data for signals where physical minimum and maximum are the same, the warning message now correctly reflects that (#51).
- Lazy load raw signals from local EDF files. Lazy loading is supported and enabled by default when passing a
str
orpathlib.Path
object to theread_edf
function. The behavior can be controlled using thelazy_load_data
parameters of theread_edf
function (#48). - Public getter for digital signal values called
digital
(#48).
- Make EDF+ header fields
patient
andrecording
more tolerant regarding non-compliant inputs: omitted subfields are returned asX
instead of throwing an exception (#18). - Allow reading from
tempfile.SpooledTemporaryFile[bytes]
(#36). - Enable the reading of EDF files where the filesize does not match the header information. Incomplete data records will be truncated (#41).
- Allow reading more non-standard starttime and startdate fields (#30).
- Exclude EDF+ annotation signals from
Edf.signals
,Edf.num_signals
, andEdf.drop_signals()
(#25). - Provide more concise
__repr__
forEdf
andEdfSignal
(#26). Edf.append_signals()
now inserts new signals after the last ordinary (i.e. non-annotation) signal (#29).
- Expand
~
(tilde) to the user's home directory inedf_file
argument ofread_edf()
andtarget
argument ofEdf.write()
(#23).
- Avoid floating point errors sometimes preventing the creation of an Edf with signals that are actually compatible in duration (#15).
- Allow reading EDF+ startdate and birthdate with non-uppercase month (#19).
- Disallow setting signal label to
"EDF Annotations"
(#28).
- Add optional parameter
sampling_frequency
toEdfSignal.update_data()
for changing the sampling frequency of the signal when updating its data (#13). - Add
update_data_record_duration
method to classEdf
for updating thedata_record_duration
field of the EDF header (#14).
Edf.signals
can not be set anymore. UseEdf.append_signals()
,Edf.drop_signals()
, andEdfSignal.update_data()
instead (#10).
- Allow creating a new Edf containing only annotations (#7).
- Add
EdfSignal.update_data
for overwriting the physical values with an array of equal length (#10). - Allow adding new signals to an Edf with
Edf.append_signals
(#10).
- Disallow creating a new Edf where local patient/recording identification subfields are empty strings (#6).
- Allow retrieving the starttime from a file where the reserved field indicates it is an EDF+C but no annotations signal is present (#8).
- Disallow removing the EDF+ timekeeping signal with
Edf.drop_signals
(#10).
- Disallow creating a new Edf with a recording startdate not between 1985-01-01 and 2084-12-31 (#5).
- Support non-standard header fields (not encoded as UTF-8) by replacing incompatible characters with "�" (#4).
- When
EdfSignal.physical_min
orEdfSignal.physical_max
do not fit into their header fields, they are now always rounded down or up, respectively, to ensure all physical values lie within the physical range (#2). - The calculation of
num_data_records
from signal duration anddata_record_duration
is now more robust to floating point errors (#3)
- Use correct path to sphinx config file in
.readthedocs.yml
Initial release 🎉
- Support for reading and writing EDF and EDF+C files.
- I/O from/to files and file-like objects.
Edf.slice_between_seconds()
andEdf.slice_between_annotations()
for slicing a recording in time.Edf.drop_annotations()
for dropping EDF+ annotations based on their text.Edf.drop_signals()
for dropping individual EDF signals by specifying their index or label.Edf.anonymize()
for anonymizing all identifying header fields.