Skip to main content

pyQES

PyPI version Python versions License: GPL v3 Platforms

Version: 2.4.0 · Python: ≥ 3.10 · License: GPL-3.0-only

Python bindings for the Quick Environmental Simulation (QES) C++ suite — QES-Winds, QES-Plume, and QES-Fire.

The C++ core lives in the qes-core git submodule (fork of UtahEFD/QES-Public, branch develop_pyqes). This repository ships the pybind11 wrappers, the pyQES package, examples, and GitHub Actions for wheels / PyPI.

GPU: NVIDIA GPU with Compute Capability 7.0+ (CUDA wheel on Linux). CPU builds work without CUDA.


Table of contents


Features

  • Run QES-Winds from Python (config / XML / JSON), with optional DEM / buildings preprocessing and vegetation (Homogeneous / IsolatedTree / tree shapefile)
  • Export wind magnitude to georeferenced GeoTIFF (pywinds.to_tif)
  • Export u/v arrow seeds as GeoJSON for MapLibre (pywinds.to_streamlines)
  • Export RK4 streamlines as GeoJSON LineStrings for MapLibre (pywinds.to_flowlines)
  • Run QES-Plume on winds + turbulence NetCDF fields
  • Run coupled QES-Fire (optional smoke plume)
  • Pydantic v2 config models, XML/JSON I/O, geospatial helpers
  • Prebuilt CPU wheels for Linux, macOS (arm64), and Windows; optional Linux CUDA wheel

Compatibility

Package version 2.4.0
Python 3.10 · 3.11 · 3.12 · 3.13
OS (CPU wheels) Linux x86_64 (manylinux_2_28) · macOS arm64 (deployment target 14.0+) · Windows AMD64
GPU wheel Linux CUDA (cp312), NVIDIA CC ≥ 7.0
Build system scikit-build-core ≥ 1.0 · CMake ≥ 3.18 · C++17 · pybind11 ≥ 2.12

Runtime dependencies

Extra Packages Role
(core) pydantic≥2, numpy Config models & arrays
geo rasterio, pyproj, geopandas DEM / buildings preprocessing, GeoTIFF & GeoJSON export
io netCDF4 NetCDF helpers (incl. windsOut.nc → GeoTIFF / GeoJSON)

Native libraries (from-source builds)

Boost (program-options, date-time, property-tree, optional), NetCDF-C++, GDAL — install via system packages or the included vcpkg manifest (vcpkg.json).


Installation

From PyPI

pip install pyqes

# optional extras
pip install "pyqes[geo]"      # geospatial preprocessing / GeoTIFF / GeoJSON
pip install "pyqes[io]"       # NetCDF helpers
pip install "pyqes[geo,io]"   # both (needed for to_tif / to_streamlines / to_flowlines)
# with uv
uv add pyqes
uv add "pyqes[geo,io]"

Verify:

import pyQES
print(pyQES.__version__)  # e.g. 2.4.0

From source

git clone --recursive https://github.com/rupeelab17/pyQES.git
cd pyQES

Native deps (Boost, NetCDF-C++, GDAL) — pick one:

# macOS (Homebrew)
brew install boost netcdf-cxx gdal

# Linux (Ubuntu / Debian)
sudo apt install libboost-all-dev libnetcdf-dev libnetcdf-c++4-dev \
  libnetcdf-cxx-legacy-dev libgdal-dev netcdf-bin cmake

# Debian Trixie (e.g. python:3.13-slim-trixie): libnetcdf-cxx-legacy-dev
# is not packaged — use only libnetcdf-dev and libnetcdf-c++4-dev:
# sudo apt install libboost-all-dev libnetcdf-dev libnetcdf-c++4-dev \
#   libgdal-dev netcdf-bin cmake

# Windows (vcpkg — recommended; needs Visual Studio / MSVC)
git clone https://github.com/microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
$env:VCPKG_ROOT = (Resolve-Path .\vcpkg).Path
# CMAKE_ARGS is picked up by scikit-build-core / uv sync
$env:CMAKE_ARGS = "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"

Alternatively on any OS, use the repo vcpkg.json manifest (same toolchain as the CI wheels).

# Editable install + extras ([uv](https://docs.astral.sh/uv/))
uv sync --extra geo --extra io

Always clone or pull with submodules:

git pull --recurse-submodules
# or
git submodule update --init --recursive

Build from source

