Skip to main content

Fast Rust/PyO3 parser for ZS2 files with Parquet export

Project description

zs2fast

A fast Python extension for converting Zwick ZS2 test machine files to Parquet format, written in Rust/PyO3.

Features

  • Fast gzip decompression and binary parsing of .zs2 files
  • Extracts channel time-series data with automatic unit resolution
  • Extracts evaluated parameters and test results with units
  • Converts to Parquet format using Apache Arrow
  • Built with PyO3 for seamless Python integration
  • Supports Python 3.9–3.12 on Linux, macOS, and Windows

Installation

From PyPI

pip install zs2fast

From Source

Requires Rust and Python 3.9+.

# Install maturin
pip install maturin

# Clone and build
git clone https://github.com/weltidom/zs2fast.git
cd zs2fast
maturin develop --release

Usage

import zs2fast
import polars as pl

# Convert a .zs2 file to raw long-format Parquet
# Useful for exploring binary structure and raw values
zs2fast.zs2_to_parquet("input.zs2", "output.parquet", include_u32=False)
# columns: series, subtype, index, value

# Export channel time-series with semantic names and units
zs2fast.zs2_channels_to_parquet("input.zs2", "channels.parquet")
# columns: sample_idx, channel_idx, channel_name, unit, timepoint, value, data_type
channels = pl.read_parquet("channels.parquet")
print(channels.filter(pl.col('unit').is_not_null()).head())

# Export calculated test results (Bruchbild, elongation, max force, etc.)
# Units are resolved from EinheitName → QS_ValSetting blob → UnitTables
zs2fast.zs2_export_enriched_params_to_parquet("input.zs2", "evaluated_params.parquet")
# columns: sample_idx, param_id, short_name, param_name, unit, value, value_text
params = pl.read_parquet("evaluated_params.parquet")
print(params.filter(pl.col('value').is_not_null()).head())

# Extract per-sample test settings and parameters (not calculated results)
zs2fast.zs2_export_sample_results_to_parquet("input.zs2", "sample_params.parquet")
# columns: sample_id, result_id, result_name, unit, value_text, value
sample_params = pl.read_parquet("sample_params.parquet")
print(sample_params.head())

Which Parameter Export Should I Use?

Both APIs read the per-sample ParameterListe, but they optimize for different goals.

Function Primary goal Output columns Notes
zs2_export_enriched_params_to_parquet Build a normalized parameter table with strong metadata enrichment sample_idx, param_id, short_name, param_name, unit, value, value_text Best for analysis tables where stable names/units matter most
zs2_export_sample_results_to_parquet Preserve per-sample result rows as stored/evaluated in ParameterListe sample_id, result_id, result_name, unit, value_text, value Includes branch-aware parsing to avoid nested/outer path collisions

Practical Rule

  • Use zs2_export_enriched_params_to_parquet when you want a canonical analysis-ready parameter table.
  • Use zs2_export_sample_results_to_parquet when you want the closest representation of per-sample evaluated result entries.

Naming and Deprecation

Preferred names:

  • zs2_export_enriched_params_to_parquet
  • zs2_export_sample_results_to_parquet

Legacy names remain supported but now emit runtime DeprecationWarning:

  • zs2_evaluated_params_to_parquet
  • zs2_parameterliste_results_to_parquet

Use the new names in notebooks and scripts going forward.

Unit Resolution

The parser automatically resolves measurement units using a 3-tier strategy:

  1. Direct unit name (EinheitName field) — Direct unit symbol (mm, N, MPa, etc.)
  2. Unit table key (from QS_ValSetting binary blob) — References /UnitTables section (UT_Length → mm, UT_Force → N, etc.)
  3. Fallback inference — Attempts to infer units from table key name

Channels typically use tier 1–2, while evaluated parameters primarily use tiers 2–3. This ensures maximum unit coverage across different .zs2 file structures.

Development

Build

maturin build --release

Note: for this PyO3 extension module on macOS, prefer maturin build/maturin develop. Running plain cargo build --release can fail with unresolved Python symbols (_Py*, __Py_*) during linking.

Lint

cargo fmt
cargo clippy

Test

cargo test

License

See LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zs2fast-0.6.0.tar.gz (30.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zs2fast-0.6.0-cp39-abi3-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9+Windows x86-64

zs2fast-0.6.0-cp39-abi3-manylinux_2_34_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.34+ x86-64

zs2fast-0.6.0-cp39-abi3-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file zs2fast-0.6.0.tar.gz.

File metadata

  • Download URL: zs2fast-0.6.0.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zs2fast-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3ff18b83b81f97005c9586e10b1d0ebc4052121e99231eb0fa05db1850cfd2e4
MD5 f9508ab8ec980097578155f4ec6abec1
BLAKE2b-256 dacdeba7b58bb01677e81ba3eb6e6e121621ab4eba13fee7f80808e02876610c

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.0.tar.gz:

Publisher: publish.yml on weltidom/zs2fast

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zs2fast-0.6.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: zs2fast-0.6.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zs2fast-0.6.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9a01dea11508b10629c9f3bd65e5a737cb37b7c40b1d1c13084c99e82dc0d8fc
MD5 188b3c288cc5b1939738bb49005c0540
BLAKE2b-256 f4f0be17e96db1df66bf87cc183ef3fd62f2cf25f49a7392e3419f1e7dc78bfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.0-cp39-abi3-win_amd64.whl:

Publisher: publish.yml on weltidom/zs2fast

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zs2fast-0.6.0-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for zs2fast-0.6.0-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 540b6a896c60271d098af06eaa4a6a8435be202a2b84e906b4a20064754ecb86
MD5 57dbec03d7206fb8234e9241c7b40723
BLAKE2b-256 036c2b9c824690a2a9f77a5a4e96c00e742f0612316b652241dcf91ed9335697

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.0-cp39-abi3-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on weltidom/zs2fast

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zs2fast-0.6.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zs2fast-0.6.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c332beec1472d96c5b3176f70ca32e9b44a90e702e2dba7aa4f88eafc497b029
MD5 498da080c83d085ac9068164eae988f6
BLAKE2b-256 81bf844aee47547de2afd37bb8f0747968dac07a774d0fb856bfd3fc368c6995

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on weltidom/zs2fast

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page