All notable changes to this project will be documented in this file.
The format follows Keep a Changelog and this project adheres to Semantic Versioning.
- validate.py ported to polars-native internals: validate_df accepts polars (eager or lazy) or pandas frames with identical reports across input types; the validate() artifact path no longer converts to pandas. Completes the repair/validate pandas removal.
- Time reconciliation on read (GH #65):
bdf.readcross-checksTest Time / sandStep Time / sincrements against wall-clock (Unix Time / s) increments; a column stored in the wrong unit under a seconds header (e.g. a Digatron export holding milliseconds) is rescaled to seconds, recorded undermetadata["time_reconciliation"], and announced with aUserWarning. Disable withreconcile_time=False.bdf.validatereports the same mismatch as atime_scalefinding without modifying data. - repair.py ported to polars-native internals: fix_time and clean now accept polars (eager or lazy) or pandas frames and return the same kind, with identical numeric results across input types (pinned by the characterization suite). mypy re-enabled on the module; the CLI clean command no longer round-trips through pandas.
- Arbin normalizers (csv, xlsx) map Charge/Discharge Capacity and Energy to the schedule_* terms from ontology 1.3.0, reflecting the operator-defined reset behavior Arbin confirmed; the columns previously landed on the never-resetting test-scoped terms.
- CI pipeline with lint/type/tests/docs and build/twine checks.
- Sphinx docs with pydata theme and converted notebook examples.
- Unit tests for IO, registry, validation, repair, CLI, and raw conversion.
- CLI/core alignment (
save_jsonld, metadata helpers). - Community files: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY.
- Release workflow for TestPyPI/PyPI publication via GitHub Actions.
- Enriched packaging metadata and optional extras.
- Improved README with install/quickstart and CLI examples.
- Relaxed numpy upper bound and added a numpy2 install extra.
- Switched PyPI distribution name from
bdftobatterydf(import/CLI remainbdf).
- Unix-time conversion is now datetime-resolution-safe:
bdf.time.parse_unix_timecomputed epoch seconds viaastype("int64") / 1e9, which assumed nanosecond storage and returned values 1000× too small on pandas builds that yield[us]/[s]/[ms]datetimes (e.g. newer Python/pandas in CI). Now uses timedelta arithmetic ((dt - epoch).dt.total_seconds()), correct for any resolution. bdf.ingestnow lowercases the cell id when creating the per-cell metadata directory, so generated paths are stable on case-sensitive filesystems (the cellmetadata.jsonldwas previously written to a differently-cased directory on Linux).