Skip to content

v0.10.10

Choose a tag to compare

@haeussma haeussma released this 04 Sep 16:00
· 4 commits to main since this release
ed163b6

Five bug fixes, four of them for problems that shipped in 0.10.9 and were not reported.

AgilentRDLReader reads both report templates

The parser matched one OpenLab template's exact whitespace. Two failures followed:

  • The newer "Sequence Summary Report" template has no left margin, so no row matched, sample_name was never bound, and reading raised UnboundLocalError.
  • When a value did not fit its column the report continued it on a second physical line. The retention-time pattern required a digit after the decimal point, so those rows were skipped silently — on one real sample that dropped a peak carrying 68.9 % of the total area, on the template that appeared to work.

The parser now reads the report's box grammar: rules delimit records, bars delimit cells, wrapped lines are rejoined column-wise, columns resolve by header name, and each peak table is scoped to its own box so two detectors never merge. Tables split across page breaks are read whole. Both shipped example reports parse identically to before.

ShimadzuReader no longer crashes, and no longer misorders files

  • Three debug-logging blocks committed in 0.10.9 opened a hardcoded path inside an unrelated repository, so read() raised FileNotFoundError for every user who was not on the machine that produced them.
  • File enumeration used an unsorted glob, and values are zipped against that list positionally — so reaction times were bound to whichever files the filesystem happened to list first, which differs between filesystems.

Handler.visualize() works on current matplotlib

It called plt.cm.get_cmap, removed in matplotlib 3.9, so every call raised AttributeError.

CI can run

The workflow installed with poetry against a hatchling project and tested a Python version the project rejects. It now uses uv across 3.11/3.12/3.13 on Linux, macOS and Windows — nine green legs.

matplotlib, pandas and requests are now declared; the package imported them without declaring them.

API

The public surface is unchanged: Handler, ChromAnalyzer, Molecule, Protein, to_enzymeml, and Handler.read_agilent() / Handler.visualize() all keep their signatures.

AgilentRDLReader lost three internal static methods of the old parser (extract_information, align_and_concatenate_columns, map_peak) and extract_wavelength now takes a list of lines. Behind unchanged signatures, read() returns more peaks on reports with wrapped cells — the correct count — warns instead of returning silently on an unrecognised template, and reports None rather than "" for a blank peak type.

Full changelog: v0.10.9...v0.10.10