Skip to main content

EPA's Environmental Source Apportionment Toolkit python package.

Project description

Environmental Source Apportionment Toolkit (ESAT)

Last Update: 04-16-2025

Table of Contents

Description

The Environmental Source Apportionment Toolkit (ESAT) is an open-source software package that provides API and CLI functionality to create source apportionment workflows specifically targeting environmental datasets. Source apportionment in environment science is the process of mathematically estimating the profiles and contributions of multiple sources in some dataset, and in the case of ESAT, while considering data uncertainty. There are many potential use cases for source apportionment in environmental science research, such as in the fields of air quality, water quality and potentially many others.

The ESAT toolkit is written in Python and Rust, and uses common packages such as numpy, scipy and pandas for data processing. The source apportionment algorithms provided in ESAT include two variants of non-negative matrix factorization (NMF), both of which have been written in Rust and contained within the python package. A collection of data processing and visualization features are included for data and model analytics. The ESAT package includes a synthetic data generator and comparison tools to evaluate ESAT model outputs.

The ESAT python package has been published with the Journal of Open Source Software (JOSS):

DOI

Quick Start

ESAT supports python version 3.10, 3.11, and 3.12. As the python package contains compiled code there are OS and python specific versions, supporting Mac Intel, Mac M1+, Linux, and Windows.

Documentation

The Python API and CLI documentation can be found at the GitHub ESAT IO site: https://quanted.github.io/esat/

Installation

The ESAT python package contains all compiled code and required dependencies and can be installed using pip

pip install esat

which will install the latest version that supports and is available for your python version and OS.

Development versions of ESAT can be found on the GitHub actions page, for logged-in users, under the 'Build and Publish Wheel' workflow. The latest version of the package will be available as an artifact for download in the 'Artifacts' section of the completed workflow. There wheel files can be found for specific versions of python and supported operating systems.

If an error message appears during installation stating that the package is not supported check that the correct OS and python version are being installed for that system. The python wheels can be installed directly using

pip install <wheel file name>

The esat python package is recommended to be installed in its own dedicated python virtual environment or conda environment.

To run the jupyter notebooks, install jupyterlab into the esat python environmental

pip install jupyterlab

Example Code

Jupyter notebooks containing complete code examples, using sample datasets, are available for the source apportionment workflow and the simulator workflow.

Background

ESAT Predecessor

A widely used application used for environmental source apportionment is the EPA's Positive Matrix Factorization version 5 (PMF5), which is a broadly used tool with an international user community. The PMF5 application is a mathematical tool that processes a dataset of feature concentrations across many samples (and concentration uncertainties) to estimate a set of source profiles and their contributions. PMF5 can be used on a wide range of environmental data and is a powerful tool for estimating source apportionment: https://www.epa.gov/air-research/positive-matrix-factorization-model-environmental-data-analyses

PMF5 was released in 2014 and is no longer being supported. The math engine used in PMF5 is proprietary and the source code has not been made public. One of the primary purposes of ESAT was to recreate the source apportionment workflow and mathematics as an open-source software package to offer a modernized option for environmental source apportionment. Other reasons for developing ESAT was to offer increased maintainability, development efficient, thorough documentation, modern optimizations, new features and customized workflows for novel use cases.

Features

ESAT python package focuses on source apportionment estimates using NMF algorithms. These algorithms are implemented both in python using numpy functions and in Rust (default) for an optimization option. The two currently available are:

  1. LS-NMF: Least-squares NMF, a well documented and widely uses NMF algorithm. The ls-nmf algorithm is available in the NMF R package.

  2. WS-NMF: Weight-Semi NMF, a variant of the NMF algorithm which allows for negative values in both the input data matrix and in the factor contribution matrix.

Source apportionment solution error estimation methods are also available, which are the same methods that are found in PMF5. These are:

  1. Bootstrap (BS): the input dataset is divided into multiple blocks and randomly reassembled to attempt to quantify the variability in the factor profiles and contributions.

  2. Displacement (DISP): the solution factor profiles are all individually shifted (both increased and decreased) to determine the amount of change required for the loss value to reach specific dQ (change in Q) values.

  3. Bootstrap-Displacement (BS-DISP): the combination of the two error estimation methods. Where for each Bootstrap dataset/model, all or targeted factor profile values are adjusted using the DISP method.

