Skip to main content

statescale - Snapshot-driven state upscaling

PyPI - Version License: MIT codecov readthedocs DOI Codestyle black

statescale is a Python package for snapshot-driven upscaling of high-dimensional simulation states along arbitrary parameter or signal paths.

✨ Overview

statescale provides a lightweight API to manage time-dependent point- and cell-data and time-independent field-data across snapshots and to interpolate that data on new signals. The central class is SnapshotModel.

Highlights

  • ✅ Snapshot-driven state upscaling
  • ✅ Upscale simulation data to continuous signals from sparse snapshots
  • ✅ Efficient handling of high-dimensional data
  • ✅ Easy-to-use API

Image

📦 Installation

Install from PyPI:

pip install statescale

Development install (from source):

  1. Clone the repository:
git clone https://github.com/adtzlr/statescale.git
cd statescale
  1. Install in editable mode:
pip install --editable .

Dependencies: numpy and scipy (and pytest for running tests).

🚀 Quickstart

A minimal example. Snapshots must have shapes (n_snapshots, n_dim), point- and cell- data (n_snapshots, ...) and the dimension of the signal must be compatible with snapshots, i.e. (n_steps, n_dim). The second dimension of snapshots and the signal are optional, 1d-arrays are also supported. The model result will be of shape (n_steps, ...).

Array-based input data

import numpy as np
import statescale

snapshots = np.linspace(0, 1, num=3).reshape(-1, 1)  # 3 snapshots, 1 parameter
point_data = {"displacement": np.random.rand(3, 9, 3)}  # 3 snapshots, 9 points, 3 dim
cell_data = {"strain": np.random.rand(3, 4, 6)}  # 3 snapshots, 4 cells, 6 dim
field_data = {"id": 1001}  # time-independent data

model = statescale.SnapshotModel(
    snapshots=snapshots,
    point_data=point_data,
    cell_data=cell_data,
    field_data=field_data,
    # kernel="surrogate",  # use a POD "surrogate" model or simple "griddata"
    # modes=(2, 10),  # min- and max no. of modes for surrogate model
)

signal = np.linspace(0, 1, num=20).reshape(-1, 1)  # 20 items, 1 parameter

# a `ModelResult` object with `point_data`, `cell_data` and `field_data`.
res = model.evaluate(signal, method="griddata")  # method "griddata" or "rbf"

List-based input data

If the data is list-based, the model can also import lists of dicts, with per-snapshot list items. Model results also support indexing and a conversion to lists of dicts.

import numpy as np
import statescale

point_data = [
    {"displacement": np.random.rand(6, 2)},  # 1. snapshot, 6 points, 2 dim
    {"displacement": np.random.rand(6, 2)},  # 2. snapshot, 6 points, 2 dim
    {"displacement": np.random.rand(6, 2)},  # 3. snapshot, 6 points, 2 dim
]
cell_data = [
    {"strain": np.random.rand(4, 2, 2)},  # 1. snapshot, 4 cells, (2, 2) dim
    {"strain": np.random.rand(4, 2, 2)},  # 2. snapshot, 4 cells, (2, 2) dim
    {"strain": np.random.rand(4, 2, 2)},  # 3. snapshot, 4 cells, (2, 2) dim
]

model = statescale.SnapshotModel(
    snapshots=snapshots,
    point_data=point_data,
    cell_data=cell_data,
    field_data=field_data,
)

# `point_data`, `cell_data` and `field_data` for step 5 of the signal.
res_5 = model.evaluate(signal)[5]

Any NumPy-function may be applied to the model result data on all time-dependent arrays. E.g., the mean over all cells (here, the first axis) of the cell-data is evaluated by:

res_5_mean = res_5.apply(np.mean, on_point_data=False, on_cell_data=True)(axis=0)

More details can be found in the documentation.

🛠️ Tests

The tests are located in tests. Run them locally with:

tox

➕ Contributing

Bug reports and pull requests are welcome. Please open an issue or PR in the repository. The package is in early development, expect breaking API changes until version 1.0.0.

📄 Changelog

All notable changes to this project will be documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

🔓 License

See the LICENSE file.

Metadata

Release files for statescale 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for statescale 0.3.0
File Size Uploaded
statescale-0.3.0.tar.gz 15.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for statescale 0.3.0
File Interpreter ABI Platform
statescale-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 29.9 kB

Release files / statescale-0.3.0.tar.gz

Download URL statescale-0.3.0.tar.gz
Size 15.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c3d1f6f49ae0d28550f0355ae58020ff60dfd267f16b33ed39917747683ebd90
BLAKE2b-256 checksum
How to use checksums
c05906e1fe09d56f271f83ef99578a5a1d35b3c39fbbd40cf77710c599164508
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / statescale-0.3.0-py3-none-any.whl

Download URL statescale-0.3.0-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
280554c8cd1b2d9c092b61293e481fb8b26ecda52474950dd539692272281493
BLAKE2b-256 checksum
How to use checksums
b088efff68d6c71a0423fb786ce295b65e3f31986563f7453f7bf5a120464f2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page