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.0.tar.gz (461.7 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.0-cp313-cp313-win_amd64.whl (20.7 MB view details)

Uploaded CPython 3.13Windows x86-64

pyqes-2.5.0-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.0-cp313-cp313-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

pyqes-2.5.0-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.0-cp312-cp312-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pyqes-2.5.0-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.0-cp311-cp311-macosx_14_0_arm64.whl (60.5 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

pyqes-2.5.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: pyqes-2.5.0.tar.gz
  • Upload date:
  • Size: 461.7 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.0.tar.gz
Algorithm Hash digest
SHA256 4dac3a54dd06308ef110cf84e3dc45470d1d070334ce9a87ecd5266793e6d200
MD5 3f30044e993d038e312b6384e3352f03
BLAKE2b-256 0ac52c4931a67fef5d0bcc657ef0338c1c2b1e43cc2bba1fb48cf52480178459

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0.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.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.0-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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 784fbb2590ce05bd9e3ad9b282237e71826769527c412d03a4e0193c44427c3d
MD5 afdf709f4bd0b8e7eb0992ab628b3270
BLAKE2b-256 44359913d8341daecb630bbcc4b013d0e860b8dc2c02fd5ec7beb651f8c5ea32

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cdea0cf04eab65009af759b07fdd22291098a084d0e85ec964e79083b668a4a3
MD5 516400a6026b107eb4285e271fcbe48c
BLAKE2b-256 ef23521710411a684256d3daefee7bdedb3731c4f67ae9fbd5a272df7d97a5fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b8b468973216de151bbef0ddebd1fa8bdac53136874d217d04c3f3759227ce29
MD5 080e445047d91ca8f25b0c226b75a249
BLAKE2b-256 25fdaff001d532431a29c438a291a62d000d776c8008f5dbea8a725bfe6e5725

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.0-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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3075b1d91a03f622cfdbf546048cb7f4f9ef8dffd85d21b2373eac7d53440b1f
MD5 ea7199628d476a621abd3f03081a5b71
BLAKE2b-256 d4b6f84a028541cf91224b6a89f01db5dd16a6fd09ef9ae82e20a1f76d9672d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0bbd54d3b9bbf917fe4d44a762ba42e3834948cbfebc4438a6efd2bc0e29150
MD5 8500320f09a1a3b1cccb354fb29dd665
BLAKE2b-256 efbd911c1e93a43e2b0d3581da0f17e92be60008b72b081016de8efe55c959ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7f7dae41c5befb9aa9f24d7f6460b2d18599b2bcd573f15a950dbc6bf676e1d0
MD5 6266eeeb31aab8ddbfd755209f65fe61
BLAKE2b-256 15f4e04335a2a28f47d98c415031b7af749698ac9529825fa8bc25d8a1aacaa9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.0-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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3310aa16ca4e964f61d948419b899e9be89614bf42e2225a59db3d75e5564a29
MD5 f26e2e03da9f2236227b001d0f3626c5
BLAKE2b-256 483371187a582b883b54a820cb60463891193eac55e27f61208f085303f96017

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c9e78c10567e7c6da794ebe1a43c41d8238fcdcc9dc570df82dd7132113cc2bd
MD5 09209e38aeae818e7c8e591571e07069
BLAKE2b-256 b5d0ec074b9eaa92b00abe464d90b2f7565e34ca8b4e44c79e57977765c85030

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9ab43d83db1bc476c68a7aea08dfdf9ef0c0f5046d676ff2889f912bb3c9cbaf
MD5 44739a63a276b457f8851c9f93873c10
BLAKE2b-256 213a31384c8c0ac4a6c186f9a713c252f1104aaaf66dd9b51efb3926592d3a06

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyqes-2.5.0-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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1daf7b4ff92cbfc29f0122980fe4d9d98a24517ca856c15bdb6774ea006ea924
MD5 a22ecf2de62336d3f61a22a6d35a086c
BLAKE2b-256 de94a3ae3914b666dfbcc8eb9ea71ce435802658b58c1f80135ff82ff49d5e60

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dafddb468ead816fac581f12f7224008533a3bae684a525e66860ddfae953bf2
MD5 7d2c649480fd76aab4794f116c8a5ccb
BLAKE2b-256 93ea564ae4d3c8f959b552a82b5b647f0ed42c3a0bb486efdaa8f6a004986440

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyqes-2.5.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 176eda5f6aee945aaba414dd510a58496e5309e509d255bf063675ed5ee9eff6
MD5 5721bbb828a7aeb3956f62edd427eee9
BLAKE2b-256 72afdf26b6aec1592c7142874cab503c2c829fcc302eb7c1ab908c8ea4d72989

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqes-2.5.0-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