Serafin for Python
Read and write Serafin binary files — the mesh / results format used by the
TELEMAC-MASCARET hydraulic modelling system
(also known as the Selafin format, file extension .slf).
Documentation: https://isl-ingenierie.gitlab.io/modules-python/python-serafin/
serafin provides a typed, dependency-light I/O layer for Serafin files:
- single and double precision floats;
- big- and little-endian byte ordering;
- 2D and 3D meshes, with 2D ⇄ 3D conversion;
- mesh geometry, boundary detection and transformations;
- a catalogue of 2D / 3D variables and derived-variable computation.
The read/write code is adapted from PyTelTools; credits to its authors for documenting the format.
Installation
pip install python-serafin
It is also available on conda from the conda-forge channel:
conda install -c conda-forge python-serafin
The distribution is named python-serafin on both PyPI and conda-forge; the
import name is serafin (a common pattern, like python-dateutil →
import dateutil).
Quickstart
Read a Serafin file
from serafin import SerafinReader
with SerafinReader("results.slf", "en") as f:
f.read_header()
f.get_time()
print(f.header.nb_nodes, "nodes,", f.header.nb_frames, "frames")
print("variables:", f.header.var_ids)
# values of variable "U" at the first time frame -> numpy array (nb_nodes,)
u = f.read_var_in_frame(0, "U")
print(u.shape, u.min(), u.max())
Write a Serafin file
from serafin import SerafinReader, SerafinWriter
with SerafinReader("results.slf", "en") as src:
src.read_header()
src.get_time()
header = src.header
with SerafinWriter("copy.slf", "en", overwrite=True) as dst:
dst.write_header(header)
for time_index, time in enumerate(src.time):
values = src.read_vars_in_frame(time_index)
dst.write_entire_frame(header, time, values)
Requirements
- Python 3.10 or newer
numpy≥ 1.24
Development
git clone https://gitlab.com/isl-ingenierie/modules-python/python-serafin.git
cd python-serafin
python -m venv .venv
. .venv/Scripts/activate # PowerShell: . .venv/Scripts/Activate.ps1
pip install -e ".[dev]"
pre-commit install
pytest
Releasing
See CHANGELOG.md for the version history (format: Keep a
Changelog 1.1.0, versions follow
Semantic Versioning 2.0.0).
The release flow:
- Move entries from
## [Unreleased]to a new## [VERSION] - YYYY-MM-DDsection inCHANGELOG.md. - Commit and tag (
git tag vVERSION && git push origin vVERSION). - GitLab CI uploads to PyPI / TestPyPI via Trusted Publisher (OIDC, no API token stored as a CI variable) and creates a GitLab Release whose body is the matching CHANGELOG section.
The leading v is optional; hatch-vcs strips it when computing the package
version.
| Tag pattern | Target |
|---|---|
0.1.0a1, v0.1.0rc2, 0.1.0.dev3 |
TestPyPI (pypi-test job) |
0.1.0, v1.2.3 |
PyPI prod (pypi job) |
License
This project is released under the GNU General Public License v3.0 or later.
The Serafin I/O code is adapted from PyTelTools, which is itself distributed under the GPL v3 — this package therefore inherits the same license.
Metadata
Release files for python-serafin 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| python_serafin-0.2.2.tar.gz | 1.9 MB | Without provenance | Details for python_serafin-0.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| python_serafin-0.2.2-py3-none-any.whl | Python 3 | none | any | Details for python_serafin-0.2.2-py3-none-any.whl |
Total release size: 1.9 MB
Release files / python_serafin-0.2.2.tar.gz
| Download URL | python_serafin-0.2.2.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bed92a701dd8efde6fe84a7c73d97afc7c8da9635de034ed6cf41b4e3dbcb82e
|
|
BLAKE2b-256 checksum How to use checksums |
dc6faf35caa45cf45e28ba9c88eff5205433dbe654705678dee60da7d34fa853
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / python_serafin-0.2.2-py3-none-any.whl
| Download URL | python_serafin-0.2.2-py3-none-any.whl |
|---|---|
| Size | 49.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
400296391fd3ed1efe43d1d53c5f4b6771a1738c1898937099f724e681dbe504
|
|
BLAKE2b-256 checksum How to use checksums |
f3b68e5a920c323bd82e57eb093cee9bb0f537e7e346bb7ca3c385ba4d8eb7a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Security for python-serafin 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.