Skip to main content

Battery Feature Lab

Version Python License

Battery Feature Lab (BFL) is a Python framework for the analysis of battery time-series measurements and electrochemical impedance spectroscopy (EIS) data. It represents measurement conditions (Operation), observed and model-derived responses (Response), and changes across observations that meet explicit comparability criteria (Evolution).

The framework produces machine-readable analysis records with traceable source references, processing provenance, method configurations, quality diagnostics, and interpretation limits. Time-series and EIS measurements are processed through distinct analysis interfaces and output schemas. For EIS, the framework retains measured spectra, evaluates linear Kramers–Kronig consistency, and estimates equivalent-circuit parameters with explicit convergence diagnostics. Parameter uncertainty, stability, and identifiability remain unassessed in the current release; numerical fit quality alone does not establish a physical interpretation.

Outputs are provided as JSON and Parquet for downstream analytical workflows and evidence-informed data reuse.

How BFL is organised

BFL analyses measurements along three complementary, capability-gated dimensions. This diagram shows conceptual and data dependencies, not the compiler's execution order or a requirement that every dimension produce an applicable result. Metadata provides context, while evidence and validation make each result traceable and define its interpretation limits.

Battery Feature Lab organisation diagram

The editable Mermaid source is retained alongside the static SVG.

Raw files are standardized by Battery Data Standard (BDS). Existing formal Battery Data Format (BDF) artifacts may instead use the optional batterydf adapter. Both routes produce the same internal quantity names and retain their provider-native report; neither route silently falls back to the other after a provider error.

Quick start

Battery Feature Lab 0.5.0 supports Python 3.11 and 3.12.

python -m pip install "battery-feature-lab==0.5.0"

For EIS analysis, install the optional providers:

python -m pip install "battery-feature-lab[eis]==0.5.0"

Analyze a raw cycler export:

import bfl

result = bfl.analyze(
    "cell.xlsx",
    output_dir="bfl_outputs/cell",
    input_adapter="bds",
    nominal_capacity_ah=None,
    temperature_column=None,
)

for path in result.files:
    print(path)

Equivalent CLI:

bfl analyze cell.xlsx --output-dir bfl_outputs/cell --input-adapter bds

For native formal-BDF input, install "battery-feature-lab[bdf]==0.5.0" and use input_adapter="bdf". The optional OpenAI notebook client is available through "battery-feature-lab[ai]==0.5.0".

Output contract

Every successful run writes exactly six artifacts. The provider report filename depends on the selected input adapter.

normalized_data.bdf.parquet
bds_conversion_report.json       # BDS input
# or bdf_validation_report.json  # formal-BDF input
analysis_metadata.json
analysis_results.json
analysis_evidence.json
analysis_validation.json

Start with analysis_results.json. It is a compact index over Operation, Response, and Evolution. Resolve a record_id in analysis_evidence.json only when source intervals, full series, method parameters, references, or detailed quality evidence are needed.

Serialized provenance uses portable artifact filenames plus SHA-256 digests. Host-local absolute paths are never written to the public JSON contract; configuration.output_dir is represented as .. The AnalysisResult Python object still returns the actual runtime paths.

import json
from pathlib import Path

root = Path("bfl_outputs/cell")
summary = json.loads((root / "analysis_results.json").read_text(encoding="utf-8"))
evidence = json.loads((root / "analysis_evidence.json").read_text(encoding="utf-8"))

record_id = summary["dimensions"]["operation"][0]["record_id"]
record = next(item for item in evidence["records"] if item["record_id"] == record_id)

Progressive capability

BFL does not require every dataset to contain every battery channel.

Available measurements Analysis that can be added
time + current phase, current-shape mode, duration-weighted current exposure, Ah throughput, current-squared exposure
+ voltage power and energy, current-step response, paired capacity profiles, eligible pulse/ICA/DVA and cycle analyses
+ temperature thermal envelope, rest temperature response, temperature comparability gates
+ trustworthy cycle identity structurally gated cycle summaries and comparable-capacity evolution
+ nominal/reference capacity C-rate and grounded SOC-dependent provider paths where other gates also pass

Missing optional channels produce explicit not_computable metrics and not_invoked provider calls. BFL never creates a voltage channel, assumes a sampling rate, or promotes a filename token into cell metadata.

Scientific boundaries

  • Operation labels are limited to constant_current_like, constant_voltage_like, pulse_like, dynamic_current, and unmatched. BFL does not infer a named protocol.
  • Current-step delta-V/delta-I is an apparent terminal response, not intrinsic resistance or SOH.
  • Relaxation checkpoints are terminal-voltage recovery, not equilibrium OCV.
  • A capacity-aligned coordinate is not SOC unless an explicit reference establishes it.
  • Capacity evolution requires source or joined cycle identity, structural completeness, and a comparable operation signature. A short test does not support ageing or lifetime claims.
  • Metadata fields remain unknown when neither the preprocessing provider nor the caller supplies them.

Documentation

EIS

Install battery-feature-lab[eis]==0.5.0 and use bfl.analyze_eis() or bfl analyze-eis. The independent EIS path combines BDS-backed intake, explicit spectrum grouping, measurement conditions, Lin-KK consistency checks, eisfit 0.1.1 circuit fitting and condition-gated comparisons. It retains source rows, conversion operations, provider failures and interpretation limits in a modality-specific six-artifact contract.

See EIS analysis and evidence for the input declarations, comparison policy, dependency compatibility and output schemas.

The worked example is examples/BFL_Catenaro_Onori_example.ipynb. Its source workbook is available from the cited CC BY 4.0 dataset and is intentionally not tracked here; follow the download and checksum instructions. Derived JSON examples are under examples/outputs/Catenaro_Onori_2021/; full normalized time-series arrays are also excluded.

Development

git clone https://github.com/shiyunliu-battery/Battery-Feature-Lab.git
cd Battery-Feature-Lab
uv sync --python 3.12 --extra dev --extra ai --extra eis
uv run ruff check .
uv run pytest -q

Real-data validation instructions are kept in tests/data/real/README.md.

Citation

If Battery Feature Lab supports your work, please cite the software:

@software{liu_2026_battery_feature_lab,
  author  = {Liu, Shiyun},
  title   = {Battery Feature Lab},
  year    = {2026},
  version = {0.5.0},
  url     = {https://github.com/shiyunliu-battery/Battery-Feature-Lab},
  license = {MPL-2.0}
}

GitHub can also generate citation formats from CITATION.cff. The included Catenaro–Onori example data remains separately licensed under CC BY 4.0 and must retain its original citation and attribution.

Metadata

Release files for battery-feature-lab 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for battery-feature-lab 0.5.0
File Size Uploaded
battery_feature_lab-0.5.0.tar.gz 132.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for battery-feature-lab 0.5.0
File Interpreter ABI Platform
battery_feature_lab-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 236.4 kB

Release files / battery_feature_lab-0.5.0.tar.gz

Download URL battery_feature_lab-0.5.0.tar.gz
Size 132.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ff890014336a81b03a13e6b38d9cc4901cf1312f6f8513afb6277be7c762425e
BLAKE2b-256 checksum
How to use checksums
0796ccf86b61eb282f71a516a237e35e5fbcffded0ce38dc75cf593001914076
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / battery_feature_lab-0.5.0-py3-none-any.whl

Download URL battery_feature_lab-0.5.0-py3-none-any.whl
Size 104.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fab83f6ea6cee6f621f22f0f57b879d229df6e46d39aec2267c1a01c2d6892a1
BLAKE2b-256 checksum
How to use checksums
b99e7ee244a9fdde34c62e903846ef86b62d9c79f0af09b27b8fb3280c1fc6ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page