ESAT includes constrained models, as found in PMF5, where selecting a source apportionment model there is the option to add constraints through defining specific value constraints or define value correlations as a collection of linear equations.

Lastly, ESAT includes a data simulator which allows for random or use defined synthetic source profiles and contributions to be used in ESAT to evaluating how well the original synthetic data can be recreated.

Limitations

Matrix factorization algorithms are fall under the group of optimization, or minimization, algorithms which attempt to find a minima based upon some loss function and stopping condition. These algorithms are classified as NP-Complete, a category of algorithms which are nondeterministic polynomial time complete and there is no known way to quickly find a solution. Given this limitation of NMF, a solution can only be considered a local minima with no known way to guarantee or prove it is the globally optimal solution. One approach for helping determine that a solution is a good solution is by producing many such solutions with a constricted convergence criteria or stopping condition. Then evaluating these solutions to determine which, if any, correspond to the best actual representation or model of the data given domain knowledge and expertise.

NMF algorithms are data-agnostic, operates the same on any correctly structured data regardless of domain, potential leading to another limitation, interpretation of the solution. An important component in evaluating whether or not to use ESAT, or any NMF algorithm, on a dataset is to determine how to interpret factor profiles and contributions. How this is done is fully dependent on the data and domain of the input dataset, such as units, types of features, temporal or spatial considerations, etc.

Notebooks

Juypter notebooks are available that demonstrate the complete source apportionment and error estimation workflow found in PMF5, demonstrated in notebooks/epa_esat_workflow_01.ipynb

The simulator notebook provides examples for creating the synthetic profiles and contributions dataset and using the evaluation features to see how 'well' ESAT can recreate those profiles and contributions.

Other notebooks are included which were used during development and verifying visualizations.

Development

Requirements

  • Core ESAT python package requirements can be found in the requirements.txt file.
  • The python requirements for creating the code documentation can be found in the doc-requirements.txt file.
  • Full development python package requirements can be found in the _dev-requirements.txt file (not actively maintained).

The ESAT python codebase includes github workflow actions which run:

  1. Run python build to compile the Rust code and create python packages for python 3.10, 3.11 and 3.12 on Linux, Windows and MacOS.
  2. Recreate code documentation from the README.md file, code docstrings for the Python API and CLI. Documentation is used to update the github documentation site for ESAT.

Rust Compiling

The python package includes a Rust module for running the algorithm update procedures, which requires local compiling to execute.

