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.1.tar.gz (29.8 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.1-cp39-abi3-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9+Windows x86-64

zs2fast-0.6.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: zs2fast-0.6.1.tar.gz
  • Upload date:
  • Size: 29.8 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.1.tar.gz
Algorithm Hash digest
SHA256 9a5979d4b0554453bf52b96ac59896e9a7abc6a866b974a8fd2b0ad7a973b234
MD5 82fccef9d65c181788507a4b246bb16d
BLAKE2b-256 6b2d493d4c130d06a1e9394473da410e79354ec2b1dcc2343cfd815e7c39e6ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.1.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.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: zs2fast-0.6.1-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.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7eb4e8581c70d5afb63355e39be8bb1e12291266347427816ab06d0b09c15f70
MD5 cd8dd2265fb3125af6f18a8c15fd5ea4
BLAKE2b-256 555f2bab717363fe5bfeb239648278fc40fc3c119a6b55895145beb5db6e6ee6

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.1-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.1-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for zs2fast-0.6.1-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 842c21c72c50c8ad857343397c8d0e61d408808f22143b2761ac80e937d7a5a0
MD5 8a5fc93a8d9a0dcd4a57cabfed331d9f
BLAKE2b-256 adb392c5f55f5c0cb44f29ebea3ddedddcd417c81023a213580b4dd9c6f1334b

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.1-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.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zs2fast-0.6.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7e672a7d9e1be068128f9893b6978fd69a6339e08377282c12d16301d2e78df
MD5 dee4a410f51071a848a0b1c4da9b846d
BLAKE2b-256 d7fde3ccb03c031d18a6ef0023062178ab24aaef1e80e7071979e6a4bc937159

See more details on using hashes here.

Provenance

The following attestation bundles were made for zs2fast-0.6.1-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