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.
Files changed (192) hide show
  1. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_original.md +27 -0
  2. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_plan.md +166 -0
  3. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_status.md +16 -0
  4. cellpycore-0.1.4/.issueflows/04-designs-and-guides/zensical-docs.md +39 -0
  5. cellpycore-0.1.4/.readthedocs.yaml +17 -0
  6. {cellpycore-0.1.3 → cellpycore-0.1.4}/HISTORY.md +16 -0
  7. {cellpycore-0.1.3 → cellpycore-0.1.4}/PKG-INFO +13 -4
  8. {cellpycore-0.1.3 → cellpycore-0.1.4}/README.md +12 -3
  9. {cellpycore-0.1.3 → cellpycore-0.1.4}/pyproject.toml +7 -1
  10. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/config.py +6 -6
  11. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/__init__.py +1 -1
  12. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/models.py +2 -2
  13. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/summarizers.py +1 -1
  14. {cellpycore-0.1.3 → cellpycore-0.1.4}/uv.lock +704 -1
  15. cellpycore-0.1.4/zensical.toml +125 -0
  16. {cellpycore-0.1.3 → cellpycore-0.1.4}/.aliases +0 -0
  17. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/cellpy-core-migration.mdc +0 -0
  18. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/graphify.mdc +0 -0
  19. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/issueflow-rules.mdc +0 -0
  20. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/kiss.mdc +0 -0
  21. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/rules/this-project.mdc +0 -0
  22. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/caveman/SKILL.md +0 -0
  23. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/grill-me/SKILL.md +0 -0
  24. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow/SKILL.md +0 -0
  25. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
  26. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-close/SKILL.md +0 -0
  27. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-comments/SKILL.md +0 -0
  28. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-fix/SKILL.md +0 -0
  29. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
  30. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
  31. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-init/SKILL.md +0 -0
  32. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-pause/SKILL.md +0 -0
  33. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-pick/SKILL.md +0 -0
  34. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-plan/SKILL.md +0 -0
  35. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-start/SKILL.md +0 -0
  36. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-status/SKILL.md +0 -0
  37. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
  38. {cellpycore-0.1.3 → cellpycore-0.1.4}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
  39. {cellpycore-0.1.3 → cellpycore-0.1.4}/.gitignore +0 -0
  40. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/00-tools/.gitkeep +0 -0
  41. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/00-tools/README.md +0 -0
  42. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/01-current-issues/.gitkeep +0 -0
  43. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
  44. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/.gitkeep +0 -0
  45. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_original.md +0 -0
  46. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_plan.md +0 -0
  47. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_status.md +0 -0
  48. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_original.md +0 -0
  49. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_plan.md +0 -0
  50. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_status.md +0 -0
  51. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_original.md +0 -0
  52. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_plan.md +0 -0
  53. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_status.md +0 -0
  54. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_original.md +0 -0
  55. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_plan.md +0 -0
  56. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_status.md +0 -0
  57. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_original.md +0 -0
  58. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_plan.md +0 -0
  59. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_status.md +0 -0
  60. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_original.md +0 -0
  61. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_plan.md +0 -0
  62. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_status.md +0 -0
  63. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_original.md +0 -0
  64. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_status.md +0 -0
  65. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_original.md +0 -0
  66. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_plan.md +0 -0
  67. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_status.md +0 -0
  68. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_original.md +0 -0
  69. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_plan.md +0 -0
  70. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_status.md +0 -0
  71. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_original.md +0 -0
  72. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_plan.md +0 -0
  73. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_status.md +0 -0
  74. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_original.md +0 -0
  75. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_plan.md +0 -0
  76. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_original.md +0 -0
  77. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_status.md +0 -0
  78. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_original.md +0 -0
  79. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_plan.md +0 -0
  80. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_status.md +0 -0
  81. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_original.md +0 -0
  82. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_plan.md +0 -0
  83. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_status.md +0 -0
  84. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_original.md +0 -0
  85. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_plan.md +0 -0
  86. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_status.md +0 -0
  87. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_original.md +0 -0
  88. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_plan.md +0 -0
  89. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_status.md +0 -0
  90. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_original.md +0 -0
  91. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_plan.md +0 -0
  92. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_status.md +0 -0
  93. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_original.md +0 -0
  94. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_status.md +0 -0
  95. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_original.md +0 -0
  96. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_plan.md +0 -0
  97. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_status.md +0 -0
  98. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_original.md +0 -0
  99. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_plan.md +0 -0
  100. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_status.md +0 -0
  101. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_original.md +0 -0
  102. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_plan.md +0 -0
  103. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_status.md +0 -0
  104. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_original.md +0 -0
  105. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_plan.md +0 -0
  106. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_status.md +0 -0
  107. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_original.md +0 -0
  108. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_plan.md +0 -0
  109. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_status.md +0 -0
  110. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_original.md +0 -0
  111. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_plan.md +0 -0
  112. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue62_status.md +0 -0
  113. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_original.md +0 -0
  114. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_plan.md +0 -0
  115. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue64_status.md +0 -0
  116. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_original.md +0 -0
  117. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_plan.md +0 -0
  118. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue66_status.md +0 -0
  119. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_original.md +0 -0
  120. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_plan.md +0 -0
  121. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue67_status.md +0 -0
  122. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_original.md +0 -0
  123. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_plan.md +0 -0
  124. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue68_status.md +0 -0
  125. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_original.md +0 -0
  126. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_plan.md +0 -0
  127. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue69_status.md +0 -0
  128. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_original.md +0 -0
  129. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_plan.md +0 -0
  130. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue70_status.md +0 -0
  131. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue72_original.md +0 -0
  132. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue72_status.md +0 -0
  133. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_original.md +0 -0
  134. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_plan.md +0 -0
  135. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue77_status.md +0 -0
  136. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue82_original.md +0 -0
  137. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue82_status.md +0 -0
  138. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_original.md +0 -0
  139. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_plan.md +0 -0
  140. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue84_status.md +0 -0
  141. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_original.md +0 -0
  142. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_plan.md +0 -0
  143. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue86_status.md +0 -0
  144. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
  145. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +0 -0
  146. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +0 -0
  147. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-migration.md +0 -0
  148. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/code-review-2026-07.md +0 -0
  149. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/column-headers-review.md +0 -0
  150. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/metadata-scaffolding.md +0 -0
  151. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
  152. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +0 -0
  153. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/step-table-polars-migration.md +0 -0
  154. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/summary-extractors.md +0 -0
  155. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +0 -0
  156. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +0 -0
  157. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/this-project.md +0 -0
  158. {cellpycore-0.1.3 → cellpycore-0.1.4}/.issueflows/config.toml +0 -0
  159. {cellpycore-0.1.3 → cellpycore-0.1.4}/.pre-commit-config.yaml +0 -0
  160. {cellpycore-0.1.3 → cellpycore-0.1.4}/.python-version +0 -0
  161. {cellpycore-0.1.3 → cellpycore-0.1.4}/.vscode/settings.json +0 -0
  162. {cellpycore-0.1.3 → cellpycore-0.1.4}/AGENTS.md +0 -0
  163. {cellpycore-0.1.3 → cellpycore-0.1.4}/LICENSE +0 -0
  164. {cellpycore-0.1.3 → cellpycore-0.1.4}/ROADMAP.md +0 -0
  165. {cellpycore-0.1.3 → cellpycore-0.1.4}/cellpy-core.code-workspace +0 -0
  166. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/.graphify_labels.json +0 -0
  167. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/.graphify_root +0 -0
  168. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/GRAPH_REPORT.md +0 -0
  169. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/graph.html +0 -0
  170. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/graph.json +0 -0
  171. {cellpycore-0.1.3 → cellpycore-0.1.4}/graphify-out/manifest.json +0 -0
  172. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/__init__.py +0 -0
  173. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/cell_core.py +0 -0
  174. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/exceptions.py +0 -0
  175. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/extractors.py +0 -0
  176. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/__init__.py +0 -0
  177. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/headers.py +0 -0
  178. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/limits.py +0 -0
  179. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/mapping.py +0 -0
  180. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/meta.py +0 -0
  181. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/mock_core.py +0 -0
  182. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/legacy/selectors.py +0 -0
  183. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/merge.py +0 -0
  184. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/metadata/io.py +0 -0
  185. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/py.typed +0 -0
  186. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/settings_base.py +0 -0
  187. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/testing/__init__.py +0 -0
  188. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/testing/mock_data.py +0 -0
  189. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/timestamps.py +0 -0
  190. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/units/__init__.py +0 -0
  191. {cellpycore-0.1.3 → cellpycore-0.1.4}/src/cellpycore/units/converters.py +0 -0
  192. {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
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
- - [Using cellpy-core standalone (slim-consumer guide)](https://github.com/cellpy/cellpy-core/blob/main/docs/standalone-use.md)
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/data_format_specifications/harmonized_raw.md)
56
- - [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/data-object-definition.md)
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
- - [Using cellpy-core standalone (slim-consumer guide)](https://github.com/cellpy/cellpy-core/blob/main/docs/standalone-use.md)
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/data_format_specifications/harmonized_raw.md)
36
- - [The Data object](https://github.com/cellpy/cellpy-core/blob/main/docs/data-object-definition.md)
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"
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/data_format_specifications/harmonized_raw.md`` §Capacity convention);
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/data_format_specifications/harmonized_raw.md`` lists ``"None"``
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/data_format_specifications/harmonized_raw.md``.
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/data_format_specifications/harmonized_raw.md``; the column order here
569
+ ``docs/specifications/harmonized-raw.md``; the column order here
570
570
  mirrors that spec table.
571
571
  """
572
572
 
573
- # Follows docs/data_format_specifications/harmonized_raw.md (authoritative,
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/data_format_specifications/harmonized_raw.md ("Capacity convention").
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/data_format_specifications/harmonized_raw.md`` for the authoritative field
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/data_format_specifications/harmonized_raw.md`` ("Test metadata (TestMeta)");
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/data_format_specifications/harmonized_raw.md`` and the test-dependent
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/data_format_specifications/harmonized_raw.md``).
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,