cellpy 2.1.4__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/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.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/test-registry.md +21 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/v2-cellpycore-pin-gate.md +5 -4
- {cellpy-2.1.4 → cellpy-2.1.5}/AGENTS.md +7 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/HISTORY.md +115 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/PKG-INFO +4 -4
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/_dbengine.py +13 -2
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/db.py +4 -1
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/facade.py +10 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/options.py +5 -1
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/summary.py +4 -2
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/collected.py +303 -107
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/registry.py +13 -14
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/dbreader.py +24 -1
- {cellpy-2.1.4 → cellpy-2.1.5}/pyproject.toml +3 -3
- {cellpy-2.1.4 → cellpy-2.1.5}/uv.lock +111 -114
- {cellpy-2.1.4 → cellpy-2.1.5}/zensical.toml +12 -1
- {cellpy-2.1.4 → cellpy-2.1.5}/.aliases +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/commands/build.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/commands/create-original-issue-file.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/cellpy-core-migration.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/cellpy-workspace.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/graphify.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/issueflow-rules.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/kiss.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/rules/this-project.mdc +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/caveman/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/gh-ci/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/grill-me/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-archive/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-auto/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-build/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-close/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-comments/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-cycle/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-doctor/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-epic/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-fix/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-init/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-issue/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-pause/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-pick/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-plan/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-review/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-status/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.cursor/skills/issueflow-build/SKILL.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.dockerignore +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.editorconfig +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.env_example +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.gitattributes +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.gitignore +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/00-tools/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/00-tools/migrate_prms_calls.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/00-tools/scan_hardcoded_headers.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/00-tools/scan_member_usage.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/02-partly-solved-issues/issue985_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/02-partly-solved-issues/issue985_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-09_archived_issues.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-31_archived_issues.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-07-31.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-08.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-09.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-25.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-09-05.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-09-07.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-09-08.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue1000_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue1000_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue1000_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue459_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue937_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue937_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue937_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue938_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue938_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue938_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue948_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue948_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue948_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue949_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue949_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue949_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue960_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue960_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue960_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue982_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue982_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue982_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue983_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue983_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue983_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue989_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue989_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue990_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue990_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue990_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue991_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue991_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue991_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue993_original.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue993_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue993_status.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/atomic-file-writes.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/batch-load-orchestrator.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/bdf-export.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/build-and-versioning.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-architecture.excalidraw +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-branching.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-epic.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-workspace-repos.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpycell-di-restructuring.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/ci-tiers.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-api-echo-binder.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-light-startup.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/docs-on-master.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/essential-tests.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/filters-and-plot-filtering.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/harmonized-raw-default.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/instrument-availability.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/marimo-docs.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/optional-plotting-notebook.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/otherpath-upath.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-backends.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-batch-summary.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-collected.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-cycle-legend.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-prepare.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-registry.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/testing-and-coverage.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/this-project.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/05-epics/.gitkeep +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/05-epics/epic567_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/05-epics/epic896_plan.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.issueflows/config.toml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/.readthedocs.yaml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/AUTHORS.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/CODE_OF_CONDUCT.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/CONTRIBUTING.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/DEPRECATIONS.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/LICENSE.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_data_structure.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_folder_structure.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_packaging_pypi.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_setup.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_conda_package.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_docs.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_loaders_and_instruments.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_various.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_developers_guide/index.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/01_getting_started_tutorial.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/02_read_cell_data.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/03_more_about_get.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/04_other_interactions.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/05_configuring.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/06_pandas.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/07_data_mining.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/08_the_cellpy_cmd.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basics.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/examples.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/index.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/01_arbin.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/02_maccor.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/03_PEC.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/04_Neware.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/05_biologics.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/06_custom.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_001.png +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_002.png +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_get_cap.ipynb +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_simple_plot.ipynb +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_templates.ipynb +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_xxx-checkpoint.ipynb +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/tips_and_tricks.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/batch.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/collectors.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/custom_file_loaders.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/easyplot.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig1.png +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig2.png +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/ica.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/plotting.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/templates.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/tut_ocv_rlx.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_main_description/formats.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_main_description/index.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_main_description/installation.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/_main_description/usage.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/_old_docs/index.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/baselines/v1x_ubuntu_py313.json +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/check_baseline.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/conftest.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/paths.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/benchmarks/test_performance.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/_deprecation.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/_version.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/aggregate.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/journal.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/layout.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/outputs.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/policy.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/progress.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/qc.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/result.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/runner.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/batch/store.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/cli.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/cli_api.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/cli_ui.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/_summary_ops.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/cells.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/collection.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/collector.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/curves.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/dva.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/collect/ica.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/credentials.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/legacy.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/loader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/migrate.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/models.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/reference.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/session.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/sources.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/config/types.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/exceptions.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/exporters/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/exporters/bdf.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/exporters/tabular.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/filters/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/filters/cycles.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/filters/summary.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/ica.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/internals/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/internals/connections.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/internals/otherpath.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/internals/progress.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/_alias_module.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/_importing.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/_module.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/_syncronized.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/_version.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/apipkg/py.typed +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/LICENSE +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/btsda.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/cli.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/dicts.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/formats.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/main.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/nda.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/ndax.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/utils.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/libs/local_fastnda/version.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/log.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/logging.json +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/.cellpy_prms_default.conf +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/cell_schema.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/internal_settings.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/legacy/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/legacy/update_headers.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/prmreader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/parameters/prms.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/backends/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/backends/base.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/backends/mpl.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/backends/plotly.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/batch_summary.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/context.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/cycle_legend.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/figures.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/headers.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/labels.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/curves.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/ica.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/raw.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/steps.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/prepare/summary.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/spec.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/plotting/theme.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/capacity_curves.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/atomic.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/dtype.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/fids.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/format.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/keys.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/legacy_read.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta_archive.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/read.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/selectors.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/translate.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/v9.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellpy_file/write.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/cellreader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/data_structures.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/do.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/filefinder.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/SQL Table IDs.txt +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/_aux_map.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_res.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_7.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_config.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_csv.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_h5.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_xlsx.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/base.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/batmo_bdf.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/biologics_mpr.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/config_declarations.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/batmo_bdf_bdf.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_one.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_three.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_two.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_zero.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_one.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_two.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_zero.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/contract.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/custom.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/declarations.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/ext_nda_reader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/harmonize.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/hooks.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/biologic_file_format.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/local_instrument.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt_native.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/neware_nda.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/neware_txt.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/neware_xlsx.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/pec_csv.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/processors/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/processors/post_processors.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/processors/pre_processors.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/registry.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/instruments/testing.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/journal_layer.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/json_dbreader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/merger.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/meta_resolver.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/native_core.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/provenance.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/slicing.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/sql_dbreader.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/readers/test_meta.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/units.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/__init__.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/batch.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/collectors.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/diagnostics.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/example_data.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/helpers.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/ica.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/live.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/ocv_rlx.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/plotutils.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/processor.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/cellpy/utils/template_registry.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/backfill_notebook_plotly_pngs.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/conda-recipes/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/conda-recipes/cellpy/meta.yaml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/conda-recipes/cellpycore/meta.yaml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/make_bad_fixtures.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/plot_preview_common.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/preview_curve_plots.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/preview_ica_plots.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/preview_plots.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/preview_summary_plots.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/regenerate_goldens.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/render_example_notebooks.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/snapshot_cli_surface.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/snapshot_figure_specs.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/.gitignore +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/NOTES.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/_common.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/summarize_importtime.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_arbin_h5.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_cellpy_io.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_executors.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_filefinder.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_imports.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_one_cell.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/dev/speed-test-01/time_otherpath.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/docker/Dockerfile.build-test +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/docker/sftp-test/README.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/docker/sftp-test/compose.yml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/docker/sftp-test/data/hello.txt +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/docker/sftp-test/data/nested/sample.txt +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/environment.yml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/environment_dev.yml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/github_actions_environment.yml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/noxfile.py +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/.github/workflows/draft-pdf.yml +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/.gitignore +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/Figures/Cellpy-Utils.jpg +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/Figures/CellpyCell.jpg +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/Figures/CellpyData.jpg +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/paper.bib +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/paper/paper.md +0 -0
- {cellpy-2.1.4 → cellpy-2.1.5}/scripts/build_test.sh +0 -0
- {cellpy-2.1.4 → 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,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.*
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Issue #778 plan — L6: golden equality test (incremental update == full load)
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Add the Stage 5 Epic L correctness anchor: a test proving that loading a
|
|
6
|
+
**truncated** tester file and then feeding the **tail rows** through the
|
|
7
|
+
incremental-update path yields the same `raw` / `steps` / `summary` as one
|
|
8
|
+
**full load** of the whole file. Written first, against the shipped core
|
|
9
|
+
primitive (`update_core_data`), so L1–L5 (#779/#780/#164/#781/#782) have an
|
|
10
|
+
oracle to land against.
|
|
11
|
+
|
|
12
|
+
## Constraints
|
|
13
|
+
|
|
14
|
+
- Test-only issue: **no library code changes**. `CellpyCell.update()` and
|
|
15
|
+
`load_since()` do not exist yet (L3/L2); the test drives the seam that does
|
|
16
|
+
exist — `c.core.update_core_data(data, new_raw, …)` (cellpycore 0.2.5
|
|
17
|
+
`merge.update_data`). The helper that produces the "tail" is written so L3
|
|
18
|
+
can swap it for `c.update()` in one place.
|
|
19
|
+
- Must run on the merge gate (`@pytest.mark.essential`) → fast, no mdbtools:
|
|
20
|
+
use a **text** fixture. `testdata/data/neware_uio.csv` (`instrument="neware_txt"`,
|
|
21
|
+
`model="UIO"`): 1 header line + 9064 rows, 4 cycles / 32 steps, `datapoint_num`
|
|
22
|
+
1…9065, loads in ~0.4 s. (`maccor_001.txt` is 5 s and has 1 cycle — not the
|
|
23
|
+
anchor; `custom_data_001.csv` has non-integer `datapoint_num` — unsuitable.)
|
|
24
|
+
- Truncated files are written to `tmp_path`, never into `testdata/` (input data
|
|
25
|
+
read-only).
|
|
26
|
+
- `update_data` contract (core): `new_raw` may **overlap** the tail; overlap is
|
|
27
|
+
trimmed on `source_datapoint_num` → falls back to `datapoint_num` (cellpy
|
|
28
|
+
loaders set no `source_datapoint_num`). Rejects `new_raw` starting at/before
|
|
29
|
+
the existing range. Both branches (`gap_append` vs overlap) exercised.
|
|
30
|
+
- Per-cell frames are **pandas** in cellpy; `update_core_data` converts.
|
|
31
|
+
Comparisons use `pandas.testing` with a small float tolerance, columns
|
|
32
|
+
aligned by name, `test_id` normalised.
|
|
33
|
+
- Summary scope **now**: `update_core_data(refresh_derived=True)` produces the
|
|
34
|
+
*core* summary (cycle-end columns + C-rates + IR). cellpy's `make_summary`
|
|
35
|
+
additionally runs `add_scaled_summary_columns` (gravimetric/areal, equivalent
|
|
36
|
+
cycles). Until L3 defines what `c.update()` does after the core step, the
|
|
37
|
+
summary assertion compares the **intersection of columns**; the test records
|
|
38
|
+
the missing columns so L3 flips it to full-column equality. `raw` and `steps`
|
|
39
|
+
are compared on the **full** column set.
|
|
40
|
+
|
|
41
|
+
### Prior art
|
|
42
|
+
|
|
43
|
+
- `cellpycore.merge.update_data` / `CellpyCellCore.update_core_data`
|
|
44
|
+
(`../cellpy-core/src/cellpycore/merge.py:173`, `cell_core.py:528`) — the
|
|
45
|
+
engine under test; core has its own unit tests on synthetic frames, none
|
|
46
|
+
through a real loader.
|
|
47
|
+
- `CellpyCell.merge(cells, mode="campaign")` (`cellpy/readers/cellreader.py:1852`)
|
|
48
|
+
— the *campaign* merge (renumber cycles); not the incremental path. Coexist.
|
|
49
|
+
- `tests/parity.py::assert_value_parity` — legacy↔native comparator with
|
|
50
|
+
named exceptions; heavier than needed here (same-schema frames). Mirror its
|
|
51
|
+
spirit (explicit tolerance, no silent widening) with `pandas.testing`.
|
|
52
|
+
- `tests/loader_golden_support.py` / `tests/golden_support.py` — committed
|
|
53
|
+
golden snapshots. **Not** used: this oracle is *self-referential* (full load
|
|
54
|
+
is the reference), so no new golden files and no `regenerate_goldens.py`
|
|
55
|
+
suite.
|
|
56
|
+
- `tests/test_cellpy_splitting.py` (`cell.split`, `drop_to`) — cycle-level
|
|
57
|
+
splitting of a loaded cell; different axis (cycles, not file rows). Coexist.
|
|
58
|
+
- `.issueflows/00-tools/` — nothing applicable (AST scanners, prms migrator).
|
|
59
|
+
|
|
60
|
+
## Approach
|
|
61
|
+
|
|
62
|
+
1. **`tests/incremental_support.py`** (small, reused by L2/L3/L5 tests later):
|
|
63
|
+
- `truncate_text_file(src, dst, *, n_data_rows, header_lines=1)` → writes
|
|
64
|
+
header + first `n_data_rows` data lines. Returns `dst`.
|
|
65
|
+
- `tail_rows(full_raw, *, since, overlap, datapoint_col)` → pandas slice
|
|
66
|
+
`datapoint_num > since - overlap` — this is what a future `load_since`
|
|
67
|
+
returns for marker `since`; the only place L3 has to replace.
|
|
68
|
+
- `incremental_update(head_cell, new_raw)` → today:
|
|
69
|
+
`head_cell.core.update_core_data(head_cell.data, new_raw, nom_cap_abs=…,
|
|
70
|
+
current_conversion_factor=…)` with the same factors cellpy's
|
|
71
|
+
`make_summary` computes (`core_units.calculate_current_conversion_factor`,
|
|
72
|
+
nominal capacity from `head_cell.data.meta`). Returns the new `Data`.
|
|
73
|
+
- `assert_frames_equal(left, right, *, columns=None, rtol)` thin wrapper
|
|
74
|
+
over `pandas.testing.assert_frame_equal` (reset index, sort by
|
|
75
|
+
`datapoint_num` / `cycle_num`, `check_dtype=False`).
|
|
76
|
+
2. **`tests/test_incremental_update.py`**:
|
|
77
|
+
- Fixtures: `full_cell` (module-scoped load of `neware_uio.csv`);
|
|
78
|
+
`head_cell(tmp_path, n)` via `truncate_text_file` + `cellpy.get`.
|
|
79
|
+
- `test_head_matches_full_prefix` — sanity: head `raw` == first `n` rows of
|
|
80
|
+
full `raw` (proves the truncation + `datapoint_num` assignment are
|
|
81
|
+
deterministic; without this the oracle proves nothing).
|
|
82
|
+
- `test_incremental_update_equals_full_load[cut]` — parametrised over cut
|
|
83
|
+
points: **mid-step** inside cycle 2, **on a step boundary**, **on a cycle
|
|
84
|
+
boundary**; `overlap=0` (gap-append branch). Assert `raw` full equality,
|
|
85
|
+
`steps` full equality, `summary` equality on shared columns.
|
|
86
|
+
- `test_incremental_update_with_overlap` — same cut, `overlap=50` rows
|
|
87
|
+
(trim branch).
|
|
88
|
+
- `test_incremental_update_noop_on_empty_tail` — empty `new_raw` returns an
|
|
89
|
+
equal copy (poll tick with nothing new).
|
|
90
|
+
- `test_summary_column_gap_is_documented` — asserts the set of full-summary
|
|
91
|
+
columns missing after the core-only update equals a **named** list
|
|
92
|
+
(`add_scaled_summary_columns` outputs). When L3 lands and closes the gap,
|
|
93
|
+
this test is deleted and the main test flips to full-column equality.
|
|
94
|
+
- Marker `@pytest.mark.essential` on the equality tests (golden-oracle rule
|
|
95
|
+
in `this-project.md`); whole file well under 5 s.
|
|
96
|
+
3. **`tests/README.md`** — one short subsection "Incremental-update oracle
|
|
97
|
+
(Stage 5 L6)" stating the invariant, the fixture, and the L3 flip rule.
|
|
98
|
+
4. **Status file** `issue778_status.md`; HISTORY entry at close (test-only —
|
|
99
|
+
a one-liner under Unreleased is enough).
|
|
100
|
+
|
|
101
|
+
## Files to touch
|
|
102
|
+
|
|
103
|
+
| Path | Change |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `tests/incremental_support.py` | new — truncate / tail / update / compare helpers |
|
|
106
|
+
| `tests/test_incremental_update.py` | new — the L6 oracle tests (essential) |
|
|
107
|
+
| `tests/README.md` | add "Incremental-update oracle" subsection |
|
|
108
|
+
| `.issueflows/01-current-issues/issue778_status.md` | new |
|
|
109
|
+
|
|
110
|
+
No changes under `cellpy/`.
|
|
111
|
+
|
|
112
|
+
## Test strategy
|
|
113
|
+
|
|
114
|
+
- `uv run pytest tests/test_incremental_update.py -q` during build.
|
|
115
|
+
- `uv run pytest -m essential` before close (merge gate).
|
|
116
|
+
- If a cut point exposes a real `update_data` defect (e.g. step-table rows at
|
|
117
|
+
the cut not refreshed identically), **do not** widen tolerance or drop the
|
|
118
|
+
case: record it in the status file and open a `cellpy-core` issue — that is
|
|
119
|
+
precisely what the oracle is for.
|
|
120
|
+
|
|
121
|
+
## Open questions
|
|
122
|
+
|
|
123
|
+
1. Summary scope: OK to compare **shared columns only** now (with the
|
|
124
|
+
documented gap test) and defer full-column equality to L3 (#164)? The
|
|
125
|
+
alternative — calling cellpy `make_summary()` after the core update — would
|
|
126
|
+
make the summary assertion trivially true and is rejected.
|
|
127
|
+
2. Second fixture: add `maccor_001.txt` as a non-essential parametrisation
|
|
128
|
+
(5 s, single cycle) for loader diversity, or keep neware-only? Proposal:
|
|
129
|
+
neware-only now; L2 (#780) adds per-loader cases when `load_since` exists.
|