History¶
[Unreleased]¶
-
Sync conda env files with
pyproject.toml: pincellpycore ==0.2.4,sqlalchemy >= 2.0.0, andxlrd >= 2.0.1. Addxlrd>=2.0.1to install requires (old.xlsloaders). (#969) -
Zensical API pages no longer show raw Sphinx roles (
:class:,:meth:,:func:); library docstrings use markdown code spans. (#967) -
Batch docs start from
b = batch.load(...)(whatbcan do, includingb.plot()) instead of a "Facade" heading. PublicBatchmethods have Shift-Tab docstrings. (#963) -
batch.loadno longer treats a filefinder miss as success: cells with no raw files and no local.cellpyareFAILED(not an emptyLOADEDcell),find_fileswarns with the labels, and load warns pointing atbatch.result.report(). (#962) -
Missing
env_fileis named in theUnderDefinedremote-auth error (and a load-time warning) instead of only mentioningCELLPY_PASSWORD/CELLPY_KEY_FILENAME. (#961) -
Batch.drop(anddrop_cells_marked_bad) remove the cell from the store, not just the cache, soplot/summaries/reportwork without a followingupdate().mark_as_badstays a session flag. (#952) -
Collected summary y-axis titles include units (
Charge Capacity (mAh/g),Coulombic Efficiency (%)).spread=Truelegends usecustom_group_labels=, and facet rows follow the collectedcolumns=order top to bottom. (#947) -
Collection.plot(backend="matplotlib")no longer raisesTypeError: warn_once() missing 1 required positional argument. It keeps aliasing to the seaborn layout path (and now actually returns a figure - the y-label mapper crashed on the summary path). (#925) -
cycles_collector(b).plot(layout="per_cell")follows the shared cycle legend policy: more thanlegend_cycle_limitcycles (default 8, the same as the single-cellcycles_plot) get a colorbar instead of a legend hundreds of entries long.force_colorbar/force_legendoverride. (#928) -
Grouped summary collections plot the way they were collected: facets follow the
columns=order instead of coming out alphabetical (derived series such as the CV split or a normalized retention curve keep their own order after the requested ones),custom_group_labels=reach the legend (integer and string group ids now match; an unlabelled group keeps its id), and the legend title of a grouped summary is Group rather than Cell.legend_title=andorder_variables=still override. (#923) -
cellpy setupreports one line per real action instead of narrating itself. The parameter dump (init_filename,dst_file,not_relative, …) moved to--verbose, a dry run states each file once instead of twice in two formats, and--silentis now genuinely silent - it used to stop the questions but still print ~25 lines. A per-command--silent/--debugnow also reaches the structured output, not only the plain lines. Copy pass over the remaining commands (edit,new,pull,serve,setup migrate): no more[cellpy] (cmd)prefixes, 80-column rules, apologies orRUNNING SOMETHING ELSEdebug prints, and several bareprint()calls that bypassedecho=(and--silent) now go through it.cellpy new --listshows template locations instead of Python tuples,cellpy pullwith nothing selected andcellpy edit <unknown>are real usage errors (stderr, exit 2). (#891) -
cellpy infoandcellpy info --checkreport rather than narrate. The check run is one line per check with a symbol, a short detail and a hint when it fails, closing withN of M checks passed- instead of=== checking ===banners, 80-column rules, a page of probe output per check and afailed!!!!line that shipped with a strayf. The probe narration is still there under--verbose.cellpy info --checknow exits 1 when a check fails (it always exited 0), so it can be used in a script. A path setting that may be remote is now only skipped when the value actually is remote, so a broken localcellpydatadiris reported instead of excused. Output lines changed:[cellpy] version: Xis nowcellpy X, and[cellpy] -> <path>is nowconfig <path>. (#891) -
executor="processes"writes.cellpyin the worker on a raw load and lazy-reopens on the parent, sobatch.load(..., save_cellpy=True)no longer crashes withNone.save. CachedNoneis not treated as loaded. (#920) - Fix batch tqdm bars: thread children start when a worker runs (not on
submit) and complete before close so Jupyter does not leave red ⅔
widgets; the overall bar
reset()s its total after the journal exists so 4/25 no longer looks full.batch.loaddocuments when to useexecutorand thatconfig.batch.auto_use_file_listneedsprojectto match the raw folder name exactly. batch.load/Batch.updateshow tqdm progress on a TTY or in Jupyter (progress=Noneauto,Falseoff,Trueforce, or a callable). Overall bar covers journal → search → cells → persist; per-cell bars cover copy / parse / save.executor="threads"draws one child bar per in-flight cell;processeskeeps the overall bar only. The 3-argon_progresscallback is unchanged. (#916)- CLI: new global
--quiet/-q,--verboseand--no-coloroptions.--quietreports problems and the output you asked for (cellpy infostill answers) and drops progress chatter; colour is otherwise automatic and honoursNO_COLOR.cellpy runwithout a NAME, or with a NAME but no--journal/--key/--folder/--cellpy-project, is now a real usage error on stderr with exit code 2 — it used to print hand-made usage text (or a flag dump and an apology) to stdout and exit 255 or 0.cellpy convertreports a rejected--toon stderr. (#891) - Figure export is discoverable from a collector:
BatchCollector.to_image()returns image bytes andBatchCollector.save_figure(path)/Collection.save_figure(path)write one to disk..save()still writes frame +meta.jsononly, and now says so and names the figure API. (#926) Batch.export_project(destination)writes a shareable.cellpy+ journal bundle (2.x replacement forduplicate_cellpy_files). (#878)- Run the real
essentialandfullCI gates once for every PR targetingmasterand everymasterpush; remove same-named docs-only no-op checks that could mask test results. (#876) - Validate collected
layout=/kind=/method=(raise on unknown values);layout='film'aliaseskind='film'so apps no longer get a silent wrong line plot. (#874) spread_plot: mean traces get a realhovertemplate(group/cell, variable, cycle, mean, std); Upper/Lower Bound band traces usehoverinfo='skip'. (#875)- Collector help is usable from Jupyter:
summary_collector,cycles_collector,ica_collectoranddva_collectorspell out the kwargs people actually pass (columns,group_it,custom_group_labels,rate,cycles,mode,voltage_resolution, …) in their signature and a Google-style docstring, and point atSummaryOptions/CurveOptions/IcaOptionsfor the rest. Shift-Tab no longer shows a one-line wrapper and**overrides. (#924) summary_collector(b, family="fullcell_standard_gravimetric")(ory=, thesummary_plotalias) builds the collection from a registered plot family, resolved against the first loaded cell's summary schema. Explicitcolumns=/options=still win; an unknown name raises the sameValueErrorthat lists the known families. (#927)- Fix scheduled CI: keep
sqlalchemy-accessWindows-only in conda env files, and installlegacy-files(PyTables) in the scheduled pip matrix. (#885) - Iterative fixes: document for devs how to add plots. (#892)
arbin_sql_h5two-stage load reads the export once:parse()caches the HDF frames and the temp copy for the followingloader(),parse()honoursrefuse_copying, and when the harmonize prefetch succeeds the legacy row-wise datetime decode (whose only product is a raw frame that is discarded) is skipped. Prefetch failure still takes the full legacy path. (#902)- Remote loads are cheaper: an
OtherPathbuilds its credentialed filesystem once and reuses it foris_file/stat/copy, andfrom_rawno longer STATs a remote raw file it is about to copy (the copy raises if it is missing). Missing local files still raiseNoDataFound. (#901) config.batch.auto_use_file_listis wired intojournal_from_db/find_files: when enabled (default stays false) the raw-file directory is dumped once — scoped to the batchprojectby an exact join — and every cell is matched against that list instead of searching the tree per cell. A missing project folder raises with the joined path instead of producing an empty journal. (#900)- Docs:
batch.load(..., executor="threads")and the other measured speed knobs (auto_use_file_list,save_cellpy, cold reopen) are documented for agents; CONTRIBUTING warns about a mixed pip/condapyarrow. (#903) - Per-cell
search_for_filessearches sub-folders withrglob(..., files_only=True), so a remote search can use the singlefind -Llisting instead of walking the tree per cell. (#899) - v9
.cellpywrites parquet members with zstd level 3 so new files stay near the old DEFLATE size without a second zip compressor. Snappy members from #898-era files still load. (#912) - v9
.cellpywrites its parquet members withZIP_STOREDinstead of DEFLATE-ing already-compressed parquet, cutting seconds off everysave.meta.jsonstays deflated; the file format is unchanged. (#898) - Remote
rglob(..., files_only=True)keeps thefind -Llisting whenfindexits 1 because a sibling directory was unreadable, instead of discarding it and falling back to the slow SFTP walk. (#897) - Example notebooks use the 2.1 schema and public APIs (
c.schema,potential/cycle_num/step_type,cellpy.readers.data_structures, registeredsummary_plotfamilies).cellpy.getdocstring examples load.cellpyfiles and passnominal_capacity=. (#940)
[2.1.2] - 2026-08-09¶
Patch release — plotting and collect improvements for app builders, config and
CLI correctness fixes, and safer cellpy-file writes. Additive, no breaking
changes. The interim v2.1.1.post7 / v2.1.1.post8 tags and the v2.1.2a1–
v2.1.2a4 pre-releases are folded into this section.
Plotting and collect¶
PlotFamily.summary_options(hdr)returns readySummaryOptions, socollect_summaries(batch, options=family.summary_options(hdr))produces the columns a family declares. Families now carry the CV partition they need (*_split_constant_voltageand the full-cell families no longer depend on the caller knowing to passpartition_by_cv=True), and the syntheticmod_01_*retention column is materialised by a real transform. On the demo cell the number of registered summary families an app can actually plot goes from 8/20 (defaults) to 15/20 — the rest lack*_absolutesource data.transforms()is documented as thesummary_plotnormalization spec, not a collect transform. (#868)- New
cellpy.collect.normalize_column_on_max, the counterpart ofnormalize_columnfor normalising against a column's own maximum. (#868) raw_plotcan now be bounded:cycles=selects cycles (as the other plot families already allow) andmax_points=thins the traces with min/max decimation per bucket, so spikes survive where plain striding would drop them. Both are plumbed throughRawPrepareConfig, and the cycle filter runs before the frame is copied. On the bundled demo cellplot_type="full"drops from 18 MiB of figure JSON to 0.33 MiB atmax_points=5000. (#867)cellpy.collect.collect_dva: multi-cell DVA collection (mirrorscollect_ica), returning aCollectionwith the sameCollection.plot()/ grouping / save entry points;dva_collectorconvenience wrapper. (#863)- In-memory static figure export:
collection.to_image/cellpy.plotting.write_image(PNG/SVG/PDF bytes). (#818) - ICA plotter: honour
directionfor line layouts, includingdirection='both'. (#821) ica_plot/dva_plot: dash discharge (dotted) vs charge (solid) whendirection='both'so the two half-cycles stay distinguishable on a static export. (#862)- Pretty-print cycles collector facet strips (
Cycle N/ cell label, notcycle_num=). (#820) - Honour
share_y/match_axeson collected summaryspread_plot. (#817) - Bug fix (collect):
group_it=Trueaverages multi-member groups even when some groups are singletons. (#816)
Configuration and CLI¶
cellpy info,cellpy edit configandcellpy info --checknow act on the config file that is actually loaded (cellpy.tomlbefore a legacy.conf), and name a shadowed legacy file instead of pointing at it. (#851)cellpy info --configlocnames a projectcellpy.tomlwhen one applies (and outranks the user file). (#853)config.override()is thread-/task-local viacontextvars(no cross-talk between concurrent jobs). (#850)- Security: config file dump/load no longer persist or accept legacy Arbin
SQL_PWD/SQL_UIDunder[instruments](env-only credentials). (#849) - Keep default
cellpy setupoff the reader stack:--check/--depsare opt-in;--no-depsdeprecated. (#839) - Speed up CLI cold start: lazy package/CLI imports so
cellpy info --versionno longer loads the full reader stack. (#837)
Data and files¶
- Atomic
.cellpy/.h5writes:savestages next to the destination and replaces it only when complete, so an interrupted save no longer corrupts or destroys the file. (#845) refresh_after+SUMMARY_META_DEPENDENCIES: rebuild meta-dependent summary columns after mass / area / nominal-capacity / cycle-mode edits without a fullmake_summary(). (#846)cellpy.get: wheninstrument=is set, do not auto-pick the native.h5/.hdf5format. (#819)
Documentation¶
-
Tutorial notebooks are no longer duplicated. The top-level
examples/folder holds the single maintained copy — the one the docs link to as a download — anddocs/examples/now contains only generated markdown, figure directories and screenshots.dev/render_example_notebooks.pyrenders fromexamples/intodocs/examples/, covering every tutorial, so08_batmo_bdfand09_loading_pec_datagain documentation pages. The batch tutorial moves toexamples/batch_utility/cellpy_batch_processing.ipynb(page:examples/batch_utility/cellpy_batch_processing.md), and committed run artifacts underdocs/examples/(cellpy files, dumps, output CSVs) are gone.09_loading_pec_datano longer sets the removedprms.Reader. (#869) -
Release-prep documentation sweep. The Incremental capacity analysis and Batch processing tutorials taught API that was removed in 2.1 and could no longer be run as written; both notebooks were rewritten onto the current API, re-executed, and re-rendered, so their code, tables and figures are real again (
prms.Paths->cellpy.config.paths,collectors.Batch*Collector->cellpy.collectwith.show()->.plot(),ica.dqdv_cycle/dqdv_cycles/dqdv_np->ica.dqdv,y="dq"->y="dqdv",get_cap().voltage->.potential, and polars-aware access tob.summaries). Also corrected the frame-type claim in The fundamentals of cellpy (pandas per-cell, polars incellpy.collect, parquet on disk), nine factual errors in the About loaders developers-guide section, and "deprecated, removal in 2.1" wording in the migration guides for API that has since been removed. (#866)
Chores¶
- Ignore stray local leftovers
cellpy_batch_test_batch.jsonandtestdata/hdf5/20160805_test001_45_cc.cellpy. (#855)
[2.1.1.post6] - 2026-08-02¶
- Batch load:
AUTOprefers existing.cellpy(newNEWESTfor freshness checks),force_recalcremakes steps/summary, and skip rewriting cellpy files already loaded from disk. (#825)
[2.1.1.post4] - 2026-07-31¶
Post-release of 2.1.1 — batch JSON load path, metadata peek, ingestion-form schema.
-
cellpy.instrument_meta_schema(instrument)describescellpy.getmetadata knobs for building per-instrument ingestion forms. (#800) -
Lightweight
cellpy.read_meta(path)peeks v9 / HDF5 cellpy-file metadata without loading raw/steps/summary frames. (#799) -
Batch: load BatBase / custom JSON journals via
cellpy.batch.load(..., db_reader=...)with file search after read (reader=alias). (#345) -
Add issue-flow as a uv
devdependency so agents get the CLI fromuv sync/uv run issue-flow. (#809) -
App-friendly collected figures: theme / label / height hook (or pass a FigureSpec). (#801)
[2.1.1.post3] - 2026-07-30¶
Post-release of 2.1.1 — silence loader-discovery WARNING spam for apps.
list_instruments()is quiet by contract: expected loader-probe skips (noDataLoader/ missing custom def) log at DEBUG on the module logger; the scan usescreate_all(quiet=True)so apps no longer seeWARNING:root: Could not create loader …on every call. (#786)
[2.1.1.post2] - 2026-07-30¶
Post-release of 2.1.1 — collected summary facet y-axis controls for apps.
- Per-panel y-limits (and clearer
share_y) for collected summary facet plots. (#804)
[2.1.1.post1] - 2026-07-29¶
Docs-only post-release of 2.1.1 — no API, schema, or runtime changes.
- Backfill
HISTORY.mdfor the already-shipped 2.1.1 and 2.1.0.post1 releases. (#802)
[2.1.1] - 2026-07-29¶
Patch release — app-builder fixes and conveniences (gathered while building on 2.1.0.post1). Additive, no breaking changes.
- Bug fix (collect): group-averaged collected summaries plot again —
Collection.plot()/plot(spread=True)render group-keyedmean±stdframes instead of raisingKeyError 'cell'. (#785) cellpy.collect.from_cells()(+Batch.from_cells): build a batch from already-loaded in-memoryCellpyCellobjects. (#787)Collection.is_grouped/meta.grouped: whether group-averaging actually happened. (#790)Collection.save()supportsxlsxandjson(was parquet/csv only). (#789)CurveOptionsgainsmode/method, forwarded per cell toget_cap(parity with the single-cell call). (#788)cellpy.list_instruments(): quiet app-facing listing →[{"id", "label", "models", "suffixes"}], no per-module warnings. (#786)- App/agents guide: note on the polars/pandas frame boundary and quieting cellpy's logger/warnings. (#791)
[2.1.0.post1] - 2026-07-28¶
Docs-only post-release of 2.1.0 — no API, schema, or runtime changes.
- Retire
v2-docs-stable: docs land onmaster; RTD stable tracks release tags. (#775) - Strip issue-tracker references and migration narrative from package docstrings so the API reference reads cleanly. (#771)
- Document Read the Docs header release-badge behaviour (badge shows the live GitHub latest release; the RTD version switcher is the source of truth). (#776)
[2.1.0] - 2026-07-28¶
cellpy 2.1 (Stage 4)¶
- Batch / collect redesign. New top-level
cellpy.batch(journal / policy / runner / store / aggregate / outputs / facade) andcellpy.collect(options / collection / summary / curves / ica) packages replace theutils/batch_tools"farm/barn" machinery.cellpy.utils.batchandcellpy.utils.collectorsremain as permanent re-export shims. (#697–#708, #716) - Bug fix (collectors): cross-cell cycle collection no longer reassigns the
shared
cycleslist — a cell missing a requested cycle no longer drops that cycle for every cell after it. (#705) - New
Batch.tests/aggregate.combine_tests. (#711) -
Breaking — 2.0 deprecation shims removed (Epic E). Every shim that warned "removed in 2.1" is gone; see
docs/getting_started/migration_v2.0_to_2.1.md:CellpyCell.headers_normal/_summary/_step_table→c.schema.raw/.summary/.steps;make_new_cell()→CellpyCell.vacant(). (#715)- ICA 1.x shims (
Converter,dqdv_cycle/dqdv_cycles/dqdv_np, the legacydqdvkwargs, the duplicatedqcolumn) →ica.dqdv. (#714) - Plotting
interactive=,xlim=/ylim=,summary_plot_legacy, and the seaborn + bokeh backends removed (plotly + matplotlib remain). (#713) cellpy/utils/batch_tools/deleted; the DB-journal path is now native incellpy.batch. (#716)- The
prms.*global-mutation shim (prms.Paths/prms.Reader/ …) →cellpy.config(config.paths.x = …orconfig.override(...)). TheCellpyCell.mass/.nom_capproperty facades are kept. (#717)
-
Example data regenerated as v9. The downloadable example cells served via
cellpy.utils.example_data(CELLPY,OLD_CELLPY,RATE) are now v9.cellpy(zip-of-parquet) files instead of v8 HDF5.h5; same data, ~45% smaller.example_data.cellpy_file_path()/old_cellpy_file_path()/rate_file()now resolve.cellpyassets. (#718) -
Tried shipping marimo notebooks in the docs (#724); withdrawn — Zensical embeds could not keep a real marimo table/plot experience without hanging Pyodide or replacing widgets with non-marimo UI.
-
Clarify Neware docs: binary
.nda/.ndaxvianeware_nda(bundled fastnda) vs exportedneware_txtmodels. -
Iterative docs fixes: example notebook typos/hedges, GITT intro quote, and batch config note for 1.x vs
cellpy.toml. (#695). -
Loader golden oracles for host-local Arbin SQL datetime (
arbin_sql_h5) compare relative offsets / omitstart_datetime, so CEST regenerators and UTC CI agree (#768). - Shipped to PyPI and conda-forge; docs synced to
v2-docs-stable(#768).
[2.0.0] - 2026-07-26¶
- Stable cellpy 2.0.0. Native headers, v9 zip-of-parquet cellpy files
(v8 HDF5 still readable; write v8 via escape),
cellpycore==0.2.4, and the Stage-3 assembly close-out (#574). Soak tags:v2.0.0rc1,v2.0.0rc2. - Support: Python ≥3.13. The
v1.xline is bugfix-only for 12 months from this release date (decision #438-6). Seedocs/getting_started/migration_v1_to_v2.mdandDEPRECATIONS.md. -
Known limitation (#687):
scp:///sftp://URIs that use an OpenSSHHostalias (short name from~/.ssh/config) may fail DNS after the OtherPath → UPath switch. Workaround: put the real hostname in the URI and setCELLPY_KEY_FILENAME— documented indocs/getting_started/remote_paths.md. Fix tracked in #687. -
Speed up remote auto_use_file_list / OtherPath.rglob dump. (#690).
-
Follow directory symlinks in remote OtherPath.rglob so batch file discovery works under symlink project dirs. (#688).
-
Rate-limit noisy collector warnings from max_segments interpolation fallback and dqdv half-cycle failures. (#669).
-
Fix BatchICACollector fig_pr_cycle KeyError on cycle_num (use ICA cycle column). (#679).
-
Add agent usage chapter for library/app builders. (#682).
-
Update docs about data structure. (#680).
- Update docs and batch-loader examples for native step/raw headers (cellpy 2.0). (#676).
-
Pin
cellpycore==0.2.4(EFC summary columns); syncHeadersSummaryand pipeline_smoke goldens (#675). -
Iterative docs cleanup: landing pages, packaging/conda/dev guides, Mermaid and tutorial rendering, and a clean Zensical build (#673).
-
Report dry-run setup destinations without claiming that files were written (#666).
-
Align 2.0 release guides for a
v2.0.0rc1soak and record the Stage 3.17 gate audit (#574). -
Lock the file-format compatibility matrix (v8/v9 read/write, convert, pre-v8 freeze) (#573).
-
Complete cli_api extraction for remaining CLI commands (new, serve, setup, …) (#651).
-
Fix summary CV-split plots: use exclude_step_types and full−non_cv instead of dead selector_type (#654).
-
Wire Batch.plot to plotting and delete batch_plotters.py (#658).
-
Add ica_plot / dva_plot families on the new pipeline (#648).
-
Port raw_plot and cycle_info_plot to prepare→spec→render (#647).
-
Port cycles_plot to prepare→spec→render (#646).
-
Matplotlib backend; retire SeabornPlotBuilder; unify backend= (#639).
-
Port summary prepare path and flip summary_plot to prepare→spec→render (#638).
-
Generic plotly panel/formation layout backend (#637).
-
Add FigureSpec dataclasses and a PlotFamily registry (#636).
-
Tier-3 loader close-out:
biologics_mpr/batmo_bdfpasscheck_loader(native-projected adapters);ext_nda_readerparked;local_instrumentconfirmed as warn-only escape hatch (#561). -
Sync conda env files with
pyproject.toml: pincellpycore ==0.2.3from conda-forge (was PyPI 0.2.1), addpyyaml/paramiko/universal-pathlib, drop obsoletefabric(#628). -
Include plotting tests in the nightly Tier-3 matrix: drop the stale
test_plotutils_summary_plot--ignorefromci-scheduled.ymland setMPLBACKEND=Aggonconda-pytest/pip-install(#594). -
Docs: expand the 1.x→2.x migration guide (support matrix, config/
c.schema, ICA, plotting, alpha caveats, loader notes) and point atDEPRECATIONS.md(#572). -
Maccor txt / 2.0.0a5: zero capacities from a swallowed pandas-3
Series.updatefailure (#580, fixed #581). Cellpy files saved from Maccor raw on 2.0.0a5 may have zeros baked in — re-load from raw after upgrading. Onlymaccor_txt(split_capacity: True) was affected. -
ICA redesign (#566):
ica.dqdv()returns the long framecycle, direction, voltage, capacity, dqdv(dqduplicate deprecated); newica.dvdq(); failed half-cycles warn +frame.attrs["failures"]; old entry points shimmed to 2.1. Direction is cell-centric (#591). -
CLI:
cellpy convertdefaults to v9;--to {v9,v8}added; help is rich-formatted (Typer cutover #569).clickis no longer a direct dependency. -
Plotting on 2.0.0a5:
raw_plot/cycle_info_plotKeyError: 'voltage',summary_plot(x="cycle_index"), and in-memory summary corruption from CV-splity=sets are fixed (#593 / #567 Phase 0). Re-load in-memory cells that hit the CV-split bug; disk files were unaffected. -
Dependency budget (#570): drop required
python-box/ruamel.yaml/python-dotenv; move PyTables tocellpy[legacy-files](conda still ships pytables). Missing extra raisesOptionalDependencyErrorwith the install hint. -
Loaders: unknown undeclared vendor columns warn once (#599); Maccor model-one
Watt-hrmaps to energy (cumulative_charge_energy), not power (#599).harmonize()raises if a schema cast empties a column; newLoaderDeclarations.duration_columnsfor string durations (loader authors). -
Re-base collectors' drawing half onto
cellpy.plotting(#657).
[2.0.0a6] - 2026-07-22¶
-
Breaking:
CellpyCell.get_capnow returns nativecellpycorecurve columns (#540, native-headers flip Stage 1):voltage→potentialandcycle→cycle_num(capacity/directionunchanged). All in-repo consumers —plotutils.cycles_plot, the batch collectors,ica, and the CSV/Excel exporters — are updated; user code that indexes theget_capframe directly must rename. Seedocs/getting_started/migration_v1_to_v2.md. -
Removed the deprecated
cellpy.utils.easyplotmodule (#544). It was deprecated since 1.1 with removal scheduled for 2.0; usecellpy.utils.plotutilsandcellpy.utils.collectorsinstead. The module, its tests, its docs entry, and itsDEPRECATIONS.mdrow are gone. -
Step-type string literals use the
cellpycorevocabulary (#543, native- headers Phase-0 prerequisite):CellpyCell.list_of_step_typesis nowlist(config.STEP_TYPES)(was a hand-maintained duplicate of the 13 step-type names), and the step-tabletypecomparisons inutils/ocv_rlx.py/utils/helpers.pyuseStepType.CHARGE.value/.DISCHARGE.valueinstead of bare"charge"/"discharge"literals. Behavior-identical. -
Header column literals in
utils/helpers.pyandfilters/summary.pyuse header-object attributes (#538, native-headers Phase-0 prerequisite): the base-name string-keyedhdr_summary["charge_capacity"]-style lookups become attribute access, andfilter_summary'srate_columnsdefault is resolved fromHeadersSummary(was a hard-coded("charge_c_rate", "discharge_c_rate")tuple). Postfix/specific columns (*_gravimetric,areal_*) keep string-key composition. Behavior-identical. -
Journal-page column literals use
HeadersJournalattributes (#537, native- headers Phase-0 prerequisite): the string-keyedhdr_journal["mass"]-style lookups inbatch_plotters.pyandhelpers.pybecome attribute access (hdr_journal.mass, …) so a journal-header rename touches the header class only. Behavior-identical. -
Remote paths via
universal_pathlib(#375, #371):OtherPathis now a thin wrapper aroundUPath(fsspec/Paramiko) instead of Fabric. Supported schemes remainssh:///sftp:///scp://(scp aliased to sftp). Remoteexists/is_file/is_dirare truthful (no longer stubbed as always true). Saving a cellpy file to a remote URI raises a clear error. Credentials still come fromCELLPY_KEY_FILENAME/CELLPY_PASSWORD. Seedocs/getting_started/remote_paths.md. -
Units are per-cell now (#427):
get_cellpy_unitsreturns a freshCellpyUnitsper call (optionally seeded from its argument, which used to be silently ignored), so changing units on oneCellpyCell— directly, via the constructor, or viacellpy.get(units=...)— no longer changes them for every other cell in the session. -
Campaign merge supports
renumber_cycles=False(#529, unblocked by cellpycore 0.2.2): sources keep their original cycle numbers — the identifying key becomes(test_id, cycle)and cycle-keyed consumers see the union of matching cycles; data points are still offset to stay globally unique. Steps/summary group and window per test, and the merged object round-trips through v9. -
Dependency-injection tail of V2-09 (#520):
CellpyCell(core=..., instrument_factory=...)— the core seam and the loader registry are now constructor-injectable (defaults unchanged);register_instrument_readers()keeps an injected factory instead of silently rebuilding. ADR:.issueflows/04-designs-and-guides/cellpycell-di-restructuring.md. -
Split/drop-cycle helpers extracted from
cellreader.pyintocellpy.readers.slicing(#519, V2-09 follow-up):split,split_many,drop_from/drop_to,from_cycle/to_cycle,drop_edges,with_cycles,mod_raw_split_cyclemoved verbatim (instance-first functions, thin delegates keep the public API); new pin tests added where coverage was thin. -
Exporter family extracted from
cellreader.pyintocellpy.exporters.tabular(#518, V2-09 follow-up):to_csv/to_exceland the_export_*helpers moved verbatim (instance-first functions, thin delegates keep the public API); the near-dead_cap_mod_*helpers moved along with their removal deferred to #520. A strayprint(externals)debug line into_excelwas dropped. -
Native schema opt-in (#511, V2-11):
CellpyCell(native_schema=True)keeps frames in native cellpy-core column names and runs the polars engine directly — no legacy rename sandwich. Supported pipeline:from_raw/load→make_step_table→make_summary→save(v9). Legacy path stays the default; legacy-named consumers (get_cap, exporters, plotting, campaign merge) are not supported on a native-schema cell yet. -
cellpycore 0.2.2 sync: the legacy bridge now carries
test_idon steps and summary for all objects (core #136), so the #507 re-stamp workaround inmake_step_tableis removed and the campaign merger remaps the right-hand summary'stest_idonto its new ids (previously the merged, pre-recompute summary showedtest_id=0everywhere). -
Cellpy-file format v9 (#510, V2-13/14): default
save()writes zip-of-parquet +meta.json(.cellpy);load()still reads v4–v8 HDF5 and sniffs v9. FullTestMetaCollection(+ units/limits) persists on v9; campaign-merged multi-test_idobjects round-trip. Escape:.h5/cellpy_file_format="hdf5". Cellpy-ownedsave_meta_archive/load_meta_archive(core archive stubs stay stubs). User guide:docs/getting_started/migration_v1_to_v2.md. -
make_summarygainsexclude_step_types(#509, v2 theme V2-12): step-type prefixes (e.g.["cv_"]) whose per-cycle capacity contribution is subtracted from cycle-end charge/discharge capacities before derived columns — the core-native replacement (cellpy-core #54) for the removed selector-based exclusion. The deprecated no-effectexclude_types/exclude_steps/selector_type/selectorkwargs still only warn. Also fixes a latent load bug: older cellpy files with a double-nestedcycle_mode([['anode']]) are now unwrapped at the file-load boundary. - Slim
CellpyCell(#509, v2 theme V2-09): remove dead/experimental code — the_dev_update*family (broken call signatures, never wired), the module-level_check*/__main__dev-scratch harness,_export_cycles_old,_select_steps, the long-deadselect_steps/populate_step_dict(raisedDeprecatedFeaturesince 1.x), and the superseded_select_withoutlegacy exclusion. The capacity/curve getters (get_cap,get_ccap,get_dcap,get_ocv) moved verbatim to the newcellpy.readers.capacity_curvesmodule with thin delegate methods — public API unchanged, curve goldens byte-identical.cellreader.py: 5987 → 4778 lines (−20%). Follow-ups tracked separately: exporter extraction, split/drop extraction, dependency-injection restructuring. -
Top-level API (#509, v2 theme V2-10):
cellpy.getconfirmed as the sanctioned entry point (stale removal-TODO dropped);cellpy.merge_cellsandcellpy.print_instrumentsnow exported at package level. -
Loaders emit per-test metadata (#508, v2 Phase 2, themes V2-05/06/08):
from_rawnow routes loader-parsed metadata (testertest_ID,channel_index,creator,schedule_file_name) intometa_test_dependent(so it persists and surfaces inData.tests; the orphan attributes remain set for backward compatibility), stamps the compacttest_idgrouping key (0) onto raw (tester ids stay as provenance — note: this overwrites Arbin's per-row tester Test_ID values in the raw column), and records load provenance (uuid— new per load until #510 persists it,source_kind,source_type,source_uri,raw_file_names,loaded_datetime) that the derivedTestMetarecord now carries. Config-driven loaders stamp instrumentraw_unitson the returnedData(sharedinternal_settings.merge_raw_unitshelper). ArbinGlobal_Table.Commentsnow maps tometa_common.comment; the full vendor-column mapping (incl. deliberately dropped columns) is documented in the arbin_res module docstring. Loader goldens regenerated accordingly. -
Campaign merge (#507, v2 Phase 1-2, themes V2-03/V2-07):
CellpyCell.mergeis rewritten (old signature was dead code) —merge(cells, mode="campaign")folds different tests into one multi-test object: distinct compacttest_idper source stamped on raw (overwrites tester-assigned ids; provenance stays inmeta_test_dependent.test_ID), per-test metadata records inData.tests, globally renumbered cycles, offset data points, unshifted timelines, and no cumulative carry-forward (summaries window per test on recompute).mode="continuation"keeps the classic fold (identical tofrom_raw([f1, f2]), which is untouched). New non-mutatingmerge_cells()helper andtest_meta.cycle_ranges_per_test(). Step tables of campaign objects carry atest_idcolumn so the engine groups and windows per test end-to-end. Also fixes latent bugs in_append'smerge_step_tablebranch. -
Per-test metadata API (#506, v2 Phase 1, themes V2-01/02/04):
Data.testsexposes acellpycore.metadata.TestMetaCollectionkeyed bytest_id(active record derived from the legacy meta boxes, which stay authoritative; extra records stored in memory), withData.set_test_meta,Data.get_cycle_mode(test_id)/set_cycle_mode(mode, test_id)andData.active_test_id. v1-v8 cellpy files load as a single-test collection (test_id=0). Engine compute on objects mixing differentcycle_modes now raisesMixedCycleModesErrorinstead of silently applying one convention (per-test engine polarity: #507/#510). On-disk format v8 unchanged; only the active test's metadata is persisted (full collection persistence: #510). Adds the legacy<->core metadata mapping contract tests thatcellpycore.legacy.meta_mappingassigns to cellpy. Future vocabulary/export alignment target: BattINFO (BIG-MAP). -
Header single source (#505, v2 Phase 0 gate): drop the redundant module-level
HEADERS_NORMAL/HEADERS_SUMMARY/HEADERS_STEP_TABLEconstants incellreader.pyanddata_structures.py; use the instance attributes /get_headers_*()accessors frominternal_settingsinstead. -
Decommission the in-repo legacy summary engine (#385, v2 Phase 0 gate): remove
_make_summar_legacy,_generate_absolute_summary_columns,_ir_to_summary,_end_voltage_to_summaryand themake_summary(old=True)branch — the cellpy-core engine is the only summary path. Breaking: theoldkwarg is gone (1.x users keep it on thev1.xbranch). The arbin_sql_h5 test now runs on the core path (verified value-identical; core prunes 13 duplicate raw rows, 47→34). -
Stage 3.3: single-file raw loads default to
harmonize(parse())(Reader.use_harmonized_raw=True); Arbin wide-aux columns keep values underaux_<quantity>_<name>; vendordatapoint_numis preserved;batmo_bdfdecode runs inparse();arbin_sql_h5keeps all loader-stage rows. (#560)
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 tooling - Remove 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 helper - Stage 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 contract - Build: 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.utils - Batch: Batch plotting with multiple subfigures (#343, #344, #346)
- Batch: JSON db reader from batbase (
batbase_json_reader) - new database reader for JSON-based batch files - Batch: 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_collector - General: 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 new - Readers: JSON db reader now supports optional storage of raw JSON data via
store_raw_dataparameter - Readers: Added
raw_pages_dictandpages_dictproperties to JSON db reader for accessing data as dictionaries - Bug 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
OtherPaths - Bug fixes.
1.0.1¶
- Utils:
example_datanow includes auto-download of example data - General: supports only python 3.10 and up to 3.11
- Batch:
nakedandinit(empty=True)easier method for creating batch with empty pages - File handling: new fix in
find_files - Batch / 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
markanddropmethods - CLI: 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 voltage - Added 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-access - Improved 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.data - Internals: allow for only one
Dataobject prCellpyCellobject - CLI: 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 mechanism - Support 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_cycle - Reverting 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 ofpyyaml - Using
python-box> 4 - Several bug-fixes
0.3.2 (2019)¶
- Starting fixing documentation
- TODO: create conda package
- TODO: extensive tests
0.3.1 (2019)¶
- Refactoring - renaming from
dfsummarytosummary - Refactoring - renaming from
step_tabletosteps - Refactoring - renaming from
dfdatatoraw - Refactoring - renaming
cellpy.datatocellpy.get - Updated 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
fnmatch - Bug 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.