PyDPEET 0.2.0__tar.gz → 0.3.0__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 (171) hide show
  1. pydpeet-0.3.0/PKG-INFO +97 -0
  2. pydpeet-0.3.0/README.md +75 -0
  3. pydpeet-0.3.0/pyproject.toml +118 -0
  4. pydpeet-0.3.0/src/PyDPEET.egg-info/PKG-INFO +97 -0
  5. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/SOURCES.txt +5 -5
  6. pydpeet-0.3.0/src/PyDPEET.egg-info/requires.txt +10 -0
  7. {pydpeet-0.2.0/src/pydpeet/io → pydpeet-0.3.0/src/pydpeet/citations}/__init__.py +1 -1
  8. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/citations/citeme.py +7 -7
  9. pydpeet-0.3.0/src/pydpeet/dev_utils/check_test_coverge/check_test_coverage.py +681 -0
  10. pydpeet-0.3.0/src/pydpeet/io/__init__.py +7 -0
  11. pydpeet-0.3.0/src/pydpeet/io/configs/__init__.py +7 -0
  12. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/configs/config.py +3 -2
  13. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/convert.py +19 -14
  14. pydpeet-0.3.0/src/pydpeet/io/device/__init__.py +7 -0
  15. pydpeet-0.3.0/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +7 -0
  16. pydpeet-0.3.0/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +7 -0
  17. pydpeet-0.3.0/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +7 -0
  18. pydpeet-0.3.0/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +7 -0
  19. pydpeet-0.3.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +7 -0
  20. pydpeet-0.3.0/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +7 -0
  21. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/reader.py +6 -4
  22. pydpeet-0.3.0/src/pydpeet/io/device/parstat_2_63_3/__init__.py +7 -0
  23. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/reader.py +23 -3
  24. pydpeet-0.3.0/src/pydpeet/io/device/safion_1_9/__init__.py +7 -0
  25. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/reader.py +1 -1
  26. pydpeet-0.3.0/src/pydpeet/io/device/zahner/__init__.py +7 -0
  27. pydpeet-0.3.0/src/pydpeet/io/device/zahner_new/__init__.py +7 -0
  28. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/map.py +16 -7
  29. pydpeet-0.3.0/src/pydpeet/io/read.py +183 -0
  30. pydpeet-0.3.0/src/pydpeet/io/utils/__init__.py +7 -0
  31. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/ext_path.py +3 -1
  32. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/formatter_utils.py +21 -4
  33. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/load_custom_module.py +3 -0
  34. pydpeet-0.3.0/src/pydpeet/process/__init__.py +7 -0
  35. pydpeet-0.3.0/src/pydpeet/process/analyze/__init__.py +7 -0
  36. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/average.py +29 -29
  37. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/capacity.py +45 -7
  38. pydpeet-0.3.0/src/pydpeet/process/analyze/configs/__init__.py +7 -0
  39. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/battery_config.py +5 -4
  40. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/cycle.py +3 -1
  41. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/efficiency.py +3 -1
  42. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/energy.py +3 -1
  43. pydpeet-0.3.0/src/pydpeet/process/analyze/extract/__init__.py +7 -0
  44. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/extract/ocv.py +55 -32
  45. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/resistance.py +16 -5
  46. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/soc.py +23 -8
  47. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/soh.py +3 -1
  48. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/utils.py +1 -0
  49. pydpeet-0.3.0/src/pydpeet/process/merge/__init__.py +7 -0
  50. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/merge/series.py +9 -1
  51. pydpeet-0.3.0/src/pydpeet/process/sequence/__init__.py +7 -0
  52. pydpeet-0.3.0/src/pydpeet/process/sequence/configs/__init__.py +7 -0
  53. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/step_analyzer.py +75 -67
  54. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/__init__.py +7 -0
  55. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/annotate/__init__.py +7 -0
  56. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/annotate/annotate_primitives.py +1 -1
  57. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/configs/CONFIG_Fallback.py +6 -0
  58. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/configs/__init__.py +7 -0
  59. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/console_prints/__init__.py +7 -0
  60. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +7 -0
  61. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/df_primitives_correction.py +21 -0
  62. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/filter_df.py +49 -3
  63. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/generate_instructions.py +3 -2
  64. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +7 -0
  65. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/processing/__init__.py +7 -0
  66. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_CV_results.py +14 -13
  67. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py +2 -1
  68. pydpeet-0.3.0/src/pydpeet/process/sequence/utils/visualize/__init__.py +7 -0
  69. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/visualize/visualize_data.py +51 -19
  70. pydpeet-0.3.0/src/pydpeet/res/res_for_unittests/res.py +481 -0
  71. pydpeet-0.3.0/src/pydpeet/utils/__init__.py +7 -0
  72. pydpeet-0.3.0/src/pydpeet/utils/assert_raises_and_print.py +8 -0
  73. pydpeet-0.3.0/src/pydpeet/utils/guardrails.py +156 -0
  74. pydpeet-0.2.0/PKG-INFO +0 -85
  75. pydpeet-0.2.0/README.md +0 -57
  76. pydpeet-0.2.0/pyproject.toml +0 -65
  77. pydpeet-0.2.0/src/PyDPEET.egg-info/PKG-INFO +0 -85
  78. pydpeet-0.2.0/src/PyDPEET.egg-info/requires.txt +0 -17
  79. pydpeet-0.2.0/src/pydpeet/io/configs/__init__.py +0 -7
  80. pydpeet-0.2.0/src/pydpeet/io/device/__init__.py +0 -7
  81. pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +0 -7
  82. pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +0 -7
  83. pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +0 -7
  84. pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +0 -7
  85. pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +0 -7
  86. pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +0 -7
  87. pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/__init__.py +0 -7
  88. pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/__init__.py +0 -7
  89. pydpeet-0.2.0/src/pydpeet/io/device/zahner/__init__.py +0 -7
  90. pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/__init__.py +0 -7
  91. pydpeet-0.2.0/src/pydpeet/io/read.py +0 -50
  92. pydpeet-0.2.0/src/pydpeet/io/utils/__init__.py +0 -7
  93. pydpeet-0.2.0/src/pydpeet/process/__init__.py +0 -7
  94. pydpeet-0.2.0/src/pydpeet/process/analyze/__init__.py +0 -7
  95. pydpeet-0.2.0/src/pydpeet/process/analyze/configs/__init__.py +0 -7
  96. pydpeet-0.2.0/src/pydpeet/process/analyze/extract/__init__.py +0 -7
  97. pydpeet-0.2.0/src/pydpeet/process/merge/__init__.py +0 -7
  98. pydpeet-0.2.0/src/pydpeet/process/sequence/__init__.py +0 -7
  99. pydpeet-0.2.0/src/pydpeet/process/sequence/configs/__init__.py +0 -7
  100. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/__init__.py +0 -7
  101. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/annotate/__init__.py +0 -7
  102. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/configs/__init__.py +0 -7
  103. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/console_prints/__init__.py +0 -7
  104. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +0 -7
  105. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +0 -7
  106. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/__init__.py +0 -7
  107. pydpeet-0.2.0/src/pydpeet/process/sequence/utils/visualize/__init__.py +0 -7
  108. pydpeet-0.2.0/src/pydpeet/res/__init__.py +0 -7
  109. pydpeet-0.2.0/src/pydpeet/utils/__init__.py +0 -7
  110. pydpeet-0.2.0/test/test_datatypes.py +0 -85
  111. pydpeet-0.2.0/test/test_directory_standardization.py +0 -1
  112. pydpeet-0.2.0/test/test_export.py +0 -74
  113. pydpeet-0.2.0/test/test_map.py +0 -205
  114. {pydpeet-0.2.0 → pydpeet-0.3.0}/AUTHORS.md +0 -0
  115. {pydpeet-0.2.0 → pydpeet-0.3.0}/LICENCE.md +0 -0
  116. {pydpeet-0.2.0 → pydpeet-0.3.0}/setup.cfg +0 -0
  117. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/dependency_links.txt +0 -0
  118. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/top_level.txt +0 -0
  119. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/__init__.py +0 -0
  120. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/citations/html_writer.py +0 -0
  121. {pydpeet-0.2.0/src/pydpeet/citations → pydpeet-0.3.0/src/pydpeet/dev_utils}/__init__.py +0 -0
  122. {pydpeet-0.2.0/src/pydpeet/dev_utils → pydpeet-0.3.0/src/pydpeet/dev_utils/generate_inits}/__init__.py +0 -0
  123. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/dev_utils/generate_inits/generate_inits.py +0 -0
  124. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/configs/const.py +0 -0
  125. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/formatter.py +0 -0
  126. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/mapper.py +0 -0
  127. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/reader.py +0 -0
  128. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/formatter.py +0 -0
  129. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/mapper.py +0 -0
  130. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/reader.py +0 -0
  131. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/formatter.py +0 -0
  132. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/mapper.py +0 -0
  133. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/reader.py +0 -0
  134. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/formatter.py +0 -0
  135. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/mapper.py +0 -0
  136. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/reader.py +0 -0
  137. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/formatter.py +0 -0
  138. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/mapper.py +0 -0
  139. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/reader.py +0 -0
  140. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/formatter.py +0 -0
  141. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/mapper.py +0 -0
  142. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/formatter.py +0 -0
  143. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/mapper.py +0 -0
  144. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/formatter.py +0 -0
  145. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/mapper.py +0 -0
  146. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/formatter.py +0 -0
  147. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/mapper.py +0 -0
  148. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/reader.py +0 -0
  149. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/formatter.py +0 -0
  150. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/mapper.py +0 -0
  151. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/reader.py +0 -0
  152. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/timing.py +0 -0
  153. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/write.py +0 -0
  154. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/ocv_config.py +0 -0
  155. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/step_analyzer_config.py +0 -0
  156. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/extract/dva_ica.py +0 -0
  157. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/power.py +0 -0
  158. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/configs/config.py +0 -0
  159. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/configs/CONFIG_preprocessing.py +0 -0
  160. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/console_prints/log_time.py +0 -0
  161. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/preprocessing/calculate_thresholds.py +0 -0
  162. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/analyze_segments.py +0 -0
  163. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/attempt_to_merge_neighboring_segments.py +0 -0
  164. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_power_zero_watt_segments.py +0 -0
  165. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_zero_length.py +0 -0
  166. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/split_in_segments.py +0 -0
  167. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/supress_smaller_segments.py +0 -0
  168. {pydpeet-0.2.0/src/pydpeet/dev_utils/generate_inits → pydpeet-0.3.0/src/pydpeet/res}/__init__.py +0 -0
  169. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/settings.py +0 -0
  170. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/utils/logging_style.py +0 -0
  171. {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/version.py +0 -0
pydpeet-0.3.0/PKG-INFO ADDED
@@ -0,0 +1,97 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyDPEET
3
+ Version: 0.3.0
4
+ Summary: Python package to read, unify, and convert battery measurement data from arbitrary battery cyclers to Parquet files. This package also provides functions to process, evaluate, and visualise the standardised data.
5
+ Author: Alexander Günter Hinrichsen, Jan Kalisch, Daniel Schröder, Cataldo De Simone
6
+ Author-email: Anton Schlösser <a.schloesser@tu-berlin.de>, Martin Otto <m.otto.1@tu-berlin.de>
7
+ Requires-Python: >=3.12
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENCE.md
10
+ License-File: AUTHORS.md
11
+ Requires-Dist: pandas==2.2.3
12
+ Requires-Dist: numpy==2.2.4
13
+ Requires-Dist: pyarrow==19.0.1
14
+ Requires-Dist: python-calamine==0.3.1
15
+ Requires-Dist: numba==0.64.0
16
+ Requires-Dist: matplotlib==3.10.8
17
+ Requires-Dist: scipy==1.17.1
18
+ Requires-Dist: bibtexparser==1.4.4
19
+ Requires-Dist: scikit-learn==1.8.0
20
+ Requires-Dist: ipykernel>=7.2.0
21
+ Dynamic: license-file
22
+
23
+ # PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
24
+
25
+ ## Contact
26
+
27
+ Feel free to open an issue on GitHub or use our email for direct enquiries: pydpeet@eet.tu-berlin.de.
28
+
29
+ <!-- ## Technical Components
30
+ alternatively: "Dependencies"
31
+ Probably not necessary? -->
32
+
33
+ ## Project Goals
34
+
35
+ PyDPEET is a Python package developed to handle battery measurement data from various cyclers and other measurement devices by
36
+ * converting input data into a standardised format using Pandas data frames,
37
+ * allowing users to merge multiple single tests into test series of one cell, and multiple test series into multi-cell measurement campaigns, and
38
+ * adding sequence info either by automatically synthesising from an existing schedule or automatically analysing in case of unknown measurement procedure.
39
+
40
+ Standardised data can then be analysed using various functions which add additional data columns to a data frame:
41
+ * power, energy, capacity,
42
+ * inner resistance,
43
+ * state of charge (SOC), state of health (SOH),
44
+ * OCV points, DVA and ICA,
45
+ * and more...
46
+
47
+ Processed data can be exported to highly efficient Parquet files to be stored and re-imported later -- or to CSV or XLSX formats to maintain legacy workflows.
48
+
49
+ ## Citing PyDPEET
50
+
51
+ ## Documentation
52
+
53
+ ![PyDPEET Workflow](docs/res/PyDPEET_Overview.svg "PyDPEET Workflow")
54
+
55
+ ### GitHub Pages
56
+
57
+ * [PyDPEET homepage](https://eet-tub.github.io/pydpeet/)
58
+ * [Installation](https://eet-tub.github.io/pydpeet/installation.html)
59
+ * [API reference](https://eet-tub.github.io/pydpeet/api/index.html)
60
+ * [Examples](https://eet-tub.github.io/pydpeet/examples/index.html)
61
+ * [Developer Guide](https://eet-tub.github.io/pydpeet/developer.html)
62
+
63
+ ## Installation
64
+
65
+ ### For Users
66
+
67
+ Please refer to the [installation guide](https://eet-tub.github.io/pydpeet/installation.html) at our GitHub Pages.
68
+
69
+ ### For Developers
70
+
71
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
72
+
73
+ ## Current Status
74
+
75
+ ## Roadmap
76
+
77
+ <!-- ## FAQ -->
78
+
79
+ ## Contributing to PyDPEET
80
+
81
+ ### Reporting Issues
82
+
83
+ ### Request for Data Conversion
84
+
85
+ ### Development Guidelines
86
+
87
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
88
+
89
+ <!-- ### Development Workflow -->
90
+
91
+ <!-- #### Basic Setup -->
92
+
93
+ <!-- #### Pre-Commit Hook -->
94
+
95
+ <!-- #### Autogeneration -->
96
+
97
+ <!-- #### Linting and Formatting -->
@@ -0,0 +1,75 @@
1
+ # PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
2
+
3
+ ## Contact
4
+
5
+ Feel free to open an issue on GitHub or use our email for direct enquiries: pydpeet@eet.tu-berlin.de.
6
+
7
+ <!-- ## Technical Components
8
+ alternatively: "Dependencies"
9
+ Probably not necessary? -->
10
+
11
+ ## Project Goals
12
+
13
+ PyDPEET is a Python package developed to handle battery measurement data from various cyclers and other measurement devices by
14
+ * converting input data into a standardised format using Pandas data frames,
15
+ * allowing users to merge multiple single tests into test series of one cell, and multiple test series into multi-cell measurement campaigns, and
16
+ * adding sequence info either by automatically synthesising from an existing schedule or automatically analysing in case of unknown measurement procedure.
17
+
18
+ Standardised data can then be analysed using various functions which add additional data columns to a data frame:
19
+ * power, energy, capacity,
20
+ * inner resistance,
21
+ * state of charge (SOC), state of health (SOH),
22
+ * OCV points, DVA and ICA,
23
+ * and more...
24
+
25
+ Processed data can be exported to highly efficient Parquet files to be stored and re-imported later -- or to CSV or XLSX formats to maintain legacy workflows.
26
+
27
+ ## Citing PyDPEET
28
+
29
+ ## Documentation
30
+
31
+ ![PyDPEET Workflow](docs/res/PyDPEET_Overview.svg "PyDPEET Workflow")
32
+
33
+ ### GitHub Pages
34
+
35
+ * [PyDPEET homepage](https://eet-tub.github.io/pydpeet/)
36
+ * [Installation](https://eet-tub.github.io/pydpeet/installation.html)
37
+ * [API reference](https://eet-tub.github.io/pydpeet/api/index.html)
38
+ * [Examples](https://eet-tub.github.io/pydpeet/examples/index.html)
39
+ * [Developer Guide](https://eet-tub.github.io/pydpeet/developer.html)
40
+
41
+ ## Installation
42
+
43
+ ### For Users
44
+
45
+ Please refer to the [installation guide](https://eet-tub.github.io/pydpeet/installation.html) at our GitHub Pages.
46
+
47
+ ### For Developers
48
+
49
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
50
+
51
+ ## Current Status
52
+
53
+ ## Roadmap
54
+
55
+ <!-- ## FAQ -->
56
+
57
+ ## Contributing to PyDPEET
58
+
59
+ ### Reporting Issues
60
+
61
+ ### Request for Data Conversion
62
+
63
+ ### Development Guidelines
64
+
65
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
66
+
67
+ <!-- ### Development Workflow -->
68
+
69
+ <!-- #### Basic Setup -->
70
+
71
+ <!-- #### Pre-Commit Hook -->
72
+
73
+ <!-- #### Autogeneration -->
74
+
75
+ <!-- #### Linting and Formatting -->
@@ -0,0 +1,118 @@
1
+ [build-system]
2
+ requires = ["setuptools", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "PyDPEET"
7
+ version = "0.3.0"
8
+ description = "Python package to read, unify, and convert battery measurement data from arbitrary battery cyclers to Parquet files. This package also provides functions to process, evaluate, and visualise the standardised data."
9
+ authors = [
10
+ { name = "Anton Schlösser", email = "a.schloesser@tu-berlin.de"},
11
+ { name = "Martin Otto", email = "m.otto.1@tu-berlin.de"},
12
+ { name = "Alexander Günter Hinrichsen" },
13
+ { name = "Jan Kalisch" },
14
+ { name = "Daniel Schröder" },
15
+ { name = "Cataldo De Simone" },
16
+ ]
17
+ dependencies = [
18
+ "pandas==2.2.3",
19
+ "numpy==2.2.4",
20
+ "pyarrow==19.0.1",
21
+ "python-calamine==0.3.1",
22
+ "numba==0.64.0",
23
+ "matplotlib==3.10.8",
24
+ "scipy==1.17.1",
25
+ "bibtexparser==1.4.4",
26
+ "scikit-learn==1.8.0",
27
+ "ipykernel>=7.2.0",
28
+ ]
29
+ requires-python = ">=3.12"
30
+ readme = { file = "README.md", content-type = "text/markdown" }
31
+
32
+
33
+ [tool.setuptools.packages.find]
34
+ where = ["src"]
35
+
36
+
37
+ [tool.pytest.ini_options]
38
+ pythonpath = ["."]
39
+
40
+ [dependency-groups]
41
+ dev = [
42
+ "pre-commit",
43
+ ]
44
+ docs = [
45
+ "sphinx",
46
+ "pydata-sphinx-theme",
47
+ "myst-parser",
48
+ "nbsphinx",
49
+ "sphinx-copybutton",
50
+ "bibtexparser",
51
+ "sphinx-design>=0.7.0",
52
+ ]
53
+ test = [
54
+ "pytest",
55
+ "pytest-cov",
56
+ "pytest-xdist",
57
+ "pytest-rerunfailures",
58
+ ]
59
+ mypy = [
60
+ "mypy>=1.0",
61
+ "types-python-dateutil",
62
+ "types-six",
63
+ "pre-commit",
64
+ ]
65
+
66
+
67
+ [tool.ruff]
68
+ # Set line length limit to a slightly higher value
69
+ line-length = 120
70
+ target-version = "py311"
71
+
72
+ [tool.ruff.lint]
73
+ select = ["E", "F", "I", "B", "UP"]
74
+ # E501: Ignore line length limit
75
+ # UP007: Ignore this, cause automated "fixes" causes mypy errors
76
+ # foo: Union[int, str] = 1
77
+ # Use instead:
78
+ # foo: int | str = 1
79
+ ignore = ["E501", "UP007"]
80
+
81
+ [tool.ruff.lint.per-file-ignores]
82
+ "*.ipynb" = ["E402"]
83
+
84
+ [tool.ruff.format]
85
+ # Use this option to keep lists and parameters lists as multi-line code when ended by a trailing comma
86
+ skip-magic-trailing-comma = false
87
+
88
+ [tool.mypy]
89
+ python_version = "3.12"
90
+ warn_return_any = true
91
+ warn_unused_configs = true
92
+ disallow_untyped_defs = false
93
+ disallow_incomplete_defs = false
94
+ check_untyped_defs = true
95
+ #https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
96
+ # Mypy will not try inferring the types of any 3rd party libraries
97
+ # you have installed unless they either have declared themselves to
98
+ # be PEP 561 compliant stub package (e.g. with a py.typed file) or have
99
+ # registered themselves on typeshed, the repository of types for the standard
100
+ # library and some 3rd party libraries.
101
+ ignore_missing_imports = true
102
+ exclude = [
103
+ "tests/",
104
+ "test/",
105
+ "docs/",
106
+ "benchmarks/",
107
+ "dev_utils/",
108
+ "res/",
109
+ ".*egg-info/",
110
+ ]
111
+
112
+ # for local testing of test coverage
113
+ [tool.coverage.run]
114
+ source = ["src/pydpeet"]
115
+ omit = [
116
+ "*/dev_utils/*",
117
+ "*/res/*",
118
+ ]
@@ -0,0 +1,97 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyDPEET
3
+ Version: 0.3.0
4
+ Summary: Python package to read, unify, and convert battery measurement data from arbitrary battery cyclers to Parquet files. This package also provides functions to process, evaluate, and visualise the standardised data.
5
+ Author: Alexander Günter Hinrichsen, Jan Kalisch, Daniel Schröder, Cataldo De Simone
6
+ Author-email: Anton Schlösser <a.schloesser@tu-berlin.de>, Martin Otto <m.otto.1@tu-berlin.de>
7
+ Requires-Python: >=3.12
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENCE.md
10
+ License-File: AUTHORS.md
11
+ Requires-Dist: pandas==2.2.3
12
+ Requires-Dist: numpy==2.2.4
13
+ Requires-Dist: pyarrow==19.0.1
14
+ Requires-Dist: python-calamine==0.3.1
15
+ Requires-Dist: numba==0.64.0
16
+ Requires-Dist: matplotlib==3.10.8
17
+ Requires-Dist: scipy==1.17.1
18
+ Requires-Dist: bibtexparser==1.4.4
19
+ Requires-Dist: scikit-learn==1.8.0
20
+ Requires-Dist: ipykernel>=7.2.0
21
+ Dynamic: license-file
22
+
23
+ # PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
24
+
25
+ ## Contact
26
+
27
+ Feel free to open an issue on GitHub or use our email for direct enquiries: pydpeet@eet.tu-berlin.de.
28
+
29
+ <!-- ## Technical Components
30
+ alternatively: "Dependencies"
31
+ Probably not necessary? -->
32
+
33
+ ## Project Goals
34
+
35
+ PyDPEET is a Python package developed to handle battery measurement data from various cyclers and other measurement devices by
36
+ * converting input data into a standardised format using Pandas data frames,
37
+ * allowing users to merge multiple single tests into test series of one cell, and multiple test series into multi-cell measurement campaigns, and
38
+ * adding sequence info either by automatically synthesising from an existing schedule or automatically analysing in case of unknown measurement procedure.
39
+
40
+ Standardised data can then be analysed using various functions which add additional data columns to a data frame:
41
+ * power, energy, capacity,
42
+ * inner resistance,
43
+ * state of charge (SOC), state of health (SOH),
44
+ * OCV points, DVA and ICA,
45
+ * and more...
46
+
47
+ Processed data can be exported to highly efficient Parquet files to be stored and re-imported later -- or to CSV or XLSX formats to maintain legacy workflows.
48
+
49
+ ## Citing PyDPEET
50
+
51
+ ## Documentation
52
+
53
+ ![PyDPEET Workflow](docs/res/PyDPEET_Overview.svg "PyDPEET Workflow")
54
+
55
+ ### GitHub Pages
56
+
57
+ * [PyDPEET homepage](https://eet-tub.github.io/pydpeet/)
58
+ * [Installation](https://eet-tub.github.io/pydpeet/installation.html)
59
+ * [API reference](https://eet-tub.github.io/pydpeet/api/index.html)
60
+ * [Examples](https://eet-tub.github.io/pydpeet/examples/index.html)
61
+ * [Developer Guide](https://eet-tub.github.io/pydpeet/developer.html)
62
+
63
+ ## Installation
64
+
65
+ ### For Users
66
+
67
+ Please refer to the [installation guide](https://eet-tub.github.io/pydpeet/installation.html) at our GitHub Pages.
68
+
69
+ ### For Developers
70
+
71
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
72
+
73
+ ## Current Status
74
+
75
+ ## Roadmap
76
+
77
+ <!-- ## FAQ -->
78
+
79
+ ## Contributing to PyDPEET
80
+
81
+ ### Reporting Issues
82
+
83
+ ### Request for Data Conversion
84
+
85
+ ### Development Guidelines
86
+
87
+ Please refer to the [developer guide](https://eet-tub.github.io/pydpeet/developer.html) at our GitHub Pages.
88
+
89
+ <!-- ### Development Workflow -->
90
+
91
+ <!-- #### Basic Setup -->
92
+
93
+ <!-- #### Pre-Commit Hook -->
94
+
95
+ <!-- #### Autogeneration -->
96
+
97
+ <!-- #### Linting and Formatting -->
@@ -14,6 +14,7 @@ src/pydpeet/citations/__init__.py
14
14
  src/pydpeet/citations/citeme.py
15
15
  src/pydpeet/citations/html_writer.py
16
16
  src/pydpeet/dev_utils/__init__.py
17
+ src/pydpeet/dev_utils/check_test_coverge/check_test_coverage.py
17
18
  src/pydpeet/dev_utils/generate_inits/__init__.py
18
19
  src/pydpeet/dev_utils/generate_inits/generate_inits.py
19
20
  src/pydpeet/io/__init__.py
@@ -121,9 +122,8 @@ src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py
121
122
  src/pydpeet/process/sequence/utils/visualize/__init__.py
122
123
  src/pydpeet/process/sequence/utils/visualize/visualize_data.py
123
124
  src/pydpeet/res/__init__.py
125
+ src/pydpeet/res/res_for_unittests/res.py
124
126
  src/pydpeet/utils/__init__.py
125
- src/pydpeet/utils/logging_style.py
126
- test/test_datatypes.py
127
- test/test_directory_standardization.py
128
- test/test_export.py
129
- test/test_map.py
127
+ src/pydpeet/utils/assert_raises_and_print.py
128
+ src/pydpeet/utils/guardrails.py
129
+ src/pydpeet/utils/logging_style.py
@@ -0,0 +1,10 @@
1
+ pandas==2.2.3
2
+ numpy==2.2.4
3
+ pyarrow==19.0.1
4
+ python-calamine==0.3.1
5
+ numba==0.64.0
6
+ matplotlib==3.10.8
7
+ scipy==1.17.1
8
+ bibtexparser==1.4.4
9
+ scikit-learn==1.8.0
10
+ ipykernel>=7.2.0
@@ -4,4 +4,4 @@ Created: 2026-03-06 15:11:49
4
4
  """
5
5
 
6
6
  # Restrictive package init: start with no public API
7
- __all__ = []
7
+ __all__: list[str] = []
@@ -8,7 +8,6 @@ import pathlib
8
8
 
9
9
  from bibtexparser.bibdatabase import BibDatabase
10
10
  from bibtexparser.bwriter import BibTexWriter
11
- from six import iteritems
12
11
 
13
12
  from .html_writer import BibHtmlWriter
14
13
 
@@ -16,9 +15,10 @@ from .html_writer import BibHtmlWriter
16
15
  # Singleton!
17
16
  class CiteMe:
18
17
  # Class variable!
19
- __instance = None
18
+ __instance: "CiteMe | None" = None
20
19
  __check_fields = True
21
20
  __pedantic = False
21
+ references: dict
22
22
 
23
23
  # Override new to make this a singleton class
24
24
  # taken from http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html#id5
@@ -42,7 +42,7 @@ class CiteMe:
42
42
 
43
43
  def print_references(self):
44
44
  for ref_type in self.references:
45
- for _, citation in iteritems(self.references[ref_type]):
45
+ for _, citation in self.references[ref_type].items():
46
46
  # print(ref_type, handle, citation.description)
47
47
  print(citation.description)
48
48
 
@@ -50,7 +50,7 @@ class CiteMe:
50
50
  db = BibDatabase()
51
51
  db.entries = []
52
52
  for ref_type in self.references:
53
- for handle, citation in iteritems(self.references[ref_type]):
53
+ for handle, citation in self.references[ref_type].items():
54
54
  description = citation.description
55
55
  description["ENTRYTYPE"] = citation.type
56
56
  description["ID"] = handle
@@ -67,7 +67,7 @@ class CiteMe:
67
67
  db = BibDatabase()
68
68
  db.entries = []
69
69
  for ref_type in self.references:
70
- for handle, citation in iteritems(self.references[ref_type]):
70
+ for handle, citation in self.references[ref_type].items():
71
71
  description = citation.description
72
72
  description["ENTRYTYPE"] = citation.type
73
73
  description["ID"] = handle
@@ -198,8 +198,8 @@ class incollection(Citation):
198
198
 
199
199
 
200
200
  class inproceedings(Citation):
201
- def __init__(self, handle, description):
202
- super().__init__(handle, description, "inproceedings")
201
+ def __init__(self, handle, description, the_type="inproceedings"):
202
+ super().__init__(handle, description, the_type)
203
203
  self._required = ["author", "title", "booktitle", "year"]
204
204
  self._optional = [
205
205
  "editor",