To run the Rust functions that is specified by the optimized parameter, requires that Rust is installed (https://www.rust-lang.org/tools/install) and the python package maturin (https://pypi.org/project/maturin/) is installed to the python development environment. Then from the python env and the project root, executing maturin develop will compile the Rust code and place it in your python environment path. To compile optimized Rust code, include the -r or --release tags.

The Rust code can also be compiled to the target directory inside of project root using maturin build.

The rust functions are imported as python functions, with the 'from esat_rust import esat_rust'.

When creating the python package the pyproject.toml specifies that both setuptools and setuptool-rust are used. Setuptools-rust is required for compiling the Rust code during package build.

Creating Docs

The documentation is created using sphinx and several extensions.

To create or add new rst files run sphinx-apidoc -o docs esat.

To create, update or modify the existing documentation html, run sphinx-build -M html . docs from the command line at the project root directory running the python environment with the necessary sphinx packages.

Building Wheels and Compiling Rust

The ESAT python package and cli are built using setuptools and setuptools-rust, with configuration details defined in pyproject.toml and Cargo.toml.

The python package can be built with the standard python -m build from the project root directory.

Build will compile the rust code and package up the python code combining them into the wheel for distribution. The resulting wheel with the compiled code is available on github as a workflow artifact for the targeted architecture and python version.

The python package will be available on pypi.org in the near future.

Code Tests

A collection of pytest tests have been created to test functionality, mostly as systems tests, which can be executed as

coverage run -m pytest tests

with the coverage results displayed by

coverage report

While the overall coverage percentage is low, the majority of the untested code is for visualization functions with all core functionality covered by tests.

Community Contributions

For those in the user community wishing to contribute to this project:

  • Code updates can be made through pull requests that will be reviewed by repository maintainers.
  • Software, code, or algorithm related bugs and issues can be submitted directly as issues on the GitHub repository.
  • Support can be requested through GitHub issues or through email at esat@epa.gov.

Disclaimer

ESAT development has been funded by U.S. EPA. Mention of any trade names, products, or services does not convey, and should not be interpreted as conveying, official EPA approval, endorsement, or recommendation. The views expressed in this README are those of the authors and do not necessarily represent the views or policies of the US EPA.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

esat-2025.0.1-cp312-cp312-win_amd64.whl (518.3 kB view details)

Uploaded CPython 3.12Windows x86-64

esat-2025.0.1-cp312-cp312-win32.whl (473.3 kB view details)

Uploaded CPython 3.12Windows x86

esat-2025.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (750.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

esat-2025.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (689.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

esat-2025.0.1-cp312-cp312-macosx_11_0_arm64.whl (598.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

esat-2025.0.1-cp312-cp312-macosx_10_13_x86_64.whl (637.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

esat-2025.0.1-cp311-cp311-win_amd64.whl (518.0 kB view details)

Uploaded CPython 3.11Windows x86-64

esat-2025.0.1-cp311-cp311-win32.whl (473.1 kB view details)

Uploaded CPython 3.11Windows x86

esat-2025.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (750.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

esat-2025.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (689.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

esat-2025.0.1-cp311-cp311-macosx_11_0_arm64.whl (598.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

esat-2025.0.1-cp311-cp311-macosx_10_12_x86_64.whl (637.9 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

esat-2025.0.1-cp310-cp310-win_amd64.whl (518.1 kB view details)

Uploaded CPython 3.10Windows x86-64

esat-2025.0.1-cp310-cp310-win32.whl (473.1 kB view details)

Uploaded CPython 3.10Windows x86

esat-2025.0.1-cp310-cp310-musllinux_1_2_x86_64.whl (750.4 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

esat-2025.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (689.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

esat-2025.0.1-cp310-cp310-macosx_11_0_arm64.whl (598.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

esat-2025.0.1-cp310-cp310-macosx_10_12_x86_64.whl (637.8 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file esat-2025.0.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: esat-2025.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 518.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f3e830edefae51ec50b4e667a844df5c2b1e8a446e75a965d27492d2a0d86845
MD5 e33beddb70283846f73b5411e4d871f5
BLAKE2b-256 8585a16ba5f9096a943dc6dab6109c25a2e167f539ce1e074bd971a1670b7091

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-win_amd64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp312-cp312-win32.whl.

File metadata

  • Download URL: esat-2025.0.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 473.3 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 e8f7ee6742000a855c2fa44cf7e707d5997a1566fb0af1e736beadc886e9b21f
MD5 85a7fd7e2bd4e3041e241725ef53233e
BLAKE2b-256 f01e32ecea85b1a10ff90e291c6f2456b427f30fa255b8acb13fb30fcd371819

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-win32.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14852c6058a0802d3dff400ce21b4e8ac759d653c48a3f798acb03efd86ff849
MD5 b41bddefcf832d047c7a8067d192e604
BLAKE2b-256 c5db443a76b220f7e3244cf2a1d76eb456685caafc23f20dfeff5466d55747fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a4a9bf7e7d718b005c0ec8d3cff16ec8b0d7bbf603b0273f4e7fedaf6b9b49c8
MD5 117d98879b0ce29b1e21fd25b472ff86
BLAKE2b-256 40bebc7514dca62c3c9b328d18b9181db690ec5303f9aaa875a4c557598b0e3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c201e9c1b112e4c1081002d731e44ab42a004f00396685991d0cc79d4fe6235
MD5 2e806b7a7a9098e8fce12c9750f6413e
BLAKE2b-256 fb4b35bd21dd4b67f5c78a9763bbf595873e77bf2bed4dbdb713cb7074b28d0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b89dea3132756c9d0d117efc382dc982b8961a88d43a6348c2f656b4bc397d30
MD5 daac74ce0c61f196d90e16c6485833c3
BLAKE2b-256 a3206f227daabd8f0bfe007f95a84fc583d76c3336621fff6d3d99b654df1e40

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: esat-2025.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 518.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4335678a6745c2e95e2961966cb4b7058a108a89954d5ab6583c2bdfa7237e25
MD5 c086798b37319558f8ded4fc6fcaee0e
BLAKE2b-256 2003db1d5266a87cadc4c6f246b124dd41de557bd59a9ec2895a2cd10e7fb45f

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-win_amd64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: esat-2025.0.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 473.1 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 f5ecc658595d1137ea9815407fe1472558e84082f414548f0889c97fd95dafd9
MD5 67dfafe6c636710492026c2162f070d5
BLAKE2b-256 7d8c13c7dc83f395e212d14c10b407ff620a5e086cd5fa59732a0585f09305bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-win32.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d6010c97ddb4470716d1596784f56586a9ed624140c1e657d24a278a2148e112
MD5 c0faee7dc93d566a7dd35939bf634598
BLAKE2b-256 463a8234f1cb2b5f476f536dc426f4322f497a0b7ca5680d4f8fb8c2945d6e42

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f06519e820fdf08728535ed57c96bd9387e2579dbe3c05862862f6ef4a4db54
MD5 cf38616a9b6a2927e2c1bda64d147208
BLAKE2b-256 5008be8ddf9da4bed550c1bd64e61226792125dd6be76ca731c58719a7392225

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f4f4bbc393a867a997764b82e4794c13f748c3c2c97de0deff302d077f4c1c3
MD5 f18e568b666d1fa277f4d7b9fd809d7e
BLAKE2b-256 c9c6752f8df5bb82ddaa44c67febc9ea4fb82cc0526b0fbccbf6abc13ea461f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9104d13814c28d6b3c6a7a405dc4bdec372d231d1a042a0cbec06947d80994c9
MD5 b1c77572cbaecd3d735dadf490e53d3c
BLAKE2b-256 82e2b85fc62fa5ff9eecf77a46ca6d490b178ecc29b9ef00f113dd0f9f2f2ff3

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: esat-2025.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 518.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1525a3580c54f889e50e66b2d04cb50b28a2826734fb51d06470493ce76a18fe
MD5 a3d6900393184e2388323f898625d5ae
BLAKE2b-256 46c6d2a96a6eb14f3d7a3c670a74a11f649f466bde0054148d76df1fea2005f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-win_amd64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-win32.whl.

File metadata

  • Download URL: esat-2025.0.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 473.1 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for esat-2025.0.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 2fa56f649b59e6676e85367dd189b77c34c0fed37c780e5d6d36d9d1d66257dd
MD5 fdd9a61d21c42acf19b53df998f4244a
BLAKE2b-256 63d446d02c2339080a4034db84716ecbe0ea87b55c156302d8c57f629fc49c94

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-win32.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d99afbd51e9b3b62bf00fb032017715f74080a1bca7796322db1d8efd5033462
MD5 9c3b997944ad27a44491545e93f287c0
BLAKE2b-256 7fc67eda19bd82dc10dbe3b14e266925c25165fed37c63f644d5b8273d46bda9

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b5cb0946cb7a261e6c5a2a9b85b67b80c5ecbcb9298b2310059a96814e3080ac
MD5 753e1dc787dc5ccc96f80b2a84ec8e87
BLAKE2b-256 fc988dc04e82931bbc410581ef02cfa2efdd645e0cf1abc50015887a04ea08a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c71f5526a8fd1936860cce1c1e9b5569e3afe57894e9019cf8872ec7c4a4ad1
MD5 02a64eb69f5744b43c5e1b9a1d6f3bd9
BLAKE2b-256 be9e353e871071d5788c8ed69c675cb81213f9f027d08d0b726934f532dc87fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: package-publish.yml on quanted/esat

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

File details

Details for the file esat-2025.0.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for esat-2025.0.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2cf2fba7df5dee607bcd9c6359f4fbcbbf7e626958cbe4113c60240ec83a25de
MD5 d03f6bf1250f5095b5f60a8fff6d354b
BLAKE2b-256 2a804bd6edf4154e443a6b367e659e3717f5ef08e3ae013e520c1ae5cff408bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for esat-2025.0.1-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: package-publish.yml on quanted/esat

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