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.
- pydpeet-0.3.0/PKG-INFO +97 -0
- pydpeet-0.3.0/README.md +75 -0
- pydpeet-0.3.0/pyproject.toml +118 -0
- pydpeet-0.3.0/src/PyDPEET.egg-info/PKG-INFO +97 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/SOURCES.txt +5 -5
- pydpeet-0.3.0/src/PyDPEET.egg-info/requires.txt +10 -0
- {pydpeet-0.2.0/src/pydpeet/io → pydpeet-0.3.0/src/pydpeet/citations}/__init__.py +1 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/citations/citeme.py +7 -7
- pydpeet-0.3.0/src/pydpeet/dev_utils/check_test_coverge/check_test_coverage.py +681 -0
- pydpeet-0.3.0/src/pydpeet/io/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/configs/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/configs/config.py +3 -2
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/convert.py +19 -14
- pydpeet-0.3.0/src/pydpeet/io/device/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/reader.py +6 -4
- pydpeet-0.3.0/src/pydpeet/io/device/parstat_2_63_3/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/reader.py +23 -3
- pydpeet-0.3.0/src/pydpeet/io/device/safion_1_9/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/reader.py +1 -1
- pydpeet-0.3.0/src/pydpeet/io/device/zahner/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/io/device/zahner_new/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/map.py +16 -7
- pydpeet-0.3.0/src/pydpeet/io/read.py +183 -0
- pydpeet-0.3.0/src/pydpeet/io/utils/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/ext_path.py +3 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/formatter_utils.py +21 -4
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/load_custom_module.py +3 -0
- pydpeet-0.3.0/src/pydpeet/process/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/analyze/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/average.py +29 -29
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/capacity.py +45 -7
- pydpeet-0.3.0/src/pydpeet/process/analyze/configs/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/battery_config.py +5 -4
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/cycle.py +3 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/efficiency.py +3 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/energy.py +3 -1
- pydpeet-0.3.0/src/pydpeet/process/analyze/extract/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/extract/ocv.py +55 -32
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/resistance.py +16 -5
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/soc.py +23 -8
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/soh.py +3 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/utils.py +1 -0
- pydpeet-0.3.0/src/pydpeet/process/merge/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/merge/series.py +9 -1
- pydpeet-0.3.0/src/pydpeet/process/sequence/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/configs/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/step_analyzer.py +75 -67
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/annotate/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/annotate/annotate_primitives.py +1 -1
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/configs/CONFIG_Fallback.py +6 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/configs/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/console_prints/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/df_primitives_correction.py +21 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/filter_df.py +49 -3
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/postprocessing/generate_instructions.py +3 -2
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/processing/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_CV_results.py +14 -13
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py +2 -1
- pydpeet-0.3.0/src/pydpeet/process/sequence/utils/visualize/__init__.py +7 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/visualize/visualize_data.py +51 -19
- pydpeet-0.3.0/src/pydpeet/res/res_for_unittests/res.py +481 -0
- pydpeet-0.3.0/src/pydpeet/utils/__init__.py +7 -0
- pydpeet-0.3.0/src/pydpeet/utils/assert_raises_and_print.py +8 -0
- pydpeet-0.3.0/src/pydpeet/utils/guardrails.py +156 -0
- pydpeet-0.2.0/PKG-INFO +0 -85
- pydpeet-0.2.0/README.md +0 -57
- pydpeet-0.2.0/pyproject.toml +0 -65
- pydpeet-0.2.0/src/PyDPEET.egg-info/PKG-INFO +0 -85
- pydpeet-0.2.0/src/PyDPEET.egg-info/requires.txt +0 -17
- pydpeet-0.2.0/src/pydpeet/io/configs/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/zahner/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/io/read.py +0 -50
- pydpeet-0.2.0/src/pydpeet/io/utils/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/analyze/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/analyze/configs/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/analyze/extract/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/merge/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/configs/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/annotate/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/configs/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/console_prints/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/visualize/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/res/__init__.py +0 -7
- pydpeet-0.2.0/src/pydpeet/utils/__init__.py +0 -7
- pydpeet-0.2.0/test/test_datatypes.py +0 -85
- pydpeet-0.2.0/test/test_directory_standardization.py +0 -1
- pydpeet-0.2.0/test/test_export.py +0 -74
- pydpeet-0.2.0/test/test_map.py +0 -205
- {pydpeet-0.2.0 → pydpeet-0.3.0}/AUTHORS.md +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/LICENCE.md +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/setup.cfg +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/dependency_links.txt +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/PyDPEET.egg-info/top_level.txt +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/__init__.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/citations/html_writer.py +0 -0
- {pydpeet-0.2.0/src/pydpeet/citations → pydpeet-0.3.0/src/pydpeet/dev_utils}/__init__.py +0 -0
- {pydpeet-0.2.0/src/pydpeet/dev_utils → pydpeet-0.3.0/src/pydpeet/dev_utils/generate_inits}/__init__.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/dev_utils/generate_inits/generate_inits.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/configs/const.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_4_23_PV090331/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/arbin_8_00_PV221201/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/basytec_6_3_1_0/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_4_20_6_236/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/digatron_eis_4_20_6_236/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/neware_8_0_0_516/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/parstat_2_63_3/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/safion_1_9/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/formatter.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/mapper.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/device/zahner_new/reader.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/utils/timing.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/io/write.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/ocv_config.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/configs/step_analyzer_config.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/extract/dva_ica.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/analyze/power.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/configs/config.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/configs/CONFIG_preprocessing.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/console_prints/log_time.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/preprocessing/calculate_thresholds.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/analyze_segments.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/attempt_to_merge_neighboring_segments.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_power_zero_watt_segments.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/check_zero_length.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/split_in_segments.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/process/sequence/utils/processing/supress_smaller_segments.py +0 -0
- {pydpeet-0.2.0/src/pydpeet/dev_utils/generate_inits → pydpeet-0.3.0/src/pydpeet/res}/__init__.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/settings.py +0 -0
- {pydpeet-0.2.0 → pydpeet-0.3.0}/src/pydpeet/utils/logging_style.py +0 -0
- {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
|
+

|
|
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 -->
|
pydpeet-0.3.0/README.md
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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/
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
@@ -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
|
|
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
|
|
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
|
|
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,
|
|
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",
|