PyDPEET 0.2.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.2.0/AUTHORS.md +0 -0
- pydpeet-0.2.0/LICENCE.md +27 -0
- pydpeet-0.2.0/PKG-INFO +85 -0
- pydpeet-0.2.0/README.md +57 -0
- pydpeet-0.2.0/pyproject.toml +65 -0
- pydpeet-0.2.0/setup.cfg +4 -0
- pydpeet-0.2.0/src/PyDPEET.egg-info/PKG-INFO +85 -0
- pydpeet-0.2.0/src/PyDPEET.egg-info/SOURCES.txt +129 -0
- pydpeet-0.2.0/src/PyDPEET.egg-info/dependency_links.txt +1 -0
- pydpeet-0.2.0/src/PyDPEET.egg-info/requires.txt +17 -0
- pydpeet-0.2.0/src/PyDPEET.egg-info/top_level.txt +1 -0
- pydpeet-0.2.0/src/pydpeet/__init__.py +56 -0
- pydpeet-0.2.0/src/pydpeet/citations/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/citations/citeme.py +397 -0
- pydpeet-0.2.0/src/pydpeet/citations/html_writer.py +137 -0
- pydpeet-0.2.0/src/pydpeet/dev_utils/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/dev_utils/generate_inits/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/dev_utils/generate_inits/generate_inits.py +327 -0
- pydpeet-0.2.0/src/pydpeet/io/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/configs/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/configs/config.py +227 -0
- pydpeet-0.2.0/src/pydpeet/io/configs/const.py +1 -0
- pydpeet-0.2.0/src/pydpeet/io/convert.py +594 -0
- pydpeet-0.2.0/src/pydpeet/io/device/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/formatter.py +22 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_4_23_PV090331/reader.py +68 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/formatter.py +26 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/arbin_8_00_PV221201/reader.py +66 -0
- pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/formatter.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/basytec_6_3_1_0/reader.py +54 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/formatter.py +27 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_4_20_6_236/reader.py +45 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/formatter.py +39 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/digatron_eis_4_20_6_236/reader.py +42 -0
- pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/formatter.py +31 -0
- pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/neware_8_0_0_516/reader.py +397 -0
- pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/formatter.py +34 -0
- pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/parstat_2_63_3/reader.py +34 -0
- pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/formatter.py +25 -0
- pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/mapper.py +18 -0
- pydpeet-0.2.0/src/pydpeet/io/device/safion_1_9/reader.py +89 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner/formatter.py +73 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner/mapper.py +34 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner/reader.py +46 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/formatter.py +72 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/mapper.py +50 -0
- pydpeet-0.2.0/src/pydpeet/io/device/zahner_new/reader.py +46 -0
- pydpeet-0.2.0/src/pydpeet/io/map.py +69 -0
- pydpeet-0.2.0/src/pydpeet/io/read.py +50 -0
- pydpeet-0.2.0/src/pydpeet/io/utils/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/io/utils/ext_path.py +34 -0
- pydpeet-0.2.0/src/pydpeet/io/utils/formatter_utils.py +429 -0
- pydpeet-0.2.0/src/pydpeet/io/utils/load_custom_module.py +33 -0
- pydpeet-0.2.0/src/pydpeet/io/utils/timing.py +36 -0
- pydpeet-0.2.0/src/pydpeet/io/write.py +99 -0
- pydpeet-0.2.0/src/pydpeet/process/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/average.py +297 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/capacity.py +208 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/configs/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/configs/battery_config.py +38 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/configs/ocv_config.py +177 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/configs/step_analyzer_config.py +178 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/cycle.py +63 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/efficiency.py +182 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/energy.py +51 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/extract/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/extract/dva_ica.py +224 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/extract/ocv.py +196 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/power.py +32 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/resistance.py +87 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/soc.py +418 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/soh.py +72 -0
- pydpeet-0.2.0/src/pydpeet/process/analyze/utils.py +122 -0
- pydpeet-0.2.0/src/pydpeet/process/merge/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/merge/series.py +274 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/configs/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/configs/config.py +17 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/step_analyzer.py +440 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/annotate/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/annotate/annotate_primitives.py +419 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/configs/CONFIG_Fallback.py +231 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/configs/CONFIG_preprocessing.py +243 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/configs/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/console_prints/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/console_prints/log_time.py +30 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/df_primitives_correction.py +166 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/filter_df.py +168 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/postprocessing/generate_instructions.py +297 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/preprocessing/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/preprocessing/calculate_thresholds.py +27 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/analyze_segments.py +368 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/attempt_to_merge_neighboring_segments.py +122 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/check_CV_results.py +226 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/check_power_zero_watt_segments.py +85 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/check_zero_length.py +117 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/split_in_segments.py +97 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/supress_smaller_segments.py +99 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py +185 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/visualize/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/process/sequence/utils/visualize/visualize_data.py +288 -0
- pydpeet-0.2.0/src/pydpeet/res/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/settings.py +0 -0
- pydpeet-0.2.0/src/pydpeet/utils/__init__.py +7 -0
- pydpeet-0.2.0/src/pydpeet/utils/logging_style.py +28 -0
- pydpeet-0.2.0/src/pydpeet/version.py +0 -0
- pydpeet-0.2.0/test/test_datatypes.py +85 -0
- pydpeet-0.2.0/test/test_directory_standardization.py +1 -0
- pydpeet-0.2.0/test/test_export.py +74 -0
- pydpeet-0.2.0/test/test_map.py +205 -0
pydpeet-0.2.0/AUTHORS.md
ADDED
|
File without changes
|
pydpeet-0.2.0/LICENCE.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Copyright (c) 2025, the PyDPEET team.
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
|
6
|
+
|
|
7
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
8
|
+
list of conditions and the following disclaimer.
|
|
9
|
+
|
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
|
12
|
+
and/or other materials provided with the distribution.
|
|
13
|
+
|
|
14
|
+
* Neither the name of the copyright holder nor the names of its
|
|
15
|
+
contributors may be used to endorse or promote products derived from
|
|
16
|
+
this software without specific prior written permission.
|
|
17
|
+
|
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
22
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
23
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
24
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
25
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
26
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
27
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
pydpeet-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyDPEET
|
|
3
|
+
Version: 0.2.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
|
|
12
|
+
Requires-Dist: numpy
|
|
13
|
+
Requires-Dist: pyarrow
|
|
14
|
+
Requires-Dist: python-calamine
|
|
15
|
+
Requires-Dist: numba
|
|
16
|
+
Requires-Dist: matplotlib
|
|
17
|
+
Requires-Dist: scipy
|
|
18
|
+
Requires-Dist: bibtexparser
|
|
19
|
+
Requires-Dist: scikit-learn
|
|
20
|
+
Provides-Extra: docs
|
|
21
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
22
|
+
Requires-Dist: pydata-sphinx-theme; extra == "docs"
|
|
23
|
+
Requires-Dist: myst-parser; extra == "docs"
|
|
24
|
+
Requires-Dist: nbsphinx; extra == "docs"
|
|
25
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
26
|
+
Requires-Dist: bibtexparser; extra == "docs"
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
|
|
30
|
+
|
|
31
|
+
[[_TOC_]]
|
|
32
|
+
|
|
33
|
+
## Disclaimer
|
|
34
|
+
|
|
35
|
+
This README is still under (re-)construction due to changes in the codebase.
|
|
36
|
+
|
|
37
|
+
## Description
|
|
38
|
+
|
|
39
|
+
<!-- This project enables you to convert battery measurement data to a standardized format.
|
|
40
|
+
|
|
41
|
+
Cycler output their measurement data in different formats and different file types, like for example .csv and .xslx. Each has to be handled differently which makes it difficult to work with the data and that's the reason why we created a standardized format.
|
|
42
|
+
The standardized Data and Metadata can be used inside of the code and can be output as a .csv (Data), .xlsx (Data) or parquet(Data) to a output_path of your choosing.
|
|
43
|
+
|
|
44
|
+
Keeping additional data outside of our definition of the standardized columns and custom cycler handling is also possible. -->
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Standardised Format
|
|
48
|
+
|
|
49
|
+
The standard columns are defined as follows:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
STANDARD_COLUMNS = [
|
|
53
|
+
"Meta_Data",
|
|
54
|
+
"Step_Count",
|
|
55
|
+
"Voltage[V]",
|
|
56
|
+
"Current[A]",
|
|
57
|
+
"Temperature[°C]",
|
|
58
|
+
"Test_Time[s]",
|
|
59
|
+
"Date_Time",
|
|
60
|
+
"EIS_f[Hz]",
|
|
61
|
+
"EIS_Z_Real[Ohm]",
|
|
62
|
+
"EIS_Z_Imag[Ohm]",
|
|
63
|
+
"EIS_DC[A]"
|
|
64
|
+
]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Meta data
|
|
68
|
+
|
|
69
|
+
## Supported Cyclers
|
|
70
|
+
|
|
71
|
+
## Installation
|
|
72
|
+
|
|
73
|
+
### For Developers
|
|
74
|
+
|
|
75
|
+
#### Rebuild package for "pip"
|
|
76
|
+
|
|
77
|
+
#### How to renew the documentation after implementing new functions
|
|
78
|
+
|
|
79
|
+
### For Users
|
|
80
|
+
|
|
81
|
+
## Usage
|
|
82
|
+
|
|
83
|
+
## Custom Handling of Cycler
|
|
84
|
+
|
|
85
|
+
## How to add a Custom Handling to the Project
|
pydpeet-0.2.0/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
|
|
2
|
+
|
|
3
|
+
[[_TOC_]]
|
|
4
|
+
|
|
5
|
+
## Disclaimer
|
|
6
|
+
|
|
7
|
+
This README is still under (re-)construction due to changes in the codebase.
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
<!-- This project enables you to convert battery measurement data to a standardized format.
|
|
12
|
+
|
|
13
|
+
Cycler output their measurement data in different formats and different file types, like for example .csv and .xslx. Each has to be handled differently which makes it difficult to work with the data and that's the reason why we created a standardized format.
|
|
14
|
+
The standardized Data and Metadata can be used inside of the code and can be output as a .csv (Data), .xlsx (Data) or parquet(Data) to a output_path of your choosing.
|
|
15
|
+
|
|
16
|
+
Keeping additional data outside of our definition of the standardized columns and custom cycler handling is also possible. -->
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## Standardised Format
|
|
20
|
+
|
|
21
|
+
The standard columns are defined as follows:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
STANDARD_COLUMNS = [
|
|
25
|
+
"Meta_Data",
|
|
26
|
+
"Step_Count",
|
|
27
|
+
"Voltage[V]",
|
|
28
|
+
"Current[A]",
|
|
29
|
+
"Temperature[°C]",
|
|
30
|
+
"Test_Time[s]",
|
|
31
|
+
"Date_Time",
|
|
32
|
+
"EIS_f[Hz]",
|
|
33
|
+
"EIS_Z_Real[Ohm]",
|
|
34
|
+
"EIS_Z_Imag[Ohm]",
|
|
35
|
+
"EIS_DC[A]"
|
|
36
|
+
]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Meta data
|
|
40
|
+
|
|
41
|
+
## Supported Cyclers
|
|
42
|
+
|
|
43
|
+
## Installation
|
|
44
|
+
|
|
45
|
+
### For Developers
|
|
46
|
+
|
|
47
|
+
#### Rebuild package for "pip"
|
|
48
|
+
|
|
49
|
+
#### How to renew the documentation after implementing new functions
|
|
50
|
+
|
|
51
|
+
### For Users
|
|
52
|
+
|
|
53
|
+
## Usage
|
|
54
|
+
|
|
55
|
+
## Custom Handling of Cycler
|
|
56
|
+
|
|
57
|
+
## How to add a Custom Handling to the Project
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "PyDPEET"
|
|
7
|
+
version = "0.2.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",
|
|
19
|
+
"numpy",
|
|
20
|
+
"pyarrow",
|
|
21
|
+
"python-calamine",
|
|
22
|
+
"numba",
|
|
23
|
+
"matplotlib",
|
|
24
|
+
"scipy",
|
|
25
|
+
"bibtexparser",
|
|
26
|
+
"scikit-learn"
|
|
27
|
+
]
|
|
28
|
+
requires-python = ">=3.12"
|
|
29
|
+
readme = { file = "README.md", content-type = "text/markdown" }
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.packages.find]
|
|
33
|
+
where = ["src"]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
[tool.pytest.ini_options]
|
|
37
|
+
pythonpath = ["."]
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
docs = [
|
|
41
|
+
"sphinx",
|
|
42
|
+
"pydata-sphinx-theme",
|
|
43
|
+
"myst-parser",
|
|
44
|
+
"nbsphinx",
|
|
45
|
+
"sphinx-copybutton",
|
|
46
|
+
"bibtexparser",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
[tool.ruff]
|
|
51
|
+
# Set line length limit to a slightly higher value
|
|
52
|
+
line-length = 120
|
|
53
|
+
target-version = "py311"
|
|
54
|
+
|
|
55
|
+
[tool.ruff.lint]
|
|
56
|
+
select = ["E", "F", "I", "B", "UP"]
|
|
57
|
+
# E501: Ignore line length limit
|
|
58
|
+
ignore = ["E501"]
|
|
59
|
+
|
|
60
|
+
[tool.ruff.lint.per-file-ignores]
|
|
61
|
+
"*.ipynb" = ["E402"]
|
|
62
|
+
|
|
63
|
+
[tool.ruff.format]
|
|
64
|
+
# Use this option to keep lists and parameters lists as multi-line code when ended by a trailing comma
|
|
65
|
+
skip-magic-trailing-comma = false
|
pydpeet-0.2.0/setup.cfg
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyDPEET
|
|
3
|
+
Version: 0.2.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
|
|
12
|
+
Requires-Dist: numpy
|
|
13
|
+
Requires-Dist: pyarrow
|
|
14
|
+
Requires-Dist: python-calamine
|
|
15
|
+
Requires-Dist: numba
|
|
16
|
+
Requires-Dist: matplotlib
|
|
17
|
+
Requires-Dist: scipy
|
|
18
|
+
Requires-Dist: bibtexparser
|
|
19
|
+
Requires-Dist: scikit-learn
|
|
20
|
+
Provides-Extra: docs
|
|
21
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
22
|
+
Requires-Dist: pydata-sphinx-theme; extra == "docs"
|
|
23
|
+
Requires-Dist: myst-parser; extra == "docs"
|
|
24
|
+
Requires-Dist: nbsphinx; extra == "docs"
|
|
25
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
26
|
+
Requires-Dist: bibtexparser; extra == "docs"
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# PyDPEET - Fast and Easy Battery Data Unification, Processing, and Analysis
|
|
30
|
+
|
|
31
|
+
[[_TOC_]]
|
|
32
|
+
|
|
33
|
+
## Disclaimer
|
|
34
|
+
|
|
35
|
+
This README is still under (re-)construction due to changes in the codebase.
|
|
36
|
+
|
|
37
|
+
## Description
|
|
38
|
+
|
|
39
|
+
<!-- This project enables you to convert battery measurement data to a standardized format.
|
|
40
|
+
|
|
41
|
+
Cycler output their measurement data in different formats and different file types, like for example .csv and .xslx. Each has to be handled differently which makes it difficult to work with the data and that's the reason why we created a standardized format.
|
|
42
|
+
The standardized Data and Metadata can be used inside of the code and can be output as a .csv (Data), .xlsx (Data) or parquet(Data) to a output_path of your choosing.
|
|
43
|
+
|
|
44
|
+
Keeping additional data outside of our definition of the standardized columns and custom cycler handling is also possible. -->
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Standardised Format
|
|
48
|
+
|
|
49
|
+
The standard columns are defined as follows:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
STANDARD_COLUMNS = [
|
|
53
|
+
"Meta_Data",
|
|
54
|
+
"Step_Count",
|
|
55
|
+
"Voltage[V]",
|
|
56
|
+
"Current[A]",
|
|
57
|
+
"Temperature[°C]",
|
|
58
|
+
"Test_Time[s]",
|
|
59
|
+
"Date_Time",
|
|
60
|
+
"EIS_f[Hz]",
|
|
61
|
+
"EIS_Z_Real[Ohm]",
|
|
62
|
+
"EIS_Z_Imag[Ohm]",
|
|
63
|
+
"EIS_DC[A]"
|
|
64
|
+
]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Meta data
|
|
68
|
+
|
|
69
|
+
## Supported Cyclers
|
|
70
|
+
|
|
71
|
+
## Installation
|
|
72
|
+
|
|
73
|
+
### For Developers
|
|
74
|
+
|
|
75
|
+
#### Rebuild package for "pip"
|
|
76
|
+
|
|
77
|
+
#### How to renew the documentation after implementing new functions
|
|
78
|
+
|
|
79
|
+
### For Users
|
|
80
|
+
|
|
81
|
+
## Usage
|
|
82
|
+
|
|
83
|
+
## Custom Handling of Cycler
|
|
84
|
+
|
|
85
|
+
## How to add a Custom Handling to the Project
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
AUTHORS.md
|
|
2
|
+
LICENCE.md
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
src/PyDPEET.egg-info/PKG-INFO
|
|
6
|
+
src/PyDPEET.egg-info/SOURCES.txt
|
|
7
|
+
src/PyDPEET.egg-info/dependency_links.txt
|
|
8
|
+
src/PyDPEET.egg-info/requires.txt
|
|
9
|
+
src/PyDPEET.egg-info/top_level.txt
|
|
10
|
+
src/pydpeet/__init__.py
|
|
11
|
+
src/pydpeet/settings.py
|
|
12
|
+
src/pydpeet/version.py
|
|
13
|
+
src/pydpeet/citations/__init__.py
|
|
14
|
+
src/pydpeet/citations/citeme.py
|
|
15
|
+
src/pydpeet/citations/html_writer.py
|
|
16
|
+
src/pydpeet/dev_utils/__init__.py
|
|
17
|
+
src/pydpeet/dev_utils/generate_inits/__init__.py
|
|
18
|
+
src/pydpeet/dev_utils/generate_inits/generate_inits.py
|
|
19
|
+
src/pydpeet/io/__init__.py
|
|
20
|
+
src/pydpeet/io/convert.py
|
|
21
|
+
src/pydpeet/io/map.py
|
|
22
|
+
src/pydpeet/io/read.py
|
|
23
|
+
src/pydpeet/io/write.py
|
|
24
|
+
src/pydpeet/io/configs/__init__.py
|
|
25
|
+
src/pydpeet/io/configs/config.py
|
|
26
|
+
src/pydpeet/io/configs/const.py
|
|
27
|
+
src/pydpeet/io/device/__init__.py
|
|
28
|
+
src/pydpeet/io/device/arbin_4_23_PV090331/__init__.py
|
|
29
|
+
src/pydpeet/io/device/arbin_4_23_PV090331/formatter.py
|
|
30
|
+
src/pydpeet/io/device/arbin_4_23_PV090331/mapper.py
|
|
31
|
+
src/pydpeet/io/device/arbin_4_23_PV090331/reader.py
|
|
32
|
+
src/pydpeet/io/device/arbin_8_00_PV221201/__init__.py
|
|
33
|
+
src/pydpeet/io/device/arbin_8_00_PV221201/formatter.py
|
|
34
|
+
src/pydpeet/io/device/arbin_8_00_PV221201/mapper.py
|
|
35
|
+
src/pydpeet/io/device/arbin_8_00_PV221201/reader.py
|
|
36
|
+
src/pydpeet/io/device/basytec_6_3_1_0/__init__.py
|
|
37
|
+
src/pydpeet/io/device/basytec_6_3_1_0/formatter.py
|
|
38
|
+
src/pydpeet/io/device/basytec_6_3_1_0/mapper.py
|
|
39
|
+
src/pydpeet/io/device/basytec_6_3_1_0/reader.py
|
|
40
|
+
src/pydpeet/io/device/digatron_4_20_6_236/__init__.py
|
|
41
|
+
src/pydpeet/io/device/digatron_4_20_6_236/formatter.py
|
|
42
|
+
src/pydpeet/io/device/digatron_4_20_6_236/mapper.py
|
|
43
|
+
src/pydpeet/io/device/digatron_4_20_6_236/reader.py
|
|
44
|
+
src/pydpeet/io/device/digatron_eis_4_20_6_236/__init__.py
|
|
45
|
+
src/pydpeet/io/device/digatron_eis_4_20_6_236/formatter.py
|
|
46
|
+
src/pydpeet/io/device/digatron_eis_4_20_6_236/mapper.py
|
|
47
|
+
src/pydpeet/io/device/digatron_eis_4_20_6_236/reader.py
|
|
48
|
+
src/pydpeet/io/device/neware_8_0_0_516/__init__.py
|
|
49
|
+
src/pydpeet/io/device/neware_8_0_0_516/formatter.py
|
|
50
|
+
src/pydpeet/io/device/neware_8_0_0_516/mapper.py
|
|
51
|
+
src/pydpeet/io/device/neware_8_0_0_516/reader.py
|
|
52
|
+
src/pydpeet/io/device/parstat_2_63_3/__init__.py
|
|
53
|
+
src/pydpeet/io/device/parstat_2_63_3/formatter.py
|
|
54
|
+
src/pydpeet/io/device/parstat_2_63_3/mapper.py
|
|
55
|
+
src/pydpeet/io/device/parstat_2_63_3/reader.py
|
|
56
|
+
src/pydpeet/io/device/safion_1_9/__init__.py
|
|
57
|
+
src/pydpeet/io/device/safion_1_9/formatter.py
|
|
58
|
+
src/pydpeet/io/device/safion_1_9/mapper.py
|
|
59
|
+
src/pydpeet/io/device/safion_1_9/reader.py
|
|
60
|
+
src/pydpeet/io/device/zahner/__init__.py
|
|
61
|
+
src/pydpeet/io/device/zahner/formatter.py
|
|
62
|
+
src/pydpeet/io/device/zahner/mapper.py
|
|
63
|
+
src/pydpeet/io/device/zahner/reader.py
|
|
64
|
+
src/pydpeet/io/device/zahner_new/__init__.py
|
|
65
|
+
src/pydpeet/io/device/zahner_new/formatter.py
|
|
66
|
+
src/pydpeet/io/device/zahner_new/mapper.py
|
|
67
|
+
src/pydpeet/io/device/zahner_new/reader.py
|
|
68
|
+
src/pydpeet/io/utils/__init__.py
|
|
69
|
+
src/pydpeet/io/utils/ext_path.py
|
|
70
|
+
src/pydpeet/io/utils/formatter_utils.py
|
|
71
|
+
src/pydpeet/io/utils/load_custom_module.py
|
|
72
|
+
src/pydpeet/io/utils/timing.py
|
|
73
|
+
src/pydpeet/process/__init__.py
|
|
74
|
+
src/pydpeet/process/analyze/__init__.py
|
|
75
|
+
src/pydpeet/process/analyze/average.py
|
|
76
|
+
src/pydpeet/process/analyze/capacity.py
|
|
77
|
+
src/pydpeet/process/analyze/cycle.py
|
|
78
|
+
src/pydpeet/process/analyze/efficiency.py
|
|
79
|
+
src/pydpeet/process/analyze/energy.py
|
|
80
|
+
src/pydpeet/process/analyze/power.py
|
|
81
|
+
src/pydpeet/process/analyze/resistance.py
|
|
82
|
+
src/pydpeet/process/analyze/soc.py
|
|
83
|
+
src/pydpeet/process/analyze/soh.py
|
|
84
|
+
src/pydpeet/process/analyze/utils.py
|
|
85
|
+
src/pydpeet/process/analyze/configs/__init__.py
|
|
86
|
+
src/pydpeet/process/analyze/configs/battery_config.py
|
|
87
|
+
src/pydpeet/process/analyze/configs/ocv_config.py
|
|
88
|
+
src/pydpeet/process/analyze/configs/step_analyzer_config.py
|
|
89
|
+
src/pydpeet/process/analyze/extract/__init__.py
|
|
90
|
+
src/pydpeet/process/analyze/extract/dva_ica.py
|
|
91
|
+
src/pydpeet/process/analyze/extract/ocv.py
|
|
92
|
+
src/pydpeet/process/merge/__init__.py
|
|
93
|
+
src/pydpeet/process/merge/series.py
|
|
94
|
+
src/pydpeet/process/sequence/__init__.py
|
|
95
|
+
src/pydpeet/process/sequence/step_analyzer.py
|
|
96
|
+
src/pydpeet/process/sequence/configs/__init__.py
|
|
97
|
+
src/pydpeet/process/sequence/configs/config.py
|
|
98
|
+
src/pydpeet/process/sequence/utils/__init__.py
|
|
99
|
+
src/pydpeet/process/sequence/utils/annotate/__init__.py
|
|
100
|
+
src/pydpeet/process/sequence/utils/annotate/annotate_primitives.py
|
|
101
|
+
src/pydpeet/process/sequence/utils/configs/CONFIG_Fallback.py
|
|
102
|
+
src/pydpeet/process/sequence/utils/configs/CONFIG_preprocessing.py
|
|
103
|
+
src/pydpeet/process/sequence/utils/configs/__init__.py
|
|
104
|
+
src/pydpeet/process/sequence/utils/console_prints/__init__.py
|
|
105
|
+
src/pydpeet/process/sequence/utils/console_prints/log_time.py
|
|
106
|
+
src/pydpeet/process/sequence/utils/postprocessing/__init__.py
|
|
107
|
+
src/pydpeet/process/sequence/utils/postprocessing/df_primitives_correction.py
|
|
108
|
+
src/pydpeet/process/sequence/utils/postprocessing/filter_df.py
|
|
109
|
+
src/pydpeet/process/sequence/utils/postprocessing/generate_instructions.py
|
|
110
|
+
src/pydpeet/process/sequence/utils/preprocessing/__init__.py
|
|
111
|
+
src/pydpeet/process/sequence/utils/preprocessing/calculate_thresholds.py
|
|
112
|
+
src/pydpeet/process/sequence/utils/processing/__init__.py
|
|
113
|
+
src/pydpeet/process/sequence/utils/processing/analyze_segments.py
|
|
114
|
+
src/pydpeet/process/sequence/utils/processing/attempt_to_merge_neighboring_segments.py
|
|
115
|
+
src/pydpeet/process/sequence/utils/processing/check_CV_results.py
|
|
116
|
+
src/pydpeet/process/sequence/utils/processing/check_power_zero_watt_segments.py
|
|
117
|
+
src/pydpeet/process/sequence/utils/processing/check_zero_length.py
|
|
118
|
+
src/pydpeet/process/sequence/utils/processing/split_in_segments.py
|
|
119
|
+
src/pydpeet/process/sequence/utils/processing/supress_smaller_segments.py
|
|
120
|
+
src/pydpeet/process/sequence/utils/processing/widen_constant_segments.py
|
|
121
|
+
src/pydpeet/process/sequence/utils/visualize/__init__.py
|
|
122
|
+
src/pydpeet/process/sequence/utils/visualize/visualize_data.py
|
|
123
|
+
src/pydpeet/res/__init__.py
|
|
124
|
+
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pydpeet
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Auto-generated __init__ file.
|
|
3
|
+
Created: 2026-03-06 15:11:49
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# Re-export selected names from source modules
|
|
7
|
+
|
|
8
|
+
from pydpeet.citations.citeme import print_references, write_to_bibtex
|
|
9
|
+
from pydpeet.io.convert import convert
|
|
10
|
+
from pydpeet.io.map import mapping
|
|
11
|
+
from pydpeet.io.read import read
|
|
12
|
+
from pydpeet.io.write import write
|
|
13
|
+
from pydpeet.process.analyze.capacity import add_capacity
|
|
14
|
+
from pydpeet.process.analyze.configs.battery_config import (
|
|
15
|
+
BatteryConfig,
|
|
16
|
+
battery_config_default,
|
|
17
|
+
hakadi_nmc_1500,
|
|
18
|
+
lgm50lt_nmc_4800,
|
|
19
|
+
)
|
|
20
|
+
from pydpeet.process.analyze.extract.ocv import extract_ocv_iocv
|
|
21
|
+
from pydpeet.process.analyze.resistance import add_resistance_internal
|
|
22
|
+
from pydpeet.process.analyze.soc import SocMethod, add_soc
|
|
23
|
+
from pydpeet.process.merge.series import merge_into_series
|
|
24
|
+
from pydpeet.process.sequence.step_analyzer import add_primitive_segments, extract_sequence_overview
|
|
25
|
+
from pydpeet.process.sequence.utils.postprocessing.df_primitives_correction import df_primitives_correction
|
|
26
|
+
from pydpeet.process.sequence.utils.postprocessing.filter_df import filter_and_split_df_by_blocks
|
|
27
|
+
from pydpeet.process.sequence.utils.postprocessing.generate_instructions import generate_instructions
|
|
28
|
+
from pydpeet.process.sequence.utils.visualize.visualize_data import visualize_phases
|
|
29
|
+
from pydpeet.utils.logging_style import set_logging_style
|
|
30
|
+
|
|
31
|
+
# Public API for this package
|
|
32
|
+
__all__ = [
|
|
33
|
+
"BatteryConfig",
|
|
34
|
+
"SocMethod",
|
|
35
|
+
"add_capacity",
|
|
36
|
+
"add_primitive_segments",
|
|
37
|
+
"add_resistance_internal",
|
|
38
|
+
"add_soc",
|
|
39
|
+
"battery_config_default",
|
|
40
|
+
"convert",
|
|
41
|
+
"df_primitives_correction",
|
|
42
|
+
"extract_ocv_iocv",
|
|
43
|
+
"extract_sequence_overview",
|
|
44
|
+
"filter_and_split_df_by_blocks",
|
|
45
|
+
"generate_instructions",
|
|
46
|
+
"hakadi_nmc_1500",
|
|
47
|
+
"lgm50lt_nmc_4800",
|
|
48
|
+
"mapping",
|
|
49
|
+
"merge_into_series",
|
|
50
|
+
"print_references",
|
|
51
|
+
"read",
|
|
52
|
+
"set_logging_style",
|
|
53
|
+
"visualize_phases",
|
|
54
|
+
"write",
|
|
55
|
+
"write_to_bibtex",
|
|
56
|
+
]
|