cellpy 2.1.3.post1__tar.gz → 2.1.3.post3__tar.gz

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