cellpy 2.1.3.post3__tar.gz → 2.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cellpy-2.1.5/.issueflows/01-current-issues/issue1015_original.md +7 -0
- cellpy-2.1.5/.issueflows/01-current-issues/issue1015_plan.md +21 -0
- cellpy-2.1.5/.issueflows/01-current-issues/issue1015_status.md +15 -0
- cellpy-2.1.5/.issueflows/02-partly-solved-issues/issue_fix_cellpycore026_original.md +14 -0
- cellpy-2.1.5/.issueflows/02-partly-solved-issues/issue_fix_cellpycore026_status.md +17 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-05.md +27 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-07.md +22 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-08.md +28 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_original.md +9 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_plan.md +38 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_status.md +13 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_original.md +7 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_plan.md +82 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_status.md +28 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_original.md +7 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_plan.md +91 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_status.md +56 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_original.md +17 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_plan.md +77 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_status.md +31 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue778_original.md +9 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue778_plan.md +129 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue778_status.md +38 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue937_original.md +61 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue937_plan.md +44 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue937_status.md +16 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue938_original.md +73 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue938_plan.md +117 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue938_status.md +17 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue948_original.md +41 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue948_plan.md +80 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue948_status.md +15 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue949_original.md +9 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue949_plan.md +126 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue949_status.md +18 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue960_original.md +7 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue960_plan.md +42 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue960_status.md +14 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue982_original.md +7 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue982_plan.md +39 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue982_status.md +13 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue983_original.md +23 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue983_plan.md +76 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue983_status.md +19 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue989_original.md +15 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue989_status.md +16 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue990_original.md +50 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue990_plan.md +37 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue990_status.md +19 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue991_original.md +40 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue991_plan.md +36 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue991_status.md +19 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue993_original.md +59 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue993_plan.md +40 -0
- cellpy-2.1.5/.issueflows/03-solved-issues/issue993_status.md +23 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/harmonized-raw-default.md +21 -0
- cellpy-2.1.5/.issueflows/04-designs-and-guides/instrument-availability.md +29 -0
- cellpy-2.1.5/.issueflows/04-designs-and-guides/optional-plotting-notebook.md +25 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-batch-summary.md +6 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-collected.md +7 -2
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/test-registry.md +61 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/v2-cellpycore-pin-gate.md +5 -4
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/AGENTS.md +21 -4
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/HISTORY.md +169 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/PKG-INFO +11 -6
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/_dbengine.py +43 -2
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/db.py +4 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/facade.py +10 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/journal.py +35 -3
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli_api.py +63 -64
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/collection.py +3 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/collector.py +3 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/options.py +5 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/summary.py +4 -2
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exceptions.py +3 -2
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/__init__.py +3 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/mpl.py +25 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/batch_summary.py +81 -20
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/collected.py +307 -107
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/figures.py +10 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/labels.py +43 -15
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/registry.py +14 -15
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/capacity_curves.py +7 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellreader.py +26 -23
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/data_structures.py +78 -36
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/dbreader.py +24 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_res.py +38 -4
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/harmonize.py +23 -7
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/ocv_rlx.py +15 -2
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/plotutils.py +4 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/pyproject.toml +6 -5
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/uv.lock +124 -115
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/zensical.toml +12 -1
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.aliases +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/commands/build.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/commands/create-original-issue-file.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/cellpy-core-migration.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/cellpy-workspace.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/graphify.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/issueflow-rules.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/kiss.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/this-project.mdc +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/caveman/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/gh-ci/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/grill-me/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-archive/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-auto/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-build/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-close/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-comments/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-cycle/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-doctor/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-epic/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-fix/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-init/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-issue/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-pause/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-pick/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-plan/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-review/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-status/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/issueflow-build/SKILL.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.dockerignore +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.editorconfig +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.env_example +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.gitattributes +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.gitignore +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/migrate_prms_calls.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/scan_hardcoded_headers.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/scan_member_usage.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post3/.issueflows/01-current-issues → cellpy-2.1.5/.issueflows/02-partly-solved-issues}/issue985_original.md +0 -0
- {cellpy-2.1.3.post3/.issueflows/01-current-issues → cellpy-2.1.5/.issueflows/02-partly-solved-issues}/issue985_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-09_archived_issues.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-31_archived_issues.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-07-31.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-08.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-09.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-25.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue459_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_original.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_status.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/atomic-file-writes.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/batch-load-orchestrator.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/bdf-export.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/build-and-versioning.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-architecture.excalidraw +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-branching.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-epic.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-workspace-repos.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpycell-di-restructuring.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/ci-tiers.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-api-echo-binder.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-light-startup.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/docs-on-master.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/essential-tests.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/filters-and-plot-filtering.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/marimo-docs.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/otherpath-upath.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-backends.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-cycle-legend.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-prepare.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-registry.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/testing-and-coverage.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/this-project.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/.gitkeep +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/epic567_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/epic896_plan.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/config.toml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/.readthedocs.yaml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/AUTHORS.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/CODE_OF_CONDUCT.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/CONTRIBUTING.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/DEPRECATIONS.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/LICENSE.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_data_structure.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_folder_structure.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_packaging_pypi.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_setup.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_conda_package.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_docs.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_loaders_and_instruments.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_various.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/index.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/01_getting_started_tutorial.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/02_read_cell_data.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/03_more_about_get.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/04_other_interactions.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/05_configuring.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/06_pandas.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/07_data_mining.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/08_the_cellpy_cmd.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basics.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/examples.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/index.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/01_arbin.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/02_maccor.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/03_PEC.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/04_Neware.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/05_biologics.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/06_custom.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_001.png +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_002.png +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_get_cap.ipynb +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_simple_plot.ipynb +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_templates.ipynb +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_xxx-checkpoint.ipynb +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/tips_and_tricks.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/batch.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/collectors.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/custom_file_loaders.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/easyplot.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig1.png +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig2.png +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/ica.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/plotting.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/templates.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/tut_ocv_rlx.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/formats.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/index.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/installation.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/usage.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/index.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/baselines/v1x_ubuntu_py313.json +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/check_baseline.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/conftest.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/paths.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/test_performance.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/_deprecation.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/_version.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/aggregate.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/layout.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/outputs.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/policy.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/progress.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/qc.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/result.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/runner.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/store.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli_ui.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/_summary_ops.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/cells.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/curves.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/dva.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/ica.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/credentials.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/legacy.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/loader.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/migrate.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/models.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/reference.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/session.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/sources.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/types.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/bdf.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/tabular.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/cycles.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/summary.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/ica.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/connections.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/otherpath.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/progress.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_alias_module.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_importing.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_module.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_syncronized.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_version.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/py.typed +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/LICENSE +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/btsda.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/cli.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/dicts.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/formats.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/main.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/nda.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/ndax.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/utils.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/version.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/log.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/logging.json +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/.cellpy_prms_default.conf +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/cell_schema.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/internal_settings.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/legacy/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/legacy/update_headers.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/prmreader.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/prms.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/base.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/plotly.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/context.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/cycle_legend.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/headers.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/curves.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/ica.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/raw.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/steps.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/summary.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/spec.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/theme.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/atomic.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/dtype.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/fids.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/format.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/keys.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/legacy_read.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta_archive.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/read.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/selectors.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/translate.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/v9.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/write.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/do.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/filefinder.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/SQL Table IDs.txt +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/_aux_map.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_7.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_config.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_csv.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_h5.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_xlsx.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/base.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/batmo_bdf.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/biologics_mpr.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/config_declarations.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/batmo_bdf_bdf.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_one.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_three.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_two.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_zero.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_one.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_two.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_zero.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/contract.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/custom.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/declarations.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/ext_nda_reader.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/hooks.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/biologic_file_format.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/local_instrument.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt_native.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_nda.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_txt.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_xlsx.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/pec_csv.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/post_processors.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/pre_processors.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/registry.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/testing.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/journal_layer.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/json_dbreader.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/merger.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/meta_resolver.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/native_core.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/provenance.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/slicing.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/sql_dbreader.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/test_meta.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/units.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/__init__.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/batch.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/collectors.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/diagnostics.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/example_data.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/helpers.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/ica.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/live.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/processor.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/template_registry.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/backfill_notebook_plotly_pngs.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/cellpy/meta.yaml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/cellpycore/meta.yaml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/make_bad_fixtures.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/plot_preview_common.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_curve_plots.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_ica_plots.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_plots.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_summary_plots.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/regenerate_goldens.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/render_example_notebooks.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/snapshot_cli_surface.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/snapshot_figure_specs.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/.gitignore +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/NOTES.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/_common.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/summarize_importtime.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_arbin_h5.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_cellpy_io.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_executors.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_filefinder.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_imports.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_one_cell.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_otherpath.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/Dockerfile.build-test +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/README.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/compose.yml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/data/hello.txt +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/data/nested/sample.txt +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/environment.yml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/environment_dev.yml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/github_actions_environment.yml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/noxfile.py +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/.github/workflows/draft-pdf.yml +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/.gitignore +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/Cellpy-Utils.jpg +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/CellpyCell.jpg +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/CellpyData.jpg +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/paper.bib +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/paper.md +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/scripts/build_test.sh +0 -0
- {cellpy-2.1.3.post3 → cellpy-2.1.5}/scripts/dev_sync.sh +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Issue #1015 — improve documentation
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/1015
|
|
4
|
+
|
|
5
|
+
I was looking at the summary_collector API docs and noticed that it is not any
|
|
6
|
+
links that takes you to the code (on github). I have seen other docs where that
|
|
7
|
+
is possible, and it is very helpful.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Issue #1015 — plan
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
API reference pages let the reader see the code behind each documented
|
|
6
|
+
object. Beyond the ask: iterate on the docs from a user's point of view
|
|
7
|
+
(battery scientist with limited Python), one PR per iteration.
|
|
8
|
+
|
|
9
|
+
## Iteration 1 (this PR): inline source
|
|
10
|
+
|
|
11
|
+
Set mkdocstrings-python `show_source = true` in `zensical.toml`. Every class
|
|
12
|
+
and function gets a collapsible "Source code in `<file>`" block with line
|
|
13
|
+
numbers. A GitHub-link variant (template overrides) was prototyped and
|
|
14
|
+
dropped: inline source answers the need without custom templates.
|
|
15
|
+
|
|
16
|
+
## Later iterations (not started)
|
|
17
|
+
|
|
18
|
+
Candidate topics, each its own branch/PR: troubleshooting page (common
|
|
19
|
+
errors), "which loader for my tester" table, units/mass/nominal-capacity
|
|
20
|
+
FAQ, glossary of columns (`c.schema`), batch quick-start for non-programmers,
|
|
21
|
+
plotting cookbook, saving/exporting to Excel/CSV, configuration walkthrough.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Issue #1015 — status
|
|
2
|
+
|
|
3
|
+
- [ ] Done
|
|
4
|
+
|
|
5
|
+
## What's done (iteration 1)
|
|
6
|
+
|
|
7
|
+
- `zensical.toml`: `show_source = true` — collapsible source block under
|
|
8
|
+
every class and function in the API reference.
|
|
9
|
+
- HISTORY entry.
|
|
10
|
+
- Local build: `No issues found`.
|
|
11
|
+
|
|
12
|
+
## Remaining work
|
|
13
|
+
|
|
14
|
+
- Iterations 2–10 (user-perspective docs improvements) per plan file.
|
|
15
|
+
- The issue's own ask is met after iteration 1 is merged.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Iterative fixes: New cellpy-core release
|
|
2
|
+
|
|
3
|
+
Source: local `/iflow-fix` session (GitHub issue create blocked in this Cloud
|
|
4
|
+
Agent environment — `gh` is read-only). Session name: New cellpy-core release.
|
|
5
|
+
|
|
6
|
+
## Original issue text
|
|
7
|
+
|
|
8
|
+
Interactive `/iflow-fix` session whose individual fixes are recorded in the
|
|
9
|
+
status markdown and landed together via `/iflow-close`.
|
|
10
|
+
|
|
11
|
+
**First fix (from the invoking message):** Cellpy next: bump the `cellpycore`
|
|
12
|
+
pin to the new PyPI release `0.2.6`, and drop the strict xfails on
|
|
13
|
+
`test_empty_tail_is_noop` (core#147) and
|
|
14
|
+
`test_gap_append_mid_step_equals_full_load` (core#148).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Status — Iterative fixes: New cellpy-core release
|
|
2
|
+
|
|
3
|
+
Interactive `/iflow-fix` session. GitHub issue was not created (`gh` write is
|
|
4
|
+
blocked in this environment). Work lands on `cursor/cellpycore-pin-0-2-6-4828`.
|
|
5
|
+
|
|
6
|
+
- [ ] Done
|
|
7
|
+
|
|
8
|
+
## Iterative fixes log
|
|
9
|
+
|
|
10
|
+
- **2026-09-08** — Pin `cellpycore` `0.2.5`→`0.2.6` in `pyproject.toml` /
|
|
11
|
+
`uv.lock`. Drop strict xfails on `test_empty_tail_is_noop` (core#147) and
|
|
12
|
+
`test_gap_append_mid_step_equals_full_load` (core#148). Update
|
|
13
|
+
`tests/README.md`, pin-gate doc, and `HISTORY.md`. Leave conda env YAMLs on
|
|
14
|
+
`0.2.4` (conda-forge latest).
|
|
15
|
+
- `uv sync --no-sources` → `cellpycore 0.2.6`
|
|
16
|
+
- `tests/test_incremental_update.py`: 7 passed (both former xfails now pass)
|
|
17
|
+
- `pytest -m essential`: 845 passed, 64 skipped, 0 xfailed
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Cycle status
|
|
2
|
+
|
|
3
|
+
- Queue spec: `yolo` (resolved `label:yolo`)
|
|
4
|
+
- Repo: `jepegit/cellpy` (`C:\scripting\cellpy-workspace\cellpy`), default branch `master`
|
|
5
|
+
- Failure policy: `onfail:stop`
|
|
6
|
+
- Started: 2026-09-05T19:25:00+02:00
|
|
7
|
+
- Finished: 2026-09-05T22:20:00+02:00
|
|
8
|
+
- Confirmed: yes (single consolidated confirm, 3 issues)
|
|
9
|
+
|
|
10
|
+
- [x] Done
|
|
11
|
+
|
|
12
|
+
## Queue (ordered)
|
|
13
|
+
|
|
14
|
+
- [x] #990 — cellpy new: honour no_input when the project directory does not exist — merged https://github.com/jepegit/cellpy/pull/994
|
|
15
|
+
- [x] #991 — Add cli_api.list_templates() returning the batch templates as data — merged https://github.com/jepegit/cellpy/pull/995
|
|
16
|
+
- [x] #993 — Docstring cross-references lost their module paths in #968 — merged https://github.com/jepegit/cellpy/pull/996
|
|
17
|
+
|
|
18
|
+
Blocked: none. Skipped (closed): none. No stop condition tripped.
|
|
19
|
+
|
|
20
|
+
## Notes
|
|
21
|
+
|
|
22
|
+
- Leftover `issue985_*` group (`- [ ] Done`) was swept from `01-current-issues/`
|
|
23
|
+
to `02-partly-solved-issues/` by the first `/iflow-init`.
|
|
24
|
+
- Every PR needed one `gh pr checks --watch` pass before `gh pr merge --squash`
|
|
25
|
+
succeeded (base branch policy requires the `essential` + `full` checks).
|
|
26
|
+
- Local branches `990-no-input-project-dir`, `991-list-templates-data`,
|
|
27
|
+
`993-dotted-docstring-refs` are left for `/iflow-cleanup`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Cycle status
|
|
2
|
+
|
|
3
|
+
- queue: yolo
|
|
4
|
+
- resolved: label:yolo
|
|
5
|
+
- repo: jepegit/cellpy
|
|
6
|
+
- onfail: stop
|
|
7
|
+
- started: 2026-09-07T19:33:00Z
|
|
8
|
+
- stopped: 2026-09-07T20:10:00Z
|
|
9
|
+
|
|
10
|
+
## Queue
|
|
11
|
+
|
|
12
|
+
- [x] #937 — Notebook tooling (ipykernel, matplotlib) is a hard runtime dependency — ~90 MB in a headless server image — merged https://github.com/jepegit/cellpy/pull/1002
|
|
13
|
+
- [~] #938 — Missing external tools fail silently: mdb-export raises bare FileNotFoundError, pyodbc ImportError hides two loaders — failed: not yolo-small (three independent deliverables; see 02-partly-solved-issues)
|
|
14
|
+
- [ ] #960 — Possible bugs in cellpy setup and configuration — not reached
|
|
15
|
+
- [ ] #982 — Default group name from cellpy_db — not reached
|
|
16
|
+
- [ ] #1000 — prepare for changes in batch journal json file — not reached
|
|
17
|
+
|
|
18
|
+
## Stop reason
|
|
19
|
+
|
|
20
|
+
Yolo scope check on #938 aborted: issue body is two features (mdb-export typed error + `list_instruments` availability API) plus an owner comment adding a third (`examplesdir` default). Cycle `onfail:stop`. Branch `938-missing-external-tools` holds the capture.
|
|
21
|
+
|
|
22
|
+
- [x] Done
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Cycle status
|
|
2
|
+
|
|
3
|
+
- queue: yolo (resolved `label:yolo`)
|
|
4
|
+
- repo: jepegit/cellpy
|
|
5
|
+
- onfail: stop
|
|
6
|
+
- started: 2026-09-08T06:58:00+02:00
|
|
7
|
+
- stopped: 2026-09-08T08:45:00+02:00
|
|
8
|
+
|
|
9
|
+
## Queue
|
|
10
|
+
|
|
11
|
+
- [x] #960 — Possible bugs in cellpy setup and configuration — merged https://github.com/jepegit/cellpy/pull/1004
|
|
12
|
+
- [x] #982 — Default group name from cellpy_db — merged https://github.com/jepegit/cellpy/pull/1005
|
|
13
|
+
- [x] #1000 — prepare for changes in batch journal json file — merged https://github.com/jepegit/cellpy/pull/1006
|
|
14
|
+
|
|
15
|
+
blocked: none
|
|
16
|
+
skipped: none
|
|
17
|
+
|
|
18
|
+
## Result
|
|
19
|
+
|
|
20
|
+
All three queued issues went through the full yolo chain and merged. Cycle never halted.
|
|
21
|
+
|
|
22
|
+
- #960 → https://github.com/jepegit/cellpy/pull/1004
|
|
23
|
+
- #982 → https://github.com/jepegit/cellpy/pull/1005
|
|
24
|
+
- #1000 → https://github.com/jepegit/cellpy/pull/1006
|
|
25
|
+
|
|
26
|
+
Local close of #1000 hit dirty `AGENTS.md` (unrelated indent). Discarded, then `git switch master` + `git pull --ff-only` landed squash `3d199790`.
|
|
27
|
+
|
|
28
|
+
- [x] Done
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Issue #1000: prepare for changes in batch journal json file
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/1000
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
We do not have any version label for the batch journal file. We should add it. Let us say that if the file misses the version label, it is version 1 (i.e. 1). It can also have the version label with 1 (and new files should be saved with the version number. Then when we decide to change the format, we can bump the version number.
|
|
8
|
+
|
|
9
|
+
Obviously, we also need to implement reading and saving the version number and prepare for possible version bumps.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Issue #1000 — plan: journal JSON version field
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Batch journal JSON files carry a format `version`. Missing → 1. New writes
|
|
6
|
+
use `JOURNAL_FORMAT_VERSION` (currently 1). Reads store it and warn when the
|
|
7
|
+
file is newer than this cellpy.
|
|
8
|
+
|
|
9
|
+
## Constraints
|
|
10
|
+
|
|
11
|
+
- Existing journals without `version` keep loading.
|
|
12
|
+
- Do not implement a v2 schema in this issue — only the hook.
|
|
13
|
+
|
|
14
|
+
### Prior art
|
|
15
|
+
|
|
16
|
+
- `JOURNAL_FORMAT_VERSION = 1` already in `cellpy/batch/journal.py` but unused.
|
|
17
|
+
- `read_journal` / `write_journal` — top-level `info_df` / `metadata` / `session`.
|
|
18
|
+
|
|
19
|
+
## Approach
|
|
20
|
+
|
|
21
|
+
1. Top-level JSON key `"version"` (integer).
|
|
22
|
+
2. `Journal.version` defaults to 1; `read_journal` fills it (`raw.get("version", 1)`).
|
|
23
|
+
3. `write_journal` always writes `JOURNAL_FORMAT_VERSION`.
|
|
24
|
+
4. If file version > `JOURNAL_FORMAT_VERSION`, `UserWarning` and still load.
|
|
25
|
+
|
|
26
|
+
## Files to touch
|
|
27
|
+
|
|
28
|
+
- `cellpy/batch/journal.py`
|
|
29
|
+
- `tests/test_batch_v3.py`
|
|
30
|
+
- `HISTORY.md` (close)
|
|
31
|
+
|
|
32
|
+
## Test strategy
|
|
33
|
+
|
|
34
|
+
`uv run pytest tests/test_batch_v3.py` plus `uv run pytest -m essential`.
|
|
35
|
+
|
|
36
|
+
## Open questions
|
|
37
|
+
|
|
38
|
+
None.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Plan — issue #1008: nom cap specific lost (batch, xlsx db)
|
|
2
|
+
|
|
3
|
+
Branch: `1008-batch-nom-cap-specifics`. Milestone `v2.1.4.post`.
|
|
4
|
+
|
|
5
|
+
## Diagnosis (2026-09-08)
|
|
6
|
+
|
|
7
|
+
Traced db → journal → spec → `cellpy.get` on master with the reporter's own
|
|
8
|
+
config (`cellpy.toml`: `db_cols.nom_cap_specifics = "nom_cap_specifics"`) and db
|
|
9
|
+
(`2025_Cell_Analysis_db_001.xlsx`, 976 gravimetric / 28 areal rows):
|
|
10
|
+
|
|
11
|
+
- `Reader.get_nom_cap_specifics(id)` returns the sheet value.
|
|
12
|
+
- `_dbengine._create_pages_dict` → `Journal.pages["nom_cap_specifics"]` →
|
|
13
|
+
`policy.resolve_specs` → `runner._get_kwargs` → `cellpy.get(nom_cap_specifics=…)`
|
|
14
|
+
keeps the value; journal JSON round-trip keeps it.
|
|
15
|
+
- `batch.load()` end-to-end on the test db with an `areal` column: cells get
|
|
16
|
+
`nom_cap_specifics="areal"`, `cellpy_units.nominal_capacity="mAh/cm**2"` on
|
|
17
|
+
raw load, `.cellpy` AUTO reload and journal autoload.
|
|
18
|
+
|
|
19
|
+
So the value is not lost by the pipeline itself. Two ways it shows up as `null`
|
|
20
|
+
in `b.pages`, both silent today:
|
|
21
|
+
|
|
22
|
+
1. **Journal autoload shadows the db.** `batch.load(name, project, …)` with
|
|
23
|
+
`allow_from_journal=True` (default) reuses `cwd/cellpy_batch_<name>.json`
|
|
24
|
+
when present and never opens the xlsx — logged at INFO only. A journal
|
|
25
|
+
written before the db column was filled (or by an older cellpy that did not
|
|
26
|
+
emit the column, e.g. `cellpy_batch_celf_mar.json` from July has no
|
|
27
|
+
`nom_cap_specifics` key) reads back as a `null` column. Even when the user
|
|
28
|
+
passes `db_reader=` / `batch_col=`, the stale journal still wins.
|
|
29
|
+
2. **Configured column name ≠ sheet header.** `Reader._pick_info` swallows the
|
|
30
|
+
`KeyError` at `logging.debug` and returns `None` for every cell → `null`
|
|
31
|
+
column → default `gravimetric` at load. No warning.
|
|
32
|
+
|
|
33
|
+
Side finding (out of scope, file follow-up): `journal_from_db(…, skip_file_search=True)`
|
|
34
|
+
with the Excel reader crashes in `simple_db_engine` (`pd.DataFrame(pages_dict)`:
|
|
35
|
+
`All arrays must be of the same length` — `raw_file_names` / `cellpy_file_name`
|
|
36
|
+
stay `[]`).
|
|
37
|
+
|
|
38
|
+
## Approach (KISS, no behaviour change on the happy path)
|
|
39
|
+
|
|
40
|
+
1. `cellpy/readers/dbreader.py` — `_pick_info`: on missing column emit
|
|
41
|
+
`warnings.warn(...)` **once per column per reader instance** (keep the
|
|
42
|
+
`None` return so batches still build). Message names the configured key
|
|
43
|
+
(`config.db_cols.<field>`) and the sheet header it expected.
|
|
44
|
+
2. `cellpy/batch/facade.py` — `_load_after_progress`: when the journal is
|
|
45
|
+
autoloaded **and** the caller signalled a db read (`db`, `db_reader`,
|
|
46
|
+
`reader`, `batch_col` or `reader_path` given), `warnings.warn` that the
|
|
47
|
+
database was not consulted and that `allow_from_journal=False` re-reads it.
|
|
48
|
+
Plain `batch.load(name, project)` keeps the INFO log (fast-path reopen).
|
|
49
|
+
3. Tests (essential):
|
|
50
|
+
- `tests/test_batch_v3_facade.py`: autoload + `db_reader=` → `UserWarning`;
|
|
51
|
+
autoload without db args → no warning.
|
|
52
|
+
- `tests/test_dbreader.py` (or nearest existing dbreader test module):
|
|
53
|
+
`Reader(db_frame=…)` missing the configured column → one `UserWarning`,
|
|
54
|
+
second pick of same column silent; and a regression check that a present
|
|
55
|
+
`nominal_capacity_specifics` column flows into `_create_pages_dict`.
|
|
56
|
+
4. Docs: `HISTORY.md` bullet (close step); one line in
|
|
57
|
+
`docs/getting_started/agents.md` batch bullet + `AGENTS.md` mirror:
|
|
58
|
+
"`batch.load` reuses `cellpy_batch_<name>.json` in cwd when present;
|
|
59
|
+
`allow_from_journal=False` forces a db read."
|
|
60
|
+
5. Follow-up GitHub issue for the `skip_file_search=True` Excel crash.
|
|
61
|
+
|
|
62
|
+
## Files
|
|
63
|
+
|
|
64
|
+
- `cellpy/readers/dbreader.py`, `cellpy/batch/facade.py`
|
|
65
|
+
- `tests/test_batch_v3_facade.py`, `tests/test_dbreader*.py`
|
|
66
|
+
- `docs/getting_started/agents.md`, `AGENTS.md`, `HISTORY.md`
|
|
67
|
+
|
|
68
|
+
## Constraints
|
|
69
|
+
|
|
70
|
+
- No change to journal schema or defaults; `null` stays `null` (honest).
|
|
71
|
+
- Warnings, not exceptions — batches must still build with a partial db.
|
|
72
|
+
|
|
73
|
+
### Prior art
|
|
74
|
+
|
|
75
|
+
- `_dbengine.find_files` filefinder-miss `UserWarning` (#964) — same style.
|
|
76
|
+
- `#1000` journal `version` warning path in `journal.read_journal`.
|
|
77
|
+
|
|
78
|
+
## Open questions
|
|
79
|
+
|
|
80
|
+
- Should `db_reader=`/`batch_col=` given explicitly make the db **win** over the
|
|
81
|
+
autoloaded journal instead of just warning? Plan says warn only (smaller,
|
|
82
|
+
no surprise reload); flip to "db wins" if preferred.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Issue #1008 status — nom cap specific lost (batch, xlsx db)
|
|
2
|
+
|
|
3
|
+
- [x] Done
|
|
4
|
+
|
|
5
|
+
Branch: `1008-batch-nom-cap-specifics`. Plan accepted 2026-09-08 (warn-only variant).
|
|
6
|
+
|
|
7
|
+
## What's done
|
|
8
|
+
|
|
9
|
+
- Diagnosis: pipeline keeps the value (verified db → journal → spec →
|
|
10
|
+
`cellpy.get` → cell, incl. `.cellpy` reload and journal autoload). `null`
|
|
11
|
+
in `b.pages` comes from a cached `cellpy_batch_<name>.json` shadowing the
|
|
12
|
+
db (INFO-only before), or from a configured-vs-sheet column-name mismatch
|
|
13
|
+
swallowed in `Reader._pick_info`.
|
|
14
|
+
- `cellpy/readers/dbreader.py`: `_warn_missing_column` — one `UserWarning`
|
|
15
|
+
per missing sheet header per reader, naming the `config.db_cols.<key>`.
|
|
16
|
+
- `cellpy/batch/facade.py`: `_load_after_progress` warns when the journal is
|
|
17
|
+
autoloaded but `db` / `db_reader` / `batch_col` / `reader_path` / other db
|
|
18
|
+
kwargs were given.
|
|
19
|
+
- Tests (essential): `test_dbreader.py::test_missing_column_warns_once`,
|
|
20
|
+
`::test_nom_cap_specifics_column_reaches_pages`;
|
|
21
|
+
`test_batch_v3_facade.py::test_load_warns_when_journal_autoload_shadows_db`,
|
|
22
|
+
`::test_load_autoload_without_db_args_is_quiet`.
|
|
23
|
+
- Docs: `docs/getting_started/agents.md` batch recipe + `AGENTS.md` mirror.
|
|
24
|
+
- Follow-up filed: #1017 (`skip_file_search=True` crashes with Excel reader).
|
|
25
|
+
|
|
26
|
+
## Remaining work
|
|
27
|
+
|
|
28
|
+
- None.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Issue #1009 — plan (rev 2)
|
|
2
|
+
|
|
3
|
+
## Diagnosis
|
|
4
|
+
|
|
5
|
+
`summary_collector(b, family="fullcell_standard_gravimetric").plot()` draws 10
|
|
6
|
+
facets instead of the 4 the family declares, and even the declared layout is
|
|
7
|
+
one facet *per variable* where the user wants charge and discharge of the same
|
|
8
|
+
quantity in **one** panel.
|
|
9
|
+
|
|
10
|
+
Root causes:
|
|
11
|
+
|
|
12
|
+
1. `PlotFamily.summary_options` (`cellpy/plotting/registry.py`) strips the
|
|
13
|
+
`_cv` / `_non_cv` suffix off declared columns and requests the *base*
|
|
14
|
+
column with `partition_by_cv=True` — "only the CV part" is lost.
|
|
15
|
+
2. `collect_summaries` (`cellpy/collect/summary.py`) then keeps
|
|
16
|
+
`col`, `col_non_cv`, `col_cv` for **every** requested column, including
|
|
17
|
+
`coulombic_efficiency`.
|
|
18
|
+
3. `summary_plotter` (`cellpy/plotting/collected.py`) facets on `variable`,
|
|
19
|
+
so `charge_x` and `discharge_x` always land in separate rows.
|
|
20
|
+
|
|
21
|
+
Audit over all 20 `summary_plot` families (two `.res` cells, in-memory
|
|
22
|
+
batch): the 13 `capacities*` / `voltages` families collect exactly their
|
|
23
|
+
declared columns; all 7 `fullcell_standard*` families collect 10–12.
|
|
24
|
+
Single-cell `summary_plot(y=...)` is unaffected by 1–2 (selects `y_cols`
|
|
25
|
+
explicitly) and is out of scope for 3.
|
|
26
|
+
|
|
27
|
+
## Approach
|
|
28
|
+
|
|
29
|
+
### A. Collect exactly the declared columns
|
|
30
|
+
|
|
31
|
+
1. `summary_options`: keep declared names literally in `columns` (no suffix
|
|
32
|
+
stripping); still set `partition_by_cv` when a `_cv` / `_non_cv` name (or
|
|
33
|
+
`supports_cv_split`) is present. `mod_01_*` handling unchanged.
|
|
34
|
+
2. `collect_summaries`: expand `col → (col, col_non_cv, col_cv)` only when the
|
|
35
|
+
requested list names no CV variant itself; a list that spells out
|
|
36
|
+
`*_cv` / `*_non_cv` is taken literally. Existing
|
|
37
|
+
`columns=("charge_capacity",), partition_by_cv=True` still expands.
|
|
38
|
+
|
|
39
|
+
### B. Combine charge/discharge into one panel (`summary_plotter`, Plotly)
|
|
40
|
+
|
|
41
|
+
3. Panel key: split `variable` on `_`, drop the first token equal to
|
|
42
|
+
`charge` / `discharge` → panel; that token is the `direction`. Works for
|
|
43
|
+
prefix (`charge_capacity_gravimetric_cv`), suffix
|
|
44
|
+
(`potential_end_charge`) and mid-name
|
|
45
|
+
(`test_cumulated_discharge_capacity_loss_gravimetric`,
|
|
46
|
+
`mod_01_discharge_capacity_gravimetric`). No token → panel = variable,
|
|
47
|
+
direction none.
|
|
48
|
+
4. Before the backend call, rewrite `variable` to the panel key and add a
|
|
49
|
+
`direction` column. Everything keyed on `variable` (facets, `y_ranges`,
|
|
50
|
+
`order_variables`, label mapper, `spread_plot`) keeps working on panel
|
|
51
|
+
keys; `y_ranges` / `order_variables` given as original variable names are
|
|
52
|
+
translated the same way.
|
|
53
|
+
5. `px.line(..., line_dash="direction", line_dash_map={charge: solid,
|
|
54
|
+
discharge: dash})` when any direction is present. Trace names reduced to
|
|
55
|
+
the series (cell / group) with one legend entry per series; a second
|
|
56
|
+
Plotly legend (`legend2`, title "Direction") carries two style-only
|
|
57
|
+
entries: Charge (solid) / Discharge (dashed). `spread_plot` (grouped
|
|
58
|
+
mean/std) gets the same dash per direction.
|
|
59
|
+
6. Panel labels: `_pretty_variable_label` must recognise `capacity_gravimetric`
|
|
60
|
+
(no direction prefix) so units still appear → "Capacity (mAh/g)".
|
|
61
|
+
7. Opt-out: `combine_directions=False` on `summary_plotter` /
|
|
62
|
+
`Collection.plot` restores one facet per variable. Default **on** (this is
|
|
63
|
+
the requested layout; noted in HISTORY).
|
|
64
|
+
8. Seaborn backend: facets follow the panel rewrite; `style="direction"` only
|
|
65
|
+
when style is free (not `group_cells`). Matplotlib/bokeh summary paths
|
|
66
|
+
untouched.
|
|
67
|
+
|
|
68
|
+
Resulting facet counts: `fullcell_standard_*` 4 (CE, capacity, retention,
|
|
69
|
+
CV part); `capacities_*` 1; `*_coulombic_efficiency` 2; `*_with_rate` 2;
|
|
70
|
+
`*_split_constant_voltage` 3; `voltages` 1.
|
|
71
|
+
|
|
72
|
+
### C. Tests (essential)
|
|
73
|
+
|
|
74
|
+
- Registry/collect: tighten the family oracle in `tests/test_collect.py` to
|
|
75
|
+
reject *extra* columns; literal-list case for `collect_summaries`.
|
|
76
|
+
- Plot: unit tests for the panel/direction split; Plotly facet count and
|
|
77
|
+
dash mapping on a synthetic frame; `legend2` present with two entries;
|
|
78
|
+
`combine_directions=False` gives per-variable facets; `y_ranges` keyed by
|
|
79
|
+
original variable still applies.
|
|
80
|
+
- Update `tests/test_collected_summary_groups.py` fixtures that used
|
|
81
|
+
`cap_charge` / `cap_discharge` as separate facets (they now merge).
|
|
82
|
+
|
|
83
|
+
### D. Docs
|
|
84
|
+
|
|
85
|
+
`HISTORY.md` `[Unreleased]`, `AGENTS.md` / `docs/getting_started/agents.md`
|
|
86
|
+
batch bullet (combined panels + `combine_directions`), `test-registry.md`.
|
|
87
|
+
|
|
88
|
+
## Constraints
|
|
89
|
+
|
|
90
|
+
- No new `SummaryOptions` fields; family declarations unchanged.
|
|
91
|
+
- Legacy `plot_cycle_life_summary_plotly` (Batch `b.plot()`) untouched.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Issue #1009 — status
|
|
2
|
+
|
|
3
|
+
- [x] Done
|
|
4
|
+
|
|
5
|
+
## Diagnosis
|
|
6
|
+
|
|
7
|
+
`summary_collector(b, family="fullcell_standard_gravimetric").plot()` drew 10
|
|
8
|
+
facets instead of 4: `summary_options` stripped the `_cv` suffix and asked for
|
|
9
|
+
the base column with `partition_by_cv=True`; `collect_summaries` then kept
|
|
10
|
+
`col`, `col_non_cv`, `col_cv` for every requested column (CE included).
|
|
11
|
+
All 7 `fullcell_standard*` families were affected (10–12 columns vs 4); the 13
|
|
12
|
+
other summary families were exact. On top of that the plot faceted one row per
|
|
13
|
+
variable, so charge and discharge of the same quantity never shared a panel.
|
|
14
|
+
|
|
15
|
+
## Done
|
|
16
|
+
|
|
17
|
+
- `cellpy/plotting/registry.py` — `summary_options` requests declared columns
|
|
18
|
+
literally (still turns `partition_by_cv` on for `*_cv` / `*_non_cv`).
|
|
19
|
+
- `cellpy/collect/summary.py` — the `(col, col_non_cv, col_cv)` expansion only
|
|
20
|
+
applies when the requested list names no CV variant itself.
|
|
21
|
+
`SummaryOptions` docstring updated.
|
|
22
|
+
- `cellpy/plotting/collected.py` (`summary_plotter`, Plotly):
|
|
23
|
+
- `split_direction()` / `_panel_mapping()`: variables differing only by a
|
|
24
|
+
`charge` / `discharge` token (prefix, suffix or mid-name) share a panel
|
|
25
|
+
named by the token-free key; a variable alone on its key keeps its name.
|
|
26
|
+
- `line_dash="direction"` (charge solid, discharge dashed); trace names
|
|
27
|
+
reduced to the series with one legend entry each; second legend
|
|
28
|
+
`legend2` ("Direction"). `spread_plot` gets the same dashes.
|
|
29
|
+
- `order_variables`, `y_ranges`, `y_label_mapper` accept original variable
|
|
30
|
+
names or panel keys; `_yaxis_key_for_variable` falls back to the panel key.
|
|
31
|
+
- `combine_directions=False` opt-out.
|
|
32
|
+
- Labels: `capacity_gravimetric` (direction-less panel key) gets units;
|
|
33
|
+
`*_non_cv` → "… non-CV" with correct mode/unit; `mod_01_*` →
|
|
34
|
+
"Normalized … (%)".
|
|
35
|
+
- Tests: oracle in `tests/test_collect.py` now rejects extra columns; literal
|
|
36
|
+
CV list test; `summary_options` tuple test; new
|
|
37
|
+
`tests/test_collected_summary_directions.py` (8 essential tests);
|
|
38
|
+
`tests/test_collected_summary_groups.py` synthetic names neutralised and the
|
|
39
|
+
#947/#948 snippets updated for the merged capacity panel;
|
|
40
|
+
`test_collected_summary_axes.py` spread hover test skips `legend2` entries.
|
|
41
|
+
- Docs: `HISTORY.md`, `AGENTS.md`, `docs/getting_started/agents.md`,
|
|
42
|
+
`.issueflows/04-designs-and-guides/test-registry.md`.
|
|
43
|
+
|
|
44
|
+
## Resulting facet counts
|
|
45
|
+
|
|
46
|
+
`fullcell_standard_*` 4 (CV part / capacity / CE / normalized); `capacities_*`
|
|
47
|
+
1; `*_coulombic_efficiency` 2; `*_with_rate` 2; `*_split_constant_voltage` 3;
|
|
48
|
+
`voltages` 1. Verified with an in-memory batch of the two Arbin `.res` test
|
|
49
|
+
cells and rendered PNGs.
|
|
50
|
+
|
|
51
|
+
## Out of scope / notes
|
|
52
|
+
|
|
53
|
+
- Seaborn / matplotlib summary backends: facets follow the panel rewrite, no
|
|
54
|
+
dash styling.
|
|
55
|
+
- Legacy `b.plot()` (`plot_cycle_life_summary_plotly`) and single-cell
|
|
56
|
+
`summary_plot(y=...)` untouched.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Issue #1017: journal_from_db(skip_file_search=True) crashes with the Excel reader
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/1017
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
Found while diagnosing #1008.
|
|
8
|
+
|
|
9
|
+
`cellpy.batch.db.journal_from_db(name, project, db_reader="simple_excel_reader", skip_file_search=True)` raises
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
ValueError: All arrays must be of the same length
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
from `_dbengine.simple_db_engine` at `pd.DataFrame(pages_dict)`: `_create_pages_dict` seeds `raw_file_names` / `cellpy_file_name` as `[]` and only `find_files` fills them, so skipping the search leaves two zero-length columns next to the per-cell ones.
|
|
16
|
+
|
|
17
|
+
`skip_file_search` is documented for JSON readers that already carry the file columns, but the Excel path should either fill those columns with `None` per cell or reject the flag with a clear message.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Issue #1017 — plan
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
`journal_from_db(..., skip_file_search=True)` must return a journal for every
|
|
6
|
+
reader instead of raising `ValueError: All arrays must be of the same length`.
|
|
7
|
+
Cells whose files were not searched get `None` in `raw_file_names` /
|
|
8
|
+
`cellpy_file_name` (same shape as a filefinder miss).
|
|
9
|
+
|
|
10
|
+
## Constraints
|
|
11
|
+
|
|
12
|
+
- Toolchain: `uv run pytest` (see `this-project.md`); merge gate is `-m essential`.
|
|
13
|
+
- No behaviour change for the default `skip_file_search=False` path.
|
|
14
|
+
- Do not change the JSON readers' public `pages_dict` contract (they seed the
|
|
15
|
+
two file columns as `[]` too — `BatBaseJSONReader` and `CustomJSONReader`,
|
|
16
|
+
`cellpy/readers/json_dbreader.py`); fix once, at the seam both paths share.
|
|
17
|
+
- Keep `_create_pages_dict` seeding as is (tests in `tests/test_dbreader.py`
|
|
18
|
+
and `tests/test_batch.py` read it directly); `find_files` is the only place
|
|
19
|
+
that knows whether the columns will be filled.
|
|
20
|
+
- `HISTORY.md` `[Unreleased]` bullet at close (`v2.1.4.post` milestone).
|
|
21
|
+
|
|
22
|
+
### Prior art
|
|
23
|
+
|
|
24
|
+
- `find_files` (`cellpy/batch/_dbengine.py`) already seeds `[]` when the
|
|
25
|
+
columns are absent and appends per cell; the `skip_file_search` early return
|
|
26
|
+
is the only branch that returns without normalising lengths → mirror the
|
|
27
|
+
seeding there, padded to the cell count.
|
|
28
|
+
- Filefinder miss convention: `raw_files = None`, `cellpyfile = None` per cell
|
|
29
|
+
(`find_files` loop) → reuse `None` as the "not searched" value so
|
|
30
|
+
`policy.py` / `facade.py` (`row.get(...)`, `_clean`, FAILED marking) keep
|
|
31
|
+
working unchanged.
|
|
32
|
+
- `tests/test_batch.py::test_find_files_skip_file_search` — existing unit test
|
|
33
|
+
for the skip branch with pre-filled columns; extend alongside it.
|
|
34
|
+
- Toolbox (`.issueflows/00-tools/`): nothing applicable. `graphify-out/` absent.
|
|
35
|
+
|
|
36
|
+
## Approach
|
|
37
|
+
|
|
38
|
+
1. In `find_files`, replace the bare `if skip_file_search: return info_dict`
|
|
39
|
+
with: compute `n = len(file_name_indicators)` (fallback `filename`), then for
|
|
40
|
+
each of `hdr_journal["raw_file_names"]` / `hdr_journal["cellpy_file_name"]`:
|
|
41
|
+
if the key is missing or its list is empty while `n > 0`, set it to
|
|
42
|
+
`[None] * n`. Pre-filled columns (JSON carrying paths) stay untouched.
|
|
43
|
+
2. Docstrings: `find_files` (skip now pads instead of "returned unchanged") and
|
|
44
|
+
`journal_from_db` in `cellpy/batch/db.py` (`skip_file_search=True` also
|
|
45
|
+
valid for the Excel reader; file columns come back `None`, so `b.update()`
|
|
46
|
+
marks those cells `FAILED` until paths are filled or a search is run).
|
|
47
|
+
3. No change to `_create_pages_dict` or the JSON readers.
|
|
48
|
+
|
|
49
|
+
Alternative rejected: raising on `skip_file_search=True` for the Excel reader —
|
|
50
|
+
users legitimately want a journal without a (slow/remote) file search and fill
|
|
51
|
+
paths afterwards; `None` per cell is the existing "not found" shape.
|
|
52
|
+
|
|
53
|
+
## Files to touch
|
|
54
|
+
|
|
55
|
+
- `cellpy/batch/_dbengine.py` — `find_files` skip branch pads the two columns;
|
|
56
|
+
docstring.
|
|
57
|
+
- `cellpy/batch/db.py` — `journal_from_db` docstring wording.
|
|
58
|
+
- `tests/test_batch.py` — new `test_find_files_skip_file_search_pads_missing_columns`
|
|
59
|
+
(missing + empty columns → `[None] * n`; `n == 0` → `[]`).
|
|
60
|
+
- `tests/test_dbreader.py` — `@pytest.mark.essential`
|
|
61
|
+
`test_simple_db_engine_skip_file_search_excel_reader`: `simple_db_engine(reader,
|
|
62
|
+
ids, skip_file_search=True)` on the Excel fixture returns one row per id with
|
|
63
|
+
`None` file columns (reproduces #1017 before the fix).
|
|
64
|
+
- `HISTORY.md` — `[Unreleased]` bullet (at `/iflow-close`).
|
|
65
|
+
|
|
66
|
+
## Test strategy
|
|
67
|
+
|
|
68
|
+
- `uv run pytest tests/test_dbreader.py tests/test_batch.py -q`
|
|
69
|
+
- `uv run pytest -m essential` (merge gate)
|
|
70
|
+
- Repro before fix: the new engine test fails with `ValueError: All arrays
|
|
71
|
+
must be of the same length`.
|
|
72
|
+
|
|
73
|
+
## Open questions
|
|
74
|
+
|
|
75
|
+
- None. (Optional: also make `journal_from_db` log at INFO that file columns
|
|
76
|
+
are unset when `skip_file_search=True` and the reader is the Excel one —
|
|
77
|
+
skipped for KISS unless wanted.)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Issue #1017 status
|
|
2
|
+
|
|
3
|
+
`journal_from_db(skip_file_search=True)` crashes with the Excel reader.
|
|
4
|
+
|
|
5
|
+
- [x] Done
|
|
6
|
+
|
|
7
|
+
PR: https://github.com/jepegit/cellpy/pull/1020 (#1020, draft)
|
|
8
|
+
Branch: `cursor/1017-journal-from-db-skip-file-search-3975`
|
|
9
|
+
|
|
10
|
+
## What's done
|
|
11
|
+
|
|
12
|
+
- Issue captured, plan confirmed (`issue1017_plan.md`).
|
|
13
|
+
- `_dbengine.find_files`: the `skip_file_search=True` branch pads missing or
|
|
14
|
+
empty `raw_file_names` / `cellpy_file_name` with `[None] * n_cells`
|
|
15
|
+
(pre-filled JSON paths untouched). Docstring updated.
|
|
16
|
+
- `batch.db.journal_from_db` docstring: flag valid for any reader; unset file
|
|
17
|
+
columns are `None`, `update()` marks those cells `FAILED`.
|
|
18
|
+
- Tests: `tests/test_dbreader.py::test_simple_db_engine_skip_file_search_excel_reader`
|
|
19
|
+
(essential; reproduced `ValueError: All arrays must be of the same length`
|
|
20
|
+
before the fix) and
|
|
21
|
+
`tests/test_batch.py::test_find_files_skip_file_search_pads_missing_columns`.
|
|
22
|
+
- `uv run pytest tests/test_dbreader.py tests/test_batch.py`: 71 passed.
|
|
23
|
+
- `uv run pytest -m essential`: 829 passed, 64 skipped
|
|
24
|
+
(`tests/test_arbin_variants_two_stage.py` ignored locally — `pyodbc` needs
|
|
25
|
+
`libodbc.so.2`, missing on this VM; unrelated to the change).
|
|
26
|
+
|
|
27
|
+
- `HISTORY.md` `[Unreleased]` bullet; `test-registry.md` rows.
|
|
28
|
+
|
|
29
|
+
## Remaining work
|
|
30
|
+
|
|
31
|
+
- None. Merge PR #1020 when CI is green (no version bump requested).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Issue #778: L6: golden equality test — incremental update() == full load
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/778
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
Epic L of **cellpy 2.2 (Stage 5)**. Design: [live-incremental](https://github.com/cellpy/architecture-plan/blob/main/cellpy2-live-incremental-design.md) §7 item 6. **Author first** — this is the correctness anchor for the whole epic.
|
|
8
|
+
|
|
9
|
+
Load a truncated file, append the tail, and assert `update()` == a full load of the whole file (summary equality). *Incremental refresh of a split file must equal a full load of the whole file.*
|