CPDataKit
CPDataKit is a schema-first Python toolkit for validating, normalizing, and auditing scientific and engineering data. The project started from crystal-plasticity workflows, which remain its first fully supported vertical.
Alpha software: A passing validation report confirms that the records match the selected schema. Use domain methods to interpret physical results. The bundled data use a fixed seed, and public reference data remain at their upstream source.
When it helps
A hand-off can be as small as a column name. One exporter stores temperature in degrees Celsius,
another expects kelvin. A crystal-plasticity exporter writes sigma_pa, while an analysis expects
stress in MPa. CPDataKit puts those choices in a schema and an explicit mapping file, then keeps
the validation result with the converted data.
Use it before an analysis script, when exchanging files with a colleague, or when you need to explain later why a column was renamed. The package stays at the data boundary and keeps data contracts, provenance, validation, and conversions explicit. Its documented readers and examples cover CPDataKit HDF5, selected DAMASK DADF5 data, and the Surfalex reference workflow.
Supported contracts and formats
The built-in CPDataKit schema v1.0 has three compatibility profiles from the original crystal-plasticity vertical:
curve: ordered macroscopic steps such as time, strain, stress, and load curves.point: material-point, integration-point, element, or sample records.field2d: scalar samples with two-dimensional Cartesian coordinates.
External JSON schemas may use other non-empty profile names while keeping the same explicit field,
dtype, unit, shape, and convention rules. See the complete non-CP
thermal-cycle example.
Inputs are UTF-8 CSV, JSON arrays of records, and CPDataKit HDF5 (.h5/.hdf5). CSV and JSON
take units and semantics from the selected schema. HDF5 stores the units, mapping, validation
summary, source filename and SHA-256, UTC conversion time, Python and CPDataKit versions, and an
operation log. The current HDF5 writer also puts the canonical schema and its SHA-256 digest in
the file. CPDataKit records a supplied schema URI as caller-managed provenance. The read-only DAMASK
DADF5 adapter can inspect or report a selection when the file
has one clear choice. CPDataKit HDF5 uses its own format alongside DAMASK DADF5 and Abaqus ODB.
The v0.6 N-dimensional path adds ScientificDataset, CPDataKit HDF5 2.0, NetCDF, Zarr 3, and
tabular-only Parquet adapters with explicit capability checks.
Schemas declare standard names, aliases, requiredness, dtype, per-record shape, role, unit,
missing-value policy, index constraints, ranges, and scientific conventions. Custom fields
must be declared or use user_. Stress/strain measures, tensor order, orientation representation,
units, and identifier semantics come from the explicit schema or mapping. See
the data format.
Install
Install the current release from PyPI:
python -m pip install cpdatakit
For a pinned GitHub v0.6.0 release wheel, use:
python -m pip install "https://github.com/17636365690/cpdatakit/releases/download/v0.6.0/cpdatakit-0.6.0-py3-none-any.whl"
Then follow the five-minute quickstart to validate, summarize, convert, and plot a deterministic example.
Installing from the source checkout is intended for contributors:
git clone https://github.com/17636365690/cpdatakit.git
cd cpdatakit
python -m venv .venv
Activate on Windows PowerShell:
.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
The v0.6.0 release requires Python 3.12 or later because its xarray and Zarr stack has moved past the v0.5 dependency floor. The released v0.5.x line remains the compatibility path for Python 3.10 and 3.11.
Activate on POSIX shells:
source .venv/bin/activate
python -m pip install -e ".[dev]"
Regenerate the fixed-seed examples at any time:
python examples/generate_sample_data.py --output sample_data
Workflows covered by the repository
The examples and tests cover these paths:
- validate exported curve, point, or two-dimensional field records against an explicit contract.
- normalize exporter-specific column names and units with a reviewable JSON mapping file. An explicit mapping converts each element of a declared shaped field and leaves its dimensions intact.
- preserve validated vectors and tensors in JSON/HDF5 with declared shapes and component order.
- convert records into auditable HDF5 with units, mapping, provenance, and validation metadata.
- inspect files and produce shareable aggregate reports.
- start the local-first workbench with
cpdatakit ui; it keeps uploads and artifacts in an explicit workspace and does not load browser assets from a network. - read/write explicit N-dimensional values through schema 2.0, HDF5 2.0, NetCDF, Zarr 3, and tabular-only Parquet adapters.
- run deterministic synthetic fixtures in notebooks, CI, and documentation examples.
- run the Surfalex HF (AA6016A) Workflow 7A example with explicit tensor mappings, source hashes, and schema provenance. The example downloads third-party raw files on request and records their source hashes.
Useful links
- PyPI package
- v0.6.0 GitHub Release
- v0.5.0 GitHub Release
- Quickstart
- Schema authoring and mapping guide
- Examples
- Public Reference Case #1: Surfalex HF
- Roadmap and Issue tracker
Command line
Run the generic thermal-cycle workflow with an external profile and explicit mapping:
cpdatakit validate examples/thermal-cycle/input/thermal-cycle.csv --schema examples/thermal-cycle/schema/thermal-cycle.json --mapping examples/thermal-cycle/mappings/thermal-cycle.json
cpdatakit convert examples/thermal-cycle/input/thermal-cycle.csv --schema examples/thermal-cycle/schema/thermal-cycle.json --mapping examples/thermal-cycle/mappings/thermal-cycle.json --output thermal-cycle.h5
cpdatakit plot thermal-cycle.h5 --schema examples/thermal-cycle/schema/thermal-cycle.json --kind xy --x time --y temperature --output temperature-vs-time.png
The example README includes summary, inspect, report, and compare as well. Crystal
plasticity remains available through the original built-in profiles and commands below.
Validate and write a JSON report:
cpdatakit validate sample_data/synthetic_curve.csv --schema curve --json-output validation.json
Summarize, convert, and create both image formats:
cpdatakit summary sample_data/synthetic_curve.csv --schema curve --json-output summary.json
cpdatakit convert sample_data/synthetic_curve.csv --schema curve --output curve.h5 --source-description "Synthetic README example"
cpdatakit plot curve.h5 --schema curve --kind stress-strain --output stress-strain.png
cpdatakit plot curve.h5 --schema curve --kind stress-strain --output stress-strain.svg
For an exporter with different names or units, provide an explicit mapping file:
cpdatakit convert raw.csv --schema curve --mapping mapping.json --output curve.h5
See the schema authoring and mapping guide for the JSON format and explicit-convention rules.
Compare two schema contracts:
cpdatakit schema diff old-schema.json new-schema.json --format markdown --output schema-diff.md
The result labels the change as identical, backward-compatible, or breaking. The command is read-only. Data migration and HDF5 rewrites are separate operations.
Start the local workbench (it binds to loopback and opens the default browser):
cpdatakit ui
cpdatakit ui --workspace ./cpdatakit-workspace --no-browser
The UI provides project-local uploads, bounded inspection, validation, conversion, reports,
comparisons, plots, capability discovery, and job polling. --no-browser is useful for headless
or CI smoke checks.
Compare two JSON validation reports and write an offline bundle:
cpdatakit compare left-report.json right-report.json --output comparison-bundle
The bundle contains JSON, Markdown, HTML, and a manifest with member hashes. It covers declared schema, validation, structure, and scalar descriptive aggregates. Raw tensor records and physical equivalence require separate analysis.
When you need a quick look at a file, run:
cpdatakit inspect curve.h5 --format json --output inspect.json
cpdatakit report curve.h5 --schema curve --output report.html
cpdatakit report curve.h5 --schema curve --format markdown --output report.md
inspect accepts an optional schema. It prints the detected format, fields, dtype, shape,
units, missing values, HDF5 chunks, provenance, adapter, and structural risks. report needs a
schema and writes HTML by default. Markdown and JSON are available through --format. The HTML file
contains its own styles, so it opens and prints offline. Reports carry summary
statistics and validation findings. Reports contain aggregate metadata while source records remain
in the input dataset. Pass --force to replace an existing output file.
CLI errors are concise. Put the global --debug option before the
subcommand when an unexpected failure needs more detail. validate, summary, inspect, and
report return 0 when processing succeeds with zero validation errors. They return 1 for
validation errors, or for the inspect command's declared structural and missing-value risks.
Warning-only findings are still reported but do not invalidate the result. Usage, read, schema,
and output failures return 2. A passing report indicates successful completion of the declared
checks. Use domain methods to interpret physical and scientific results alongside the report. Run
cpdatakit --help or
cpdatakit <command> --help for command details.
Python API
from cpdatakit import (
FieldMapping,
build_report,
inspect_dataset,
load_hdf5,
load_dataset,
normalize_dataset,
summarize_dataset,
validate_dataset,
)
from cpdatakit.adapters import DamaskDADF5Adapter
raw = load_dataset("raw.csv")
normalized = normalize_dataset(
raw,
"curve",
[
FieldMapping("increment", "step", "1", "dimensionless"),
FieldMapping("eps", "strain", "1", "dimensionless"),
FieldMapping("sigma_pa", "stress", "Pa", "MPa", "export specification"),
],
)
report = validate_dataset(normalized, "curve")
summary = summarize_dataset(normalized, "curve", validation=report)
print(report.valid, summary["record_count"])
inspection = inspect_dataset("curve.h5", schema="curve")
offline_report = build_report("curve.h5", "curve")
print(inspection["record_count"], offline_report["validation"]["valid"])
dadf5 = DamaskDADF5Adapter(
kind="homogenization", label="Taylor", field="mechanical", datasets=["F", "P"]
).load("result.hdf5")
window = load_hdf5("curve.h5", fields=["step", "stress"], start=10, stop=20)
Mapping conflicts, unknown fields, and incompatible units raise documented subclasses of
CPDataKitError. Normalization returns a copy and preserves unmapped columns unless
drop_unmapped=True.
Example outputs
After running the commands above, stress-strain.png and stress-strain.svg contain a titled,
unit-labeled synthetic curve with a legend. Plotting functions in cpdatakit.plotting return
Matplotlib (Figure, Axes) for further editing and use the non-interactive Agg backend.
Development
pytest --cov=cpdatakit
ruff check .
ruff format --check .
python -m build
Architecture, extension boundaries, and maintainer checks are in the architecture documentation. Contributions follow CONTRIBUTING.md and the Code of Conduct.
When you need a new data contract or input format, open an issue with a small synthetic sample and the field rules it should follow. That gives the next change something concrete to test.
Scope and roadmap
Version 0.6.0 adds the local workbench, shared application services, explicit N-dimensional data and schema/HDF5 2.0 contracts, open-format adapters, and a local SQLite/job boundary while retaining the v0.5 tabular, schema 1.0, HDF5 1.0, and CLI contracts. Native HDF5 inspection uses bounded reads. The bundled DAMASK DADF5 reader covers a documented read-only selection. New adapters use the documented format evidence, license review, and reproducible-fixture process. See the roadmap for the next three versions.
Citation and license
Use CITATION.cff to cite the software. CPDataKit is licensed under Apache-2.0. See LICENSE. Direct runtime dependency licenses and review notes are in NOTICE. Bundled examples use fixed-seed synthetic data, and public reference files remain available from their upstream records.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cpdatakit-0.6.0.tar.gz.
File metadata
- Download URL: cpdatakit-0.6.0.tar.gz
- Upload date:
- Size: 483.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9dfe8f924285b622e624e49b947ba7a02c8d29f99b0f64f1b62a0a8d1e99b99
|
|
| MD5 |
c799ad6bca32ecfb4cb6eec6fd660edf
|
|
| BLAKE2b-256 |
e2dbea5a320c000a9cfb0d103837f4f0e892767efcd24af819089bdc92995b11
|
Provenance
The following attestation bundles were made for cpdatakit-0.6.0.tar.gz:
Publisher:
publish-pypi.yml on 17636365690/cpdatakit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cpdatakit-0.6.0.tar.gz -
Subject digest:
b9dfe8f924285b622e624e49b947ba7a02c8d29f99b0f64f1b62a0a8d1e99b99 - Sigstore transparency entry: 2688026771
- Sigstore integration time:
-
Permalink:
17636365690/cpdatakit@ebea17eeb7d3f32c9fe8f7a8366e99cc99232d73 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/17636365690
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@ebea17eeb7d3f32c9fe8f7a8366e99cc99232d73 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cpdatakit-0.6.0-py3-none-any.whl.
File metadata
- Download URL: cpdatakit-0.6.0-py3-none-any.whl
- Upload date:
- Size: 106.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d909626d8d8df82a87d639c105513d87199c02f43870cb00ec5d3552ab350fb
|
|
| MD5 |
503799c455c407e8e95ef472b7013035
|
|
| BLAKE2b-256 |
1036617dbc223356eb5749628fbaff56faa5f9c0bedef28883b2f36358e148e0
|
Provenance
The following attestation bundles were made for cpdatakit-0.6.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on 17636365690/cpdatakit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cpdatakit-0.6.0-py3-none-any.whl -
Subject digest:
5d909626d8d8df82a87d639c105513d87199c02f43870cb00ec5d3552ab350fb - Sigstore transparency entry: 2688026846
- Sigstore integration time:
-
Permalink:
17636365690/cpdatakit@ebea17eeb7d3f32c9fe8f7a8366e99cc99232d73 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/17636365690
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@ebea17eeb7d3f32c9fe8f7a8366e99cc99232d73 -
Trigger Event:
push
-
Statement type: