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

Uploaded CPython 3.9+Windows x86-64

zs2fast-0.6.2-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.2-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.2.tar.gz.

File metadata

  • Download URL: zs2fast-0.6.2.tar.gz
  • Upload date:
  • Size: 29.7 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.2.tar.gz
Algorithm Hash digest
SHA256 85c2527468296a7011f6a622701e3233e7e400839fe17d0af34850a6fa8cc29f
MD5 6f2358316ca398f3326ad3e1bd7ccab4
BLAKE2b-256 7b4048127a1fa71fe22e2bdd5dd806cdf48b6d668b7616a890501bdedc04a02f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: zs2fast-0.6.2-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.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 71afd2993a6f8ff486a459df608fea898c84b78b1382282f17a666e552238a3f
MD5 61e3112e69724a047244c6d6e0f71dd7
BLAKE2b-256 7eb5caeef1b4eb56ccb74b3d7ed90163e08ca6424d9c5fbff166dc8a13acdabf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for zs2fast-0.6.2-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f612753d077cc6954b79ccbb554bc473d6cb5de40a0de4d0e016f41db84f4387
MD5 3e03ea17c9e2b60ed288f18811daee78
BLAKE2b-256 e1766db2b3369c914bc803cf763b0ebc9718cddf7a0b7701022c255cd55544e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for zs2fast-0.6.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d674ce37f49dc535ddd57e4891dc80d47c207001c937f397563f297aa871e634
MD5 7b8f990af2b4e5c20cb8afe27c9be32a
BLAKE2b-256 9a7c8d9eb2770fdd72914923ec9a648a49dec8c00174d7b0559dc67f12e9e17e

See more details on using hashes here.

Provenance

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