cellpy 2.1.3.post3__tar.gz → 2.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. cellpy-2.1.5/.issueflows/01-current-issues/issue1015_original.md +7 -0
  2. cellpy-2.1.5/.issueflows/01-current-issues/issue1015_plan.md +21 -0
  3. cellpy-2.1.5/.issueflows/01-current-issues/issue1015_status.md +15 -0
  4. cellpy-2.1.5/.issueflows/02-partly-solved-issues/issue_fix_cellpycore026_original.md +14 -0
  5. cellpy-2.1.5/.issueflows/02-partly-solved-issues/issue_fix_cellpycore026_status.md +17 -0
  6. cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-05.md +27 -0
  7. cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-07.md +22 -0
  8. cellpy-2.1.5/.issueflows/03-solved-issues/cycle_status_2026-09-08.md +28 -0
  9. cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_original.md +9 -0
  10. cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_plan.md +38 -0
  11. cellpy-2.1.5/.issueflows/03-solved-issues/issue1000_status.md +13 -0
  12. cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_original.md +7 -0
  13. cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_plan.md +82 -0
  14. cellpy-2.1.5/.issueflows/03-solved-issues/issue1008_status.md +28 -0
  15. cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_original.md +7 -0
  16. cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_plan.md +91 -0
  17. cellpy-2.1.5/.issueflows/03-solved-issues/issue1009_status.md +56 -0
  18. cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_original.md +17 -0
  19. cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_plan.md +77 -0
  20. cellpy-2.1.5/.issueflows/03-solved-issues/issue1017_status.md +31 -0
  21. cellpy-2.1.5/.issueflows/03-solved-issues/issue778_original.md +9 -0
  22. cellpy-2.1.5/.issueflows/03-solved-issues/issue778_plan.md +129 -0
  23. cellpy-2.1.5/.issueflows/03-solved-issues/issue778_status.md +38 -0
  24. cellpy-2.1.5/.issueflows/03-solved-issues/issue937_original.md +61 -0
  25. cellpy-2.1.5/.issueflows/03-solved-issues/issue937_plan.md +44 -0
  26. cellpy-2.1.5/.issueflows/03-solved-issues/issue937_status.md +16 -0
  27. cellpy-2.1.5/.issueflows/03-solved-issues/issue938_original.md +73 -0
  28. cellpy-2.1.5/.issueflows/03-solved-issues/issue938_plan.md +117 -0
  29. cellpy-2.1.5/.issueflows/03-solved-issues/issue938_status.md +17 -0
  30. cellpy-2.1.5/.issueflows/03-solved-issues/issue948_original.md +41 -0
  31. cellpy-2.1.5/.issueflows/03-solved-issues/issue948_plan.md +80 -0
  32. cellpy-2.1.5/.issueflows/03-solved-issues/issue948_status.md +15 -0
  33. cellpy-2.1.5/.issueflows/03-solved-issues/issue949_original.md +9 -0
  34. cellpy-2.1.5/.issueflows/03-solved-issues/issue949_plan.md +126 -0
  35. cellpy-2.1.5/.issueflows/03-solved-issues/issue949_status.md +18 -0
  36. cellpy-2.1.5/.issueflows/03-solved-issues/issue960_original.md +7 -0
  37. cellpy-2.1.5/.issueflows/03-solved-issues/issue960_plan.md +42 -0
  38. cellpy-2.1.5/.issueflows/03-solved-issues/issue960_status.md +14 -0
  39. cellpy-2.1.5/.issueflows/03-solved-issues/issue982_original.md +7 -0
  40. cellpy-2.1.5/.issueflows/03-solved-issues/issue982_plan.md +39 -0
  41. cellpy-2.1.5/.issueflows/03-solved-issues/issue982_status.md +13 -0
  42. cellpy-2.1.5/.issueflows/03-solved-issues/issue983_original.md +23 -0
  43. cellpy-2.1.5/.issueflows/03-solved-issues/issue983_plan.md +76 -0
  44. cellpy-2.1.5/.issueflows/03-solved-issues/issue983_status.md +19 -0
  45. cellpy-2.1.5/.issueflows/03-solved-issues/issue989_original.md +15 -0
  46. cellpy-2.1.5/.issueflows/03-solved-issues/issue989_status.md +16 -0
  47. cellpy-2.1.5/.issueflows/03-solved-issues/issue990_original.md +50 -0
  48. cellpy-2.1.5/.issueflows/03-solved-issues/issue990_plan.md +37 -0
  49. cellpy-2.1.5/.issueflows/03-solved-issues/issue990_status.md +19 -0
  50. cellpy-2.1.5/.issueflows/03-solved-issues/issue991_original.md +40 -0
  51. cellpy-2.1.5/.issueflows/03-solved-issues/issue991_plan.md +36 -0
  52. cellpy-2.1.5/.issueflows/03-solved-issues/issue991_status.md +19 -0
  53. cellpy-2.1.5/.issueflows/03-solved-issues/issue993_original.md +59 -0
  54. cellpy-2.1.5/.issueflows/03-solved-issues/issue993_plan.md +40 -0
  55. cellpy-2.1.5/.issueflows/03-solved-issues/issue993_status.md +23 -0
  56. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/harmonized-raw-default.md +21 -0
  57. cellpy-2.1.5/.issueflows/04-designs-and-guides/instrument-availability.md +29 -0
  58. cellpy-2.1.5/.issueflows/04-designs-and-guides/optional-plotting-notebook.md +25 -0
  59. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-batch-summary.md +6 -0
  60. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-collected.md +7 -2
  61. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/test-registry.md +61 -1
  62. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/v2-cellpycore-pin-gate.md +5 -4
  63. {cellpy-2.1.3.post3 → cellpy-2.1.5}/AGENTS.md +21 -4
  64. {cellpy-2.1.3.post3 → cellpy-2.1.5}/HISTORY.md +169 -0
  65. {cellpy-2.1.3.post3 → cellpy-2.1.5}/PKG-INFO +11 -6
  66. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/_dbengine.py +43 -2
  67. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/db.py +4 -1
  68. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/facade.py +10 -0
  69. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/journal.py +35 -3
  70. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli_api.py +63 -64
  71. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/collection.py +3 -1
  72. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/collector.py +3 -1
  73. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/options.py +5 -1
  74. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/summary.py +4 -2
  75. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exceptions.py +3 -2
  76. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/__init__.py +3 -1
  77. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/mpl.py +25 -0
  78. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/batch_summary.py +81 -20
  79. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/collected.py +307 -107
  80. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/figures.py +10 -1
  81. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/labels.py +43 -15
  82. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/registry.py +14 -15
  83. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/capacity_curves.py +7 -0
  84. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellreader.py +26 -23
  85. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/data_structures.py +78 -36
  86. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/dbreader.py +24 -1
  87. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_res.py +38 -4
  88. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/harmonize.py +23 -7
  89. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/ocv_rlx.py +15 -2
  90. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/plotutils.py +4 -1
  91. {cellpy-2.1.3.post3 → cellpy-2.1.5}/pyproject.toml +6 -5
  92. {cellpy-2.1.3.post3 → cellpy-2.1.5}/uv.lock +124 -115
  93. {cellpy-2.1.3.post3 → cellpy-2.1.5}/zensical.toml +12 -1
  94. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.aliases +0 -0
  95. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/commands/build.md +0 -0
  96. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/commands/create-original-issue-file.md +0 -0
  97. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/cellpy-core-migration.mdc +0 -0
  98. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/cellpy-workspace.mdc +0 -0
  99. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/graphify.mdc +0 -0
  100. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/issueflow-rules.mdc +0 -0
  101. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/kiss.mdc +0 -0
  102. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/rules/this-project.mdc +0 -0
  103. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/caveman/SKILL.md +0 -0
  104. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/gh-ci/SKILL.md +0 -0
  105. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/grill-me/SKILL.md +0 -0
  106. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow/SKILL.md +0 -0
  107. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-archive/SKILL.md +0 -0
  108. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-auto/SKILL.md +0 -0
  109. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-build/SKILL.md +0 -0
  110. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
  111. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-close/SKILL.md +0 -0
  112. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-comments/SKILL.md +0 -0
  113. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-cycle/SKILL.md +0 -0
  114. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-doctor/SKILL.md +0 -0
  115. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-epic/SKILL.md +0 -0
  116. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-fix/SKILL.md +0 -0
  117. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
  118. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
  119. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-init/SKILL.md +0 -0
  120. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-issue/SKILL.md +0 -0
  121. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-pause/SKILL.md +0 -0
  122. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-pick/SKILL.md +0 -0
  123. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-plan/SKILL.md +0 -0
  124. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-review/SKILL.md +0 -0
  125. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-status/SKILL.md +0 -0
  126. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
  127. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/iflow-yolo/SKILL.md +0 -0
  128. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.cursor/skills/issueflow-build/SKILL.md +0 -0
  129. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.dockerignore +0 -0
  130. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.editorconfig +0 -0
  131. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.env_example +0 -0
  132. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.gitattributes +0 -0
  133. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.gitignore +0 -0
  134. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/.gitkeep +0 -0
  135. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/README.md +0 -0
  136. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/migrate_prms_calls.py +0 -0
  137. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/scan_hardcoded_headers.py +0 -0
  138. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/00-tools/scan_member_usage.py +0 -0
  139. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/01-current-issues/.gitkeep +0 -0
  140. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
  141. {cellpy-2.1.3.post3/.issueflows/01-current-issues → cellpy-2.1.5/.issueflows/02-partly-solved-issues}/issue985_original.md +0 -0
  142. {cellpy-2.1.3.post3/.issueflows/01-current-issues → cellpy-2.1.5/.issueflows/02-partly-solved-issues}/issue985_status.md +0 -0
  143. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/.gitkeep +0 -0
  144. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-09_archived_issues.md +0 -0
  145. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/2026-07-31_archived_issues.md +0 -0
  146. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status.md +0 -0
  147. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-07-31.md +0 -0
  148. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-08.md +0 -0
  149. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-09.md +0 -0
  150. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/cycle_status_2026-08-25.md +0 -0
  151. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue459_original.md +0 -0
  152. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_original.md +0 -0
  153. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_plan.md +0 -0
  154. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue786_status.md +0 -0
  155. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_original.md +0 -0
  156. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_plan.md +0 -0
  157. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue799_status.md +0 -0
  158. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_original.md +0 -0
  159. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_plan.md +0 -0
  160. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue800_status.md +0 -0
  161. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_original.md +0 -0
  162. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_plan.md +0 -0
  163. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue801_status.md +0 -0
  164. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_original.md +0 -0
  165. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_plan.md +0 -0
  166. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue802_status.md +0 -0
  167. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_original.md +0 -0
  168. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_plan.md +0 -0
  169. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue804_status.md +0 -0
  170. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_original.md +0 -0
  171. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_plan.md +0 -0
  172. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue809_status.md +0 -0
  173. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_original.md +0 -0
  174. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_plan.md +0 -0
  175. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue816_status.md +0 -0
  176. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_original.md +0 -0
  177. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_plan.md +0 -0
  178. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue817_status.md +0 -0
  179. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_original.md +0 -0
  180. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_plan.md +0 -0
  181. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue818_status.md +0 -0
  182. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_original.md +0 -0
  183. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_plan.md +0 -0
  184. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue819_status.md +0 -0
  185. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_original.md +0 -0
  186. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_plan.md +0 -0
  187. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue820_status.md +0 -0
  188. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_original.md +0 -0
  189. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_plan.md +0 -0
  190. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue821_status.md +0 -0
  191. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_original.md +0 -0
  192. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_plan.md +0 -0
  193. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue822_status.md +0 -0
  194. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_original.md +0 -0
  195. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_plan.md +0 -0
  196. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue825_status.md +0 -0
  197. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_original.md +0 -0
  198. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_plan.md +0 -0
  199. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue837_status.md +0 -0
  200. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_original.md +0 -0
  201. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_plan.md +0 -0
  202. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue839_status.md +0 -0
  203. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_original.md +0 -0
  204. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_plan.md +0 -0
  205. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue845_status.md +0 -0
  206. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_original.md +0 -0
  207. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_plan.md +0 -0
  208. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue846_status.md +0 -0
  209. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_original.md +0 -0
  210. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_plan.md +0 -0
  211. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue849_status.md +0 -0
  212. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_original.md +0 -0
  213. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_plan.md +0 -0
  214. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue850_status.md +0 -0
  215. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_original.md +0 -0
  216. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_plan.md +0 -0
  217. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue851_status.md +0 -0
  218. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_original.md +0 -0
  219. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_plan.md +0 -0
  220. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue853_status.md +0 -0
  221. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_original.md +0 -0
  222. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_plan.md +0 -0
  223. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue855_status.md +0 -0
  224. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_original.md +0 -0
  225. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_plan.md +0 -0
  226. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue862_status.md +0 -0
  227. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_original.md +0 -0
  228. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_plan.md +0 -0
  229. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue863_status.md +0 -0
  230. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_original.md +0 -0
  231. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue866_status.md +0 -0
  232. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_original.md +0 -0
  233. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_plan.md +0 -0
  234. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue867_status.md +0 -0
  235. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_original.md +0 -0
  236. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_plan.md +0 -0
  237. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue868_status.md +0 -0
  238. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_original.md +0 -0
  239. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_plan.md +0 -0
  240. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue869_status.md +0 -0
  241. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_original.md +0 -0
  242. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_plan.md +0 -0
  243. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue874_status.md +0 -0
  244. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_original.md +0 -0
  245. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_plan.md +0 -0
  246. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue875_status.md +0 -0
  247. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_original.md +0 -0
  248. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_plan.md +0 -0
  249. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue876_status.md +0 -0
  250. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_original.md +0 -0
  251. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_plan.md +0 -0
  252. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue878_status.md +0 -0
  253. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_original.md +0 -0
  254. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue885_status.md +0 -0
  255. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_original.md +0 -0
  256. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_plan.md +0 -0
  257. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue891_status.md +0 -0
  258. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_original.md +0 -0
  259. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue892_status.md +0 -0
  260. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_original.md +0 -0
  261. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_plan.md +0 -0
  262. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue912_status.md +0 -0
  263. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_original.md +0 -0
  264. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue916_status.md +0 -0
  265. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_original.md +0 -0
  266. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_plan.md +0 -0
  267. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue939_status.md +0 -0
  268. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_original.md +0 -0
  269. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_plan.md +0 -0
  270. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue940_status.md +0 -0
  271. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_original.md +0 -0
  272. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_plan.md +0 -0
  273. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue947_status.md +0 -0
  274. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_original.md +0 -0
  275. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_plan.md +0 -0
  276. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue950_status.md +0 -0
  277. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_original.md +0 -0
  278. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_plan.md +0 -0
  279. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue952_status.md +0 -0
  280. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_original.md +0 -0
  281. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_plan.md +0 -0
  282. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue961_status.md +0 -0
  283. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_original.md +0 -0
  284. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_plan.md +0 -0
  285. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue962_status.md +0 -0
  286. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_original.md +0 -0
  287. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_plan.md +0 -0
  288. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue963_status.md +0 -0
  289. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_original.md +0 -0
  290. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_plan.md +0 -0
  291. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue967_status.md +0 -0
  292. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_original.md +0 -0
  293. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_plan.md +0 -0
  294. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/03-solved-issues/issue971_status.md +0 -0
  295. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
  296. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/atomic-file-writes.md +0 -0
  297. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/batch-load-orchestrator.md +0 -0
  298. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/bdf-export.md +0 -0
  299. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/build-and-versioning.md +0 -0
  300. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-architecture.excalidraw +0 -0
  301. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-branching.md +0 -0
  302. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-v2-epic.md +0 -0
  303. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpy-workspace-repos.md +0 -0
  304. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cellpycell-di-restructuring.md +0 -0
  305. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/ci-tiers.md +0 -0
  306. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-api-echo-binder.md +0 -0
  307. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/cli-light-startup.md +0 -0
  308. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/docs-on-master.md +0 -0
  309. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/essential-tests.md +0 -0
  310. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/filters-and-plot-filtering.md +0 -0
  311. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/marimo-docs.md +0 -0
  312. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/otherpath-upath.md +0 -0
  313. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-backends.md +0 -0
  314. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-cycle-legend.md +0 -0
  315. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-prepare.md +0 -0
  316. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/plotting-registry.md +0 -0
  317. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
  318. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/testing-and-coverage.md +0 -0
  319. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/04-designs-and-guides/this-project.md +0 -0
  320. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/.gitkeep +0 -0
  321. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/epic567_plan.md +0 -0
  322. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/05-epics/epic896_plan.md +0 -0
  323. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.issueflows/config.toml +0 -0
  324. {cellpy-2.1.3.post3 → cellpy-2.1.5}/.readthedocs.yaml +0 -0
  325. {cellpy-2.1.3.post3 → cellpy-2.1.5}/AUTHORS.md +0 -0
  326. {cellpy-2.1.3.post3 → cellpy-2.1.5}/CODE_OF_CONDUCT.md +0 -0
  327. {cellpy-2.1.3.post3 → cellpy-2.1.5}/CONTRIBUTING.md +0 -0
  328. {cellpy-2.1.3.post3 → cellpy-2.1.5}/DEPRECATIONS.md +0 -0
  329. {cellpy-2.1.3.post3 → cellpy-2.1.5}/LICENSE.md +0 -0
  330. {cellpy-2.1.3.post3 → cellpy-2.1.5}/README.md +0 -0
  331. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_data_structure.md +0 -0
  332. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_folder_structure.md +0 -0
  333. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_packaging_pypi.md +0 -0
  334. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_cellpy_setup.md +0 -0
  335. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_conda_package.md +0 -0
  336. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_docs.md +0 -0
  337. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_loaders_and_instruments.md +0 -0
  338. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/dev_various.md +0 -0
  339. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_developers_guide/index.md +0 -0
  340. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/01_getting_started_tutorial.md +0 -0
  341. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/02_read_cell_data.md +0 -0
  342. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/03_more_about_get.md +0 -0
  343. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/04_other_interactions.md +0 -0
  344. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/05_configuring.md +0 -0
  345. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/06_pandas.md +0 -0
  346. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/07_data_mining.md +0 -0
  347. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basic_interactions/08_the_cellpy_cmd.md +0 -0
  348. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/basics.md +0 -0
  349. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/examples.md +0 -0
  350. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/index.md +0 -0
  351. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/01_arbin.md +0 -0
  352. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/02_maccor.md +0 -0
  353. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/03_PEC.md +0 -0
  354. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/04_Neware.md +0 -0
  355. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/05_biologics.md +0 -0
  356. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders/06_custom.md +0 -0
  357. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/loaders.md +0 -0
  358. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_001.png +0 -0
  359. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/images/templates_jupyterlab_002.png +0 -0
  360. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_get_cap.ipynb +0 -0
  361. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_simple_plot.ipynb +0 -0
  362. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_templates.ipynb +0 -0
  363. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks/tutorial_xxx-checkpoint.ipynb +0 -0
  364. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/notebooks.md +0 -0
  365. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/tips_and_tricks.md +0 -0
  366. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/batch.md +0 -0
  367. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/collectors.md +0 -0
  368. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/custom_file_loaders.md +0 -0
  369. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/easyplot.md +0 -0
  370. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig1.png +0 -0
  371. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/figures/tutorials_utils_plotting_fig2.png +0 -0
  372. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/ica.md +0 -0
  373. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/plotting.md +0 -0
  374. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/templates.md +0 -0
  375. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils/tut_ocv_rlx.md +0 -0
  376. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_examples_and_tutorials/utils.md +0 -0
  377. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/formats.md +0 -0
  378. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/index.md +0 -0
  379. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/installation.md +0 -0
  380. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/_main_description/usage.md +0 -0
  381. {cellpy-2.1.3.post3 → cellpy-2.1.5}/_old_docs/index.md +0 -0
  382. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/README.md +0 -0
  383. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/__init__.py +0 -0
  384. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/baselines/v1x_ubuntu_py313.json +0 -0
  385. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/check_baseline.py +0 -0
  386. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/conftest.py +0 -0
  387. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/paths.py +0 -0
  388. {cellpy-2.1.3.post3 → cellpy-2.1.5}/benchmarks/test_performance.py +0 -0
  389. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/__init__.py +0 -0
  390. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/_deprecation.py +0 -0
  391. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/_version.py +0 -0
  392. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/__init__.py +0 -0
  393. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/aggregate.py +0 -0
  394. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/layout.py +0 -0
  395. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/outputs.py +0 -0
  396. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/policy.py +0 -0
  397. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/progress.py +0 -0
  398. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/qc.py +0 -0
  399. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/result.py +0 -0
  400. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/runner.py +0 -0
  401. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/batch/store.py +0 -0
  402. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli.py +0 -0
  403. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/cli_ui.py +0 -0
  404. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/__init__.py +0 -0
  405. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/_summary_ops.py +0 -0
  406. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/cells.py +0 -0
  407. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/curves.py +0 -0
  408. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/dva.py +0 -0
  409. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/collect/ica.py +0 -0
  410. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/__init__.py +0 -0
  411. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/credentials.py +0 -0
  412. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/legacy.py +0 -0
  413. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/loader.py +0 -0
  414. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/migrate.py +0 -0
  415. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/models.py +0 -0
  416. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/reference.py +0 -0
  417. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/session.py +0 -0
  418. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/sources.py +0 -0
  419. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/config/types.py +0 -0
  420. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/__init__.py +0 -0
  421. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/bdf.py +0 -0
  422. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/exporters/tabular.py +0 -0
  423. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/__init__.py +0 -0
  424. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/cycles.py +0 -0
  425. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/filters/summary.py +0 -0
  426. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/ica.py +0 -0
  427. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/__init__.py +0 -0
  428. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/connections.py +0 -0
  429. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/otherpath.py +0 -0
  430. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/internals/progress.py +0 -0
  431. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/__init__.py +0 -0
  432. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/__init__.py +0 -0
  433. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_alias_module.py +0 -0
  434. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_importing.py +0 -0
  435. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_module.py +0 -0
  436. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_syncronized.py +0 -0
  437. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/_version.py +0 -0
  438. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/apipkg/py.typed +0 -0
  439. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/LICENSE +0 -0
  440. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/__init__.py +0 -0
  441. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/btsda.py +0 -0
  442. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/cli.py +0 -0
  443. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/dicts.py +0 -0
  444. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/formats.py +0 -0
  445. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/main.py +0 -0
  446. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/nda.py +0 -0
  447. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/ndax.py +0 -0
  448. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/utils.py +0 -0
  449. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/libs/local_fastnda/version.py +0 -0
  450. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/log.py +0 -0
  451. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/logging.json +0 -0
  452. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/.cellpy_prms_default.conf +0 -0
  453. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/__init__.py +0 -0
  454. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/cell_schema.py +0 -0
  455. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/internal_settings.py +0 -0
  456. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/legacy/__init__.py +0 -0
  457. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/legacy/update_headers.py +0 -0
  458. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/prmreader.py +0 -0
  459. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/parameters/prms.py +0 -0
  460. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/__init__.py +0 -0
  461. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/base.py +0 -0
  462. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/backends/plotly.py +0 -0
  463. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/context.py +0 -0
  464. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/cycle_legend.py +0 -0
  465. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/headers.py +0 -0
  466. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/__init__.py +0 -0
  467. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/curves.py +0 -0
  468. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/ica.py +0 -0
  469. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/raw.py +0 -0
  470. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/steps.py +0 -0
  471. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/prepare/summary.py +0 -0
  472. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/spec.py +0 -0
  473. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/plotting/theme.py +0 -0
  474. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/__init__.py +0 -0
  475. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/__init__.py +0 -0
  476. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/atomic.py +0 -0
  477. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/dtype.py +0 -0
  478. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/fids.py +0 -0
  479. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/format.py +0 -0
  480. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/keys.py +0 -0
  481. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/legacy_read.py +0 -0
  482. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta.py +0 -0
  483. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/meta_archive.py +0 -0
  484. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/read.py +0 -0
  485. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/selectors.py +0 -0
  486. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/translate.py +0 -0
  487. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/v9.py +0 -0
  488. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/cellpy_file/write.py +0 -0
  489. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/do.py +0 -0
  490. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/filefinder.py +0 -0
  491. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/SQL Table IDs.txt +0 -0
  492. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/__init__.py +0 -0
  493. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/_aux_map.py +0 -0
  494. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql.py +0 -0
  495. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_7.py +0 -0
  496. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_config.py +0 -0
  497. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_csv.py +0 -0
  498. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_h5.py +0 -0
  499. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/arbin_sql_xlsx.py +0 -0
  500. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/base.py +0 -0
  501. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/batmo_bdf.py +0 -0
  502. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/biologics_mpr.py +0 -0
  503. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/config_declarations.py +0 -0
  504. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/__init__.py +0 -0
  505. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/batmo_bdf_bdf.py +0 -0
  506. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_one.py +0 -0
  507. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_three.py +0 -0
  508. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_two.py +0 -0
  509. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/maccor_txt_zero.py +0 -0
  510. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_one.py +0 -0
  511. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_two.py +0 -0
  512. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/configurations/neware_txt_zero.py +0 -0
  513. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/contract.py +0 -0
  514. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/custom.py +0 -0
  515. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/declarations.py +0 -0
  516. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/ext_nda_reader.py +0 -0
  517. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/hooks.py +0 -0
  518. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/__init__.py +0 -0
  519. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/loader_specific_modules/biologic_file_format.py +0 -0
  520. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/local_instrument.py +0 -0
  521. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt.py +0 -0
  522. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/maccor_txt_native.py +0 -0
  523. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_nda.py +0 -0
  524. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_txt.py +0 -0
  525. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/neware_xlsx.py +0 -0
  526. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/pec_csv.py +0 -0
  527. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/__init__.py +0 -0
  528. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/post_processors.py +0 -0
  529. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/processors/pre_processors.py +0 -0
  530. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/registry.py +0 -0
  531. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/instruments/testing.py +0 -0
  532. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/journal_layer.py +0 -0
  533. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/json_dbreader.py +0 -0
  534. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/merger.py +0 -0
  535. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/meta_resolver.py +0 -0
  536. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/native_core.py +0 -0
  537. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/provenance.py +0 -0
  538. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/slicing.py +0 -0
  539. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/sql_dbreader.py +0 -0
  540. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/readers/test_meta.py +0 -0
  541. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/units.py +0 -0
  542. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/__init__.py +0 -0
  543. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/batch.py +0 -0
  544. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/collectors.py +0 -0
  545. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/diagnostics.py +0 -0
  546. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/example_data.py +0 -0
  547. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/helpers.py +0 -0
  548. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/ica.py +0 -0
  549. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/live.py +0 -0
  550. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/processor.py +0 -0
  551. {cellpy-2.1.3.post3 → cellpy-2.1.5}/cellpy/utils/template_registry.py +0 -0
  552. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/backfill_notebook_plotly_pngs.py +0 -0
  553. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/README.md +0 -0
  554. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/cellpy/meta.yaml +0 -0
  555. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/conda-recipes/cellpycore/meta.yaml +0 -0
  556. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/make_bad_fixtures.py +0 -0
  557. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/plot_preview_common.py +0 -0
  558. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_curve_plots.py +0 -0
  559. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_ica_plots.py +0 -0
  560. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_plots.py +0 -0
  561. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/preview_summary_plots.py +0 -0
  562. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/regenerate_goldens.py +0 -0
  563. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/render_example_notebooks.py +0 -0
  564. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/snapshot_cli_surface.py +0 -0
  565. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/snapshot_figure_specs.py +0 -0
  566. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/.gitignore +0 -0
  567. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/NOTES.md +0 -0
  568. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/README.md +0 -0
  569. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/_common.py +0 -0
  570. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/summarize_importtime.py +0 -0
  571. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_arbin_h5.py +0 -0
  572. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_cellpy_io.py +0 -0
  573. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_executors.py +0 -0
  574. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_filefinder.py +0 -0
  575. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_imports.py +0 -0
  576. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_one_cell.py +0 -0
  577. {cellpy-2.1.3.post3 → cellpy-2.1.5}/dev/speed-test-01/time_otherpath.py +0 -0
  578. {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/Dockerfile.build-test +0 -0
  579. {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/README.md +0 -0
  580. {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/compose.yml +0 -0
  581. {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/data/hello.txt +0 -0
  582. {cellpy-2.1.3.post3 → cellpy-2.1.5}/docker/sftp-test/data/nested/sample.txt +0 -0
  583. {cellpy-2.1.3.post3 → cellpy-2.1.5}/environment.yml +0 -0
  584. {cellpy-2.1.3.post3 → cellpy-2.1.5}/environment_dev.yml +0 -0
  585. {cellpy-2.1.3.post3 → cellpy-2.1.5}/github_actions_environment.yml +0 -0
  586. {cellpy-2.1.3.post3 → cellpy-2.1.5}/noxfile.py +0 -0
  587. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/.github/workflows/draft-pdf.yml +0 -0
  588. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/.gitignore +0 -0
  589. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/Cellpy-Utils.jpg +0 -0
  590. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/CellpyCell.jpg +0 -0
  591. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/Figures/CellpyData.jpg +0 -0
  592. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/paper.bib +0 -0
  593. {cellpy-2.1.3.post3 → cellpy-2.1.5}/paper/paper.md +0 -0
  594. {cellpy-2.1.3.post3 → cellpy-2.1.5}/scripts/build_test.sh +0 -0
  595. {cellpy-2.1.3.post3 → cellpy-2.1.5}/scripts/dev_sync.sh +0 -0
@@ -0,0 +1,7 @@
1
+ # Issue #1015 — improve documentation
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/1015
4
+
5
+ I was looking at the summary_collector API docs and noticed that it is not any
6
+ links that takes you to the code (on github). I have seen other docs where that
7
+ is possible, and it is very helpful.
@@ -0,0 +1,21 @@
1
+ # Issue #1015 — plan
2
+
3
+ ## Goal
4
+
5
+ API reference pages let the reader see the code behind each documented
6
+ object. Beyond the ask: iterate on the docs from a user's point of view
7
+ (battery scientist with limited Python), one PR per iteration.
8
+
9
+ ## Iteration 1 (this PR): inline source
10
+
11
+ Set mkdocstrings-python `show_source = true` in `zensical.toml`. Every class
12
+ and function gets a collapsible "Source code in `<file>`" block with line
13
+ numbers. A GitHub-link variant (template overrides) was prototyped and
14
+ dropped: inline source answers the need without custom templates.
15
+
16
+ ## Later iterations (not started)
17
+
18
+ Candidate topics, each its own branch/PR: troubleshooting page (common
19
+ errors), "which loader for my tester" table, units/mass/nominal-capacity
20
+ FAQ, glossary of columns (`c.schema`), batch quick-start for non-programmers,
21
+ plotting cookbook, saving/exporting to Excel/CSV, configuration walkthrough.
@@ -0,0 +1,15 @@
1
+ # Issue #1015 — status
2
+
3
+ - [ ] Done
4
+
5
+ ## What's done (iteration 1)
6
+
7
+ - `zensical.toml`: `show_source = true` — collapsible source block under
8
+ every class and function in the API reference.
9
+ - HISTORY entry.
10
+ - Local build: `No issues found`.
11
+
12
+ ## Remaining work
13
+
14
+ - Iterations 2–10 (user-perspective docs improvements) per plan file.
15
+ - The issue's own ask is met after iteration 1 is merged.
@@ -0,0 +1,14 @@
1
+ # Iterative fixes: New cellpy-core release
2
+
3
+ Source: local `/iflow-fix` session (GitHub issue create blocked in this Cloud
4
+ Agent environment — `gh` is read-only). Session name: New cellpy-core release.
5
+
6
+ ## Original issue text
7
+
8
+ Interactive `/iflow-fix` session whose individual fixes are recorded in the
9
+ status markdown and landed together via `/iflow-close`.
10
+
11
+ **First fix (from the invoking message):** Cellpy next: bump the `cellpycore`
12
+ pin to the new PyPI release `0.2.6`, and drop the strict xfails on
13
+ `test_empty_tail_is_noop` (core#147) and
14
+ `test_gap_append_mid_step_equals_full_load` (core#148).
@@ -0,0 +1,17 @@
1
+ # Status — Iterative fixes: New cellpy-core release
2
+
3
+ Interactive `/iflow-fix` session. GitHub issue was not created (`gh` write is
4
+ blocked in this environment). Work lands on `cursor/cellpycore-pin-0-2-6-4828`.
5
+
6
+ - [ ] Done
7
+
8
+ ## Iterative fixes log
9
+
10
+ - **2026-09-08** — Pin `cellpycore` `0.2.5`→`0.2.6` in `pyproject.toml` /
11
+ `uv.lock`. Drop strict xfails on `test_empty_tail_is_noop` (core#147) and
12
+ `test_gap_append_mid_step_equals_full_load` (core#148). Update
13
+ `tests/README.md`, pin-gate doc, and `HISTORY.md`. Leave conda env YAMLs on
14
+ `0.2.4` (conda-forge latest).
15
+ - `uv sync --no-sources` → `cellpycore 0.2.6`
16
+ - `tests/test_incremental_update.py`: 7 passed (both former xfails now pass)
17
+ - `pytest -m essential`: 845 passed, 64 skipped, 0 xfailed
@@ -0,0 +1,27 @@
1
+ # Cycle status
2
+
3
+ - Queue spec: `yolo` (resolved `label:yolo`)
4
+ - Repo: `jepegit/cellpy` (`C:\scripting\cellpy-workspace\cellpy`), default branch `master`
5
+ - Failure policy: `onfail:stop`
6
+ - Started: 2026-09-05T19:25:00+02:00
7
+ - Finished: 2026-09-05T22:20:00+02:00
8
+ - Confirmed: yes (single consolidated confirm, 3 issues)
9
+
10
+ - [x] Done
11
+
12
+ ## Queue (ordered)
13
+
14
+ - [x] #990 — cellpy new: honour no_input when the project directory does not exist — merged https://github.com/jepegit/cellpy/pull/994
15
+ - [x] #991 — Add cli_api.list_templates() returning the batch templates as data — merged https://github.com/jepegit/cellpy/pull/995
16
+ - [x] #993 — Docstring cross-references lost their module paths in #968 — merged https://github.com/jepegit/cellpy/pull/996
17
+
18
+ Blocked: none. Skipped (closed): none. No stop condition tripped.
19
+
20
+ ## Notes
21
+
22
+ - Leftover `issue985_*` group (`- [ ] Done`) was swept from `01-current-issues/`
23
+ to `02-partly-solved-issues/` by the first `/iflow-init`.
24
+ - Every PR needed one `gh pr checks --watch` pass before `gh pr merge --squash`
25
+ succeeded (base branch policy requires the `essential` + `full` checks).
26
+ - Local branches `990-no-input-project-dir`, `991-list-templates-data`,
27
+ `993-dotted-docstring-refs` are left for `/iflow-cleanup`.
@@ -0,0 +1,22 @@
1
+ # Cycle status
2
+
3
+ - queue: yolo
4
+ - resolved: label:yolo
5
+ - repo: jepegit/cellpy
6
+ - onfail: stop
7
+ - started: 2026-09-07T19:33:00Z
8
+ - stopped: 2026-09-07T20:10:00Z
9
+
10
+ ## Queue
11
+
12
+ - [x] #937 — Notebook tooling (ipykernel, matplotlib) is a hard runtime dependency — ~90 MB in a headless server image — merged https://github.com/jepegit/cellpy/pull/1002
13
+ - [~] #938 — Missing external tools fail silently: mdb-export raises bare FileNotFoundError, pyodbc ImportError hides two loaders — failed: not yolo-small (three independent deliverables; see 02-partly-solved-issues)
14
+ - [ ] #960 — Possible bugs in cellpy setup and configuration — not reached
15
+ - [ ] #982 — Default group name from cellpy_db — not reached
16
+ - [ ] #1000 — prepare for changes in batch journal json file — not reached
17
+
18
+ ## Stop reason
19
+
20
+ Yolo scope check on #938 aborted: issue body is two features (mdb-export typed error + `list_instruments` availability API) plus an owner comment adding a third (`examplesdir` default). Cycle `onfail:stop`. Branch `938-missing-external-tools` holds the capture.
21
+
22
+ - [x] Done
@@ -0,0 +1,28 @@
1
+ # Cycle status
2
+
3
+ - queue: yolo (resolved `label:yolo`)
4
+ - repo: jepegit/cellpy
5
+ - onfail: stop
6
+ - started: 2026-09-08T06:58:00+02:00
7
+ - stopped: 2026-09-08T08:45:00+02:00
8
+
9
+ ## Queue
10
+
11
+ - [x] #960 — Possible bugs in cellpy setup and configuration — merged https://github.com/jepegit/cellpy/pull/1004
12
+ - [x] #982 — Default group name from cellpy_db — merged https://github.com/jepegit/cellpy/pull/1005
13
+ - [x] #1000 — prepare for changes in batch journal json file — merged https://github.com/jepegit/cellpy/pull/1006
14
+
15
+ blocked: none
16
+ skipped: none
17
+
18
+ ## Result
19
+
20
+ All three queued issues went through the full yolo chain and merged. Cycle never halted.
21
+
22
+ - #960 → https://github.com/jepegit/cellpy/pull/1004
23
+ - #982 → https://github.com/jepegit/cellpy/pull/1005
24
+ - #1000 → https://github.com/jepegit/cellpy/pull/1006
25
+
26
+ Local close of #1000 hit dirty `AGENTS.md` (unrelated indent). Discarded, then `git switch master` + `git pull --ff-only` landed squash `3d199790`.
27
+
28
+ - [x] Done
@@ -0,0 +1,9 @@
1
+ # Issue #1000: prepare for changes in batch journal json file
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/1000
4
+
5
+ ## Original issue text
6
+
7
+ We do not have any version label for the batch journal file. We should add it. Let us say that if the file misses the version label, it is version 1 (i.e. 1). It can also have the version label with 1 (and new files should be saved with the version number. Then when we decide to change the format, we can bump the version number.
8
+
9
+ Obviously, we also need to implement reading and saving the version number and prepare for possible version bumps.
@@ -0,0 +1,38 @@
1
+ # Issue #1000 — plan: journal JSON version field
2
+
3
+ ## Goal
4
+
5
+ Batch journal JSON files carry a format `version`. Missing → 1. New writes
6
+ use `JOURNAL_FORMAT_VERSION` (currently 1). Reads store it and warn when the
7
+ file is newer than this cellpy.
8
+
9
+ ## Constraints
10
+
11
+ - Existing journals without `version` keep loading.
12
+ - Do not implement a v2 schema in this issue — only the hook.
13
+
14
+ ### Prior art
15
+
16
+ - `JOURNAL_FORMAT_VERSION = 1` already in `cellpy/batch/journal.py` but unused.
17
+ - `read_journal` / `write_journal` — top-level `info_df` / `metadata` / `session`.
18
+
19
+ ## Approach
20
+
21
+ 1. Top-level JSON key `"version"` (integer).
22
+ 2. `Journal.version` defaults to 1; `read_journal` fills it (`raw.get("version", 1)`).
23
+ 3. `write_journal` always writes `JOURNAL_FORMAT_VERSION`.
24
+ 4. If file version > `JOURNAL_FORMAT_VERSION`, `UserWarning` and still load.
25
+
26
+ ## Files to touch
27
+
28
+ - `cellpy/batch/journal.py`
29
+ - `tests/test_batch_v3.py`
30
+ - `HISTORY.md` (close)
31
+
32
+ ## Test strategy
33
+
34
+ `uv run pytest tests/test_batch_v3.py` plus `uv run pytest -m essential`.
35
+
36
+ ## Open questions
37
+
38
+ None.
@@ -0,0 +1,13 @@
1
+ # Issue #1000 status
2
+
3
+ - [x] Done
4
+
5
+ ## What's done
6
+
7
+ - Journal JSON `version` key; missing → 1; writes `JOURNAL_FORMAT_VERSION`.
8
+ - Newer file version warns and still loads.
9
+ - Tests, docs, HISTORY.
10
+
11
+ ## Remaining work
12
+
13
+ - None.
@@ -0,0 +1,7 @@
1
+ # Issue #1008: nom cap specific lost
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/1008
4
+
5
+ ## Original issue text
6
+
7
+ When loading from xlsx database (batch), it did not pick up the nom cap specific value (gravimetric)
@@ -0,0 +1,82 @@
1
+ # Plan — issue #1008: nom cap specific lost (batch, xlsx db)
2
+
3
+ Branch: `1008-batch-nom-cap-specifics`. Milestone `v2.1.4.post`.
4
+
5
+ ## Diagnosis (2026-09-08)
6
+
7
+ Traced db → journal → spec → `cellpy.get` on master with the reporter's own
8
+ config (`cellpy.toml`: `db_cols.nom_cap_specifics = "nom_cap_specifics"`) and db
9
+ (`2025_Cell_Analysis_db_001.xlsx`, 976 gravimetric / 28 areal rows):
10
+
11
+ - `Reader.get_nom_cap_specifics(id)` returns the sheet value.
12
+ - `_dbengine._create_pages_dict` → `Journal.pages["nom_cap_specifics"]` →
13
+ `policy.resolve_specs` → `runner._get_kwargs` → `cellpy.get(nom_cap_specifics=…)`
14
+ keeps the value; journal JSON round-trip keeps it.
15
+ - `batch.load()` end-to-end on the test db with an `areal` column: cells get
16
+ `nom_cap_specifics="areal"`, `cellpy_units.nominal_capacity="mAh/cm**2"` on
17
+ raw load, `.cellpy` AUTO reload and journal autoload.
18
+
19
+ So the value is not lost by the pipeline itself. Two ways it shows up as `null`
20
+ in `b.pages`, both silent today:
21
+
22
+ 1. **Journal autoload shadows the db.** `batch.load(name, project, …)` with
23
+ `allow_from_journal=True` (default) reuses `cwd/cellpy_batch_<name>.json`
24
+ when present and never opens the xlsx — logged at INFO only. A journal
25
+ written before the db column was filled (or by an older cellpy that did not
26
+ emit the column, e.g. `cellpy_batch_celf_mar.json` from July has no
27
+ `nom_cap_specifics` key) reads back as a `null` column. Even when the user
28
+ passes `db_reader=` / `batch_col=`, the stale journal still wins.
29
+ 2. **Configured column name ≠ sheet header.** `Reader._pick_info` swallows the
30
+ `KeyError` at `logging.debug` and returns `None` for every cell → `null`
31
+ column → default `gravimetric` at load. No warning.
32
+
33
+ Side finding (out of scope, file follow-up): `journal_from_db(…, skip_file_search=True)`
34
+ with the Excel reader crashes in `simple_db_engine` (`pd.DataFrame(pages_dict)`:
35
+ `All arrays must be of the same length` — `raw_file_names` / `cellpy_file_name`
36
+ stay `[]`).
37
+
38
+ ## Approach (KISS, no behaviour change on the happy path)
39
+
40
+ 1. `cellpy/readers/dbreader.py` — `_pick_info`: on missing column emit
41
+ `warnings.warn(...)` **once per column per reader instance** (keep the
42
+ `None` return so batches still build). Message names the configured key
43
+ (`config.db_cols.<field>`) and the sheet header it expected.
44
+ 2. `cellpy/batch/facade.py` — `_load_after_progress`: when the journal is
45
+ autoloaded **and** the caller signalled a db read (`db`, `db_reader`,
46
+ `reader`, `batch_col` or `reader_path` given), `warnings.warn` that the
47
+ database was not consulted and that `allow_from_journal=False` re-reads it.
48
+ Plain `batch.load(name, project)` keeps the INFO log (fast-path reopen).
49
+ 3. Tests (essential):
50
+ - `tests/test_batch_v3_facade.py`: autoload + `db_reader=` → `UserWarning`;
51
+ autoload without db args → no warning.
52
+ - `tests/test_dbreader.py` (or nearest existing dbreader test module):
53
+ `Reader(db_frame=…)` missing the configured column → one `UserWarning`,
54
+ second pick of same column silent; and a regression check that a present
55
+ `nominal_capacity_specifics` column flows into `_create_pages_dict`.
56
+ 4. Docs: `HISTORY.md` bullet (close step); one line in
57
+ `docs/getting_started/agents.md` batch bullet + `AGENTS.md` mirror:
58
+ "`batch.load` reuses `cellpy_batch_<name>.json` in cwd when present;
59
+ `allow_from_journal=False` forces a db read."
60
+ 5. Follow-up GitHub issue for the `skip_file_search=True` Excel crash.
61
+
62
+ ## Files
63
+
64
+ - `cellpy/readers/dbreader.py`, `cellpy/batch/facade.py`
65
+ - `tests/test_batch_v3_facade.py`, `tests/test_dbreader*.py`
66
+ - `docs/getting_started/agents.md`, `AGENTS.md`, `HISTORY.md`
67
+
68
+ ## Constraints
69
+
70
+ - No change to journal schema or defaults; `null` stays `null` (honest).
71
+ - Warnings, not exceptions — batches must still build with a partial db.
72
+
73
+ ### Prior art
74
+
75
+ - `_dbengine.find_files` filefinder-miss `UserWarning` (#964) — same style.
76
+ - `#1000` journal `version` warning path in `journal.read_journal`.
77
+
78
+ ## Open questions
79
+
80
+ - Should `db_reader=`/`batch_col=` given explicitly make the db **win** over the
81
+ autoloaded journal instead of just warning? Plan says warn only (smaller,
82
+ no surprise reload); flip to "db wins" if preferred.
@@ -0,0 +1,28 @@
1
+ # Issue #1008 status — nom cap specific lost (batch, xlsx db)
2
+
3
+ - [x] Done
4
+
5
+ Branch: `1008-batch-nom-cap-specifics`. Plan accepted 2026-09-08 (warn-only variant).
6
+
7
+ ## What's done
8
+
9
+ - Diagnosis: pipeline keeps the value (verified db → journal → spec →
10
+ `cellpy.get` → cell, incl. `.cellpy` reload and journal autoload). `null`
11
+ in `b.pages` comes from a cached `cellpy_batch_<name>.json` shadowing the
12
+ db (INFO-only before), or from a configured-vs-sheet column-name mismatch
13
+ swallowed in `Reader._pick_info`.
14
+ - `cellpy/readers/dbreader.py`: `_warn_missing_column` — one `UserWarning`
15
+ per missing sheet header per reader, naming the `config.db_cols.<key>`.
16
+ - `cellpy/batch/facade.py`: `_load_after_progress` warns when the journal is
17
+ autoloaded but `db` / `db_reader` / `batch_col` / `reader_path` / other db
18
+ kwargs were given.
19
+ - Tests (essential): `test_dbreader.py::test_missing_column_warns_once`,
20
+ `::test_nom_cap_specifics_column_reaches_pages`;
21
+ `test_batch_v3_facade.py::test_load_warns_when_journal_autoload_shadows_db`,
22
+ `::test_load_autoload_without_db_args_is_quiet`.
23
+ - Docs: `docs/getting_started/agents.md` batch recipe + `AGENTS.md` mirror.
24
+ - Follow-up filed: #1017 (`skip_file_search=True` crashes with Excel reader).
25
+
26
+ ## Remaining work
27
+
28
+ - None.
@@ -0,0 +1,7 @@
1
+ # Issue #1009: summary collector plot family bug
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/1009
4
+
5
+ ## Original issue text
6
+
7
+ for the summary_collector family "fullcell_standard_gravimetric" we get too many sub-windows.
@@ -0,0 +1,91 @@
1
+ # Issue #1009 — plan (rev 2)
2
+
3
+ ## Diagnosis
4
+
5
+ `summary_collector(b, family="fullcell_standard_gravimetric").plot()` draws 10
6
+ facets instead of the 4 the family declares, and even the declared layout is
7
+ one facet *per variable* where the user wants charge and discharge of the same
8
+ quantity in **one** panel.
9
+
10
+ Root causes:
11
+
12
+ 1. `PlotFamily.summary_options` (`cellpy/plotting/registry.py`) strips the
13
+ `_cv` / `_non_cv` suffix off declared columns and requests the *base*
14
+ column with `partition_by_cv=True` — "only the CV part" is lost.
15
+ 2. `collect_summaries` (`cellpy/collect/summary.py`) then keeps
16
+ `col`, `col_non_cv`, `col_cv` for **every** requested column, including
17
+ `coulombic_efficiency`.
18
+ 3. `summary_plotter` (`cellpy/plotting/collected.py`) facets on `variable`,
19
+ so `charge_x` and `discharge_x` always land in separate rows.
20
+
21
+ Audit over all 20 `summary_plot` families (two `.res` cells, in-memory
22
+ batch): the 13 `capacities*` / `voltages` families collect exactly their
23
+ declared columns; all 7 `fullcell_standard*` families collect 10–12.
24
+ Single-cell `summary_plot(y=...)` is unaffected by 1–2 (selects `y_cols`
25
+ explicitly) and is out of scope for 3.
26
+
27
+ ## Approach
28
+
29
+ ### A. Collect exactly the declared columns
30
+
31
+ 1. `summary_options`: keep declared names literally in `columns` (no suffix
32
+ stripping); still set `partition_by_cv` when a `_cv` / `_non_cv` name (or
33
+ `supports_cv_split`) is present. `mod_01_*` handling unchanged.
34
+ 2. `collect_summaries`: expand `col → (col, col_non_cv, col_cv)` only when the
35
+ requested list names no CV variant itself; a list that spells out
36
+ `*_cv` / `*_non_cv` is taken literally. Existing
37
+ `columns=("charge_capacity",), partition_by_cv=True` still expands.
38
+
39
+ ### B. Combine charge/discharge into one panel (`summary_plotter`, Plotly)
40
+
41
+ 3. Panel key: split `variable` on `_`, drop the first token equal to
42
+ `charge` / `discharge` → panel; that token is the `direction`. Works for
43
+ prefix (`charge_capacity_gravimetric_cv`), suffix
44
+ (`potential_end_charge`) and mid-name
45
+ (`test_cumulated_discharge_capacity_loss_gravimetric`,
46
+ `mod_01_discharge_capacity_gravimetric`). No token → panel = variable,
47
+ direction none.
48
+ 4. Before the backend call, rewrite `variable` to the panel key and add a
49
+ `direction` column. Everything keyed on `variable` (facets, `y_ranges`,
50
+ `order_variables`, label mapper, `spread_plot`) keeps working on panel
51
+ keys; `y_ranges` / `order_variables` given as original variable names are
52
+ translated the same way.
53
+ 5. `px.line(..., line_dash="direction", line_dash_map={charge: solid,
54
+ discharge: dash})` when any direction is present. Trace names reduced to
55
+ the series (cell / group) with one legend entry per series; a second
56
+ Plotly legend (`legend2`, title "Direction") carries two style-only
57
+ entries: Charge (solid) / Discharge (dashed). `spread_plot` (grouped
58
+ mean/std) gets the same dash per direction.
59
+ 6. Panel labels: `_pretty_variable_label` must recognise `capacity_gravimetric`
60
+ (no direction prefix) so units still appear → "Capacity (mAh/g)".
61
+ 7. Opt-out: `combine_directions=False` on `summary_plotter` /
62
+ `Collection.plot` restores one facet per variable. Default **on** (this is
63
+ the requested layout; noted in HISTORY).
64
+ 8. Seaborn backend: facets follow the panel rewrite; `style="direction"` only
65
+ when style is free (not `group_cells`). Matplotlib/bokeh summary paths
66
+ untouched.
67
+
68
+ Resulting facet counts: `fullcell_standard_*` 4 (CE, capacity, retention,
69
+ CV part); `capacities_*` 1; `*_coulombic_efficiency` 2; `*_with_rate` 2;
70
+ `*_split_constant_voltage` 3; `voltages` 1.
71
+
72
+ ### C. Tests (essential)
73
+
74
+ - Registry/collect: tighten the family oracle in `tests/test_collect.py` to
75
+ reject *extra* columns; literal-list case for `collect_summaries`.
76
+ - Plot: unit tests for the panel/direction split; Plotly facet count and
77
+ dash mapping on a synthetic frame; `legend2` present with two entries;
78
+ `combine_directions=False` gives per-variable facets; `y_ranges` keyed by
79
+ original variable still applies.
80
+ - Update `tests/test_collected_summary_groups.py` fixtures that used
81
+ `cap_charge` / `cap_discharge` as separate facets (they now merge).
82
+
83
+ ### D. Docs
84
+
85
+ `HISTORY.md` `[Unreleased]`, `AGENTS.md` / `docs/getting_started/agents.md`
86
+ batch bullet (combined panels + `combine_directions`), `test-registry.md`.
87
+
88
+ ## Constraints
89
+
90
+ - No new `SummaryOptions` fields; family declarations unchanged.
91
+ - Legacy `plot_cycle_life_summary_plotly` (Batch `b.plot()`) untouched.
@@ -0,0 +1,56 @@
1
+ # Issue #1009 — status
2
+
3
+ - [x] Done
4
+
5
+ ## Diagnosis
6
+
7
+ `summary_collector(b, family="fullcell_standard_gravimetric").plot()` drew 10
8
+ facets instead of 4: `summary_options` stripped the `_cv` suffix and asked for
9
+ the base column with `partition_by_cv=True`; `collect_summaries` then kept
10
+ `col`, `col_non_cv`, `col_cv` for every requested column (CE included).
11
+ All 7 `fullcell_standard*` families were affected (10–12 columns vs 4); the 13
12
+ other summary families were exact. On top of that the plot faceted one row per
13
+ variable, so charge and discharge of the same quantity never shared a panel.
14
+
15
+ ## Done
16
+
17
+ - `cellpy/plotting/registry.py` — `summary_options` requests declared columns
18
+ literally (still turns `partition_by_cv` on for `*_cv` / `*_non_cv`).
19
+ - `cellpy/collect/summary.py` — the `(col, col_non_cv, col_cv)` expansion only
20
+ applies when the requested list names no CV variant itself.
21
+ `SummaryOptions` docstring updated.
22
+ - `cellpy/plotting/collected.py` (`summary_plotter`, Plotly):
23
+ - `split_direction()` / `_panel_mapping()`: variables differing only by a
24
+ `charge` / `discharge` token (prefix, suffix or mid-name) share a panel
25
+ named by the token-free key; a variable alone on its key keeps its name.
26
+ - `line_dash="direction"` (charge solid, discharge dashed); trace names
27
+ reduced to the series with one legend entry each; second legend
28
+ `legend2` ("Direction"). `spread_plot` gets the same dashes.
29
+ - `order_variables`, `y_ranges`, `y_label_mapper` accept original variable
30
+ names or panel keys; `_yaxis_key_for_variable` falls back to the panel key.
31
+ - `combine_directions=False` opt-out.
32
+ - Labels: `capacity_gravimetric` (direction-less panel key) gets units;
33
+ `*_non_cv` → "… non-CV" with correct mode/unit; `mod_01_*` →
34
+ "Normalized … (%)".
35
+ - Tests: oracle in `tests/test_collect.py` now rejects extra columns; literal
36
+ CV list test; `summary_options` tuple test; new
37
+ `tests/test_collected_summary_directions.py` (8 essential tests);
38
+ `tests/test_collected_summary_groups.py` synthetic names neutralised and the
39
+ #947/#948 snippets updated for the merged capacity panel;
40
+ `test_collected_summary_axes.py` spread hover test skips `legend2` entries.
41
+ - Docs: `HISTORY.md`, `AGENTS.md`, `docs/getting_started/agents.md`,
42
+ `.issueflows/04-designs-and-guides/test-registry.md`.
43
+
44
+ ## Resulting facet counts
45
+
46
+ `fullcell_standard_*` 4 (CV part / capacity / CE / normalized); `capacities_*`
47
+ 1; `*_coulombic_efficiency` 2; `*_with_rate` 2; `*_split_constant_voltage` 3;
48
+ `voltages` 1. Verified with an in-memory batch of the two Arbin `.res` test
49
+ cells and rendered PNGs.
50
+
51
+ ## Out of scope / notes
52
+
53
+ - Seaborn / matplotlib summary backends: facets follow the panel rewrite, no
54
+ dash styling.
55
+ - Legacy `b.plot()` (`plot_cycle_life_summary_plotly`) and single-cell
56
+ `summary_plot(y=...)` untouched.
@@ -0,0 +1,17 @@
1
+ # Issue #1017: journal_from_db(skip_file_search=True) crashes with the Excel reader
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/1017
4
+
5
+ ## Original issue text
6
+
7
+ Found while diagnosing #1008.
8
+
9
+ `cellpy.batch.db.journal_from_db(name, project, db_reader="simple_excel_reader", skip_file_search=True)` raises
10
+
11
+ ```
12
+ ValueError: All arrays must be of the same length
13
+ ```
14
+
15
+ from `_dbengine.simple_db_engine` at `pd.DataFrame(pages_dict)`: `_create_pages_dict` seeds `raw_file_names` / `cellpy_file_name` as `[]` and only `find_files` fills them, so skipping the search leaves two zero-length columns next to the per-cell ones.
16
+
17
+ `skip_file_search` is documented for JSON readers that already carry the file columns, but the Excel path should either fill those columns with `None` per cell or reject the flag with a clear message.
@@ -0,0 +1,77 @@
1
+ # Issue #1017 — plan
2
+
3
+ ## Goal
4
+
5
+ `journal_from_db(..., skip_file_search=True)` must return a journal for every
6
+ reader instead of raising `ValueError: All arrays must be of the same length`.
7
+ Cells whose files were not searched get `None` in `raw_file_names` /
8
+ `cellpy_file_name` (same shape as a filefinder miss).
9
+
10
+ ## Constraints
11
+
12
+ - Toolchain: `uv run pytest` (see `this-project.md`); merge gate is `-m essential`.
13
+ - No behaviour change for the default `skip_file_search=False` path.
14
+ - Do not change the JSON readers' public `pages_dict` contract (they seed the
15
+ two file columns as `[]` too — `BatBaseJSONReader` and `CustomJSONReader`,
16
+ `cellpy/readers/json_dbreader.py`); fix once, at the seam both paths share.
17
+ - Keep `_create_pages_dict` seeding as is (tests in `tests/test_dbreader.py`
18
+ and `tests/test_batch.py` read it directly); `find_files` is the only place
19
+ that knows whether the columns will be filled.
20
+ - `HISTORY.md` `[Unreleased]` bullet at close (`v2.1.4.post` milestone).
21
+
22
+ ### Prior art
23
+
24
+ - `find_files` (`cellpy/batch/_dbengine.py`) already seeds `[]` when the
25
+ columns are absent and appends per cell; the `skip_file_search` early return
26
+ is the only branch that returns without normalising lengths → mirror the
27
+ seeding there, padded to the cell count.
28
+ - Filefinder miss convention: `raw_files = None`, `cellpyfile = None` per cell
29
+ (`find_files` loop) → reuse `None` as the "not searched" value so
30
+ `policy.py` / `facade.py` (`row.get(...)`, `_clean`, FAILED marking) keep
31
+ working unchanged.
32
+ - `tests/test_batch.py::test_find_files_skip_file_search` — existing unit test
33
+ for the skip branch with pre-filled columns; extend alongside it.
34
+ - Toolbox (`.issueflows/00-tools/`): nothing applicable. `graphify-out/` absent.
35
+
36
+ ## Approach
37
+
38
+ 1. In `find_files`, replace the bare `if skip_file_search: return info_dict`
39
+ with: compute `n = len(file_name_indicators)` (fallback `filename`), then for
40
+ each of `hdr_journal["raw_file_names"]` / `hdr_journal["cellpy_file_name"]`:
41
+ if the key is missing or its list is empty while `n > 0`, set it to
42
+ `[None] * n`. Pre-filled columns (JSON carrying paths) stay untouched.
43
+ 2. Docstrings: `find_files` (skip now pads instead of "returned unchanged") and
44
+ `journal_from_db` in `cellpy/batch/db.py` (`skip_file_search=True` also
45
+ valid for the Excel reader; file columns come back `None`, so `b.update()`
46
+ marks those cells `FAILED` until paths are filled or a search is run).
47
+ 3. No change to `_create_pages_dict` or the JSON readers.
48
+
49
+ Alternative rejected: raising on `skip_file_search=True` for the Excel reader —
50
+ users legitimately want a journal without a (slow/remote) file search and fill
51
+ paths afterwards; `None` per cell is the existing "not found" shape.
52
+
53
+ ## Files to touch
54
+
55
+ - `cellpy/batch/_dbengine.py` — `find_files` skip branch pads the two columns;
56
+ docstring.
57
+ - `cellpy/batch/db.py` — `journal_from_db` docstring wording.
58
+ - `tests/test_batch.py` — new `test_find_files_skip_file_search_pads_missing_columns`
59
+ (missing + empty columns → `[None] * n`; `n == 0` → `[]`).
60
+ - `tests/test_dbreader.py` — `@pytest.mark.essential`
61
+ `test_simple_db_engine_skip_file_search_excel_reader`: `simple_db_engine(reader,
62
+ ids, skip_file_search=True)` on the Excel fixture returns one row per id with
63
+ `None` file columns (reproduces #1017 before the fix).
64
+ - `HISTORY.md` — `[Unreleased]` bullet (at `/iflow-close`).
65
+
66
+ ## Test strategy
67
+
68
+ - `uv run pytest tests/test_dbreader.py tests/test_batch.py -q`
69
+ - `uv run pytest -m essential` (merge gate)
70
+ - Repro before fix: the new engine test fails with `ValueError: All arrays
71
+ must be of the same length`.
72
+
73
+ ## Open questions
74
+
75
+ - None. (Optional: also make `journal_from_db` log at INFO that file columns
76
+ are unset when `skip_file_search=True` and the reader is the Excel one —
77
+ skipped for KISS unless wanted.)
@@ -0,0 +1,31 @@
1
+ # Issue #1017 status
2
+
3
+ `journal_from_db(skip_file_search=True)` crashes with the Excel reader.
4
+
5
+ - [x] Done
6
+
7
+ PR: https://github.com/jepegit/cellpy/pull/1020 (#1020, draft)
8
+ Branch: `cursor/1017-journal-from-db-skip-file-search-3975`
9
+
10
+ ## What's done
11
+
12
+ - Issue captured, plan confirmed (`issue1017_plan.md`).
13
+ - `_dbengine.find_files`: the `skip_file_search=True` branch pads missing or
14
+ empty `raw_file_names` / `cellpy_file_name` with `[None] * n_cells`
15
+ (pre-filled JSON paths untouched). Docstring updated.
16
+ - `batch.db.journal_from_db` docstring: flag valid for any reader; unset file
17
+ columns are `None`, `update()` marks those cells `FAILED`.
18
+ - Tests: `tests/test_dbreader.py::test_simple_db_engine_skip_file_search_excel_reader`
19
+ (essential; reproduced `ValueError: All arrays must be of the same length`
20
+ before the fix) and
21
+ `tests/test_batch.py::test_find_files_skip_file_search_pads_missing_columns`.
22
+ - `uv run pytest tests/test_dbreader.py tests/test_batch.py`: 71 passed.
23
+ - `uv run pytest -m essential`: 829 passed, 64 skipped
24
+ (`tests/test_arbin_variants_two_stage.py` ignored locally — `pyodbc` needs
25
+ `libodbc.so.2`, missing on this VM; unrelated to the change).
26
+
27
+ - `HISTORY.md` `[Unreleased]` bullet; `test-registry.md` rows.
28
+
29
+ ## Remaining work
30
+
31
+ - None. Merge PR #1020 when CI is green (no version bump requested).
@@ -0,0 +1,9 @@
1
+ # Issue #778: L6: golden equality test — incremental update() == full load
2
+
3
+ Source: https://github.com/jepegit/cellpy/issues/778
4
+
5
+ ## Original issue text
6
+
7
+ Epic L of **cellpy 2.2 (Stage 5)**. Design: [live-incremental](https://github.com/cellpy/architecture-plan/blob/main/cellpy2-live-incremental-design.md) §7 item 6. **Author first** — this is the correctness anchor for the whole epic.
8
+
9
+ Load a truncated file, append the tail, and assert `update()` == a full load of the whole file (summary equality). *Incremental refresh of a split file must equal a full load of the whole file.*