Requirements beyond Python:

  • C++17 compiler
  • CMake ≥ 3.18
  • Git with submodule support
  • Native libs: Boost, NetCDF-C++, GDAL (or vcpkg via the repo manifest)
# after clone --recursive
uv sync --extra geo --extra io
# or
pip install -e ".[geo,io]"

Wheels are built with cibuildwheel (see Continuous integration).


Quick start

From a QES XML file

from pyQES import pywinds

result = pywinds.run(
    xml="examples/umep_workflow/qes/umep_larochelle.xml",
    dem="examples/umep_workflow/DEM_clip.tif",
    buildings_src="examples/umep_workflow/buildings.shp",
    buildings_mask="examples/umep_workflow/mask.shp",
    solver="cpu",
    work_dir="/tmp/qes_out",
)
print(result.winds_out)

Sensor paths referenced in the XML (e.g. sensor_umep.xml) are resolved relative to the XML directory. Set auto_preprocess=False to use the file as-is without DEM / buildings preprocessing.

From a Python config

from pyQES import pywinds
from pyQES.util.config import (
    WindsParameters,
    SensorParameters,
    TimeSeries,
    Homogeneous,
    IsolatedTree,
    VegetationParameters,
)

params = WindsParameters()
params.simulation_parameters.dem = "path/to/DEM.tif"
params.simulation_parameters.cell_size = (2.0, 2.0, 0.5)
params.simulation_parameters.halo_x = 40.0
params.simulation_parameters.halo_y = 40.0
params.simulation_parameters.domain_rotation = 0.0  # must be 0
params.buildings_params.shp_file = "path/to/buildings.shp"

# Optional vegetation — Homogeneous block (Cionco; rectangle or xVertex/yVertex)
params.vegetation_params = VegetationParameters(
    homogeneous=[
        Homogeneous(
            attenuation_coefficient=1.0,
            height=10.0,
            base_height=0.0,
            x_start=80.0,
            y_start=60.0,
            length=40.0,
            width=80.0,
            canopy_rotation=0.0,
        )
    ]
)
# Or IsolatedTree blocks (QES domain coords, metres):
# params.vegetation_params = VegetationParameters(
#     isolated_trees=[
#         IsolatedTree(
#             attenuation_coefficient=3.0,
#             height=15.0,
#             base_height=0.0,
#             z_max_lai=0.7,
#             x_center=20.0,
#             y_center=100.0,
#             width=10.0,
#         )
#     ]
# )
# Or trees from a point shapefile (fields H, D, LAI):
# params.vegetation_params = VegetationParameters(
#     shp_file="path/to/trees.shp", shp_tree_layer="trees"
# )

sensor = SensorParameters(
    time_series=[TimeSeries(speed=3.0, direction=270.0, height=10.0, site_z0=0.24)]
)
result = pywinds.run(config=params, sensor=sensor, solver="cpu", work_dir="/tmp/qes_out")
print(result.winds_out)

# optional GeoTIFF of |V| at 1.5 m AGL (needs pyqes[geo,io])
tif = pywinds.to_tif(z=1.5)
print(tif)

# optional GeoJSON arrows (bearing + speed) for MapLibre icon-rotate
arrows = pywinds.to_streamlines(z=1.5, stride=4)
print(arrows)

# optional RK4 streamlines (LineStrings) for MapLibre symbol-placement:line
flowlines = pywinds.to_flowlines(z=1.5, seed_stride=8)
print(flowlines)

pywinds.run accepts exactly one of config, xml, or json (or none, with keyword overrides). Solvers: "cpu" / "gpu" (or the QES integer code).


Package layout

Module Role
pyQES.pywinds QES-Winds — run(...), to_tif(...), to_streamlines(...), to_flowlines(...)
pyQES.pyplume QES-Plume — run(xml=..., winds_file=..., turb_file=...)
pyQES.pyfire Coupled QES-Fire — run(...) (+ optional plume_xml)
pyQES.util Pydantic config, XML/JSON I/O, paths, geo helpers, NetCDF→GeoTIFF / GeoJSON
pyQES._winds / _plume / _fire / _util Compiled pybind11 extensions

Config models live in pyQES.util.config: WindsParameters, SimulationParameters, SensorParameters, TimeSeries, VegetationParameters, Homogeneous, IsolatedTree, etc.


Examples

Sample La Rochelle / UMEP inputs: examples/umep_workflow/ (DEM, buildings, mask, QES XML).

