Known limitations¶
Honest, current, and distinct from the permanent non-goals.
Status¶
- First public alpha (
0.1.0a1), published on PyPI as a pre-release. APIs may change without notice; availability is a packaging fact, not a stability guarantee.
Formats¶
- Generic CSV/TSV and AUCX only. No vendor or instrument formats — Beckman XL-A/XL-I, Optima, OpenAUC and SEDFIT/SEDPHAT files are not read.
- Generic delimited output cannot express
UNKNOWNas distinct fromMISSING. AUCX preserves all four statuses exactly. - No AUCX → CSV direction; it would need a documented lossiness policy.
- Generic-wide requires one shared radius axis, by construction.
Model¶
- One signal unit per observation set. Heterogeneous per-scan signal units are not modelled, which is why more than one declared optical system is reported as an anomaly.
- No sample-to-scan linkage.
ScanMetadatacarries nosample_id, so sample metadata is assessed experiment-wide only. ExperimentMetadata.acquired_atis alwaysNoneon import — the manifest schema has no such field.- No unit conversion anywhere.
optical_systems()includes the instrument's declared system, so a set with a declared scan system and an undeclared instrument renders asabsorbance, unknown.
AUCX¶
- One experiment per archive.
- Read whole into memory, bounded by 512 MiB per member and 2 GiB total.
- No encryption and no signatures — integrity only, never authenticity.
- The size limits are constants, not configurable.
Plotting¶
- Single-panel overlay only: no subplot grids, faceting, residual panels or time-series projections.
- No downsampling for very large scan sets.
- Styling beyond the exposed options is the caller's job.
CLI¶
- No plotting subcommand; plotting stays a Python API.
- One experiment per invocation — no batch or glob input.
--jsonoutput is stable per command but not schema-versioned.
Synthetic data¶
- Curves are one-dimensional in radius with no diffusive broadening: the boundary shifts, nothing spreads.
- Noise is independent Gaussian per point, not an instrument noise model.
- One sample and one cell/channel per generated experiment.
invalid-structureproduces one specific finding pair, not a sweep.
Tooling¶
- The coverage floor is global and deliberately below the measured figure.
fail_underinpyproject.tomlis enforced by everypytestrun, including CI, but it exists to catch a collapse in coverage — a module landing untested, coverage silently switched off — not to certify quality. There is no per-file floor, so a new untested module can land while the total stays above the floor, and the floor says nothing about whether the covered behaviour is scientifically correct. - Artifact verification is strict by design:
scripts/verify_artifacts.pyrequires exactly one wheel and exactly one sdist, so it must be run against a freshly emptieddist/. Its unit tests use isolated temporary fixtures; the real artifacts are exercised by the Release dry-run workflow. scripts/release_check.pycovers the source-tree gates only. It does not build, verify artifacts, tag, release or publish.- The release dry run builds on Linux and one Python version; the wheel is
py3-none-any, so this checks packaging, not platform support. - Python 3.13 support rests on CI; local development here uses 3.12.