battery-data-standard 0.1.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 (52) hide show
  1. battery_data_standard-0.1.0/CHANGELOG.md +21 -0
  2. battery_data_standard-0.1.0/LICENSE +21 -0
  3. battery_data_standard-0.1.0/MANIFEST.in +18 -0
  4. battery_data_standard-0.1.0/NOTICE.md +6 -0
  5. battery_data_standard-0.1.0/PKG-INFO +291 -0
  6. battery_data_standard-0.1.0/README.md +241 -0
  7. battery_data_standard-0.1.0/SECURITY.md +22 -0
  8. battery_data_standard-0.1.0/docs/api-reference.md +295 -0
  9. battery_data_standard-0.1.0/docs/export-template.md +91 -0
  10. battery_data_standard-0.1.0/docs/index.md +10 -0
  11. battery_data_standard-0.1.0/docs/schema-compatibility.md +55 -0
  12. battery_data_standard-0.1.0/docs/supported-formats.md +71 -0
  13. battery_data_standard-0.1.0/pyproject.toml +93 -0
  14. battery_data_standard-0.1.0/setup.cfg +4 -0
  15. battery_data_standard-0.1.0/src/battery_data_standard/__init__.py +62 -0
  16. battery_data_standard-0.1.0/src/battery_data_standard/__main__.py +5 -0
  17. battery_data_standard-0.1.0/src/battery_data_standard/_version.py +3 -0
  18. battery_data_standard-0.1.0/src/battery_data_standard/adapters/__init__.py +5 -0
  19. battery_data_standard-0.1.0/src/battery_data_standard/adapters/arbin.py +77 -0
  20. battery_data_standard-0.1.0/src/battery_data_standard/adapters/base.py +122 -0
  21. battery_data_standard-0.1.0/src/battery_data_standard/adapters/basytec.py +87 -0
  22. battery_data_standard-0.1.0/src/battery_data_standard/adapters/biologic.py +254 -0
  23. battery_data_standard-0.1.0/src/battery_data_standard/adapters/generic.py +39 -0
  24. battery_data_standard-0.1.0/src/battery_data_standard/adapters/landt.py +35 -0
  25. battery_data_standard-0.1.0/src/battery_data_standard/adapters/maccor.py +107 -0
  26. battery_data_standard-0.1.0/src/battery_data_standard/adapters/neware.py +1739 -0
  27. battery_data_standard-0.1.0/src/battery_data_standard/adapters/normalization.py +668 -0
  28. battery_data_standard-0.1.0/src/battery_data_standard/adapters/novonix.py +28 -0
  29. battery_data_standard-0.1.0/src/battery_data_standard/adapters/registry.py +143 -0
  30. battery_data_standard-0.1.0/src/battery_data_standard/adapters/simple.py +23 -0
  31. battery_data_standard-0.1.0/src/battery_data_standard/api.py +706 -0
  32. battery_data_standard-0.1.0/src/battery_data_standard/archive.py +224 -0
  33. battery_data_standard-0.1.0/src/battery_data_standard/cli.py +244 -0
  34. battery_data_standard-0.1.0/src/battery_data_standard/eis.py +330 -0
  35. battery_data_standard-0.1.0/src/battery_data_standard/exceptions.py +45 -0
  36. battery_data_standard-0.1.0/src/battery_data_standard/export.py +203 -0
  37. battery_data_standard-0.1.0/src/battery_data_standard/io.py +885 -0
  38. battery_data_standard-0.1.0/src/battery_data_standard/kind.py +262 -0
  39. battery_data_standard-0.1.0/src/battery_data_standard/profiles.py +83 -0
  40. battery_data_standard-0.1.0/src/battery_data_standard/py.typed +1 -0
  41. battery_data_standard-0.1.0/src/battery_data_standard/reports.py +124 -0
  42. battery_data_standard-0.1.0/src/battery_data_standard/schema.py +418 -0
  43. battery_data_standard-0.1.0/src/battery_data_standard/summary.py +69 -0
  44. battery_data_standard-0.1.0/src/battery_data_standard/validation.py +111 -0
  45. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/PKG-INFO +291 -0
  46. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/SOURCES.txt +50 -0
  47. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/dependency_links.txt +1 -0
  48. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/entry_points.txt +2 -0
  49. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/requires.txt +30 -0
  50. battery_data_standard-0.1.0/src/battery_data_standard.egg-info/top_level.txt +2 -0
  51. battery_data_standard-0.1.0/src/bds/__init__.py +5 -0
  52. battery_data_standard-0.1.0/src/bds/py.typed +1 -0
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-05-01
4
+
5
+ - Published the initial public package for BDF-oriented battery cycler data conversion.
6
+ - Added the `battery_data_standard` Python package and the `bds` import alias.
7
+ - Added the `bds` command-line interface for format detection, conversion, validation,
8
+ schema inspection, and batch processing.
9
+ - Added adapters for NEWARE, Arbin, Maccor, BioLogic, Novonix, BaSyTec, LANDT,
10
+ and generic tabular exports.
11
+ - Added support for CSV, text, Excel, MATLAB, and Parquet input families where
12
+ time, voltage, and current data can be mapped to the standard schema.
13
+ - Added standardized BDF-style time-series outputs with validation reports,
14
+ column provenance, source metadata, and optional sidecar reports.
15
+ - Added EIS detection, reading, conversion, and validation entry points.
16
+ - Added archive-aware batch conversion with JSONL manifests for directories and
17
+ supported archive files.
18
+ - Added step-level and cycle-level summary helpers for normalized time-series
19
+ data.
20
+ - Set the normalized current convention to charge-positive and discharge-negative
21
+ by default.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Battery Data Standard contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,18 @@
1
+ include README.md
2
+ include LICENSE
3
+ include NOTICE.md
4
+ include CHANGELOG.md
5
+ include SECURITY.md
6
+ exclude CONTRIBUTING.md
7
+ include docs/index.md
8
+ include docs/api-reference.md
9
+ include docs/supported-formats.md
10
+ include docs/export-template.md
11
+ include docs/schema-compatibility.md
12
+ recursive-include src/battery_data_standard py.typed
13
+ recursive-include src/bds py.typed
14
+ prune tests
15
+ prune tools
16
+ global-exclude __pycache__
17
+ global-exclude *.py[cod]
18
+ global-exclude .DS_Store
@@ -0,0 +1,6 @@
1
+ # Notices
2
+
3
+ Battery Data Standard targets a BDF-oriented tabular output schema inspired by
4
+ the Battery Data Format project from the Battery Data Alliance. This project is
5
+ not an official Battery Data Alliance project and is not certified by the
6
+ Battery Data Alliance.
@@ -0,0 +1,291 @@
1
+ Metadata-Version: 2.4
2
+ Name: battery-data-standard
3
+ Version: 0.1.0
4
+ Summary: BDF-first converters for battery cycler data.
5
+ Author: Battery Data Standard contributors
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/shiyunliu-battery/battery-data-standard
8
+ Project-URL: Issues, https://github.com/shiyunliu-battery/battery-data-standard/issues
9
+ Project-URL: Changelog, https://github.com/shiyunliu-battery/battery-data-standard/blob/main/CHANGELOG.md
10
+ Project-URL: Documentation, https://github.com/shiyunliu-battery/battery-data-standard#readme
11
+ Keywords: battery,cycler,BDF,data-conversion,neware,arbin
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: >=3.12
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: polars>=0.20
24
+ Requires-Dist: pandas>=2.0
25
+ Requires-Dist: openpyxl>=3.1
26
+ Requires-Dist: xlrd>=2.0
27
+ Provides-Extra: yaml
28
+ Requires-Dist: PyYAML>=6.0; extra == "yaml"
29
+ Provides-Extra: matlab
30
+ Requires-Dist: scipy>=1.10; extra == "matlab"
31
+ Requires-Dist: h5py>=3.8; extra == "matlab"
32
+ Provides-Extra: test
33
+ Requires-Dist: pytest>=8.0; extra == "test"
34
+ Requires-Dist: pytest-cov>=5.0; extra == "test"
35
+ Requires-Dist: PyYAML>=6.0; extra == "test"
36
+ Requires-Dist: scipy>=1.10; extra == "test"
37
+ Requires-Dist: h5py>=3.8; extra == "test"
38
+ Provides-Extra: dev
39
+ Requires-Dist: build>=1.2; extra == "dev"
40
+ Requires-Dist: twine>=5.0; extra == "dev"
41
+ Requires-Dist: pytest>=8.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
43
+ Requires-Dist: PyYAML>=6.0; extra == "dev"
44
+ Requires-Dist: scipy>=1.10; extra == "dev"
45
+ Requires-Dist: h5py>=3.8; extra == "dev"
46
+ Requires-Dist: ruff>=0.8; extra == "dev"
47
+ Requires-Dist: mypy>=1.0; extra == "dev"
48
+ Requires-Dist: pip-audit>=2.7; extra == "dev"
49
+ Dynamic: license-file
50
+
51
+ # Battery Data Standard
52
+
53
+ `battery-data-standard` is a Python library and command-line tool for converting
54
+ battery cycler exports into a consistent BDF-style tabular representation. It is
55
+ intended for laboratories, battery test teams, and data pipelines that need a
56
+ repeatable path from vendor files to analysis-ready CSV or Parquet outputs.
57
+
58
+ The package is vendor-neutral. It is not certified by any cycler vendor or by
59
+ the Battery Data Alliance. Adapter support describes behavior implemented and
60
+ validated by this project; users should verify representative exports from their
61
+ own cycler software before using the package in automated production workflows.
62
+
63
+ ## Installation
64
+
65
+ Python 3.12 or newer is required.
66
+
67
+ ```bash
68
+ pip install battery-data-standard
69
+ ```
70
+
71
+ Optional extras are available for additional input formats:
72
+
73
+ ```bash
74
+ pip install "battery-data-standard[yaml]"
75
+ pip install "battery-data-standard[matlab]"
76
+ ```
77
+
78
+ The package installs the `bds` command and exposes both the full package name
79
+ and a short import alias:
80
+
81
+ ```python
82
+ import battery_data_standard as bds
83
+ # or
84
+ import bds
85
+ ```
86
+
87
+ ## Scope
88
+
89
+ The package provides:
90
+
91
+ - conversion of supported battery cycler time-series exports to BDF-style CSV or
92
+ Parquet files;
93
+ - conversion of supported EIS tables to a standardized EIS table;
94
+ - cycler detection, data-kind detection, validation, conversion reports, and
95
+ batch manifests;
96
+ - archive-aware batch conversion for directories, zip archives, and tar
97
+ archives;
98
+ - optional profile files for lab-specific column naming.
99
+
100
+ The package does not upload source data to an external service. It reads local
101
+ files and writes local outputs.
102
+
103
+ ## Command-Line Usage
104
+
105
+ Inspect the installed version:
106
+
107
+ ```bash
108
+ bds --version
109
+ ```
110
+
111
+ Detect a cycler export:
112
+
113
+ ```bash
114
+ bds detect raw_export.csv
115
+ ```
116
+
117
+ Convert a time-series file:
118
+
119
+ ```bash
120
+ bds convert raw_export.csv normalized.bdf.csv --cycler auto --report report.json
121
+ ```
122
+
123
+ Validate a converted file:
124
+
125
+ ```bash
126
+ bds validate normalized.bdf.csv
127
+ ```
128
+
129
+ Convert a directory or archive and write a JSONL manifest:
130
+
131
+ ```bash
132
+ bds batch raw_exports normalized_exports --recursive --manifest manifest.jsonl
133
+ bds batch raw_exports.zip normalized_exports --manifest manifest.jsonl
134
+ ```
135
+
136
+ Inspect runtime adapter metadata and the pinned schema:
137
+
138
+ ```bash
139
+ bds formats
140
+ bds inspect-schema
141
+ ```
142
+
143
+ ## Python API
144
+
145
+ Read a supported time-series export into a Polars dataframe:
146
+
147
+ ```python
148
+ import bds
149
+
150
+ df = bds.read("raw_export.csv", cycler="auto")
151
+ ```
152
+
153
+ Use an explicit cycler when the source format is known:
154
+
155
+ ```python
156
+ df = bds.read("arbin_export.csv", cycler="arbin")
157
+ ```
158
+
159
+ Convert a file and keep the conversion report:
160
+
161
+ ```python
162
+ report = bds.convert(
163
+ "raw_export.csv",
164
+ "normalized.bdf.csv",
165
+ cycler="auto",
166
+ report_path="report.json",
167
+ )
168
+ ```
169
+
170
+ Read data and report information in memory:
171
+
172
+ ```python
173
+ df, report = bds.read_with_report("raw_export.csv", cycler="auto", strict=False)
174
+ ```
175
+
176
+ Create step-level or cycle-level summaries from a normalized dataframe:
177
+
178
+ ```python
179
+ steps = bds.summarize_steps(df)
180
+ cycles = bds.summarize_cycles(df)
181
+ ```
182
+
183
+ ## Output Model
184
+
185
+ The converter standardizes supported cycler exports into a time-series table.
186
+ Every successful BDF time-series conversion must contain three required fields:
187
+
188
+ | Field | Unit | Description |
189
+ | --- | --- | --- |
190
+ | `Test Time / s` | s | Elapsed time from the start of the test. |
191
+ | `Voltage / V` | V | Measured cell or channel voltage. |
192
+ | `Current / A` | A | Measured current. |
193
+
194
+ Additional fields, such as cycle number, step number, capacity, energy,
195
+ temperature, power, and internal resistance, are included when they are available
196
+ in the source file.
197
+
198
+ The internal dataframe uses canonical BDF-style labels. Exported CSV and Parquet
199
+ files use easier-to-read labels, for example `Test Time (s)`, `Voltage (V)`, and
200
+ `Current (A)`.
201
+
202
+ ## Supported Format Families
203
+
204
+ The package includes adapters for NEWARE, Arbin, Maccor, BioLogic, Novonix,
205
+ BaSyTec, LANDT, and generic tabular exports. Generic readers support delimited
206
+ text, Excel, MATLAB, and Parquet inputs where the file contains or can be mapped
207
+ to time, voltage, and current columns.
208
+
209
+ BioLogic `.mpt` text exports are supported. Binary BioLogic `.mpr` files are not
210
+ supported; export `.mpt` text files from EC-Lab before conversion.
211
+
212
+ See [docs/supported-formats.md](docs/supported-formats.md) for adapter scope and
213
+ support-tier definitions.
214
+
215
+ ## EIS Data
216
+
217
+ EIS files use a separate standardized table from row-wise BDF time-series data.
218
+ Use EIS-specific commands or API functions for known impedance files:
219
+
220
+ ```bash
221
+ bds detect-kind impedance.csv
222
+ bds convert-eis impedance.csv normalized.eis.csv
223
+ ```
224
+
225
+ ```python
226
+ eis = bds.read_eis("impedance.csv")
227
+ report = bds.convert_eis("impedance.csv", "normalized.eis.csv")
228
+ ```
229
+
230
+ `read()` and `convert()` are time-series entry points. `batch` and
231
+ `batch_convert()` can route mixed directories and archives that contain
232
+ time-series files, EIS files, and unsupported helper files.
233
+
234
+ ## Profiles
235
+
236
+ Profiles map lab-specific column names to canonical column names. JSON profiles
237
+ are supported by the base installation. YAML profiles require the `yaml` extra.
238
+
239
+ ```json
240
+ {
241
+ "columns": {
242
+ "Test Time / s": "time_seconds",
243
+ "Voltage / V": "cell_voltage",
244
+ "Current / A": "cell_current"
245
+ }
246
+ }
247
+ ```
248
+
249
+ Use a profile from the CLI:
250
+
251
+ ```bash
252
+ bds convert lab_export.csv normalized.bdf.csv --cycler generic --profile profile.json
253
+ ```
254
+
255
+ ## Current Sign Convention
256
+
257
+ The default current convention is charge-positive and discharge-negative.
258
+
259
+ Use `--current-sign preserve` to retain the source sign convention, or
260
+ `--current-sign discharge-positive` when a downstream workflow requires
261
+ discharge-positive current. When a source file contains a recognizable
262
+ charge/discharge status column, adapters use it to normalize current sign more
263
+ explicitly.
264
+
265
+ ## Validation and Reports
266
+
267
+ Every conversion returns or writes a machine-readable report with schema version,
268
+ row count, columns, validation status, warnings, provenance, adapter metadata,
269
+ and repair operations.
270
+
271
+ Strict validation is enabled by default. Repairable issues are reported with the
272
+ default `repair_policy="warn"`. Use `repair_policy="repair"` or
273
+ `--repair-policy repair` only when the pipeline explicitly accepts the documented
274
+ normalizations.
275
+
276
+ ## Documentation
277
+
278
+ Public documentation is in the `docs` directory:
279
+
280
+ - [Python API reference](docs/api-reference.md)
281
+ - [Supported formats](docs/supported-formats.md)
282
+ - [Export template](docs/export-template.md)
283
+ - [Schema compatibility](docs/schema-compatibility.md)
284
+
285
+ ## License and Attribution
286
+
287
+ This project is distributed under the MIT License.
288
+
289
+ The package targets a BDF-oriented output schema inspired by the Battery Data
290
+ Format project from the Battery Data Alliance. This project is not an official
291
+ Battery Data Alliance project and is not certified by the Battery Data Alliance.
@@ -0,0 +1,241 @@
1
+ # Battery Data Standard
2
+
3
+ `battery-data-standard` is a Python library and command-line tool for converting
4
+ battery cycler exports into a consistent BDF-style tabular representation. It is
5
+ intended for laboratories, battery test teams, and data pipelines that need a
6
+ repeatable path from vendor files to analysis-ready CSV or Parquet outputs.
7
+
8
+ The package is vendor-neutral. It is not certified by any cycler vendor or by
9
+ the Battery Data Alliance. Adapter support describes behavior implemented and
10
+ validated by this project; users should verify representative exports from their
11
+ own cycler software before using the package in automated production workflows.
12
+
13
+ ## Installation
14
+
15
+ Python 3.12 or newer is required.
16
+
17
+ ```bash
18
+ pip install battery-data-standard
19
+ ```
20
+
21
+ Optional extras are available for additional input formats:
22
+
23
+ ```bash
24
+ pip install "battery-data-standard[yaml]"
25
+ pip install "battery-data-standard[matlab]"
26
+ ```
27
+
28
+ The package installs the `bds` command and exposes both the full package name
29
+ and a short import alias:
30
+
31
+ ```python
32
+ import battery_data_standard as bds
33
+ # or
34
+ import bds
35
+ ```
36
+
37
+ ## Scope
38
+
39
+ The package provides:
40
+
41
+ - conversion of supported battery cycler time-series exports to BDF-style CSV or
42
+ Parquet files;
43
+ - conversion of supported EIS tables to a standardized EIS table;
44
+ - cycler detection, data-kind detection, validation, conversion reports, and
45
+ batch manifests;
46
+ - archive-aware batch conversion for directories, zip archives, and tar
47
+ archives;
48
+ - optional profile files for lab-specific column naming.
49
+
50
+ The package does not upload source data to an external service. It reads local
51
+ files and writes local outputs.
52
+
53
+ ## Command-Line Usage
54
+
55
+ Inspect the installed version:
56
+
57
+ ```bash
58
+ bds --version
59
+ ```
60
+
61
+ Detect a cycler export:
62
+
63
+ ```bash
64
+ bds detect raw_export.csv
65
+ ```
66
+
67
+ Convert a time-series file:
68
+
69
+ ```bash
70
+ bds convert raw_export.csv normalized.bdf.csv --cycler auto --report report.json
71
+ ```
72
+
73
+ Validate a converted file:
74
+
75
+ ```bash
76
+ bds validate normalized.bdf.csv
77
+ ```
78
+
79
+ Convert a directory or archive and write a JSONL manifest:
80
+
81
+ ```bash
82
+ bds batch raw_exports normalized_exports --recursive --manifest manifest.jsonl
83
+ bds batch raw_exports.zip normalized_exports --manifest manifest.jsonl
84
+ ```
85
+
86
+ Inspect runtime adapter metadata and the pinned schema:
87
+
88
+ ```bash
89
+ bds formats
90
+ bds inspect-schema
91
+ ```
92
+
93
+ ## Python API
94
+
95
+ Read a supported time-series export into a Polars dataframe:
96
+
97
+ ```python
98
+ import bds
99
+
100
+ df = bds.read("raw_export.csv", cycler="auto")
101
+ ```
102
+
103
+ Use an explicit cycler when the source format is known:
104
+
105
+ ```python
106
+ df = bds.read("arbin_export.csv", cycler="arbin")
107
+ ```
108
+
109
+ Convert a file and keep the conversion report:
110
+
111
+ ```python
112
+ report = bds.convert(
113
+ "raw_export.csv",
114
+ "normalized.bdf.csv",
115
+ cycler="auto",
116
+ report_path="report.json",
117
+ )
118
+ ```
119
+
120
+ Read data and report information in memory:
121
+
122
+ ```python
123
+ df, report = bds.read_with_report("raw_export.csv", cycler="auto", strict=False)
124
+ ```
125
+
126
+ Create step-level or cycle-level summaries from a normalized dataframe:
127
+
128
+ ```python
129
+ steps = bds.summarize_steps(df)
130
+ cycles = bds.summarize_cycles(df)
131
+ ```
132
+
133
+ ## Output Model
134
+
135
+ The converter standardizes supported cycler exports into a time-series table.
136
+ Every successful BDF time-series conversion must contain three required fields:
137
+
138
+ | Field | Unit | Description |
139
+ | --- | --- | --- |
140
+ | `Test Time / s` | s | Elapsed time from the start of the test. |
141
+ | `Voltage / V` | V | Measured cell or channel voltage. |
142
+ | `Current / A` | A | Measured current. |
143
+
144
+ Additional fields, such as cycle number, step number, capacity, energy,
145
+ temperature, power, and internal resistance, are included when they are available
146
+ in the source file.
147
+
148
+ The internal dataframe uses canonical BDF-style labels. Exported CSV and Parquet
149
+ files use easier-to-read labels, for example `Test Time (s)`, `Voltage (V)`, and
150
+ `Current (A)`.
151
+
152
+ ## Supported Format Families
153
+
154
+ The package includes adapters for NEWARE, Arbin, Maccor, BioLogic, Novonix,
155
+ BaSyTec, LANDT, and generic tabular exports. Generic readers support delimited
156
+ text, Excel, MATLAB, and Parquet inputs where the file contains or can be mapped
157
+ to time, voltage, and current columns.
158
+
159
+ BioLogic `.mpt` text exports are supported. Binary BioLogic `.mpr` files are not
160
+ supported; export `.mpt` text files from EC-Lab before conversion.
161
+
162
+ See [docs/supported-formats.md](docs/supported-formats.md) for adapter scope and
163
+ support-tier definitions.
164
+
165
+ ## EIS Data
166
+
167
+ EIS files use a separate standardized table from row-wise BDF time-series data.
168
+ Use EIS-specific commands or API functions for known impedance files:
169
+
170
+ ```bash
171
+ bds detect-kind impedance.csv
172
+ bds convert-eis impedance.csv normalized.eis.csv
173
+ ```
174
+
175
+ ```python
176
+ eis = bds.read_eis("impedance.csv")
177
+ report = bds.convert_eis("impedance.csv", "normalized.eis.csv")
178
+ ```
179
+
180
+ `read()` and `convert()` are time-series entry points. `batch` and
181
+ `batch_convert()` can route mixed directories and archives that contain
182
+ time-series files, EIS files, and unsupported helper files.
183
+
184
+ ## Profiles
185
+
186
+ Profiles map lab-specific column names to canonical column names. JSON profiles
187
+ are supported by the base installation. YAML profiles require the `yaml` extra.
188
+
189
+ ```json
190
+ {
191
+ "columns": {
192
+ "Test Time / s": "time_seconds",
193
+ "Voltage / V": "cell_voltage",
194
+ "Current / A": "cell_current"
195
+ }
196
+ }
197
+ ```
198
+
199
+ Use a profile from the CLI:
200
+
201
+ ```bash
202
+ bds convert lab_export.csv normalized.bdf.csv --cycler generic --profile profile.json
203
+ ```
204
+
205
+ ## Current Sign Convention
206
+
207
+ The default current convention is charge-positive and discharge-negative.
208
+
209
+ Use `--current-sign preserve` to retain the source sign convention, or
210
+ `--current-sign discharge-positive` when a downstream workflow requires
211
+ discharge-positive current. When a source file contains a recognizable
212
+ charge/discharge status column, adapters use it to normalize current sign more
213
+ explicitly.
214
+
215
+ ## Validation and Reports
216
+
217
+ Every conversion returns or writes a machine-readable report with schema version,
218
+ row count, columns, validation status, warnings, provenance, adapter metadata,
219
+ and repair operations.
220
+
221
+ Strict validation is enabled by default. Repairable issues are reported with the
222
+ default `repair_policy="warn"`. Use `repair_policy="repair"` or
223
+ `--repair-policy repair` only when the pipeline explicitly accepts the documented
224
+ normalizations.
225
+
226
+ ## Documentation
227
+
228
+ Public documentation is in the `docs` directory:
229
+
230
+ - [Python API reference](docs/api-reference.md)
231
+ - [Supported formats](docs/supported-formats.md)
232
+ - [Export template](docs/export-template.md)
233
+ - [Schema compatibility](docs/schema-compatibility.md)
234
+
235
+ ## License and Attribution
236
+
237
+ This project is distributed under the MIT License.
238
+
239
+ The package targets a BDF-oriented output schema inspired by the Battery Data
240
+ Format project from the Battery Data Alliance. This project is not an official
241
+ Battery Data Alliance project and is not certified by the Battery Data Alliance.
@@ -0,0 +1,22 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Security fixes are applied to the latest released version of `battery-data-standard`.
6
+ This project is currently pre-1.0 beta software, so users deploying it in automated
7
+ pipelines should pin versions and test upgrades before rollout.
8
+
9
+ ## Reporting a Vulnerability
10
+
11
+ Please report suspected vulnerabilities privately by opening a GitHub security
12
+ advisory in the project repository. Do not include sensitive data, proprietary
13
+ cycler exports, credentials, or personally identifiable information in public
14
+ issues.
15
+
16
+ Include:
17
+
18
+ - affected package version;
19
+ - Python version and operating system;
20
+ - input format involved;
21
+ - minimal reproduction steps using synthetic or anonymized data;
22
+ - expected and observed impact.