cellpy 2.1.3.post1__tar.gz → 2.1.3.post3__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.3.post3/.issueflows/01-current-issues/issue985_original.md +14 -0
- cellpy-2.1.3.post3/.issueflows/01-current-issues/issue985_status.md +16 -0
- {cellpy-2.1.3.post1/.issueflows/02-partly-solved-issues → cellpy-2.1.3.post3/.issueflows/03-solved-issues}/issue891_status.md +19 -12
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue939_original.md +56 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue939_plan.md +172 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue939_status.md +57 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue950_original.md +46 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue950_plan.md +152 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue950_status.md +58 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue967_original.md +7 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue967_plan.md +85 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue967_status.md +23 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue971_original.md +90 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue971_plan.md +55 -0
- cellpy-2.1.3.post3/.issueflows/03-solved-issues/issue971_status.md +18 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/batch-load-orchestrator.md +40 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/test-registry.md +12 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/AGENTS.md +11 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/DEPRECATIONS.md +1 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/HISTORY.md +40 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/PKG-INFO +2 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/_deprecation.py +10 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/__init__.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/_dbengine.py +4 -4
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/aggregate.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/db.py +7 -7
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/facade.py +114 -28
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/journal.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/layout.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/policy.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/result.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/runner.py +7 -7
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/store.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/cli.py +66 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/cli_api.py +129 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/cli_ui.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/__init__.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/_summary_ops.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/collection.py +12 -12
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/collector.py +45 -45
- cellpy-2.1.3.post3/cellpy/collect/dva.py +48 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/ica.py +55 -28
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/options.py +67 -11
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/summary.py +26 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/credentials.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/legacy.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/models.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/exceptions.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/exporters/__init__.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/exporters/bdf.py +8 -8
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/filters/summary.py +4 -4
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/ica.py +10 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/backends/base.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/backends/mpl.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/backends/plotly.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/collected.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/context.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/cycle_legend.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/figures.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/labels.py +4 -4
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/curves.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/ica.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/raw.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/steps.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/summary.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/registry.py +6 -6
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellreader.py +31 -31
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/data_structures.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_res.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql_7.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql_csv.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql_h5.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql_xlsx.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/base.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/batmo_bdf.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/biologics_mpr.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/config_declarations.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/contract.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/declarations.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/ext_nda_reader.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/harmonize.py +4 -4
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/hooks.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/maccor_txt_native.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/neware_nda.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/pec_csv.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/testing.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/journal_layer.py +1 -1
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/units.py +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/batch.py +7 -7
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/collectors.py +8 -8
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/ica.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/ocv_rlx.py +2 -2
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/plotutils.py +5 -5
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/environment.yml +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/environment_dev.yml +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/github_actions_environment.yml +3 -3
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/pyproject.toml +1 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/uv.lock +112 -72
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/zensical.toml +1 -0
- cellpy-2.1.3.post1/cellpy/collect/dva.py +0 -95
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.aliases +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/commands/build.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/commands/create-original-issue-file.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/cellpy-core-migration.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/cellpy-workspace.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/graphify.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/issueflow-rules.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/kiss.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/rules/this-project.mdc +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/caveman/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/gh-ci/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/grill-me/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-archive/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-auto/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-build/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-close/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-comments/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-cycle/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-doctor/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-epic/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-fix/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-init/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-issue/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-pause/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-pick/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-plan/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-review/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-status/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.cursor/skills/issueflow-build/SKILL.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.dockerignore +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.editorconfig +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.env_example +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.gitattributes +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.gitignore +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/00-tools/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/00-tools/migrate_prms_calls.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/00-tools/scan_hardcoded_headers.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/00-tools/scan_member_usage.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/2026-07-09_archived_issues.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/2026-07-31_archived_issues.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/cycle_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/cycle_status_2026-07-31.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/cycle_status_2026-08-08.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/cycle_status_2026-08-09.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/cycle_status_2026-08-25.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue459_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue786_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue786_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue786_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue799_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue799_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue799_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue800_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue800_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue800_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue801_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue801_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue801_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue802_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue802_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue802_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue804_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue804_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue804_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue809_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue809_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue809_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue816_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue816_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue816_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue817_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue817_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue817_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue818_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue818_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue818_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue819_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue819_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue819_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue820_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue820_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue820_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue821_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue821_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue821_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue822_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue822_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue822_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue825_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue825_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue825_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue837_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue837_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue837_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue839_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue839_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue839_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue845_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue845_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue845_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue846_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue846_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue846_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue849_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue849_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue849_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue850_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue850_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue850_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue851_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue851_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue851_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue853_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue853_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue853_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue855_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue855_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue855_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue862_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue862_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue862_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue863_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue863_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue863_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue866_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue866_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue867_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue867_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue867_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue868_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue868_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue868_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue869_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue869_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue869_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue874_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue874_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue874_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue875_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue875_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue875_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue876_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue876_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue876_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue878_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue878_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue878_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue885_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue885_status.md +0 -0
- {cellpy-2.1.3.post1/.issueflows/02-partly-solved-issues → cellpy-2.1.3.post3/.issueflows/03-solved-issues}/issue891_original.md +0 -0
- {cellpy-2.1.3.post1/.issueflows/02-partly-solved-issues → cellpy-2.1.3.post3/.issueflows/03-solved-issues}/issue891_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue892_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue892_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue912_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue912_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue912_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue916_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue916_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue940_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue940_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue940_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue947_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue947_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue947_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue952_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue952_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue952_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue961_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue961_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue961_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue962_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue962_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue962_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue963_original.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue963_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/03-solved-issues/issue963_status.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/atomic-file-writes.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/bdf-export.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/build-and-versioning.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cellpy-v2-architecture.excalidraw +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cellpy-v2-branching.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cellpy-v2-epic.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cellpy-workspace-repos.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cellpycell-di-restructuring.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/ci-tiers.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cli-api-echo-binder.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/cli-light-startup.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/docs-on-master.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/essential-tests.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/filters-and-plot-filtering.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/harmonized-raw-default.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/marimo-docs.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/otherpath-upath.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-backends.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-batch-summary.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-collected.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-cycle-legend.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-prepare.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/plotting-registry.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/testing-and-coverage.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/this-project.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/04-designs-and-guides/v2-cellpycore-pin-gate.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/05-epics/.gitkeep +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/05-epics/epic567_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/05-epics/epic896_plan.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.issueflows/config.toml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/.readthedocs.yaml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/AUTHORS.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/CODE_OF_CONDUCT.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/CONTRIBUTING.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/LICENSE.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_cellpy_data_structure.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_cellpy_folder_structure.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_cellpy_packaging_pypi.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_cellpy_setup.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_conda_package.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_docs.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_loaders_and_instruments.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/dev_various.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_developers_guide/index.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/01_getting_started_tutorial.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/02_read_cell_data.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/03_more_about_get.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/04_other_interactions.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/05_configuring.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/06_pandas.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/07_data_mining.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basic_interactions/08_the_cellpy_cmd.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/basics.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/examples.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/index.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/01_arbin.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/02_maccor.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/03_PEC.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/04_Neware.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/05_biologics.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders/06_custom.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/loaders.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_001.png +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_002.png +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/tutorial_get_cap.ipynb +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/tutorial_simple_plot.ipynb +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/tutorial_templates.ipynb +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks/tutorial_xxx-checkpoint.ipynb +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/notebooks.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/tips_and_tricks.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/batch.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/collectors.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/custom_file_loaders.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/easyplot.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig1.png +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig2.png +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/ica.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/plotting.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/templates.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils/tut_ocv_rlx.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_examples_and_tutorials/utils.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_main_description/formats.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_main_description/index.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_main_description/installation.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/_main_description/usage.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/_old_docs/index.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/baselines/v1x_ubuntu_py313.json +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/check_baseline.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/conftest.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/paths.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/benchmarks/test_performance.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/_version.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/outputs.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/progress.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/batch/qc.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/cells.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/collect/curves.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/loader.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/migrate.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/reference.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/session.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/sources.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/config/types.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/exporters/tabular.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/filters/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/filters/cycles.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/internals/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/internals/connections.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/internals/otherpath.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/internals/progress.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/_alias_module.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/_importing.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/_module.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/_syncronized.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/_version.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/apipkg/py.typed +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/LICENSE +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/btsda.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/cli.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/dicts.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/formats.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/main.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/nda.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/ndax.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/utils.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/libs/local_fastnda/version.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/log.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/logging.json +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/.cellpy_prms_default.conf +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/cell_schema.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/internal_settings.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/legacy/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/legacy/update_headers.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/prmreader.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/parameters/prms.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/backends/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/batch_summary.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/headers.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/prepare/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/spec.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/plotting/theme.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/capacity_curves.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/atomic.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/dtype.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/fids.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/format.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/keys.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/legacy_read.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/meta.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/meta_archive.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/read.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/selectors.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/translate.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/v9.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/cellpy_file/write.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/dbreader.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/do.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/filefinder.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/SQL Table IDs.txt +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/_aux_map.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/arbin_sql_config.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/batmo_bdf_bdf.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/maccor_txt_one.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/maccor_txt_three.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/maccor_txt_two.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/maccor_txt_zero.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/neware_txt_one.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/neware_txt_two.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/configurations/neware_txt_zero.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/custom.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/loader_specific_modules/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/loader_specific_modules/biologic_file_format.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/local_instrument.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/maccor_txt.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/neware_txt.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/neware_xlsx.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/processors/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/processors/post_processors.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/processors/pre_processors.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/instruments/registry.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/json_dbreader.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/merger.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/meta_resolver.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/native_core.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/provenance.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/slicing.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/sql_dbreader.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/readers/test_meta.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/__init__.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/diagnostics.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/example_data.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/helpers.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/live.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/processor.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/cellpy/utils/template_registry.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/backfill_notebook_plotly_pngs.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/conda-recipes/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/conda-recipes/cellpy/meta.yaml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/conda-recipes/cellpycore/meta.yaml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/make_bad_fixtures.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/plot_preview_common.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/preview_curve_plots.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/preview_ica_plots.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/preview_plots.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/preview_summary_plots.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/regenerate_goldens.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/render_example_notebooks.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/snapshot_cli_surface.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/snapshot_figure_specs.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/.gitignore +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/NOTES.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/_common.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/summarize_importtime.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_arbin_h5.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_cellpy_io.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_executors.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_filefinder.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_imports.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_one_cell.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/dev/speed-test-01/time_otherpath.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/docker/Dockerfile.build-test +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/docker/sftp-test/README.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/docker/sftp-test/compose.yml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/docker/sftp-test/data/hello.txt +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/docker/sftp-test/data/nested/sample.txt +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/noxfile.py +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/.github/workflows/draft-pdf.yml +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/.gitignore +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/Figures/Cellpy-Utils.jpg +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/Figures/CellpyCell.jpg +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/Figures/CellpyData.jpg +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/paper.bib +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/paper/paper.md +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/scripts/build_test.sh +0 -0
- {cellpy-2.1.3.post1 → cellpy-2.1.3.post3}/scripts/dev_sync.sh +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Issue #985: Iterative fixes: improve ica docs
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/985
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
Interactive `/iflow-fix` session to improve ICA (incremental capacity analysis) documentation.
|
|
8
|
+
|
|
9
|
+
Individual small fixes are recorded in the issue-flow status markdown and landed together via `/iflow-close`.
|
|
10
|
+
|
|
11
|
+
Scope (docs-only polish, not a redesign):
|
|
12
|
+
- Align public docs with the 2.1 `cellpy.ica` API (`dqdv` / `dvdq` / `IcaOptions`)
|
|
13
|
+
- Fill gaps (DVA, plotting/collect, agents guide, API page)
|
|
14
|
+
- Fix stale `cellpy.utils.ica` / 1.x helper references where they confuse readers
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Issue #985 status
|
|
2
|
+
|
|
3
|
+
Interactive `/iflow-fix` session: improve ICA docs.
|
|
4
|
+
|
|
5
|
+
- [ ] Done
|
|
6
|
+
|
|
7
|
+
## Iterative fixes log
|
|
8
|
+
|
|
9
|
+
- 2026-09-02 — Add `docs/guides/ica.md` how-to (`dqdv` / `dvdq` / `ica_plot` / collect) and wire it into `zensical.toml` + `docs/guides/index.md`.
|
|
10
|
+
- 2026-09-02 — Expand `docs/api/ica.md` as the ICA/DVA hub (preferred import, `to_wide`, plot/collect table, `IcaOptions` name clash).
|
|
11
|
+
- 2026-09-02 — Fix API index “Where to look”: ICA and Plotting were buried under Utils; add DVA to `docs/api/collect.md`; point `docs/api/plotting.md` at `ica_plot` / `dva_plot`.
|
|
12
|
+
- 2026-09-02 — Agent recipe: `docs/getting_started/agents.md` + root `AGENTS.md` quick fact; basic-usage + 2.1 migration pointers.
|
|
13
|
+
- 2026-09-02 — Tutorial: prefer `from cellpy import ica`; add DVA/plotting closer in `examples/04_incremental_capacity_analysis.ipynb` and the rendered docs copy.
|
|
14
|
+
- 2026-09-02 — Stale docstrings: drop “`dq` until 2.1” from `cellpy/collect/ica.py`; update `cellpy/utils/ica.py` re-export note; fundamentals no longer call ICA a utils-only tool.
|
|
15
|
+
- 2026-09-02 — How to use `IcaOptions`: construct the dataclass, pass `options=`, `.replace()`, and stacked keyword overrides. Added to `docs/guides/ica.md` (plus collect-side `IcaOptions`), `docs/api/ica.md`, the agents recipe, `AGENTS.md`, and the ICA tutorial notebook / rendered page.
|
|
16
|
+
- 2026-09-02 — Docs CI: drop the `[cellpy.ica.DVA_DEFAULTS]` autoref in `docs/guides/ica.md` (module constant has no mkdocstrings identifier; zensical reported "1 issue found").
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Issue #891 — status
|
|
2
2
|
|
|
3
|
-
- [
|
|
3
|
+
- [x] Done
|
|
4
|
+
|
|
5
|
+
Closed out 2026-08-29 by `/iflow-doctor`: the remaining work below all landed,
|
|
6
|
+
but this file was never updated when the last PR merged. GitHub issue #891 was
|
|
7
|
+
closed 2026-08-16 (milestone v.2.1.3).
|
|
4
8
|
|
|
5
9
|
## What's done
|
|
6
10
|
|
|
@@ -18,20 +22,23 @@
|
|
|
18
22
|
|
|
19
23
|
## Remaining work
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
None — every item below shipped:
|
|
26
|
+
|
|
27
|
+
- [x] PR 2 — global flags (`--quiet` / `--verbose` / `--no-color`), failures to
|
|
22
28
|
stderr, exit codes 0/1/2, delete the hand-rolled usage block in `run`;
|
|
23
29
|
regenerate `tests/data/cli_surface.json` in the same commit.
|
|
24
|
-
|
|
25
|
-
- [
|
|
26
|
-
|
|
30
|
+
→ `be37069c` (#915).
|
|
31
|
+
- [x] PR 3 — `info` / `info --check`. → `4a190122` (#918), with `d502fe5a`
|
|
32
|
+
(#922) relaxing the check test's machine assumptions.
|
|
33
|
+
- [x] PR 4 — `setup` (drop the parameter dump, make `--silent` real).
|
|
34
|
+
→ `2ee02193` (#934).
|
|
35
|
+
- [x] PR 5 — copy pass over the remaining commands; fix the `f[cellpy]` literal
|
|
27
36
|
and the `deiced` typo; remove the stray `print()` calls.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
`cli_ui.Reporter`, issue #891) plus
|
|
34
|
-
`test_cli_light_import.py::test_importing_cli_ui_does_not_import_rich`.
|
|
37
|
+
→ `2ee02193` (#934).
|
|
38
|
+
- [x] Register the new essential tests in
|
|
39
|
+
[test-registry.md](../04-designs-and-guides/test-registry.md). The
|
|
40
|
+
registry now carries 16 rows tagged #891, so the #912 collision noted
|
|
41
|
+
below resolved itself.
|
|
35
42
|
|
|
36
43
|
## Notes
|
|
37
44
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Issue #939: from_cells silently drops values that are not cells
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/939
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
`cellpy.collect.from_cells` does not validate the mapping it is given. A value that is not a `CellpyCell` — a `Path`, an `int`, anything — simply does not appear downstream: no exception, no warning, not even a log line.
|
|
8
|
+
|
|
9
|
+
Reproduced on **cellpy 2.1.3** (Python 3.13, clean `uv run --script` environment).
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
# /// script
|
|
13
|
+
# requires-python = ">=3.13"
|
|
14
|
+
# dependencies = ["cellpy"]
|
|
15
|
+
# ///
|
|
16
|
+
import warnings
|
|
17
|
+
warnings.simplefilter("ignore")
|
|
18
|
+
|
|
19
|
+
from cellpy.collect import collect_summaries, from_cells
|
|
20
|
+
from cellpy.utils import example_data
|
|
21
|
+
|
|
22
|
+
cell = example_data.cellpy_file()
|
|
23
|
+
|
|
24
|
+
with warnings.catch_warnings(record=True) as caught:
|
|
25
|
+
warnings.simplefilter("always")
|
|
26
|
+
batch = from_cells({
|
|
27
|
+
"good": cell,
|
|
28
|
+
"a_path": example_data.rate_file(), # returns a Path, not a cell
|
|
29
|
+
"an_int": 42,
|
|
30
|
+
})
|
|
31
|
+
print("warnings:", [str(w.message) for w in caught])
|
|
32
|
+
|
|
33
|
+
collection = collect_summaries(batch, columns=("discharge_capacity_gravimetric",))
|
|
34
|
+
print("3 entries in ->", collection.data["cell"].unique().to_list(), "out")
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
warnings: []
|
|
39
|
+
3 entries in -> ['good'] out
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Why it is worth guarding
|
|
43
|
+
|
|
44
|
+
The failure surfaces to a *user* as a chart with fewer lines than they have cells, which reads as a data problem rather than a type error. Nothing points back at the call that dropped them.
|
|
45
|
+
|
|
46
|
+
The easy way in is real rather than hypothetical: `example_data.cellpy_file()` returns a **cell** while its sibling `example_data.rate_file()` returns a **path**. Adjacent functions, same naming family, asymmetric return types — and `from_cells` accepts the mistake without comment. Any code that builds the mapping from something dynamic (a file picker, a glob, a journal) can hit this and never know.
|
|
47
|
+
|
|
48
|
+
## Suggestion
|
|
49
|
+
|
|
50
|
+
Raise on a value that is not a `CellpyCell`, naming the offending keys — or, if silence is deliberate for some caller, at minimum a warning listing what was skipped. Silently narrowing a collection is unlikely to be what anyone meant.
|
|
51
|
+
|
|
52
|
+
## Context
|
|
53
|
+
|
|
54
|
+
Found while writing task-shaped guides for building on cellpy, in a repository where every documentation code block is executed by CI — this turned up as a print that did not match its expected output. Two independent agents given the same "load these cells" task hit it, and both reported the `rate_file()` / `cellpy_file()` asymmetry as the thing most likely to burn someone.
|
|
55
|
+
|
|
56
|
+
Notes: https://github.com/cellpy/cellpy-simple-gui/blob/main/CELLPY_PAINPOINTS.md (§34)
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Plan — Issue #939: `from_cells` silently drops values that are not cells
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Make a non-cell value passed to `from_cells` fail loudly and by name, and make
|
|
6
|
+
`collect_summaries` say something when it narrows a collection, so a user never
|
|
7
|
+
again sees "a chart with fewer lines than I have cells" with no explanation.
|
|
8
|
+
|
|
9
|
+
## Findings (reproduced on `master` @ `82ab7e03`)
|
|
10
|
+
|
|
11
|
+
The issue's script still fails exactly as reported — three entries in, one out,
|
|
12
|
+
zero warnings:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
warnings: []
|
|
16
|
+
3 entries in -> ['good'] out
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The drop is **not** in `from_cells`. `Batch.from_cells` writes all three labels
|
|
20
|
+
into `journal.pages` and hands all three values to `CellStore.from_cells`
|
|
21
|
+
unexamined ([`cellpy/batch/facade.py`](../../cellpy/batch/facade.py), the
|
|
22
|
+
`from_cells` classmethod). The narrowing happens later, in
|
|
23
|
+
`collect_summaries`: for each label it calls `ops.extract_cell_summary`, which
|
|
24
|
+
reads `getattr(getattr(cell, "data", None), "summary", None)`
|
|
25
|
+
([`cellpy/collect/_summary_ops.py`](../../cellpy/collect/_summary_ops.py)). A
|
|
26
|
+
`Path` or an `int` has no `.data`, so that resolves to `None`, the function
|
|
27
|
+
returns `None`, and [`cellpy/collect/summary.py`](../../cellpy/collect/summary.py)
|
|
28
|
+
hits `if frame is None or frame.height == 0: continue` — a bare `continue` with
|
|
29
|
+
no log line.
|
|
30
|
+
|
|
31
|
+
Two consequences worth designing around:
|
|
32
|
+
|
|
33
|
+
- `collect_summaries` **already knows** which cells contributed: it builds an
|
|
34
|
+
`included` list and stores it on `CollectionMeta.cells_included`. The
|
|
35
|
+
information needed for a warning is already computed and simply never used
|
|
36
|
+
for feedback.
|
|
37
|
+
- `collect_cycles` does **not** share the bug — it calls
|
|
38
|
+
`cell.get_cycle_numbers()`, so a `Path` raises `AttributeError` there. Only
|
|
39
|
+
the summary path is silent.
|
|
40
|
+
|
|
41
|
+
### What counts as "a cell"
|
|
42
|
+
|
|
43
|
+
The issue asks to raise on anything that is not a `CellpyCell`. A literal
|
|
44
|
+
`isinstance(value, CellpyCell)` check is the wrong instrument here: the whole
|
|
45
|
+
codebase duck-types cells as "something with `.data`"
|
|
46
|
+
(`plotutils.py`, `collect/_summary_ops.py`, `batch/qc.py`, `batch/aggregate.py`,
|
|
47
|
+
`batch/facade.py`), and every cell stub in the test-suite
|
|
48
|
+
(`_SummaryCell`, `_StubCell`, the local `_Cell` classes) is a `SimpleNamespace`
|
|
49
|
+
holder, not a `CellpyCell`. A strict check would break `tests/test_from_cells.py`
|
|
50
|
+
wholesale while adding no safety a duck-type check does not already give:
|
|
51
|
+
|
|
52
|
+
| value | `hasattr(v, "data")` |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| `CellpyCell` | True |
|
|
55
|
+
| stub cell | True |
|
|
56
|
+
| `Path` | False |
|
|
57
|
+
| `int` / `str` / `None` | False |
|
|
58
|
+
|
|
59
|
+
So the guard is: **the value must expose `.data`** — the same contract every
|
|
60
|
+
downstream consumer already relies on.
|
|
61
|
+
|
|
62
|
+
## Constraints
|
|
63
|
+
|
|
64
|
+
- Validate in `Batch.from_cells` only. `CellStore.from_cells` is the internal
|
|
65
|
+
loader path (`_store_from_result`, `benchmarks/conftest.py`,
|
|
66
|
+
`tests/test_batch_v3_runner.py` passes `None` there deliberately) and must
|
|
67
|
+
keep accepting whatever the runner produces.
|
|
68
|
+
- Duck-type, do not `isinstance`-check against `CellpyCell` (see above). This
|
|
69
|
+
also avoids importing `cellreader` into `batch.facade` at module scope.
|
|
70
|
+
- Back-compat: no production caller of `Batch.from_cells` exists outside the
|
|
71
|
+
two public wrappers, and no doc example passes a non-cell, so raising is not
|
|
72
|
+
a breaking change for any working code.
|
|
73
|
+
- Keep the PR to the silent-drop story. The `example_data.cellpy_file()` (cell)
|
|
74
|
+
vs `example_data.rate_file()` (path) asymmetry the reporter calls out is a
|
|
75
|
+
public-API rename and is explicitly out of scope — it is addressed here only
|
|
76
|
+
by making the error message name that mistake.
|
|
77
|
+
|
|
78
|
+
### Prior art
|
|
79
|
+
|
|
80
|
+
- `_known_cells_hint` + `_MAX_LISTED_CELLS` in
|
|
81
|
+
[`cellpy/batch/facade.py`](../../cellpy/batch/facade.py) — added for #950
|
|
82
|
+
(merged as #973) to name a batch's cells in an unknown-label error. Same
|
|
83
|
+
file, same problem shape (bad label / bad value), so **mirror** its style:
|
|
84
|
+
truncate long lists at 8 entries with a total count.
|
|
85
|
+
- `mark_as_bad` raises `ValueError` for an unknown label while `drop` warns
|
|
86
|
+
(#950). Precedent for the raise-vs-warn split used below.
|
|
87
|
+
- `_warn_ignored_export_kwargs` in the same file — the project's shape for a
|
|
88
|
+
`UserWarning` that names the offending keys.
|
|
89
|
+
- `CollectionMeta.cells_included` in
|
|
90
|
+
[`cellpy/collect/summary.py`](../../cellpy/collect/summary.py) — the existing
|
|
91
|
+
included/excluded bookkeeping to reuse rather than recompute.
|
|
92
|
+
- Toolbox (`.issueflows/00-tools/`): nothing applicable
|
|
93
|
+
(`scan_member_usage.py`, `scan_hardcoded_headers.py`, `migrate_prms_calls.py`
|
|
94
|
+
are migration scanners). No `graphify-out/`, so grep-only.
|
|
95
|
+
|
|
96
|
+
## Approach
|
|
97
|
+
|
|
98
|
+
**1. Raise in `Batch.from_cells` (the fix the issue asks for).**
|
|
99
|
+
|
|
100
|
+
After `cell_map` is built (so it covers both the mapping and the sequence
|
|
101
|
+
form), collect every label whose value has no `.data` attribute and raise a
|
|
102
|
+
single `ValueError` naming all of them with their types, in the style of
|
|
103
|
+
`_known_cells_hint`:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
from_cells got 2 values that are not cells: 'a_path' (PosixPath), 'an_int' (int).
|
|
107
|
+
A cell is what cellpy.get(...) / example_data.cellpy_file() returns; a path is not.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
One error listing every offender, not one per value, so a user fixing a
|
|
111
|
+
dict-comprehension sees the whole problem at once. When an offender is a
|
|
112
|
+
`str`/`Path`, append the `cellpy.get(...)` hint — that is the reported trap.
|
|
113
|
+
|
|
114
|
+
**2. Warn in `collect_summaries` when it narrows.**
|
|
115
|
+
|
|
116
|
+
Track the labels that were iterated but produced no frame, excluding those
|
|
117
|
+
skipped deliberately by `only_selected`, and emit one `UserWarning` naming
|
|
118
|
+
them when the list is non-empty. This is the guard that also covers cells that
|
|
119
|
+
came from a journal and simply have an empty summary — the case `from_cells`
|
|
120
|
+
validation cannot see.
|
|
121
|
+
|
|
122
|
+
The raise/warn split follows #950: a constructor given the wrong type is a
|
|
123
|
+
programming error (raise); a collector finding one cell with nothing to
|
|
124
|
+
contribute is a data condition the caller may legitimately continue past
|
|
125
|
+
(warn).
|
|
126
|
+
|
|
127
|
+
## Files to touch
|
|
128
|
+
|
|
129
|
+
| Path | Change |
|
|
130
|
+
| --- | --- |
|
|
131
|
+
| `cellpy/batch/facade.py` | Validate `cell_map` in `Batch.from_cells`; raise `ValueError` naming offending labels + types. Reuse `_MAX_LISTED_CELLS` truncation style; add a small `_non_cell_hint` helper next to `_known_cells_hint`. |
|
|
132
|
+
| `cellpy/collect/summary.py` | Record skipped labels alongside `included`; emit one `UserWarning` when cells were dropped for want of a summary. |
|
|
133
|
+
| `tests/test_from_cells.py` | New tests: the issue's exact mapping raises and names both bad keys; a `Path` value gets the `cellpy.get` hint; the sequence form is validated too; valid stub cells still build a batch (regression guard on the duck-type choice). |
|
|
134
|
+
| `tests/test_collect.py` | New test: a batch containing a summary-less cell warns and names it, and the good cells still come through. |
|
|
135
|
+
| `docs/getting_started/agents.md` | Update the `from_cells` guidance to state that non-cell values now raise. |
|
|
136
|
+
| `AGENTS.md` | One clause on the same in the batch bullet (per the agent-docs convention in `this-project.md`). |
|
|
137
|
+
| `.issueflows/04-designs-and-guides/batch-load-orchestrator.md` | Extend the "Feedback on unknown labels (#950)" section with the #939 raise/warn decision, so the two live together. |
|
|
138
|
+
| `.issueflows/04-designs-and-guides/test-registry.md` | Register the new essential tests. |
|
|
139
|
+
| `HISTORY.md` | `[Unreleased]` bullet (written in the `/iflow-close` commit). |
|
|
140
|
+
|
|
141
|
+
## Test strategy
|
|
142
|
+
|
|
143
|
+
Per [`this-project.md`](../04-designs-and-guides/this-project.md): `uv run pytest`,
|
|
144
|
+
never bare `python`, never conda.
|
|
145
|
+
|
|
146
|
+
- New tests carry `@pytest.mark.essential` — they guard a public entry point
|
|
147
|
+
that app-building agents rely on, which is the documented bar for the marker.
|
|
148
|
+
- Targeted first: `uv run pytest tests/test_from_cells.py tests/test_collect.py -q`.
|
|
149
|
+
- Then the merge gate: `uv run pytest -m essential`.
|
|
150
|
+
- Then the full suite: `uv run pytest` — specifically to catch any existing
|
|
151
|
+
test that trips the new `collect_summaries` warning (the main regression risk
|
|
152
|
+
in this change; see Open questions).
|
|
153
|
+
- Manual: re-run the issue's own script and show it now raises instead of
|
|
154
|
+
printing `3 entries in -> ['good'] out`.
|
|
155
|
+
|
|
156
|
+
## Open questions
|
|
157
|
+
|
|
158
|
+
1. **Is the `collect_summaries` warning too noisy?** It is the part of this
|
|
159
|
+
change that can touch unrelated tests, since any fixture whose cell has an
|
|
160
|
+
empty summary would start warning. My recommendation is to keep it and fix
|
|
161
|
+
the handful of call sites if the full suite turns any up, because
|
|
162
|
+
downgrading it to `logging.debug` would recreate exactly the silence #939 is
|
|
163
|
+
about. If the full run shows this is widespread, I will report back before
|
|
164
|
+
forcing it through.
|
|
165
|
+
2. **Raise or warn in `from_cells`?** Plan says raise, per the issue's stated
|
|
166
|
+
preference and the #950 precedent. Say so now if you would rather it warn
|
|
167
|
+
and keep going.
|
|
168
|
+
3. **Follow-ups deliberately not in this PR:** `collect_cycles` reports
|
|
169
|
+
`cells_included=list(batch.cells)` (every label, not the contributing ones),
|
|
170
|
+
which is the same bookkeeping gap in the sibling collector; and the
|
|
171
|
+
`example_data` return-type asymmetry. Both can be issues of their own if you
|
|
172
|
+
want them.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Status — Issue #939: `from_cells` silently drops values that are not cells
|
|
2
|
+
|
|
3
|
+
- [x] Done
|
|
4
|
+
|
|
5
|
+
Branch: `939-from-cells-validation`
|
|
6
|
+
PR: https://github.com/jepegit/cellpy/pull/974 (#974, draft)
|
|
7
|
+
Plan: [issue939_plan.md](issue939_plan.md)
|
|
8
|
+
|
|
9
|
+
## What's done
|
|
10
|
+
|
|
11
|
+
- Reproduced on `master` @ `82ab7e03` (3 cells in, 1 out, no warnings).
|
|
12
|
+
- Located the real drop site: not `from_cells`, but the bare `continue` in
|
|
13
|
+
`collect_summaries` after `extract_cell_summary` returns `None` for a value
|
|
14
|
+
with no `.data`.
|
|
15
|
+
- `Batch.from_cells` now raises `ValueError` naming every value that is not a
|
|
16
|
+
cell and the type that arrived, with an extra `cellpy.get(path)` hint when an
|
|
17
|
+
offender is a path or a string (the reported `rate_file()` /`cellpy_file()`
|
|
18
|
+
trap). Covers the mapping and the sequence form.
|
|
19
|
+
- `collect_summaries` now warns (`UserWarning`) and names cells that
|
|
20
|
+
contributed no rows, reusing the `included` bookkeeping it already kept for
|
|
21
|
+
`CollectionMeta.cells_included`. Cells skipped by `only_selected` are not
|
|
22
|
+
reported — those are deliberate.
|
|
23
|
+
- "Is a cell" is duck-typed on `.data` asked of the **type**, not the instance:
|
|
24
|
+
`CellpyCell.data` is a property raising `NoDataFound` until something is
|
|
25
|
+
loaded, so an instance-level `hasattr` would answer "not a cell" (and raise)
|
|
26
|
+
for a legitimately empty cell. A strict `isinstance(value, CellpyCell)` was
|
|
27
|
+
rejected because every cell stub in the suite is a `SimpleNamespace`.
|
|
28
|
+
- 6 new tests (4 in `test_from_cells.py`, 2 essential + 1 unmarked in
|
|
29
|
+
`test_collect.py`), registered in `test-registry.md`.
|
|
30
|
+
- Docs: `docs/getting_started/agents.md` (new `from_cells` guidance), root
|
|
31
|
+
`AGENTS.md` bullet, `batch-load-orchestrator.md` design note. Also repaired
|
|
32
|
+
an orphaned list item in that design doc left by the #950 edit.
|
|
33
|
+
|
|
34
|
+
## Deviation from the plan
|
|
35
|
+
|
|
36
|
+
None on substance. Both open questions from the plan were settled with
|
|
37
|
+
evidence rather than a guess:
|
|
38
|
+
|
|
39
|
+
1. **Is the `collect_summaries` warning noisy?** No. A full run with
|
|
40
|
+
`-W always::UserWarning` records the new message **zero** times across
|
|
41
|
+
1744 tests, while still capturing other `UserWarning`s (e.g. the #962
|
|
42
|
+
batch-load warning). The plan's fallback — downgrading it to a debug log —
|
|
43
|
+
was not needed.
|
|
44
|
+
2. **Raise or warn in `from_cells`?** Raise, as planned and confirmed.
|
|
45
|
+
|
|
46
|
+
## Test results
|
|
47
|
+
|
|
48
|
+
- `uv run pytest tests/test_from_cells.py tests/test_collect.py` — 59 passed.
|
|
49
|
+
- `uv run pytest -m essential` — passed.
|
|
50
|
+
- `uv run pytest` (full) — 1744 passed, 17 skipped, 15 xfailed, 1 xpassed,
|
|
51
|
+
0 failures.
|
|
52
|
+
- `flake8` / `black`: no new findings; the remaining ones are present on
|
|
53
|
+
`master` for the same files.
|
|
54
|
+
|
|
55
|
+
## Remaining work
|
|
56
|
+
|
|
57
|
+
- None. Ready for `/iflow-close` (HISTORY bullet lands in the close commit).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Issue #950: b.mark_as_bad and b.drop_cells_marked_bad() not working
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/950
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
Running:
|
|
8
|
+
`b.mark_as_bad("20260515_sig002_04_fccc")
|
|
9
|
+
b.mark_as_bad("20260515_sig002_06_fccc")
|
|
10
|
+
b.mark_as_bad("20260515_sig002_10_fccc")
|
|
11
|
+
b.drop_cells_marked_bad()`
|
|
12
|
+
and then
|
|
13
|
+
`b.combine_summaries()` or `b.plot()`
|
|
14
|
+
creates this error:
|
|
15
|
+
|
|
16
|
+
---------------------------------------------------------------------------
|
|
17
|
+
KeyError Traceback (most recent call last)
|
|
18
|
+
Cell In[32], [line 2](vscode-notebook-cell:?execution_count=32&line=2)
|
|
19
|
+
1 # Plot the charge capacity and the C.E. (and resistance and rate) vs. cycle number (standard plot)
|
|
20
|
+
----> [2](vscode-notebook-cell:?execution_count=32&line=2) b.plot(rate=True, ir=True, direction="discharge", ce_range=[0,130])
|
|
21
|
+
|
|
22
|
+
File ~\AppData\Local\miniconda3\envs\cellpy213\Lib\site-packages\cellpy\batch\facade.py:354, in Batch.plot(self, backend, show, **kwargs)
|
|
23
|
+
350 def plot(self, backend: str | None = None, show: bool = False, **kwargs) -> Any:
|
|
24
|
+
351 from cellpy.plotting.batch_summary import batch_summary_plot
|
|
25
|
+
353 return batch_summary_plot(
|
|
26
|
+
--> [354](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/IFE12959/cellpy_data/notebooks/Signal-2/2026_08_25_Analysis_213/~/AppData/Local/miniconda3/envs/cellpy213/Lib/site-packages/cellpy/batch/facade.py:354) _LegacyExperimentAdapter(self.journal, self._store),
|
|
27
|
+
355 backend=backend,
|
|
28
|
+
356 show=show,
|
|
29
|
+
357 **kwargs,
|
|
30
|
+
358 )
|
|
31
|
+
|
|
32
|
+
File ~\AppData\Local\miniconda3\envs\cellpy213\Lib\site-packages\cellpy\batch\facade.py:410, in _LegacyExperimentAdapter.__init__(self, journal, store)
|
|
33
|
+
408 per_cell: dict[str, Any] = {}
|
|
34
|
+
409 cycle_col = get_headers_summary().cycle_index
|
|
35
|
+
--> [410](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/IFE12959/cellpy_data/notebooks/Signal-2/2026_08_25_Analysis_213/~/AppData/Local/miniconda3/envs/cellpy213/Lib/site-packages/cellpy/batch/facade.py:410) for label, cell in store.items():
|
|
36
|
+
411 summary = getattr(getattr(cell, "data", None), "summary", None)
|
|
37
|
+
412 if summary is None:
|
|
38
|
+
|
|
39
|
+
File <frozen _collections_abc>:883, in ItemsView.__iter__(self)
|
|
40
|
+
881 def __iter__(self):
|
|
41
|
+
...
|
|
42
|
+
47 self._cache[label] = cell
|
|
43
|
+
48 return cell
|
|
44
|
+
---> [49](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/IFE12959/cellpy_data/notebooks/Signal-2/2026_08_25_Analysis_213/~/AppData/Local/miniconda3/envs/cellpy213/Lib/site-packages/cellpy/batch/store.py:49) raise KeyError(label)
|
|
45
|
+
|
|
46
|
+
KeyError: '20260515_sig002_04_fccc'
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Plan: #950 `mark_as_bad` / `drop_cells_marked_bad` not working
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Close the gap behind [#950](https://github.com/jepegit/cellpy/issues/950): the
|
|
6
|
+
reported `KeyError` crash is already fixed on `master` but unreleased, and the
|
|
7
|
+
flow that produced it is still untested. Add the missing regression cover and
|
|
8
|
+
remove the remaining reason a user reports this as "not working" — marking or
|
|
9
|
+
dropping an unknown label is a completely silent no-op.
|
|
10
|
+
|
|
11
|
+
## Findings (verified on `master`, not assumed)
|
|
12
|
+
|
|
13
|
+
1. **The reported crash no longer reproduces.** #952 gave `CellStore` a real
|
|
14
|
+
`remove` and pointed `Batch.drop` at it. Replaying #950's flow (mark three
|
|
15
|
+
cells bad → `drop_cells_marked_bad()` → `summaries` / `experiment` adapter)
|
|
16
|
+
on `master` succeeds for both a loaded store (`Batch.from_cells`) and a lazy
|
|
17
|
+
loader store.
|
|
18
|
+
2. **The fix is unreleased.** Latest tag is `v2.1.3.post1`; the #952 bullet sits
|
|
19
|
+
under `## [Unreleased]` in `HISTORY.md`. The reporter's traceback comes from
|
|
20
|
+
`envs/cellpy213`, i.e. 2.1.3 — before the fix. #950 and #952 are the same
|
|
21
|
+
crash seen from different versions.
|
|
22
|
+
3. **#950's exact path is untested.** `test_drop_cells_marked_bad`
|
|
23
|
+
(`tests/test_batch.py`) uses a journal-only batch with an empty store and
|
|
24
|
+
asserts `cell_names` only. `test_drop_loaded_cell_forgets_store_label`
|
|
25
|
+
(`tests/test_batch_v3_facade.py`) covers `drop`, not
|
|
26
|
+
`drop_cells_marked_bad`, and does not touch `combine_summaries`. Nothing
|
|
27
|
+
exercises *marked-bad drop on a loaded batch → summaries / plot adapter*, so
|
|
28
|
+
the #952 fix can regress on precisely the reported flow without CI noticing.
|
|
29
|
+
4. **A real, still-unfixed defect: silent no-op on an unknown label.**
|
|
30
|
+
`b.mark_as_bad("typo")` accepts any string, warns nothing, and records it in
|
|
31
|
+
`session["bad_cells"]`. `drop_cells_marked_bad()` then skips it (guarded by
|
|
32
|
+
`if label in self.journal.cell_names`) and returns silently — nothing
|
|
33
|
+
dropped, no exception, no warning, no log line. `b.drop("typo")` is likewise
|
|
34
|
+
a silent no-op. With cell names like `20260515_sig002_04_fccc`, a mistyped
|
|
35
|
+
or stale label is the most likely way a user reaches "it does not work"
|
|
36
|
+
without a traceback.
|
|
37
|
+
5. **Stale `bad_cells` after a drop is *not* a bug.** Dropped labels stay in
|
|
38
|
+
`session["bad_cells"]` by design: `mark_as_bad` is the persistent record
|
|
39
|
+
that `batch.load(..., drop_bad_cells=True)` replays on the next session.
|
|
40
|
+
Pruning it would break that documented contract.
|
|
41
|
+
|
|
42
|
+
## Constraints
|
|
43
|
+
|
|
44
|
+
- `mark_as_bad` stays a session flag: it must not drop, load, or flip
|
|
45
|
+
`selected` (contract set by #952).
|
|
46
|
+
- `_finalize` calls `drop_cells_marked_bad()` on **every** `batch.load` with
|
|
47
|
+
`drop_bad_cells=True` (the default). Anything raised from that method breaks
|
|
48
|
+
loading a journal whose `bad_cells` names an already-removed cell, so the
|
|
49
|
+
drop path must stay non-fatal.
|
|
50
|
+
- Do not prune `session["bad_cells"]` (finding 5).
|
|
51
|
+
- No collectors / plot-adapter rewrite — that stays Epic B.
|
|
52
|
+
- New merge-gating tests carry `@pytest.mark.essential` and get rows in
|
|
53
|
+
[test-registry.md](../04-designs-and-guides/test-registry.md).
|
|
54
|
+
- Public batch-surface change → update
|
|
55
|
+
[`docs/getting_started/agents.md`](../../docs/getting_started/agents.md) and
|
|
56
|
+
the short root `AGENTS.md` batch bullet in the same PR (#682 convention from
|
|
57
|
+
[this-project.md](../04-designs-and-guides/this-project.md)).
|
|
58
|
+
- Test command is `uv run pytest`; no conda.
|
|
59
|
+
|
|
60
|
+
### Prior art
|
|
61
|
+
|
|
62
|
+
- `CellStore.remove` / `unload` — [`cellpy/batch/store.py`](../../cellpy/batch/store.py):
|
|
63
|
+
`remove` drops `_cache` / `_loaders` / `_labels`, `unload` is cache-only.
|
|
64
|
+
Both treat a missing label as a no-op. Reuse as is; the new feedback belongs
|
|
65
|
+
in the facade, which knows the journal, not in the store.
|
|
66
|
+
- `Batch.drop` / `drop_cells_marked_bad` / `mark_as_bad` —
|
|
67
|
+
[`cellpy/batch/facade.py`](../../cellpy/batch/facade.py): the three call
|
|
68
|
+
sites to change.
|
|
69
|
+
- `_finalize` — same file: the load-path caller that forces "warn, never
|
|
70
|
+
raise" on the drop side.
|
|
71
|
+
- `summary_collector` unknown-family rejection —
|
|
72
|
+
`collect/collector.py::_family_options`, registered as
|
|
73
|
+
`test_summary_collector_rejects_an_unknown_family` (#927): the codebase
|
|
74
|
+
already raises `ValueError` with a valid-name list for a bad user-supplied
|
|
75
|
+
key. Mirror that shape rather than inventing a new one.
|
|
76
|
+
- Anti-silent-failure line of work — #961 (named `env_file` in remote-auth
|
|
77
|
+
errors), #962 (`load` no longer treats a filefinder miss as success),
|
|
78
|
+
and open #938 / #939. This change is the batch-facade instance of the same
|
|
79
|
+
theme; match their wording style (say what happened, name the labels, point
|
|
80
|
+
at what to inspect).
|
|
81
|
+
- `warn_once` — [`cellpy/_deprecation.py`](../../cellpy/_deprecation.py): for
|
|
82
|
+
deprecations, not for per-call user feedback. Use a plain `UserWarning` with
|
|
83
|
+
`stacklevel=2`, as `_finalize` does.
|
|
84
|
+
- Toolbox: nothing in `.issueflows/00-tools/` applies. Graph: no
|
|
85
|
+
`graphify-out/`, so grep-only.
|
|
86
|
+
|
|
87
|
+
## Approach
|
|
88
|
+
|
|
89
|
+
1. **Regression test for the reported flow** (the part that guards #952 on
|
|
90
|
+
#950's exact path): loaded three-cell batch → `mark_as_bad` twice →
|
|
91
|
+
`drop_cells_marked_bad()` → assert `cell_names`, `list(b.cells)` and
|
|
92
|
+
`pages` agree, and that `combine_summaries()` and the `b.experiment`
|
|
93
|
+
adapter (the `plot()` crash site) both succeed. Essential.
|
|
94
|
+
2. **Fail fast on the mark side.** `mark_as_bad(label)` raises `ValueError`
|
|
95
|
+
when `label` is not in `journal.cell_names`, naming the label and listing
|
|
96
|
+
the known names (truncated for large batches). This is direct interactive
|
|
97
|
+
user input, it is not on the load path, and nothing downstream benefits
|
|
98
|
+
from flagging a cell that does not exist.
|
|
99
|
+
3. **Warn, never raise, on the drop side.** `drop_cells_marked_bad()` emits one
|
|
100
|
+
`UserWarning` naming any `bad_cells` entries it could not drop, and returns
|
|
101
|
+
normally — safe inside `_finalize`. `drop(label)` warns on an unknown label
|
|
102
|
+
for the same reason (it is also called internally).
|
|
103
|
+
4. **Record the contract** in
|
|
104
|
+
[batch-load-orchestrator.md](../04-designs-and-guides/batch-load-orchestrator.md),
|
|
105
|
+
next to the existing #952 "same-session `drop` vs `unload`" subsection.
|
|
106
|
+
5. **Docs**: one line in the `agents.md` mark/drop recipe and the root
|
|
107
|
+
`AGENTS.md` batch bullet describing the raise-vs-warn split.
|
|
108
|
+
6. **`HISTORY.md`**: `[Unreleased]` bullet for #950 at `/iflow-close`. The
|
|
109
|
+
crash itself is already covered by the #952 bullet — do not double-report
|
|
110
|
+
it as a second fix.
|
|
111
|
+
|
|
112
|
+
## Files to touch
|
|
113
|
+
|
|
114
|
+
| Path | Change |
|
|
115
|
+
| --- | --- |
|
|
116
|
+
| `cellpy/batch/facade.py` | `mark_as_bad` raises on unknown label; `drop` / `drop_cells_marked_bad` warn instead of silently skipping. |
|
|
117
|
+
| `tests/test_batch_v3_facade.py` | #950 regression (loaded marked-bad drop → summaries + adapter); unknown-label raise / warn tests. |
|
|
118
|
+
| `.issueflows/04-designs-and-guides/batch-load-orchestrator.md` | Feedback contract next to the #952 note. |
|
|
119
|
+
| `.issueflows/04-designs-and-guides/test-registry.md` | Rows for the new essential tests. |
|
|
120
|
+
| `docs/getting_started/agents.md` | Mark / drop recipe gains the error-behaviour line. |
|
|
121
|
+
| `AGENTS.md` | Batch bullet, only if it stays short. |
|
|
122
|
+
| `HISTORY.md` | `[Unreleased]` bullet (written at close). |
|
|
123
|
+
|
|
124
|
+
## Test strategy
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run pytest tests/test_batch_v3_facade.py tests/test_batch.py -k "drop or mark or bad"
|
|
128
|
+
uv run pytest -m essential
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The second command is the CI Tier-1 merge gate. `test_drop_cells_marked_bad`
|
|
132
|
+
(`tests/test_batch.py`) and `test_mark_as_bad_and_drop`
|
|
133
|
+
(`tests/test_batch_v3_facade.py`) both mark labels that exist, so step 2 should
|
|
134
|
+
leave them green; if either goes red, that is a signal the raise is too strict
|
|
135
|
+
and the open question below needs the other answer.
|
|
136
|
+
|
|
137
|
+
## Open questions
|
|
138
|
+
|
|
139
|
+
1. **Raise or warn when `mark_as_bad` gets an unknown label?** Recommended:
|
|
140
|
+
**raise `ValueError`** — fail fast on user input (KISS rule), matching the
|
|
141
|
+
`summary_collector` unknown-family precedent, and safe because the load path
|
|
142
|
+
never calls `mark_as_bad`. The alternative (warn, keep recording) is gentler
|
|
143
|
+
for anyone who marks cells before the journal is populated, but it leaves
|
|
144
|
+
the same "nothing happened" ending that this issue is about.
|
|
145
|
+
2. **Confirm the crash is really gone for the reporter.** The plan treats the
|
|
146
|
+
`KeyError` as fixed by #952 based on a local replay against `master`. Worth
|
|
147
|
+
asking the reporter to re-run on `master` (or the next release) before #950
|
|
148
|
+
is closed, in case their journal reaches the store through a path the replay
|
|
149
|
+
did not cover.
|
|
150
|
+
3. **Scope check:** #949 (`b.plot` ignores `ir=True`) came from the same
|
|
151
|
+
session and the same notebook line as this traceback. Keep it a separate
|
|
152
|
+
issue — it is a plotting-argument bug, not a store/journal one.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Status: #950 `mark_as_bad` / `drop_cells_marked_bad` not working
|
|
2
|
+
|
|
3
|
+
- [x] Done
|
|
4
|
+
|
|
5
|
+
## What's done
|
|
6
|
+
|
|
7
|
+
- Plan accepted 2026-08-29 (see [issue950_plan.md](issue950_plan.md)).
|
|
8
|
+
- **Verified the reported crash is already fixed on `master`** by #952 and
|
|
9
|
+
merely unreleased (latest tag `v2.1.3.post1`; the reporter ran 2.1.3).
|
|
10
|
+
Replaying the issue's flow against `master` succeeds for a loaded store and
|
|
11
|
+
for a lazy loader store.
|
|
12
|
+
- `Batch.mark_as_bad` raises `ValueError` for a label that is not in
|
|
13
|
+
`journal.cell_names`, naming the known cells.
|
|
14
|
+
- `Batch.drop` warns (`UserWarning`) and no-ops for an unknown label instead of
|
|
15
|
+
silently doing nothing.
|
|
16
|
+
- Regression test for #950's exact path: loaded batch → two `mark_as_bad` →
|
|
17
|
+
`drop_cells_marked_bad()` → `combine_summaries()` and the `b.experiment`
|
|
18
|
+
adapter (the `plot()` crash site). This path had **no** coverage before:
|
|
19
|
+
`test_drop_cells_marked_bad` used a journal-only batch with an empty store,
|
|
20
|
+
and `test_drop_loaded_cell_forgets_store_label` covers `drop`, not
|
|
21
|
+
`drop_cells_marked_bad`.
|
|
22
|
+
- Tests for the unknown-label raise/warn and for the quiet-reload case.
|
|
23
|
+
- Docs: `docs/getting_started/agents.md` drop recipe, root `AGENTS.md` batch
|
|
24
|
+
bullet, feedback contract in
|
|
25
|
+
[batch-load-orchestrator.md](../04-designs-and-guides/batch-load-orchestrator.md),
|
|
26
|
+
two rows in [test-registry.md](../04-designs-and-guides/test-registry.md).
|
|
27
|
+
- `MPLBACKEND=Agg uv run pytest -m essential`: 781 passed, 58 skipped.
|
|
28
|
+
|
|
29
|
+
## Deviation from the plan
|
|
30
|
+
|
|
31
|
+
The plan had `drop_cells_marked_bad()` warn about `bad_cells` entries it could
|
|
32
|
+
not drop. **Dropped** during implementation after checking the round-trip:
|
|
33
|
+
`write_journal` persists `session`, so a cell dropped in one session is still
|
|
34
|
+
listed in `bad_cells` after `save()` + reload, and `_finalize` calls
|
|
35
|
+
`drop_cells_marked_bad()` on **every** `batch.load`. That warning would have
|
|
36
|
+
fired on a completely normal round-trip (verified: reloaded journal has
|
|
37
|
+
`bad_cells == ["gone"]` with `gone` absent from pages). Rejecting unknown
|
|
38
|
+
labels in `mark_as_bad` closes the hole at the source instead, so the drop path
|
|
39
|
+
stays quiet. `test_drop_cells_marked_bad_is_quiet_about_already_dropped_cells`
|
|
40
|
+
pins this.
|
|
41
|
+
|
|
42
|
+
- `MPLBACKEND=Agg uv run pytest` (full suite, `--extra batch`): 1737 passed,
|
|
43
|
+
17 skipped, 15 xfailed, 1 xpassed.
|
|
44
|
+
- `HISTORY.md` bullet under `## [Unreleased]`.
|
|
45
|
+
|
|
46
|
+
## Remaining work
|
|
47
|
+
|
|
48
|
+
- None. The reporter is worth asking to re-confirm on the next release, since
|
|
49
|
+
their crash was fixed by #952 rather than by this PR.
|
|
50
|
+
|
|
51
|
+
## Notes
|
|
52
|
+
|
|
53
|
+
- `session["bad_cells"]` is deliberately not pruned on a successful drop — it
|
|
54
|
+
is the record a later `load(drop_bad_cells=True)` replays.
|
|
55
|
+
- The environment needed `unixodbc` (`libodbc.so.2`) installed before
|
|
56
|
+
`pytest -m essential` could even collect `test_arbin_variants_two_stage.py`.
|
|
57
|
+
GitHub runners ship it; this cloud VM did not. Unrelated to this issue, but
|
|
58
|
+
it is the same class of problem as open issue #938.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Issue #967: Zensical docs contain strange markers
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/jepegit/cellpy/issues/967
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
The built docs shows ":class:" etc while it most likely should render to something nicer. 
|