PyDPEET 0.3.0__tar.gz → 0.3.1__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 (131) hide show
  1. {pydpeet-0.3.0/src/PyDPEET.egg-info → pydpeet-0.3.1}/PKG-INFO +4 -4
  2. {pydpeet-0.3.0 → pydpeet-0.3.1}/pyproject.toml +9 -4
  3. {pydpeet-0.3.0 → pydpeet-0.3.1/src/PyDPEET.egg-info}/PKG-INFO +4 -4
  4. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/PyDPEET.egg-info/requires.txt +1 -1
  5. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_4_20_6_236/reader.py +18 -4
  6. {pydpeet-0.3.0 → pydpeet-0.3.1}/AUTHORS.md +0 -0
  7. {pydpeet-0.3.0 → pydpeet-0.3.1}/LICENCE.md +0 -0
  8. {pydpeet-0.3.0 → pydpeet-0.3.1}/README.md +0 -0
  9. {pydpeet-0.3.0 → pydpeet-0.3.1}/setup.cfg +0 -0
  10. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/PyDPEET.egg-info/SOURCES.txt +0 -0
  11. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/PyDPEET.egg-info/dependency_links.txt +0 -0
  12. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/PyDPEET.egg-info/top_level.txt +0 -0
  13. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/__init__.py +0 -0
  14. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/citations/__init__.py +0 -0
  15. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/citations/citeme.py +0 -0
  16. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/citations/html_writer.py +0 -0
  17. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/dev_utils/__init__.py +0 -0
  18. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/dev_utils/check_test_coverge/check_test_coverage.py +0 -0
  19. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/dev_utils/generate_inits/__init__.py +0 -0
  20. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/dev_utils/generate_inits/generate_inits.py +0 -0
  21. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/__init__.py +0 -0
  22. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/configs/__init__.py +0 -0
  23. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/configs/config.py +0 -0
  24. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/configs/const.py +0 -0
  25. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/convert.py +0 -0
  26. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/__init__.py +0 -0
  27. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +0 -0
  28. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_4_23_PV090331/formatter.py +0 -0
  29. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_4_23_PV090331/mapper.py +0 -0
  30. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_4_23_PV090331/reader.py +0 -0
  31. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +0 -0
  32. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_8_00_PV221201/formatter.py +0 -0
  33. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_8_00_PV221201/mapper.py +0 -0
  34. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/arbin_8_00_PV221201/reader.py +0 -0
  35. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +0 -0
  36. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/basytec_6_3_1_0/formatter.py +0 -0
  37. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/basytec_6_3_1_0/mapper.py +0 -0
  38. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/basytec_6_3_1_0/reader.py +0 -0
  39. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +0 -0
  40. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_4_20_6_236/formatter.py +0 -0
  41. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_4_20_6_236/mapper.py +0 -0
  42. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +0 -0
  43. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_eis_4_20_6_236/formatter.py +0 -0
  44. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_eis_4_20_6_236/mapper.py +0 -0
  45. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/digatron_eis_4_20_6_236/reader.py +0 -0
  46. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +0 -0
  47. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/neware_8_0_0_516/formatter.py +0 -0
  48. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/neware_8_0_0_516/mapper.py +0 -0
  49. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/neware_8_0_0_516/reader.py +0 -0
  50. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/parstat_2_63_3/__init__.py +0 -0
  51. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/parstat_2_63_3/formatter.py +0 -0
  52. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/parstat_2_63_3/mapper.py +0 -0
  53. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/parstat_2_63_3/reader.py +0 -0
  54. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/safion_1_9/__init__.py +0 -0
  55. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/safion_1_9/formatter.py +0 -0
  56. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/safion_1_9/mapper.py +0 -0
  57. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/safion_1_9/reader.py +0 -0
  58. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner/__init__.py +0 -0
  59. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner/formatter.py +0 -0
  60. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner/mapper.py +0 -0
  61. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner/reader.py +0 -0
  62. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner_new/__init__.py +0 -0
  63. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner_new/formatter.py +0 -0
  64. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner_new/mapper.py +0 -0
  65. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/device/zahner_new/reader.py +0 -0
  66. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/map.py +0 -0
  67. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/read.py +0 -0
  68. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/utils/__init__.py +0 -0
  69. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/utils/ext_path.py +0 -0
  70. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/utils/formatter_utils.py +0 -0
  71. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/utils/load_custom_module.py +0 -0
  72. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/utils/timing.py +0 -0
  73. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/io/write.py +0 -0
  74. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/__init__.py +0 -0
  75. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/__init__.py +0 -0
  76. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/average.py +0 -0
  77. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/capacity.py +0 -0
  78. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/configs/__init__.py +0 -0
  79. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/configs/battery_config.py +0 -0
  80. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/configs/ocv_config.py +0 -0
  81. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/configs/step_analyzer_config.py +0 -0
  82. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/cycle.py +0 -0
  83. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/efficiency.py +0 -0
  84. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/energy.py +0 -0
  85. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/extract/__init__.py +0 -0
  86. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/extract/dva_ica.py +0 -0
  87. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/extract/ocv.py +0 -0
  88. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/power.py +0 -0
  89. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/resistance.py +0 -0
  90. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/soc.py +0 -0
  91. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/soh.py +0 -0
  92. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/analyze/utils.py +0 -0
  93. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/merge/__init__.py +0 -0
  94. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/merge/series.py +0 -0
  95. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/__init__.py +0 -0
  96. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/configs/__init__.py +0 -0
  97. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/configs/config.py +0 -0
  98. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/step_analyzer.py +0 -0
  99. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/__init__.py +0 -0
  100. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/annotate/__init__.py +0 -0
  101. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/annotate/annotate_primitives.py +0 -0
  102. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/configs/CONFIG_Fallback.py +0 -0
  103. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/configs/CONFIG_preprocessing.py +0 -0
  104. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/configs/__init__.py +0 -0
  105. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/console_prints/__init__.py +0 -0
  106. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/console_prints/log_time.py +0 -0
  107. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +0 -0
  108. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/postprocessing/df_primitives_correction.py +0 -0
  109. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/postprocessing/filter_df.py +0 -0
  110. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/postprocessing/generate_instructions.py +0 -0
  111. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +0 -0
  112. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/preprocessing/calculate_thresholds.py +0 -0
  113. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/__init__.py +0 -0
  114. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/analyze_segments.py +0 -0
  115. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/attempt_to_merge_neighboring_segments.py +0 -0
  116. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/check_CV_results.py +0 -0
  117. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/check_power_zero_watt_segments.py +0 -0
  118. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/check_zero_length.py +0 -0
  119. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/split_in_segments.py +0 -0
  120. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/supress_smaller_segments.py +0 -0
  121. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py +0 -0
  122. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/visualize/__init__.py +0 -0
  123. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/process/sequence/utils/visualize/visualize_data.py +0 -0
  124. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/res/__init__.py +0 -0
  125. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/res/res_for_unittests/res.py +0 -0
  126. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/settings.py +0 -0
  127. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/utils/__init__.py +0 -0
  128. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/utils/assert_raises_and_print.py +0 -0
  129. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/utils/guardrails.py +0 -0
  130. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/utils/logging_style.py +0 -0
  131. {pydpeet-0.3.0 → pydpeet-0.3.1}/src/pydpeet/version.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyDPEET
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
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>
5
+ Author: Anton Schlösser, Martin Otto, Alexander Günter Hinrichsen, Jan Kalisch, Daniel Schröder, Cataldo De Simone
6
+ Maintainer-email: PyDPEET Team <pydpeet@eet.tu-berlin.de>
7
7
  Requires-Python: >=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENCE.md
