Skip to content

BREOS v0.4.0

Choose a tag to compare

@Str4vinci Str4vinci released this 20 Jul 13:15
· 135 commits to main since this release
5b5072b

BREOS 0.4.0 adds opt-in multi-chemistry BLAST-Lite degradation modeling while preserving breos.App as the stable public entrypoint.

Highlights

  • Vendors and integrates 14 BLAST-Lite cell degradation models with stable model keys, scientific provenance, experimental-range and aging-horizon warnings, JSON-safe state snapshots, cross-year threading, and replacement reset handling.
  • Chemistries include Li-ion LFP, NMC, NCA and LMO.
  • Adds public Python and CLI battery-model discovery plus explicit degradation_engine="blast" / blast_model configuration; the existing native LFP degradation path remains the default.
  • Guards time-varying BLAST power and sigmoid state updates against trajectory-domain overshoot, preventing NaN failures under varying field profiles and preventing artificial capacity recovery when a sigmoid asymptote shrinks.
  • Adds fail-loud BlastNumericalError diagnostics, 15-minute BLAST integration coverage, real multi-replacement runner coverage, varying-profile split/thread equivalence, and deterministic 20-year endurance coverage across every model.
  • Unifies App dispatch on the PVWatts part-load inverter curve, preserving explicit inverter sharing, clipping, conversion losses, and the versioned energy ledger across PV, battery, economics, emissions, and optimization paths.
  • Adds model/profile metadata, configuration migration guidance, strengthened release validation, updated documentation, and a nightly plus release-gated BLAST endurance job.

Upgrade notes

Existing breos.App entry points remain available. Native Naumann/Lam LFP degradation remains the default; BLAST is enabled only when explicitly selected with a valid model key. BLAST models are empirical cell models rather than pack-calibrated field models, and long-horizon or out-of-range operation is reported through structured warnings. The Panasonic NCA model warns after its sourced 300-day aging-data horizon.

BLAST remains intentionally unsupported with Monte Carlo and native resistance-fade dispatch in 0.4.0; those combinations raise instead of silently falling back. Numerical results may also change where the corrected PVWatts part-load inverter treatment replaces flat conversion assumptions.

IMPORTANT: BLAST-Lite's models are fit to 1–3 years of accelerated lab aging and extrapolated to decade-plus lifetimes, so its own authors recommend treating the results as qualitative. They're also cell-level models. Upstream suggests real packs run 20–30% short of cell lifetime, and BREOS applies no such derate. Read the SOH curves as scenarios and not as warranties.

Verification

  • Python 3.11–3.14 release CI passed.
  • 553 fast tests and 2 slow endurance tests passed, with 7 optional/skipped tests.
  • All 14 models completed the deterministic 20-year varying-condition endurance fixture with finite states and bounded SOH.
  • Strict lint, formatting, documentation, wheel/sdist build, installed-wheel resource smoke, release provenance, and trusted PyPI publishing checks passed.

Acknowledgements

Thanks to Paul Gasper for the BLAST-Lite suggestion!

See CHANGELOG.md for the complete list of changes.