- Fix
playback_lsl.pyfor cases where no metadata is available in the to-be-streamed XDF file ([#160] by Stefan Appelhoff)
- Skip linear dejittering for streams flagged with
can_drop_samplesto prevent dropped-frame streams from being shifted too early in time (#165 by Clemens Brunner) - Fix detection of clock sync corruption in additional cases (#167 by Alin G. Chitu)
- Improve detection and truncation of anomalous samples causing clock synchronization corruption (#158 by Mathieu Scheltienne)
- Add new
case_sensitiveparameter tomatch_streaminfos, defaulting toTrueto maintain previous behavior; whenFalse, stream properties are matched more leniently (#134 by Stefan Appelhoff) - Expose detected clock segments (used in synchronization) as
stream["info"]["clock_segments"](#131 by Jamie Forth)
- Segment at negative time intervals when dejittering by considering the absolute time difference (#140 by Benedikt Ehinger and Jamie Forth)
- Ensure empty stream segments are initialized (#129 by Jamie Forth)
- Uniformly calculate effective sample rate as
(len(time_stamps) - 1) / duration(#129 by Jamie Forth) - Handle
LinAlgError(with warning) during synchronization (#131 by Jamie Forth) - Fix synchronization for streams with clock resets and MAD calculation used in clock value segmentation (#131 by Jamie Forth)
- Fix file playback when not looping (#136 by Chadwick Boulay)
- Fix clock synchronization corruption caused by garbage data when outlet closes before inlet (#150 by Jesse Livezey and Mathieu Scheltienne)
- Fix
UserWarningemitted bynumpy.dividein NumPy 2.4+ (#146 by Mathieu Scheltienne)
- Expose detected segment (used in dejittering) as
stream["info"]["segments"](#117 by Robert Guggenberger) - A non-looping playback of an XDF file will no longer lead to a
TypeError(#119 by Stefan Appelhoff) - Reported segments now have the correct sample stop, are no longer duplicated, and empty streams return segments as an empty array rather than [0, -1] (#121 by Jamie Forth)
- Rename
pyxdf.examplesmodule topyxdf.cli(#118 by Clemens Brunner) - Reverse logic of
--loopargument inpyxdf.cli.playback_lsl.pyto be more in line with standard practice: Supplying--loopwill loop, whereas omitting--loopwill NOT loop (#119 by Stefan Appelhoff)
- Fix reading numeric array data on big-endian hosts (#98 by Ben Beasley)
- Add
clock_timesandclock_valuesto stream dictionary (#105 by Fabian Grosch)
- Minimum required Python version is now 3.9 (#100 by Clemens Brunner)
- Added compatibility with Python 3.12 (#96 by Clemens Brunner)
- Fix invalid
np.objecttype (#87 by Clemens Brunner) - Fix robust fit for large timestamps (#73 by Chadwick Boulay)
- Fix loading stream with no samples when
dejitter_timestamps=False(#82 by Robert Guggenberger)
- Add Cython type hints (requires optional local compilation) (#17 by Tristan Stenner)
-
Handle XDF files with corrupt chunk headers (missing stream IDs) more gracefully (#62 by Robert Guggenberger)
-
Treat
nominal_sratefield as float to fix parsing errors (#65 by Robert Guggenberger and #68 by Clemens Brunner)
load_xdfnow requires keyword-only arguments after the first two arguments (#59 by Christian Kothe)
- Allow loading from already opened file objects, e.g. in-memory files or network streams (#51 by Tristan Stenner)
- Add CI tests with example data (#49 by Clemens Brunner)
- Compare nominal to effective sampling rates only for regularly sampled streams (#47 by Clemens Brunner)
- More robust error recovery for compressed corrupted files (#50 by Tristan Stenner)
- Speed up loading of numerical data (#46 by Tristan Stenner)
- Avoid/suppress some NumPy warnings (#48 by Clemens Brunner)
- Remove Python 2 compatibility from
setup.py(#45 by Clemens Brunner)
- Add option to load only specific streams (#24 by Clemens Brunner)
- Add
verboseargument toload_xdf(#42 by Chadwick Boulay)
- Fix bug in jitter removal (#35 by Alessandro D'Amico)
- Add compatibility with Python 3.5 by converting Pathlike objects to str for file open functions (#37 by hankso)
- Refactor jitter removal code to be more readable (#36 by Chadwick Boulay)
- Store unique stream ID inside the
["info"]["stream_id"]dict value (#19 by Clemens Brunner)
- Support pathlib objects (#7 by Clemens Brunner)
- Allow example script to be called with an optional XDF file name (e.g.
python -m pyxdf.exampleorpython -m pyxdf.example xdf_file.xdf) (#10 by Tristan Stenner)
- Use correct data types (#2 by Tristan Stenner)
- Streams are not sorted by name anymore (#3 by Clemens Brunner)
- Support older NumPy versions < 1.14 (#4 by Clemens Brunner)
- Pass correct on_chunk argument (#5 by Clemens Brunner)
- Fix
_scan_forward(#6 by Clemens Brunner)
- Pull
StreamDataclass and chunk 3 reader out ofload_xdf(#13 by Tristan Stenner)