uv run python examples/run_winds_demo.py
uv run python examples/run_winds_demo.py --speed 5 --direction 180
uv run python examples/run_vegetation_demo.py
uv run python examples/run_vegetation_demo.py --canopy isolated
uv run python examples/umep_workflow/run_qeswinds.py
uv run python examples/umep_workflow/run_qeswinds_args.py --speed 5 --direction 180

Vegetation demo (examples/run_vegetation_demo.py): flat domain with one Homogeneous rectangle (default), --canopy isolated for IsolatedTree, or --trees-shp for a point shapefile (H, D, LAI).

From a WGS84 bbox (pymdurs / IGN)

Script: examples/pymdurs_workflow/run_from_bbox.py.

Downloads DEM, buildings, LiDAR trees, and mask via pymdurs (France + network), then runs QES-Winds. Tree tops (H, D, LAI) are buffered to crown polygons for QES. Default cell size is 2.5 2.5 1 (finer grids on large bboxes may segfault). Optional flags: --to-tif (|V| GeoTIFF), --to-streamlines (arrow Points), --to-flowlines (RK4 LineStrings), --no-trees (skip vegetation), --lai / --trees-resolution / --min-tree-height.

uv sync --extra geo --extra io
uv pip install pymdurs
uv run python examples/pymdurs_workflow/run_from_bbox.py --to-tif
uv run python examples/pymdurs_workflow/run_from_bbox.py \
  --bbox=-1.152704,46.181627,-1.139893,46.18699 --to-tif --to-streamlines --to-flowlines
# reuse previous IGN / LiDAR downloads in examples/pymdurs_workflow/output/
uv run python examples/pymdurs_workflow/run_from_bbox.py --skip-fetch --to-tif --to-flowlines
# buildings + DEM only (no LiDAR trees)
uv run python examples/pymdurs_workflow/run_from_bbox.py --no-trees --to-tif

Development

uv sync --extra geo --extra io

# lint / typecheck
uv run ruff check pyQES tests examples
uv run mypy

# fast unit tests (no full solver run)
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run pytest tests -m "not slow"

# end-to-end winds run (compiled extension + example data)
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run pytest tests -m slow

Dev tools (via [dependency-groups] dev): pytest, pytest-cov, ruff, mypy, plus the geo / io extras.


Continuous integration

Workflow Role
ci.yml Ruff, mypy, pure-Python pytest
wheels.yml CPU wheels — Linux / macOS / Windows · cp310–cp313 · sdist
cuda-build.yml Linux CUDA wheel (cp312)
publish.yml Publish to PyPI on v* tags

Updating the QES core

git submodule update --remote qes-core
git add qes-core
git commit -m "Bump qes-core"

Links

Homepage / source https://github.com/rupeelab17/pyQES
PyPI https://pypi.org/project/pyqes/
QES documentation https://qes-documentation.readthedocs.io/en/latest
QES core (submodule) https://github.com/rupeelab17/QES-Public
Upstream QES https://github.com/UtahEFD/QES-Public

License

GPL-3.0-only — see LICENSE.

QES core: see qes-core/LICENSE.

Download files

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

Source Distribution

pyqes-2.5.1.tar.gz (462.2 kB view details)

Uploaded Source

Built Distributions

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

pyqes-2.5.1-cp313-cp313-win_amd64.whl (20.7 MB view details)

Uploaded CPython 3.13Windows x86-64

