cellpycore 0.1.3__tar.gz → 0.1.4__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.
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_original.md +27 -0
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_plan.md +166 -0
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_status.md +16 -0
- cellpycore-0.1.4/.issueflows/04-designs-and-guides/zensical-docs.md +39 -0
- cellpycore-0.1.4/.readthedocs.yaml +17 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/HISTORY.md +16 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/PKG-INFO +13 -4
- {cellpycore-0.1.3 → cellpycore-0.1.4}/README.md +12 -3
- {cellpycore-0.1.3 → cellpycore-0.1.4}/pyproject.toml +7 -1
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/config.py +6 -6
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/__init__.py +1 -1
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/models.py +2 -2
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/summarizers.py +1 -1
- {cellpycore-0.1.3 → cellpycore-0.1.4}/uv.lock +704 -1
- cellpycore-0.1.4/zensical.toml +125 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.aliases +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/cellpy-core-migration.mdc +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/graphify.mdc +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/issueflow-rules.mdc +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/kiss.mdc +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/this-project.mdc +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/caveman/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/grill-me/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-close/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-comments/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-fix/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-init/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-pause/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-pick/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-plan/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-start/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-status/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.gitignore +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/00-tools/README.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue72_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue72_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue82_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue82_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_original.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_plan.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_status.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-migration.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/code-review-2026-07.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/column-headers-review.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/metadata-scaffolding.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/step-table-polars-migration.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/summary-extractors.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/this-project.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/config.toml +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.pre-commit-config.yaml +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.python-version +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/.vscode/settings.json +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/AGENTS.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/LICENSE +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/ROADMAP.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/cellpy-core.code-workspace +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/.graphify_labels.json +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/.graphify_root +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/GRAPH_REPORT.md +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/graph.html +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/graph.json +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/manifest.json +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/__init__.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/cell_core.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/exceptions.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/extractors.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/__init__.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/headers.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/limits.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/mapping.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/meta.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/mock_core.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/selectors.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/merge.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/io.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/py.typed +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/settings_base.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/testing/__init__.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/testing/mock_data.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/timestamps.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/units/__init__.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/units/converters.py +0 -0
- {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/units/spec.py +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Issue #91: Release v0.1.4: docs (#90) and cellpy re-pin
|
|
2
|
+
|
|
3
|
+
Source: https://github.com/cellpy/cellpy-core/issues/91
|
|
4
|
+
|
|
5
|
+
## Original issue text
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
`v0.1.3` (2026-07-04) already ships the merge/update API from #86/#87. One commit on `main` since that tag:
|
|
10
|
+
|
|
11
|
+
- #90 — Zensical docs migration, Read the Docs config, example notebooks
|
|
12
|
+
|
|
13
|
+
`cellpy` still pins `cellpycore==0.1.2` in `[project.dependencies]` — needs re-pin after this release.
|
|
14
|
+
|
|
15
|
+
## Tasks
|
|
16
|
+
|
|
17
|
+
- [ ] Confirm `main` is green (ruff + pytest)
|
|
18
|
+
- [ ] Update changelog / release notes for 0.1.4 (docs + any misc since 0.1.3)
|
|
19
|
+
- [ ] Bump version (`uv version --bump patch` → 0.1.4) and commit
|
|
20
|
+
- [ ] Cut GitHub release (`release patch` or equivalent) from up-to-date `main`
|
|
21
|
+
- [ ] Verify `release.yml` passes and `cellpycore 0.1.4` appears on PyPI
|
|
22
|
+
- [ ] cellpy: bump `cellpycore` pin in `pyproject.toml`, refresh `uv.lock`, run seam tests (`tests/test_slim.py`)
|
|
23
|
+
|
|
24
|
+
## References
|
|
25
|
+
|
|
26
|
+
- `.issueflows/04-designs-and-guides/release-procedure.md`
|
|
27
|
+
- Issue #44 (release pipeline — done)
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Issue #91 plan — Release v0.1.4 + retroactive HISTORY backfill
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Correct `HISTORY.md` so shipped work is attributed to the right versions (everything
|
|
6
|
+
currently under `[Unreleased]` → **`[0.1.3]`**, dated 2026-07-04), add **`[0.1.4]`**
|
|
7
|
+
with **only** the Zensical / Read the Docs documentation work (#90), then cut the
|
|
8
|
+
`v0.1.4` release and re-pin `cellpy` off the stale `cellpycore==0.1.2` pin.
|
|
9
|
+
|
|
10
|
+
## Constraints
|
|
11
|
+
|
|
12
|
+
- **Version attribution (user):** Only the Zensical documentation migration belongs in
|
|
13
|
+
`0.1.4`. No code/API bullets in the 0.1.4 section.
|
|
14
|
+
- **No PyPI re-release of 0.1.3** — backfill is changelog-only; `v0.1.3` on PyPI is
|
|
15
|
+
already correct for code content.
|
|
16
|
+
- **Single source of truth:** Root [`HISTORY.md`](../../HISTORY.md) is included into the
|
|
17
|
+
docs site via [`docs/changelog.md`](../../docs/changelog.md) (`--8<--` snippet); edit
|
|
18
|
+
`HISTORY.md` only.
|
|
19
|
+
- **Release ritual:** Follow
|
|
20
|
+
[`.issueflows/04-designs-and-guides/release-procedure.md`](../04-designs-and-guides/release-procedure.md)
|
|
21
|
+
— bump committed on branch, tag from clean `main` after merge (or user runs `release`
|
|
22
|
+
alias post-merge).
|
|
23
|
+
- **cellpy boundary:** Re-pin lives in `jepegit/cellpy` (separate branch/PR); keep
|
|
24
|
+
editable `[tool.uv.sources]` path override unchanged per migration guide.
|
|
25
|
+
|
|
26
|
+
### Prior art
|
|
27
|
+
|
|
28
|
+
- [`release-procedure.md`](../04-designs-and-guides/release-procedure.md) — bump, `release`
|
|
29
|
+
alias, `release.yml`, cellpy re-pin checklist.
|
|
30
|
+
- [`zensical-docs.md`](../04-designs-and-guides/zensical-docs.md) — what #90 landed
|
|
31
|
+
(structure, RTD build, notebook → markdown pipeline).
|
|
32
|
+
- [`iflow-history-update`](../../.cursor/skills/iflow-history-update/SKILL.md) — Keep a
|
|
33
|
+
Changelog promote pattern (`[Unreleased]` → `[x.y.z] - date` + fresh empty
|
|
34
|
+
`[Unreleased]`).
|
|
35
|
+
- Issue #56 close — prior patch release that promoted `[Unreleased]` to `[0.1.2]` at
|
|
36
|
+
`/iflow-close` time.
|
|
37
|
+
- **Toolbox:** none (`00-tools/` index empty).
|
|
38
|
+
- **Grep:** no release/changelog helper scripts; `.aliases` `release()` reads version from
|
|
39
|
+
`pyproject.toml` and calls `gh release create`.
|
|
40
|
+
|
|
41
|
+
## Approach
|
|
42
|
+
|
|
43
|
+
### 1. Retroactive `[0.1.3]` section (changelog debt)
|
|
44
|
+
|
|
45
|
+
Move the **entire** current `[Unreleased]` bullet list into a new section:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
## [0.1.3] - 2026-07-04
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
(Use the actual `v0.1.3` tag date — 2026-07-04.)
|
|
52
|
+
|
|
53
|
+
**Add missing bullets** that shipped between `v0.1.2` and `v0.1.3` but were never
|
|
54
|
+
written to `HISTORY.md`:
|
|
55
|
+
|
|
56
|
+
| Change | Ref | Notes |
|
|
57
|
+
|--------|-----|-------|
|
|
58
|
+
| Merge/update e2e coverage | #89 | Golden-style tests for `merge_data` / `update_data` pipeline |
|
|
59
|
+
| README doc links use absolute GitHub URLs (PyPI-safe) | #62 / #63 | Small docs fix in the same release window |
|
|
60
|
+
|
|
61
|
+
**Do not add** #88 (Cursor Cloud `AGENTS.md` blurb) — agent/dev doc, not a user-facing
|
|
62
|
+
release note unless you explicitly want it.
|
|
63
|
+
|
|
64
|
+
**Optional tidy while editing:** align issue refs where HISTORY already mentions work
|
|
65
|
+
(e.g. pre-commit is #84 issue / #85 PR — keep `#84` or note both; merge is #86 issue /
|
|
66
|
+
#87 PR — current `#86` is fine).
|
|
67
|
+
|
|
68
|
+
Leave a fresh empty:
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
## [Unreleased]
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
above `[0.1.4]` (added in step 2).
|
|
76
|
+
|
|
77
|
+
### 2. `[0.1.4]` section (this release)
|
|
78
|
+
|
|
79
|
+
Under `[Unreleased]`, add **one** consolidated bullet for #90 (paraphrase from
|
|
80
|
+
[`zensical-docs.md`](../04-designs-and-guides/zensical-docs.md)):
|
|
81
|
+
|
|
82
|
+
- Migrate documentation to **Zensical** with **Read the Docs** hosting
|
|
83
|
+
(`.readthedocs.yaml`, `zensical.toml`, `docs` group in `pyproject.toml`).
|
|
84
|
+
- Restructure docs tree (`getting-started`, `user-guide/`, `specifications/`,
|
|
85
|
+
`examples/`, `development/`); `changelog.md` and `development/roadmap.md` snippet-include
|
|
86
|
+
root `HISTORY.md` / `ROADMAP.md`.
|
|
87
|
+
- Add executable example notebooks (committed markdown + plot outputs under
|
|
88
|
+
`docs/examples/`). (#90)
|
|
89
|
+
|
|
90
|
+
Then **promote** for release (during `/iflow-close` with bump):
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
## [0.1.4] - <release-date>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
(empty `[Unreleased]` above it again).
|
|
97
|
+
|
|
98
|
+
### 3. Version bump + release (cellpy-core)
|
|
99
|
+
|
|
100
|
+
On branch `91-release-v0-1-4`:
|
|
101
|
+
|
|
102
|
+
1. Preflight: `uv run ruff check`, `uv run pytest` (matches `release.yml`).
|
|
103
|
+
2. Commit HISTORY backfill + `[0.1.4]` unreleased bullet (can be one commit or two —
|
|
104
|
+
prefer **one PR** with clear commit message).
|
|
105
|
+
3. `/iflow-close bump patch` → `0.1.4`, promote `[Unreleased]` → `[0.1.4]`, open PR.
|
|
106
|
+
4. After merge to `main`: user runs `release` (or `release patch` if version not yet
|
|
107
|
+
committed — follow alias guards) → verify `release.yml` green → confirm
|
|
108
|
+
`cellpycore 0.1.4` on PyPI.
|
|
109
|
+
|
|
110
|
+
Current state: `pyproject.toml` is `0.1.3`; `v0.1.3` tag exists; one commit since tag
|
|
111
|
+
(`b5f088a` #90 docs only) — aligns with 0.1.4 scope.
|
|
112
|
+
|
|
113
|
+
### 4. cellpy re-pin (follow-up in sibling repo)
|
|
114
|
+
|
|
115
|
+
On a `cellpy` branch (e.g. `core91-pin-cellpycore-0-1-4`):
|
|
116
|
+
|
|
117
|
+
- `[project.dependencies]`: `cellpycore==0.1.2` → `cellpycore==0.1.4` (or `>=0.1.4` if
|
|
118
|
+
you prefer minimum pin — match #400 style: exact `==` before cellpy release).
|
|
119
|
+
- `uv lock` / `uv sync` in `cellpy`.
|
|
120
|
+
- `uv run pytest tests/test_slim.py` (and optionally parity tests).
|
|
121
|
+
- Open PR on `jepegit/cellpy`; reference cellpy-core #91.
|
|
122
|
+
|
|
123
|
+
Can land same day as core release but is a **separate PR** (different repo).
|
|
124
|
+
|
|
125
|
+
## Files to touch
|
|
126
|
+
|
|
127
|
+
| Path | Change |
|
|
128
|
+
|------|--------|
|
|
129
|
+
| [`HISTORY.md`](../../HISTORY.md) | Promote `[Unreleased]` → `[0.1.3]`; add missing #89/#63 bullets; add #90 under unreleased then promote to `[0.1.4]` at close |
|
|
130
|
+
| [`pyproject.toml`](../../pyproject.toml) | `0.1.3` → `0.1.4` at `/iflow-close bump patch` |
|
|
131
|
+
| [`uv.lock`](../../uv.lock) | Refresh if bump touches lock (usually unchanged for patch) |
|
|
132
|
+
| `.issueflows/01-current-issues/issue91_status.md` | Progress + done checkbox at close |
|
|
133
|
+
| `cellpy/pyproject.toml` + `cellpy/uv.lock` | Re-pin (separate repo, separate PR) |
|
|
134
|
+
|
|
135
|
+
**No code changes** under `src/cellpycore/` for this issue.
|
|
136
|
+
|
|
137
|
+
## Test strategy
|
|
138
|
+
|
|
139
|
+
**cellpy-core (before PR):**
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
uv run ruff check src/ tests/
|
|
143
|
+
uv run ruff format --check
|
|
144
|
+
uv run pytest
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Release CI repeats the same. No new tests — changelog/release only.
|
|
148
|
+
|
|
149
|
+
**cellpy (re-pin PR):**
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
cd ../cellpy && uv lock && uv run pytest tests/test_slim.py
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Open questions
|
|
156
|
+
|
|
157
|
+
1. **cellpy pin style:** exact `cellpycore==0.1.4` vs `>=0.1.4`? Recommend `==0.1.4`
|
|
158
|
+
to mirror #400 until the next cellpy release.
|
|
159
|
+
2. **Include #88 in 0.1.3 HISTORY?** Plan default: **no** (skip).
|
|
160
|
+
3. **Split PRs?** Recommend single cellpy-core PR (HISTORY backfill + 0.1.4 notes +
|
|
161
|
+
bump); cellpy re-pin as sibling PR after PyPI publish.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
**Ready for `/iflow-start` after you Accept.** Revise/Abort if you want different pin
|
|
166
|
+
style or to include #88.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Issue #91 status
|
|
2
|
+
|
|
3
|
+
- [ ] Done
|
|
4
|
+
|
|
5
|
+
## What's done
|
|
6
|
+
|
|
7
|
+
- Plan confirmed: `cellpycore==0.1.4` pin style; skip #88 in HISTORY.
|
|
8
|
+
- Retroactive `[0.1.3]` section in `HISTORY.md` (moved unreleased bullets + #89, #63).
|
|
9
|
+
- `[0.1.4]` promoted in `HISTORY.md`; `pyproject.toml` bumped to 0.1.4.
|
|
10
|
+
- Preflight green: ruff + 150 pytest passed.
|
|
11
|
+
- PR opened for cellpy-core changelog + version bump.
|
|
12
|
+
|
|
13
|
+
## Remaining work
|
|
14
|
+
|
|
15
|
+
- Merge PR, run `release` alias on `main`, verify PyPI `cellpycore 0.1.4`.
|
|
16
|
+
- cellpy: separate PR — `cellpycore==0.1.4`, `uv lock`, `tests/test_slim.py`.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Documentation stack: Zensical on Read the Docs
|
|
2
|
+
|
|
3
|
+
**Context.** The repo's loose markdown docs were restructured into a proper
|
|
4
|
+
site. `development.md` once said "we intend to implement sphinx"; that
|
|
5
|
+
intention is superseded by this decision.
|
|
6
|
+
|
|
7
|
+
**Decision.** Docs are built with [Zensical](https://zensical.org) (the
|
|
8
|
+
Material-for-MkDocs successor) and hosted on Read the Docs.
|
|
9
|
+
|
|
10
|
+
- Config: `zensical.toml` at the repo root (nav, theme, markdown extensions).
|
|
11
|
+
- Hosting: `.readthedocs.yaml` uses `build.jobs` (`pip install zensical` →
|
|
12
|
+
`zensical build --clean` → copy `site/` to `$READTHEDOCS_OUTPUT/html/`).
|
|
13
|
+
The RTD build needs **only** zensical — no project deps.
|
|
14
|
+
- Local preview: `uv run --group docs zensical serve`.
|
|
15
|
+
- Structure: `docs/{index,getting-started,changelog}.md`, `user-guide/`,
|
|
16
|
+
`examples/`, `specifications/` (was `data_format_specifications/`),
|
|
17
|
+
`development/`. `changelog.md` and `development/roadmap.md` are thin
|
|
18
|
+
`--8<--` snippet includes of root `HISTORY.md` / `ROADMAP.md` (single
|
|
19
|
+
source of truth stays at the root; `pymdownx.snippets` has
|
|
20
|
+
`base_path = ["."]`).
|
|
21
|
+
|
|
22
|
+
**Notebooks.** Zensical does not render `.ipynb` (it copies them verbatim).
|
|
23
|
+
Example notebooks under `docs/examples/` are therefore executed and converted
|
|
24
|
+
to committed markdown pages (plus `*_files/` plot PNGs) with nbconvert:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uv run --group docs jupyter nbconvert --to notebook --execute --inplace docs/examples/*.ipynb
|
|
28
|
+
uv run --group docs jupyter nbconvert --to markdown docs/examples/*.ipynb
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Re-run and commit the outputs whenever a notebook changes. The `.ipynb` files
|
|
32
|
+
stay in the nav-adjacent docs tree as downloadable sources. Ruff lints and
|
|
33
|
+
formats notebooks too (`ruff format docs/examples/*.ipynb`).
|
|
34
|
+
|
|
35
|
+
**Alternatives considered.** Sphinx (heavier, reST-leaning, docs were already
|
|
36
|
+
markdown); MkDocs + mkdocs-jupyter (Zensical does not support MkDocs plugins,
|
|
37
|
+
and the team wanted Zensical); converting notebooks at RTD build time (adds
|
|
38
|
+
jupyter+project deps to the RTD build for little gain — committed rendered
|
|
39
|
+
pages keep the RTD build trivially `pip install zensical`).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Read the Docs configuration for the Zensical-built documentation.
|
|
2
|
+
# Reference: https://docs.readthedocs.com/platform/stable/intro/zensical.html
|
|
3
|
+
version: 2
|
|
4
|
+
|
|
5
|
+
build:
|
|
6
|
+
os: ubuntu-24.04
|
|
7
|
+
tools:
|
|
8
|
+
python: "3.13"
|
|
9
|
+
jobs:
|
|
10
|
+
install:
|
|
11
|
+
- pip install zensical
|
|
12
|
+
build:
|
|
13
|
+
html:
|
|
14
|
+
- zensical build --clean
|
|
15
|
+
post_build:
|
|
16
|
+
- mkdir -p $READTHEDOCS_OUTPUT/html/
|
|
17
|
+
- cp --recursive site/* $READTHEDOCS_OUTPUT/html/
|
|
@@ -4,12 +4,26 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.1.4] - 2026-07-04
|
|
8
|
+
|
|
9
|
+
- Migrate documentation to Zensical with Read the Docs hosting
|
|
10
|
+
(`.readthedocs.yaml`, `zensical.toml`, optional `docs` dependency group).
|
|
11
|
+
Restructure the docs tree (`getting-started`, `user-guide/`, `specifications/`,
|
|
12
|
+
`examples/`, `development/`); `changelog.md` and `development/roadmap.md`
|
|
13
|
+
snippet-include root `HISTORY.md` and `ROADMAP.md`. Add executable example
|
|
14
|
+
notebooks with committed markdown and plot outputs under `docs/examples/`. (#90)
|
|
15
|
+
- Backfill `HISTORY.md` for the 0.1.3 release and bump to 0.1.4. (#91)
|
|
16
|
+
|
|
17
|
+
## [0.1.3] - 2026-07-04
|
|
18
|
+
|
|
7
19
|
- Add in-repo pre-commit hooks (`ruff check --fix`, `ruff format`) via
|
|
8
20
|
`.pre-commit-config.yaml` and document one-time `uv run pre-commit install`
|
|
9
21
|
setup. (#84)
|
|
10
22
|
- Add `merge_data` and `update_data` for combining processed `Data` objects and
|
|
11
23
|
incrementally appending new raw rows (with `CellpyCellCore` wrappers and tests).
|
|
12
24
|
(#86)
|
|
25
|
+
- Add merge/update end-to-end test coverage for the public merge and incremental
|
|
26
|
+
update pipeline. (#89)
|
|
13
27
|
- Move `CellpyError` / `NoDataFound` from `legacy/` to top-level
|
|
14
28
|
`cellpycore.exceptions` (legacy re-export kept); expand the `CellpyCellCore`
|
|
15
29
|
class docstring; add `ROADMAP.md` for planned features and open design
|
|
@@ -44,6 +58,8 @@ All notable changes to this project will be documented in this file.
|
|
|
44
58
|
API, and an opt-in pytest-benchmark suite (`uv run pytest -m benchmark`).
|
|
45
59
|
- Update the README developer section to uv's project workflow: `uv sync` after
|
|
46
60
|
cloning, `uv add` for new dependencies, `uv run pytest` for tests (#64).
|
|
61
|
+
- Use absolute GitHub URLs for README documentation links so they resolve on PyPI.
|
|
62
|
+
(#62)
|
|
47
63
|
|
|
48
64
|
## [0.1.2] - 2026-07-02
|
|
49
65
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cellpycore
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Core engine for cellpy: fast, thread-safe step and cycle summarization of battery-cycling raw data
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -49,11 +49,20 @@ Source: <https://github.com/cellpy/cellpy-core>
|
|
|
49
49
|
|
|
50
50
|
## Documentation
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
Full documentation (built with [Zensical](https://zensical.org), hosted on
|
|
53
|
+
Read the Docs): <https://cellpy-core.readthedocs.io/>
|
|
54
|
+
|
|
55
|
+
Key pages:
|
|
56
|
+
|
|
57
|
+
- [Using cellpy-core standalone (slim-consumer guide)](https://github.com/cellpy/cellpy-core/blob/main/docs/user-guide/standalone-use.md) —
|
|
53
58
|
get step tables and per-cycle summaries from a native-schema polars frame
|
|
54
59
|
without full cellpy.
|
|
55
|
-
- [Harmonized raw format specification](https://github.com/cellpy/cellpy-core/blob/main/docs/
|
|
56
|
-
- [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/data-object
|
|
60
|
+
- [Harmonized raw format specification](https://github.com/cellpy/cellpy-core/blob/main/docs/specifications/harmonized-raw.md)
|
|
61
|
+
- [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/user-guide/data-object.md)
|
|
62
|
+
- [Example notebooks](https://github.com/cellpy/cellpy-core/tree/main/docs/examples)
|
|
63
|
+
|
|
64
|
+
Build the docs locally with `uv run --group docs zensical serve` (config in
|
|
65
|
+
`zensical.toml`; notebook-regeneration instructions in `docs/examples/index.md`).
|
|
57
66
|
|
|
58
67
|
## Developing
|
|
59
68
|
|
|
@@ -29,11 +29,20 @@ Source: <https://github.com/cellpy/cellpy-core>
|
|
|
29
29
|
|
|
30
30
|
## Documentation
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Full documentation (built with [Zensical](https://zensical.org), hosted on
|
|
33
|
+
Read the Docs): <https://cellpy-core.readthedocs.io/>
|
|
34
|
+
|
|
35
|
+
Key pages:
|
|
36
|
+
|
|
37
|
+
- [Using cellpy-core standalone (slim-consumer guide)](https://github.com/cellpy/cellpy-core/blob/main/docs/user-guide/standalone-use.md) —
|
|
33
38
|
get step tables and per-cycle summaries from a native-schema polars frame
|
|
34
39
|
without full cellpy.
|
|
35
|
-
- [Harmonized raw format specification](https://github.com/cellpy/cellpy-core/blob/main/docs/
|
|
36
|
-
- [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/data-object
|
|
40
|
+
- [Harmonized raw format specification](https://github.com/cellpy/cellpy-core/blob/main/docs/specifications/harmonized-raw.md)
|
|
41
|
+
- [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/user-guide/data-object.md)
|
|
42
|
+
- [Example notebooks](https://github.com/cellpy/cellpy-core/tree/main/docs/examples)
|
|
43
|
+
|
|
44
|
+
Build the docs locally with `uv run --group docs zensical serve` (config in
|
|
45
|
+
`zensical.toml`; notebook-regeneration instructions in `docs/examples/index.md`).
|
|
37
46
|
|
|
38
47
|
## Developing
|
|
39
48
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cellpycore"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.4"
|
|
4
4
|
license = "MIT"
|
|
5
5
|
license-files = ["LICEN[CS]E*"]
|
|
6
6
|
description = "Core engine for cellpy: fast, thread-safe step and cycle summarization of battery-cycling raw data"
|
|
@@ -69,6 +69,12 @@ dev = [
|
|
|
69
69
|
"pytest-cov>=7.1.0",
|
|
70
70
|
"pre-commit>=4.6.0",
|
|
71
71
|
]
|
|
72
|
+
docs = [
|
|
73
|
+
"ipykernel>=7.3.0",
|
|
74
|
+
"matplotlib>=3.10.6",
|
|
75
|
+
"nbconvert>=7.17.1",
|
|
76
|
+
"zensical>=0.0.46",
|
|
77
|
+
]
|
|
72
78
|
|
|
73
79
|
[tool.pytest.ini_options]
|
|
74
80
|
testpaths = ["tests"]
|
|
@@ -82,7 +82,7 @@ class ResetGranularity(StrEnum):
|
|
|
82
82
|
|
|
83
83
|
Describes where a cycler's cumulative capacity / energy counter resets to
|
|
84
84
|
zero. The harmonized raw format mandates ``CYCLE`` (see
|
|
85
|
-
``docs/
|
|
85
|
+
``docs/specifications/harmonized-raw.md`` §Capacity convention);
|
|
86
86
|
:func:`cellpycore.summarizers.normalize_capacity_granularity` uses this enum
|
|
87
87
|
to normalize ``STEP`` / ``TEST`` cumulative raw from other cyclers to the
|
|
88
88
|
mandated ``CYCLE`` convention before aggregation.
|
|
@@ -177,7 +177,7 @@ class StepMode(StrEnum):
|
|
|
177
177
|
Note:
|
|
178
178
|
Absence / "no specific mode" is represented by a null value in the
|
|
179
179
|
table, not by the literal string ``"None"``. The spec table in
|
|
180
|
-
``docs/
|
|
180
|
+
``docs/specifications/harmonized-raw.md`` lists ``"None"``
|
|
181
181
|
as a sample value; that is documentation shorthand for "missing" and is
|
|
182
182
|
intentionally not a member here.
|
|
183
183
|
|
|
@@ -197,7 +197,7 @@ class CycleType(StrEnum):
|
|
|
197
197
|
|
|
198
198
|
A *reference* vocabulary (plain strings stored in the table, unknown values
|
|
199
199
|
allowed, extend by adding members). Values keep the capitalization used in
|
|
200
|
-
the spec table in ``docs/
|
|
200
|
+
the spec table in ``docs/specifications/harmonized-raw.md``.
|
|
201
201
|
|
|
202
202
|
Not used by the engine yet.
|
|
203
203
|
|
|
@@ -566,11 +566,11 @@ class RawCols(Cols):
|
|
|
566
566
|
|
|
567
567
|
Each attribute maps a logical quantity to the column name used in the
|
|
568
568
|
harmonized raw format that cellpy-core consumes. The authoritative spec is
|
|
569
|
-
``docs/
|
|
569
|
+
``docs/specifications/harmonized-raw.md``; the column order here
|
|
570
570
|
mirrors that spec table.
|
|
571
571
|
"""
|
|
572
572
|
|
|
573
|
-
# Follows docs/
|
|
573
|
+
# Follows docs/specifications/harmonized-raw.md (authoritative,
|
|
574
574
|
# 2025-09-17). Column order mirrors the spec table.
|
|
575
575
|
datapoint_num: str = "datapoint_num"
|
|
576
576
|
source_datapoint_num: str = "source_datapoint_num"
|
|
@@ -594,7 +594,7 @@ class RawCols(Cols):
|
|
|
594
594
|
potential: str = "potential"
|
|
595
595
|
current: str = "current"
|
|
596
596
|
# Capacity / energy are cumulative per cycle, per direction (reset each cycle).
|
|
597
|
-
# See docs/
|
|
597
|
+
# See docs/specifications/harmonized-raw.md ("Capacity convention").
|
|
598
598
|
cumulative_charge_capacity: str = "cumulative_charge_capacity"
|
|
599
599
|
cumulative_discharge_capacity: str = "cumulative_discharge_capacity"
|
|
600
600
|
cumulative_charge_energy: str = "cumulative_charge_energy"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This sub-package provides the *shape and tools* for test-/cell-level metadata,
|
|
4
4
|
without requiring that metadata be populated on the core ``Data`` object. See
|
|
5
5
|
``.issueflows/04-designs-and-guides/metadata-scaffolding.md`` for the design and
|
|
6
|
-
``docs/
|
|
6
|
+
``docs/specifications/harmonized-raw.md`` for the authoritative field
|
|
7
7
|
list.
|
|
8
8
|
|
|
9
9
|
Two levels of metadata:
|
|
@@ -18,7 +18,7 @@ There are two levels of metadata (see issue #30 and
|
|
|
18
18
|
many tests via a ``TestMetaCollection`` keyed by ``test_id``.
|
|
19
19
|
|
|
20
20
|
The authoritative field list lives in
|
|
21
|
-
``docs/
|
|
21
|
+
``docs/specifications/harmonized-raw.md`` ("Test metadata (TestMeta)");
|
|
22
22
|
the dataclasses here mirror it. Field names are also mined from legacy cellpy's
|
|
23
23
|
``cellpy.parameters.internal_settings.CellpyMetaCommon`` /
|
|
24
24
|
``CellpyMetaIndividualTest`` so the two libraries stay aligned.
|
|
@@ -118,7 +118,7 @@ class TestMeta:
|
|
|
118
118
|
"""Test-dependent metadata, one record per test run (keyed by ``test_id``).
|
|
119
119
|
|
|
120
120
|
Mirrors the "Test metadata (TestMeta)" table in
|
|
121
|
-
``docs/
|
|
121
|
+
``docs/specifications/harmonized-raw.md`` and the test-dependent
|
|
122
122
|
fields of legacy ``CellpyMetaIndividualTest``. ``cell`` optionally links the
|
|
123
123
|
cell-dependent metadata so the two-level split is captured without forcing a
|
|
124
124
|
separate table.
|
|
@@ -128,7 +128,7 @@ def normalize_capacity_granularity(
|
|
|
128
128
|
"""Normalize cumulative raw capacity / energy columns to cycle-cumulative.
|
|
129
129
|
|
|
130
130
|
The engine mandates **cycle-cumulative** raw capacity / energy (reset at each
|
|
131
|
-
cycle boundary; see ``docs/
|
|
131
|
+
cycle boundary; see ``docs/specifications/harmonized-raw.md``).
|
|
132
132
|
Cyclers that instead deliver **step-cumulative** (reset per step) or
|
|
133
133
|
**test-cumulative** (never reset) raw can be normalized here before
|
|
134
134
|
aggregation. The transform is granularity-agnostic: for each present column,
|