@@ -11,7 +11,7 @@ License-File: AUTHORS.md
11
11
  Requires-Dist: pandas==2.2.3
12
12
  Requires-Dist: numpy==2.2.4
13
13
  Requires-Dist: pyarrow==19.0.1
14
- Requires-Dist: python-calamine==0.3.1
14
+ Requires-Dist: python-calamine>=0.3.1
15
15
  Requires-Dist: numba==0.64.0
16
16
  Requires-Dist: matplotlib==3.10.8
17
17
  Requires-Dist: scipy==1.17.1
@@ -4,21 +4,26 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "PyDPEET"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
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
9
  authors = [
10
- { name = "Anton Schlösser", email = "a.schloesser@tu-berlin.de"},
11
- { name = "Martin Otto", email = "m.otto.1@tu-berlin.de"},
10
+ { name = "Anton Schlösser" },
11
+ { name = "Martin Otto" },
12
12
  { name = "Alexander Günter Hinrichsen" },
13
13
  { name = "Jan Kalisch" },
14
14
  { name = "Daniel Schröder" },
15
15
  { name = "Cataldo De Simone" },
16
16
  ]
17
+
18
+ maintainers = [
19
+ { name = "PyDPEET Team", email = "pydpeet@eet.tu-berlin.de" },
20
+ ]
21
+
17
22
  dependencies = [
18
23
  "pandas==2.2.3",
19
24
  "numpy==2.2.4",
20
25
  "pyarrow==19.0.1",
21
- "python-calamine==0.3.1",
26
+ "python-calamine>=0.3.1",
22
27
  "numba==0.64.0",
23
28
  "matplotlib==3.10.8",
24
29
  "scipy==1.17.1",
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyDPEET
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
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>
5
+ Author: Anton Schlösser, Martin Otto, Alexander Günter Hinrichsen, Jan Kalisch, Daniel Schröder, Cataldo De Simone
6
+ Maintainer-email: PyDPEET Team <pydpeet@eet.tu-berlin.de>
7
7
  Requires-Python: >=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENCE.md
@@ -11,7 +11,7 @@ License-File: AUTHORS.md
11
11
  Requires-Dist: pandas==2.2.3
12
12
  Requires-Dist: numpy==2.2.4
13
13
  Requires-Dist: pyarrow==19.0.1
14
- Requires-Dist: python-calamine==0.3.1
14
+ Requires-Dist: python-calamine>=0.3.1
15
15
  Requires-Dist: numba==0.64.0
16
16
  Requires-Dist: matplotlib==3.10.8
17
17
  Requires-Dist: scipy==1.17.1
@@ -1,7 +1,7 @@
1
1
  pandas==2.2.3
2
2
  numpy==2.2.4
3
3
  pyarrow==19.0.1
4
- python-calamine==0.3.1
4
+ python-calamine>=0.3.1
5
5
  numba==0.64.0
6
6
  matplotlib==3.10.8
7
7
  scipy==1.17.1
@@ -1,3 +1,5 @@
1
+ import logging
2
+
1
3
  import pandas as pd
2
4
 
3
5
 
@@ -14,7 +16,7 @@ def to_dataframe(input_path: str) -> tuple[pd.DataFrame, str]:
14
16
  metadata = []
15
17
 
16
18
  # Open the file and process lines
17
- with open(input_path, encoding="us-ascii") as file:
19
+ with open(input_path, encoding="iso-8859-1") as file:
18
20
  # Read metadata until the header line is found
19
21
  line = file.readline()
20
22
  while not line.startswith("Zeitstempel"):
@@ -22,11 +24,11 @@ def to_dataframe(input_path: str) -> tuple[pd.DataFrame, str]:
22
24
  line = file.readline()
23
25
 
24
26
  # Extract headers and remaining data
25
- headers = line.strip().split(";")
26
- data_lines = [row.strip().split(";") for row in file if row.strip()]
27
+ headers = line.strip().split(",")
28
+ data_lines = [row.strip().split(",") for row in file if row.strip()]
27
29
 
28
30
  # appending first string from datalines
29
- metadata.append(";".join(data_lines.pop(0)))
31
+ metadata.append(",".join(data_lines.pop(0)))
30
32
 
31
33
  # Join metadata into a single string
32
34
  metadata_str = "\n".join(metadata)
@@ -37,9 +39,21 @@ def to_dataframe(input_path: str) -> tuple[pd.DataFrame, str]:
37
39
  # Convert numeric columns to appropriate types
38
40
  for col in headers:
39
41
  try:
42
+ # Handle duplicate column names by appending an index to duplicates
43
+ cols = pd.Series(df.columns)
44
+ for dup in df.columns[df.columns.duplicated(keep=False)]:
45
+ cols[df.columns.get_loc(dup)] = [
46
+ f"{dup}_{d_idx}" if d_idx != 0 else dup for d_idx in range(df.columns.get_loc(dup).sum())
47
+ ]
48
+ df.columns = cols
49
+
40
50
  df[col] = pd.to_numeric(df[col])
41
51
  except ValueError:
42
52
  # Leave non-numeric columns as is
43
53
  pass
44
54
 
55
+ if "T_Batt" not in df.columns:
56
+ df["T_Batt"] = None
57
+ logging.warning("Column 'T_Batt' not found in the data. Filling with None values.")
58
+
45
59
  return df, metadata_str
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes