History#
Note! Only v1 related changes are collected here.
[Unreleased]#
1.1.0.post1 - 2026-07-15#
Sync conda env files (
environment.yml,environment_dev.yml,github_actions_environment.yml) withpyproject.toml: pandas ≥3.0.3,cellpycore==0.2.1from PyPI, drop obsolete pip toolingRemove invoke
tasks.py;noxfile.pyinstalls frompyproject.toml(.[all]+ dependency-groupdev)Docs: require Python 3.13+, copyright 2026; remove scratch root notes / Jupyter ZMQ fix markdown; refresh developer folder-structure tree
1.1.0 - 2026-07-15#
Pin
cellpycore==0.2.1(bridge honorscycle_modefor coulombic columns); regeneratepipeline_smokegoldens and fix native summary parity helperStage 1.8: config migration — prms shim / legacy YAML path, migrate internal call sites, remove import-time config init (#453);
cellpy setupwritescellpy.tomltwin +setup migrate;info --config(#454)Stage 1.15 / 1.14: dormant native↔legacy frame translation (#458); Polars Phase A — de-index raw/summary/journal (#457)
Stage 1.6: delegate duplicated unit converters to
cellpycore.units(#451)Stage 1.7: parallel
cellpy/config/pydantic-settings stack — typed models, layered TOML loader, provenance,override(), inventory parity vs #430; not wired into legacyprmsyet (#452)Fix: full-suite test failures —
extract_fidstest uses module helper; externalcheck_file_idstest avoids live SCP; Arbin.resloader closes ODBC connections (#491)Stage 1.10: replace hard-coded column-header literals with canonical
headers_*lookups in journal pages, ocv_rlx/plotutils, and instrument loaders (priorities 1–3); delete dead easyplot block (#455)Stage 1.4: redirect out-of-band HDF5 readers to
cellpy_file.read_table/read_fid_table;CorruptCellpyFilefor missing keys;cellpy convertCLI for v<8 upgrades (#449)Stage 1.3: move cellpy-file read/write paths into
cellpy_file/(#448)Units Phase 1: re-export
CellpyUnitsandQfrom cellpycore; remove cellpy-local pint registry; renamecellreaderdata_structuresalias tods(#450)Deprecation:
cellpy.utils.easyplotwarns on import viawarn_once; useplotutils/collectorsinstead (removed in 2.0, #438 decision 5) (#479)Fix: loader PEC golden compares all datetime columns by epoch-ns (Windows
datetime64[us]vsns); benchmark baseline gate warns above +20% slowdown and fails only above +100% (#476)Stage 1.1: extract cellpy-file format spec into
cellpy/readers/cellpy_file/format.py;prms._cellpyfile_*aliases preserved; template registry and example-data URL constants moved to owning modules (#446)Stage 1.2: stateless cellpy-file helpers in
cellpy_file/; explicitLoadSelector/LoadLimitsreplacesself.limit_*side channel during HDF5 extraction (#447)Stage 0 foundations complete — all linked characterization, oracle, baseline, convention, and decision-register issues closed; ready for Stage 1 (#439)
Docs: Stage 0.11 decision register recorded in architecture-plan (timezone, curve-schema, v9 container, IR semantics, easyplot, v1.x maintenance) (#438)
Conventions:
cellpy._deprecation.warn_oncehelper,DEPRECATIONS.mdregistry, exception-tree stubs (CellpyErrorre-export plusCorruptCellpyFile,ConfigurationError,UnitsError,LoaderError), andmake_new_cellwired as first consumer (#437, closes #456)Testing: legacy v4/v5 cellpy-file loads now covered in the v4–v7 characterization matrix (removed stale TypeError pin) (#466)
CI: retry
setup-minicondain scheduled workflow on transient conda-forge download failures (#465)Testing: Stage 0.9 benchmark harness — opt-in
pytest-benchmarksuite underbenchmarks/, committed v1.x baseline JSON, and dedicated CI job with ±20% regression gate (#436)Docs: Stage-0 AST inventory scanners (
scan_member_usage.py,scan_hardcoded_headers.py) in.issueflows/00-tools/for consumer/header reports (#435) (tests/parity.py::assert_value_parity) — legacy vs native frames compared throughcellpycore.legacy.mappingwith dtype-tolerant mapped-column equality, named exception list, and trivial-pass essential tests on the current bridge (#434)Testing: curve-extraction golden snapshots for
get_cap/get_ccap/get_dcap/get_ocvon the canonical Arbin cell, including labeled/interpolated/multi-cycle variants and NullData edge cases (#433)Testing: per-loader golden snapshots for tier-1 loaders (
arbin_res,maccor_txt,neware_txt,pec_csv,custom) — raw frame,raw_units, and loader meta oracles undertests/data/goldens/loader_*/with parametrized essential regression tests (#432)Testing: prms configuration characterization tests — inventory parity contract, config round-trip/precedence, OtherPath coercion,
.env_cellpypickup, andcellpy setupdir/file creation (#430)Testing: cellpy-file HDF5 characterization tests — v8 round-trip (fid-populated fixture), limits-prefix trap,
max_cycleselector, legacy version matrix, and missing-key failure mode (#429)Testing: golden-fixture convention under
tests/data/goldens/,dev/regenerate_goldens.pysuite registry, andpipeline_smokeessential oracle on the canonical Arbin.res(#428)Docs: clarify cellpy_units defaults in
cellpy.get()and Google docstring formatting cleanup incellreader.py(#425)Fix: bump pandas to 3.0.3 — BDF Unix-time export, batch journal string extraction, and post-processor datetime handling (#415)
CI: move Windows conda pytest from AppVeyor to GitHub Actions (ACE x64 install with cache) (#407)
Testing: new offline unit tests for
utils/helpers.py(outlier removal, group names, rate column) andreaders/filefinder.py(tmp-path raw-file trees) (#372)Fix: local
OtherPath.rglob()did not recurse into subdirectories, sosearch_for_files(..., sub_folders=True)missed files in subfolders (#372)Fix:
remove_outliers_from_summary_on_nn_distancecrashed on pandas ≥ 2 (TypeErrorin 2-element window branch) (#372)Fix:
list_raw_file_directory(extension=...)raisedTypeErrorwhen filtering path objects (#372)Testing: silenced
easyplotSyntaxWarningand corrected anxfailmarker to useraises=(#372)
1.0.4a1 - 2026-07-03#
First alpha on the automated GitHub release → PyPI pipeline. Install with
pip install cellpy --pre or pip install cellpy==1.0.4a1.
Integration:
cellpycoreconsumed from PyPI (pinned0.1.2for this release); core step/summary processing delegated viaOldCellpyCellCoreseam (#377, #400–#401)CI:
release.yml— published GitHub release triggers test + PyPI trusted publishing (#403)Testing:
essentialpytest marker for read → step-table → summary smoke + parity contractBuild: Python ≥ 3.13; hatchling + uv-dynamic-versioning from git tags (#354)
Removed dependency on cellpy-core’s deprecated
create_selector(#399)Plus fixes and features merged since
v1.0.3a6(PEC reader #393, batch/config #392/#397, module rename #381, filters #363, BDF export #356, …)
1.0.3 (pre-release)#
Refactor: Renamed internal modules accidentally named
core—cellpy.readers.core→cellpy.readers.data_structuresandcellpy.internals.core→cellpy.internals.connections— to avoid a name clash with the new cellpy-core package (#381)Testing: Added header/unit parity contract tests asserting cellpy-core’s settings copies (HeadersNormal, HeadersSummary, HeadersStepTable, CellpyUnits) stay in sync with cellpy’s internal_settings (#378)
Build: Migrated packaging to a single
pyproject.toml(hatchling + git-tag dynamic versioning), managed withuv; removedsetup.py/requirements*.txt/MANIFEST.inand added a Docker-based local build test (#354)Filters: add filtering possibility to plotters in plotutils (#363)
Fix: clear leaky seaborn facet titles (
row = ... | cycle_type = standard) in multi-rowsummary_plotpanes whenshow_formation=True, while preserving x-tick labels on the bottom row (pre-existing bug surfaced by the new_with_ratey-sets)Exporters: New
CellpyCell.to_bdf(...)exports raw time-series in Battery Data Format (CSV/Parquet) with optional cycle filtering, for use by UiA’s dsToolbox and other BDF-aware tools (#356)Exporters:
to_bdfnow accepts anextraskeyword for appending custom/auxiliary raw columns alongside the BDF payload (extras=Truefor all unmapped columns, or pass a list/string of column names). Extras are written verbatim with no unit conversion; the resulting file is no longer strictly BDF-compliant.General: New
cellpy.exportersandcellpy.filterspackages; theCellpyCellclass layer no longer imports fromcellpy.utilsBatch: Batch plotting with multiple subfigures (#343, #344, #346)
Batch: JSON db reader from batbase (
batbase_json_reader) - new database reader for JSON-based batch filesBatch: Improved batch load functionality
Batch: Enhanced error handling and logging in batch processing with clearer exception messages
Batch: Changed default output directory name from ‘out’ to ‘dump’
Batch: Use local folder for journal file as default
Batch: Allow prms to pass during batch update when reloading cellpy files
Batch: Improved
concat_summarieswith support for different averaging methods and filtering (low/high values)Batch: Added CV-share partitioning support in summary collector
Batch: Added line hooks in summary plot
Batch: Summary plot now supports fullcell standard
Batch: Added possibility to drop columns and filter low/high for non-grouped data
Batch: Added helper function
collectors.standard_gravimetric_collectorGeneral: Require numpy >= 2
General: Made explicit imports of parameters and readers in top init-file
General: Allow additional arguments to plotly save images
CLI: New label for create new projectdir in
cellpy newReaders: JSON db reader now supports optional storage of raw JSON data via
store_raw_dataparameterReaders: Added
raw_pages_dictandpages_dictproperties to JSON db reader for accessing data as dictionariesBug fixes: Fixed bug in pandas.ExcelWriter call (#347)
Bug fixes: Fixed bug in summary collector (concat summaries) that mutated list of selected columns
Bug fixes: Fixed bug in OtherPathsNew
Bug fixes: Various other bug fixes and improvements
CI: Fix failing CI pipelines (pyarrow runtime dep + AppVeyor 64-bit Miniconda) (#360)
Bug fixes: Fix
TypeError: bad operand type for unary ~: 'slice'inplotutils.summary_plotwhen called withformation_cycles=Falseor0(#366)Exporters:
to_bdfaccepts abdf_unitskeyword to control units written into the BDF file (#365)
1.0.2#
Batch:
only_selectedkeyword added for concatenating summaries choosing only selected cells in the pages (selected==1)General: Add option to specify custom_log_path and path to logging config json in get() (#326) by @morrowrasmus
Batch: implement wide format for collectors to csv
Batch: adding more columns to pages (model, selected, nom_cap_specifics)
General: Implemented lazy import to speed up loading of cellpy
General: Added _absolute cols in the summary
General: Add basic support for reading parquet for custom instruments (#322) by @morrowrasmus
Utils: General improvements in plotutils
General: Dropped support for python 3.9 and added support for python 3.12 (and probably beyond) by upgrading
OtherPathsBug fixes.
1.0.1#
Utils:
example_datanow includes auto-download of example dataGeneral: supports only python 3.10 and up to 3.11
Batch:
nakedandinit(empty=True)easier method for creating batch with empty pagesFile handling: new fix in
find_filesBatch / Utils: refactored and updated
Collectors(usingplotly)Batch: new summary plotter (using
plotly)Batch: new convenience function for automatically creating batch from batch-file if file exists.
Batch: added
markanddropmethodsCLI: added possibility to use custom jupyter executable
Added checks (
c.has_xxx) for checking if data has been processed correctly / fix errors in raw/semi-processed data.Added possibility to filter on C-rates (
c.get_cycles)Added experimental feature
c.total_time_at_voltage_levelfor calculating total time at low/high voltageAdded experimental instrument reader for neware xlsx files (hopefully not used much because it is very slow)
Added try-except block for ica post-processing step and add if-clause (suggested by Vajee)
Fixed several smaller bugs and improved some of the functionality (most notably in
c.get_cap)Added CI for macOS
Added conda package including
sqlalchemy-accessImproved plotting tools
Improved documentation
Improved feedback from the CLI
1.0.0 (2023)#
Unit handling: new unit handling (using pint)
Unit handling: renaming summary headers
Unit handling: new cellpy-file-format version
Unit handling: tool for converting old to new format
Unit handling: parsing input parameters for units
Templates: using one repository with sub-folders
Templates: adding more documentation
File handling: allow for external raw files (ssh)
Readers: neware.txt (one version/model)
Readers:
arbin_sql7(experimental, @jtgibson91)Batch plotting: collectors for both data collection, plotting and saving
OCV-rlx: improvements of the OCV-rlx tools
Internals: rename main classes (
CellpyData->CellpyCell,Cell->Data)Internals: rename
.cellproperty to.dataInternals: allow for only one
Dataobject prCellpyCellobjectCLI: general improvements and bug fixes
CLI: move editing of db-file to the edit sub-command
0.4.3 (2023)#
Neware txt loader (supports one specific format only, other formats will have to wait for v.1.0)
0.4.2 (2022)#
Changed definition of Coulombic Difference (negative of previous)
Updated loaders with hooks and additional base class
TxtLoaderwith configuration mechanismSupport for Maccor txt files
Supports only python 3.8 and up
Optional parameters through batch and pages
Several bug fixes and minor improvements / adjustments
Restrict use of instrument label to only one option
Fix bug in example file (@kevinsmia1939)
0.4.1 (2021)#
Updated documentations
CLI improvements
New argument for get_cap:
max_cycleReverting from using Documents to user home for location of prm file in windows.
Easyplot by Amund
Arbin sql reader by Muhammad
0.4.0 (2020)#
Reading arbin .res files with auxiliary data should now work.
Many bugs have been removed - many new introduced.
Now on conda-forge (can be installed using conda).
0.4.0 a2 (2020)#
Reading PEC files now updated and should work
0.4.0 a1 (2020)#
New column names (lowercase and underscore)
New batch concatenating and plotting routines
0.3.3 (2020)#
Switching from git-flow to github-flow
New cli options for running batches
cli option for creating template notebooks
Using
ruamel.yamlinstead ofpyyamlUsing
python-box> 4Several bug-fixes
0.3.2 (2019)#
Starting fixing documentation
TODO: create conda package
TODO: extensive tests
0.3.1 (2019)#
Refactoring - renaming from
dfsummarytosummaryRefactoring - renaming from
step_tabletostepsRefactoring - renaming from
dfdatatorawRefactoring - renaming
cellpy.datatocellpy.getUpdated save and load cellpy files allowing for new naming
Implemented cellpy new and cellpy serve cli functionality
0.3.0 (2019)#
New batch-feature
Improved make-steps and make-summary functionality
Improved cmd-line interface for setup
More helper functions and tools
Experimental support for other instruments
invoke tasks for developers
0.2.1 (2018)#
Allow for using mdbtools also on win
Slightly faster find_files using cache and
fnmatchBug fix: error in sorting files when using
pathlibfixed
0.2.0 (2018-10-17)#
Improved creation of step tables (much faster)
Default compression on cellpy (hdf5) files
Bug fixes
0.1.22 (2018-07-17)#
Parameters can be set by dot-notation (
python-box).The parameter Instruments.cell_configuration is removed.
Options for getting voltage curves in different formats.
Fixed python 3.6 issues with Read the Docs.
Can now also be used on posix (the user must install
mdb_toolsfirst).Improved logging allowing for custom log-directory.
0.1.21 (2018-06-09)#
No legacy python.
0.1.0 (2016-09-26)#
First release on PyPI.