pyqes-2.5.1-cp313-cp313-manylinux_2_28_x86_64.whl (77.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

pyqes-2.5.1-cp313-cp313-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pyqes-2.5.1-cp312-cp312-win_amd64.whl (20.7 MB view details)

Uploaded CPython 3.12Windows x86-64

pyqes-2.5.1-cp312-cp312-manylinux_2_28_x86_64.whl (77.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

pyqes-2.5.1-cp312-cp312-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pyqes-2.5.1-cp311-cp311-win_amd64.whl (20.7 MB view details)

Uploaded CPython 3.11Windows x86-64

pyqes-2.5.1-cp311-cp311-manylinux_2_28_x86_64.whl (77.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

pyqes-2.5.1-cp311-cp311-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

pyqes-2.5.1-cp310-cp310-win_amd64.whl (20.7 MB view details)

Uploaded CPython 3.10Windows x86-64

pyqes-2.5.1-cp310-cp310-manylinux_2_28_x86_64.whl (77.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

pyqes-2.5.1-cp310-cp310-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file pyqes-2.5.1.tar.gz.

File metadata

  • Download URL: pyqes-2.5.1.tar.gz
  • Upload date:
  • Size: 462.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyqes-2.5.1.tar.gz
Algorithm Hash digest
SHA256 f869e553828afdc5d0a2a124ad5ce79538d41276b610f1f37604f3cda527a72c
MD5 f1fd4d5887b1192c637bcc419ee28c53
BLAKE2b-256 6d80c610a37f82299d01ebd8c9720481f82b6a1e3efac782921f02175c598c35

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1.tar.gz:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 20.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyqes-2.5.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c09d30c7d78a3ab797d27b3be82afb3d2021323f6ba8019e35823997101ab49a
MD5 28b3a3977833a2c3b2794cc2d9b89935
BLAKE2b-256 02b4ebc6b98fa4009b4768d9295a8323e752dafe5966c5e9ffbb37df96dd1d62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9de5be4b351b90fa705cbe5d7ce83f89a1b260259bbc38d5a4732246155e30cc
MD5 7d9b5e9f0fc48dc01015da96f30809b5
BLAKE2b-256 0dac619ccbe1148aa6e435fcee2340f83a252c535bb46cda1a370dbd99e80f5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2fd11e3f8a32d13d057798be9e1961ac71ab892ada6e2947da9461ea386ec4b0
MD5 b0bec13d7e255777fa7f600310b391cf
BLAKE2b-256 e25b442cb435663487243548a053c94827549ccddb55fd8668c527e77548d105

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 20.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyqes-2.5.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2c0241781bce18635f7cd0c73fb6defd09dba20ed8c2bda1ebe0498e5d7f5f09
MD5 4f898982b73454d65230f061e550e727
BLAKE2b-256 86789002c8b5918b52913eb8fc04c60cdcce1ce8523b6d145e58a0ea19297ff1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2af3203c8e289ac445b9d5914a61eba725709be3d686d72f51dee6987bdcf09b
MD5 4c4545bcd1aa46960e5a062e8eff1a98
BLAKE2b-256 8402cdbd23cc04507f3e60eb058b0c58a2c67e9397d3a451c15eac9ba6100288

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 97375905aaf32170b80b6675b998a93fc64c94dd362fe697f576bf90056abb90
MD5 aed85cad8f3863405240586307dec59d
BLAKE2b-256 c30b8a56dbf4835c6b31aa1412e6a27cdd308446fdd8320ae8e27fd29db86f6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 20.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyqes-2.5.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 32394f950cebc00d7b9a0183dc6b408b46c89c7e141dae8abd6ed526e224b06c
MD5 e7f067ff09ed7e7baa5c2f3425ed7f59
BLAKE2b-256 08c97e7cfcf82796efde6901247bb919d3b2c9538f3308e910fb85aa54adad87

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e3e7e6fa7a3f1d9863c7ca1cbcd0d493615062181d507d69ab40eb5064ea6c76
MD5 60a248ed767e860dfaf61eda89676d16
BLAKE2b-256 5d6ac3d534e2d541b33af976e251733aa751ff96bce6b9cfdc5649e68b2f375d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d4716c222a1a42a229de3a0f4ae76736fcaee2fe7e548b82d7cf715bfe363e7c
MD5 24eb51728daf6dee7f309135117fc799
BLAKE2b-256 7f3608d4518fec9bd7cf992d58efa76e848f7b4862164d6f41e32ce68e33b751

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 20.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyqes-2.5.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ef33ba2d5396d41e6396547777933c28440c383fdd5c35d4deb496605a8a50cf
MD5 e8a9fcc2cdfea8696678eeaaa7633e2e
BLAKE2b-256 d2623c4e1845213a7fccba7baaaf97fec73ac36c66ff747f7fe01201c393032a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a446c5ae8fa90fc46dddec99cc6e82d921aad2855d1f2ea5448e0f5e43ad60c1
MD5 28bef0900dd871b90448998f56ddd0f4
BLAKE2b-256 2a254f3bf2c9feea3524341b37bc2aa0d73b0e57318ed36cc2ce4424ccc65c14

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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

File details

Details for the file pyqes-2.5.1-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7eea3a2e4886e62b0ab65bf377f932e41dbfd3d8889ca753448f82e2d89b217f
MD5 ff409e276944235613b5d172268e3a91
BLAKE2b-256 4e6c6d8b89e6c361ebe7feb964606dbd0a7d66ed334b7f7db24d38c623520b69

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.1-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: publish.yml on rupeelab17/pyQES

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