Skip to main content

Python interface to PartMC

Project description

logo

PyPartMC

PyPartMC is a Python interface to PartMC, a particle-resolved Monte-Carlo code for atmospheric aerosol simulation. Development of PyPartMC has been intended to remove limitations to the use of Fortran-implemented PartMC. PyPartMC facilitates the dissemination of computational research results by streamlining independent execution of PartMC simulations (also during peer-review processes). Additionally, the ability to easily package examples, simple simulations, and results in a web-based notebook allows PyPartMC to support the efforts of many members of the scientific community, including researchers, instructors, and students, with nominal software and hardware requirements.

Documentation of PyPartMC is hosted at https://un5mvxtq4u190mnmhk2zcphc7zg0m.julianrbryant.com/PyPartMC. PyPartMC is implemented in C++ and it also constitutes a C++ API to the PartMC Fortran internals. The Python API can facilitate using PartMC from other environments - see, e.g., Julia and Matlab examples below.

For an outline of the project, rationale, architecture, and features, refer to: D'Aquino et al., 2024 (SoftwareX) (please cite if PyPartMC is used in your research). For a list of talks and other relevant resources, please see project Wiki. If interested in contributing to PyPartMC, please have a look a the notes for developers.

US Funding PL Funding

License: GPL v3 Copyright tests+pypi API docs codecov DOI PyPI version Project Status: Active – The project has reached a stable, usable state and is being actively developed. pyOpenSci Peer-Reviewed

Python 3 Linux OK macOS OK Windows OK Jupyter

Installation

Using the command-line pip tool (also applies to conda environments)

pip install PyPartMC

Note that, depending on the environment (OS, hardware, Python version), the pip-install invocation may either trigger a download of a pre-compiled binary, or trigger compilation of PyPartMC. In the latter case, a Fortran compiler and some development tools includiong CMake, m4 and perl are required (while all non-Python dependencies are included in the PyPartMC source archive). In both cases, all Python dependencies will be resolved by pip.

In a Jupyter notebook cell (also on Colab or jupyter-hub instances)

! pip install PyPartMC
import PyPartMC

Jupyter notebooks with examples

Note: clicking the badges below redirects to cloud-computing platforms. The mybinder.org links allow anonymous execution, Google Colab requires logging in with a Google account, ARM JupyerHub requires logging in with an ARM account (and directing Jupyter to a particular notebook within the examples folder).

The example notebooks feature additional dependencies that can be installed with:

pip install PyPartMC[examples]
  • Urban plume scenario demo (as in PartMC):
    View notebook Open In Colab Binder ARM JupyterHub
  • Chamber simulation example from Barrel Study (Tian el al., 2017):
    View notebook Open In Colab Binder ARM JupyterHub
  • Dry-Wet Particle Size Equilibration with PartMC and PySDM:
    View notebook Open In Colab Binder ARM JupyterHub Voila
  • Simulation output processing example (loading from netCDF files using PyPartMC):
    View notebook Open In Colab Binder ARM JupyterHub
  • Optical properties calculation using external Python package (PyMieScatt):
    View notebook Open In Colab Binder ARM JupyterHub
  • Cloud parcel example featuring supersaturation-evolution-coupled CCN activation and drop growth:
    View notebook Open In Colab Binder ARM JupyterHub
  • Immersion freezing example:
    View notebook Open In Colab Binder ARM JupyterHub
  • Coagulation model intercomparison for additive (Golovin) kernel with: PyPartMC, PySDM, Droplets.jl and dustpy:
    View notebook Open In Colab Binder ARM JupyterHub
  • Particle simulation with multiphase chemistry handled using CAMP (without coagulation):
    View notebook Open In Colab Binder ARM JupyterHub

Features

  • works on Linux, macOS and Windows (compatibility assured with CI builds)
  • hassle-free installation using pip (prior PartMC installation not needed)
  • works out of the box on mybinder.org, Google Colab and alike
  • ships with a set of examples maintained in a form of Jupyter notebooks
  • Pythonic API (but retaining PartMC jargon) incl. Python GC deallocation of Fortran objects
  • specification of parameters using native Python datatypes (lists, dicts) in place of PartMC spec files
  • code snippets in README depicting how to use PyPartMC from Julia and Matlab (also executed on CI)
  • auto-generated API docs on the web
  • support for [de]serialization of selected wrapped structures using JSON
  • based on unmodified PartMC code
  • does not use or require shell or any pre-installed libraries
  • aiming at 100% unit test coverage

Usage examples

The listings below depict how the identical task of randomly sampling particles from an aerosol size distribution in PartMC can be done in different programming languages.

For a Fortran equivalent of the Python, Julia and Matlab programs below, see the readme_fortran folder.

Python

import numpy as np

import PyPartMC as ppmc
from PyPartMC import si

aero_data = ppmc.AeroData((
    #      [density, ions in solution, molecular weight, kappa, abifm_m, abifm_c]
    {"OC": [1000 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0.001, 0, 0]},
    {"BC": [1800 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0, 0 , 0]},
))

aero_dist = ppmc.AeroDist(
    aero_data,
    [{
        "cooking": {
            "mass_frac": [{"OC": [1]}],
            "diam_type": "geometric",
            "mode_type": "log_normal",
            "num_conc": 3200 / si.cm**3,
            "geom_mean_diam": 8.64 * si.nm,
            "log10_geom_std_dev": 0.28,
        },
        "diesel": {
            "mass_frac": [{"OC": [0.3]}, {"BC": [0.7]}],
            "diam_type": "geometric",
            "mode_type": "log_normal",
            "num_conc": 2900 / si.cm**3,
            "geom_mean_diam": 50 * si.nm,
            "log10_geom_std_dev": 0.24,
        }
    }],
)

n_part = 100
aero_state = ppmc.AeroState(aero_data, n_part, "nummass_source")
aero_state.dist_sample(aero_dist)
print(np.dot(aero_state.masses(), aero_state.num_concs), "# kg/m3")

Julia (using PyCall.jl)

using Pkg
Pkg.add("PyCall")

using PyCall
ppmc = pyimport("PyPartMC")
si = ppmc["si"]

aero_data = ppmc.AeroData((
  #       (density, ions in solution, molecular weight, kappa, abifm_m, abifm_c)
  Dict("OC"=>(1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001, 0, 0)),
  Dict("BC"=>(1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0, 0, 0))
))

aero_dist = ppmc.AeroDist(aero_data, (
  Dict( 
    "cooking" => Dict(
      "mass_frac" => (Dict("OC" => (1,)),),
      "diam_type" => "geometric",
      "mode_type" => "log_normal",
      "num_conc" => 3200 / si.cm^3,
      "geom_mean_diam" => 8.64 * si.nm,
      "log10_geom_std_dev" => .28,
    ),
    "diesel" => Dict(
      "mass_frac" => (Dict("OC" => (.3,)), Dict("BC" => (.7,))),
      "diam_type" => "geometric",
      "mode_type" => "log_normal",
      "num_conc" => 2900 / si.cm^3,
      "geom_mean_diam" => 50 * si.nm,
      "log10_geom_std_dev" => .24,
    )
  ),
))

n_part = 100
aero_state = ppmc.AeroState(aero_data, n_part, "nummass_source")
aero_state.dist_sample(aero_dist)
print(aero_state.masses()'aero_state.num_concs, "# kg/m3")

Matlab (using Matlab's built-in Python interface)

notes (see the PyPartMC Matlab CI workflow for an example on how to achieve it on Ubuntu 20):

  • Matlab ships with convenience copies of C, C++ and Fortran runtime libraries which are dlopened() by default; one way to make PyPartMC OK with it is to [pip-]install by compiling from source using the very same version of GCC that Matlab borrowed these libraries from (e.g., GCC 9 for Matlab R2022a, etc);
  • Matlab needs to use the same Python interpretter/venv as the pip invocation used to install PyPartMC;
ppmc = py.importlib.import_module('PyPartMC');
si = py.importlib.import_module('PyPartMC').si;

aero_data = ppmc.AeroData(py.tuple({ ...
  py.dict(pyargs("OC", py.tuple({1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001, 0, 0}))), ...
  py.dict(pyargs("BC", py.tuple({1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0, 0, 0}))) ...
}));

aero_dist = ppmc.AeroDist(aero_data, py.tuple({ ...
  py.dict(pyargs( ...
    "cooking", py.dict(pyargs( ...
      "mass_frac", py.tuple({py.dict(pyargs("OC", py.tuple({1})))}), ...
      "diam_type", "geometric", ...
      "mode_type", "log_normal", ...
      "num_conc", 3200 / si.cm^3, ...
      "geom_mean_diam", 8.64 * si.nm, ...
      "log10_geom_std_dev", .28 ...
    )), ...
    "diesel", py.dict(pyargs( ...
      "mass_frac", py.tuple({ ...
        py.dict(pyargs("OC", py.tuple({.3}))), ...
        py.dict(pyargs("BC", py.tuple({.7}))), ...
      }), ...
      "diam_type", "geometric", ...
      "mode_type", "log_normal", ...
      "num_conc", 2900 / si.cm^3, ...
      "geom_mean_diam", 50 * si.nm, ...
      "log10_geom_std_dev", .24 ...
    )) ...
  )) ...
}));

n_part = 100;
aero_state = ppmc.AeroState(aero_data, n_part, "nummass_source");
aero_state.dist_sample(aero_dist);
masses = cell(aero_state.masses());
num_concs = cell(aero_state.num_concs);
fprintf('%g # kg/m3\n', dot([masses{:}], [num_concs{:}]))

usage in other projects

PyPartMC is used within the test workflow of the PySDM project.

Other packages with relevant feature scope

  • aerosolGDEFoam: OpenFOAM CFD-coupled aerosol dynamics including nucleation, coagulation, and surface growth
  • AIOMFAC and AIOMFAC-web: Fortran-implemented aerosol thermodynamic model for calculation of activity coefficients in organic-inorganic mixtures – from simple binary solutions to complex multicomponent systems
  • DustPy: Python package for modelling dust evolution in protoplanetary disks (differences: focus on astrophysical applications vs. atmospheric aerosol)
  • multilayerpy: kinetic multi-layer model for aerosol particles and films
  • PyBox: aerosol simulation model featuring gas and particle chamistry (differences: PyBox focuses on chemical mechanisms; PyPartMC is an interface to PartMC which focuses on physics - e.g., collisions of aerosol particles - while chemical processes are handled with external software, e.g., CAMP or MOSAIC)
  • PyCHAM: CHemistry with Aerosol Microphysics in Python Box Model for modelling of indoor environments, including aerosol chambers
  • PySDM: particle-based Monte-Carlo aerosol-cloud simulation package (differences: PySDM focuses on growth and breakup processes relevant to cloud droplets; PyPartMC focuses on processes relevant to air pollutants and their chemical and physical transformations)
  • SSH-aerosol: C++/Fortran package for simulating evolution of primary and secondary atmospheric aerosols

FAQ

  • Q: How to install PyPartMC with MOSAIC enabled?
    A: Installation can be done using pip, however, pip needs to be instructed not to use binary packages available at pypi.org but rather to compile from source (pip will download the source from pip.org), and the path to compiled MOSAIC library needs to be provided at compile-time; the following command should convey it:
MOSAIC_HOME=<<PATH_TO_MOSAIC_LIB>> pip install --force-reinstall --no-binary=PyPartMC PyPartMC
  • Q: Why pip install PyPartMC triggers compilation on my brand new Apple machine, while it quickly downloads and installs binary packages when executed on older Macs, Windows or Linux?
    A: We are providing binary wheels on PyPI for Apple-silicon (arm64) machines for selected macOS version made available by Github. In case the macOS version you are using is newer, compilation from source is triggered.

  • Q: Why some of the constructors expect data to be passed as lists of single-entry dictionaries instead of multi-element dictionaries?
    A: This is intentional and related with PartMC relying on the order of elements within spec-file input; while Python dictionaries preserve ordering (insertion order), JSON format does not, and we intend to make these data structures safe to be [de]serialized using JSON.

  • Q: How to check the version of PartMC that PyPartMC was compiled against?
    A: Version numbers of compile-time dependencies of PyPartMC, including PartMC, can be accessed as follows:

import PyPartMC
PyPartMC.__versions_of_build_time_dependencies__['PartMC']
  • Q: Why m4 and perl are required at compile time?
    A: PyPartMC includes parts of netCDF and HDF5 codebases which depend on m4 and perl, respectively, for generating source files before compilation.

Troubleshooting

Common installation issues

error: [Errno 2] No such file or directory: 'cmake'

Try rerunning after installing CMake, e.g., using apt-get install cmake (Ubuntu/Debian), brew install cmake (homebrew on macOS) or using MSYS2 on Windows.

No CMAKE_Fortran_COMPILER could be found.

Try installing a Fortran compiler (e.g., brew reinstall gcc with Homebrew on macOS or using MSYS2 on Windows).

Could not find NC_M4 using the following names: m4, m4.exe

Try installing m4 (e.g., using MSYS2 on Windows).

Acknowledgement and citations

We would greatly appreciate citation of the PartMC model description paper (Riemer et al., 2009) and the PyPartMC description paper (D’Aquino et al., 2024) if PyPartMC was used in your study. The citations are:

  • Riemer, N., M. West, R. A. Zaveri, R. C. Easter: Simulating the evolution of soot mixing-state with a particle-resolved aerosol model
    J. Geophys. Res., 114, D09202, 2009, DOI: 10.1029/2008JD011073
  • D’Aquino, Z., S. Arabas, J. H. Curtis, A. Vaishnav, N. Riemer, M. West: PyPartMC: A pythonic interfact to a particle-resolved, Monte Carlo aerosol simulation framework
    SoftwareX, 25, 101613, 2024, DOI: 10.1016/j.softx.2023.101613

The following paragraph provides a more substantial description of PartMC (text released into the public domain and can be freely copied by anyone for any purpose):

PartMC is a stochastic, particle-resolved aerosol box model. It tracks the composition of many computational particles (104 to 106) within a well-mixed air volume, each represented by a composition vector that evolves based on physical and chemical processes. The physical processes—including Brownian coagulation, new particle formation, emissions, dilution, and deposition—are simulated using a stochastic Monte Carlo approach via a Poisson process while chemical processes are simulated deterministically for each computational particle. The weighted flow algorithm (DeVille, Riemer, and West, 2011, 2019) enhances efficiency and reduces ensemble variance. Detailed numerical methods are described in Riemer et al. (2009), DeVille et al. (2011, 2019), and Curtis et al. (2016). PartMC is open-source under the GNU GPL v2 and available at github.com/compdyn/partmc.

References:

  • Curtis, J. H., M. D. Michelotti, N. Riemer, M. T. Heath, M. West: Accelerated simulation of stochastic particle removal processes in particle-resolved aerosol models, J. Computational Phys., 322, 21-32, 2016, DOI: 10.1016/j.jcp.2016.06.029
  • DeVille, L., N. Riemer, M. West, Convergence of a generalized weighted flow algorithm for stochastic particle coagulation, J. Computational Dynamics, 6, 69-94, 2019, DOI: 10.3934/jcd.2019003
  • DeVille, R. E. L., N. Riemer, M. West, The Weighted Flow Algorithm (WFA) for stochastic particle coagulation, J. Computational Phys., 230, 8427-8451, 2011, DOI: 10.1016/j.jcp.2011.07.027
  • Riemer, N., M. West, R. A. Zaveri, R. C. Easter, Simulating the evolution of soot mixing-state with a particle-resolved aerosol model, J. Geophys. Res., 114, D09202, 2009., DOI: 10.1029/2008JD011073

Credits

PyPartMC:

authors: PyPartMC developers
funding: US Department of Energy Atmospheric System Research programme, Polish National Science Centre
copyright: University of Illinois at Urbana-Champaign
licence: GPL v3

PartMC:

authors: Nicole Riemer, Matthew West, Jeff Curtis et al.
licence: GPL v2 or later

Project details


Release history Release notifications | RSS feed

This version

2.0.1

Download files

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

Source Distribution

pypartmc-2.0.1.tar.gz (6.8 MB view details)

Uploaded Source

Built Distributions

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

pypartmc-2.0.1-cp314-cp314-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14Windows x86-64

pypartmc-2.0.1-cp314-cp314-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp314-cp314-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp314-cp314-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

pypartmc-2.0.1-cp314-cp314-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

pypartmc-2.0.1-cp313-cp313-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.13Windows x86-64

pypartmc-2.0.1-cp313-cp313-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp313-cp313-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp313-cp313-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

pypartmc-2.0.1-cp313-cp313-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

pypartmc-2.0.1-cp312-cp312-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.12Windows x86-64

pypartmc-2.0.1-cp312-cp312-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp312-cp312-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp312-cp312-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

pypartmc-2.0.1-cp312-cp312-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

pypartmc-2.0.1-cp311-cp311-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.11Windows x86-64

pypartmc-2.0.1-cp311-cp311-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp311-cp311-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp311-cp311-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

pypartmc-2.0.1-cp311-cp311-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

pypartmc-2.0.1-cp310-cp310-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.10Windows x86-64

pypartmc-2.0.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp310-cp310-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp310-cp310-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

pypartmc-2.0.1-cp310-cp310-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

pypartmc-2.0.1-cp39-cp39-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.9Windows x86-64

pypartmc-2.0.1-cp39-cp39-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

pypartmc-2.0.1-cp39-cp39-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

pypartmc-2.0.1-cp39-cp39-macosx_15_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9macOS 15.0+ x86-64

pypartmc-2.0.1-cp39-cp39-macosx_15_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

Details for the file pypartmc-2.0.1.tar.gz.

File metadata

  • Download URL: pypartmc-2.0.1.tar.gz
  • Upload date:
  • Size: 6.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pypartmc-2.0.1.tar.gz
Algorithm Hash digest
SHA256 c8abc4d666c252e4b83293a5628a2f3b2f5443ce5b5b013ba79a04cf26e2770e
MD5 aa7a7d37887376bd22b8632c2e45601f
BLAKE2b-256 7168187f01519040b0d1540b2cff191458c632b2566bae4b6e2083a31f1b0584

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypartmc-2.0.1.tar.gz:

Publisher: buildwheels.yml on open-atmos/PyPartMC

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

File details

Details for the file pypartmc-2.0.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 af1305a2dcc59f54dc6faeafb82028dfd7608cf721d6f0868820b1470f4d5fe7
MD5 384ef3557a76b3de23aec65e44328150
BLAKE2b-256 a7ee28554fa44d6b709a83b69d5111faccb48c939fe0136f9d1676696f80d9fe

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d9d1a94adaf338f6f333f9ad3c31b947bbca2cc573c42c897dbe767a20595d0b
MD5 b6e6acb33ab3d605d86abee191dbad8f
BLAKE2b-256 86afad465540bdcf2e66a046cbed750b8d1825e04e09a461003bd8a5f34a7c3e

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b30007647d3f62db73d7013e105903dbb9b260cc62fc4eb4b4ab646bcff70c32
MD5 ae7e6e107914c30f2fbdf3a87af2cb72
BLAKE2b-256 61dc8f38acc60756c112e8fe27a3e1cddf7481fde1e7930d6a451269f20a16ee

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 d6600b766dafc01133d9204964c220fb37e1aa96095a76aed97cac53091ec2ae
MD5 9ae40830193e93d54009e60829059df8
BLAKE2b-256 3463d255c95efe4bb98234485683b53dde59c52b67d2031a79f0ee63a51caf46

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 283bce4cd15f13b9024dfd1033330941061585328b3a548e22265d1be62b65f7
MD5 fc2b3a1b1bf1c93d26bb5c2a9d031980
BLAKE2b-256 9689cab70580a2319e4f1be6b220a51a50c5b205d4ecd8b25e1842938a755681

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3c2f1d5f9e70ecf740944d11465d8b70d962ef67e8dd699a6e5d0e0f2593fa38
MD5 54d65de62c73f7dbad60f4fca9221f80
BLAKE2b-256 cb594d6a031d1585756ca24ad6022e0c622904e71345f90daa4a0e8e67582377

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 51b380f15312011993af2999229b7de7b1b38a99cb4b5e699292c7bb03c44301
MD5 70810cf9ab8c3e7326fe14bf1081ed65
BLAKE2b-256 0419da29c15cd0f9b7914a30f948ad40bbd4250521c5bce2f5a0923da60f8273

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ab29709360b7c6708a73fcbecab676266a1d0d203efc581a6d549cd9bfd3f4d4
MD5 ca20d4c167ee9577e5ea28b22b53938e
BLAKE2b-256 f1f4b943aae9d6273f01f38fff6ec296cd97de94ceb10d1613cc6059892650a4

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 a4feb2f7c34a997f59e93140a82cb837c3eea65d70d283e1973a1ea2c575fa88
MD5 941ea5ceaae31970c44c168cea3f6e03
BLAKE2b-256 1928d971d71f7d6fcebada0b0f2a129d5208dea2d01d9bedf7a439ec7c661bb6

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 dad099fc14214642633c9bbe5aba0219c3726592af33a56ecb1651c036c14c76
MD5 8d060263b2d4958e2c506c672918f357
BLAKE2b-256 6bbe5ffcf13b8f0087ba5f96e66631027e1d9c901942a9e64c999c5ac058a1f5

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 57bab219bfc575a878f6f86e31551bc0054aba1c052f991602dd425c3692764e
MD5 9724800ad76ab7a8f369dd83f2903437
BLAKE2b-256 47f18e90e89b47380f404244ba212eba8a5a903598340b700678867c21645bfb

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6ec680530837a439cb60ef5f30841a3822fc3c581358982f48aeb91a7f42a145
MD5 c167690a90af0fa54b5c181ad88c32ff
BLAKE2b-256 f776d6b1ae7b3498718843ab45ef8faef38e2e4f309938db4d66b87401bc6aae

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 12fb00a4146c05f4bfd703f21618f8d29bbb01cc0da48ca4851bb7169c65effc
MD5 4192bb37f01d54a6ecc90879084beb03
BLAKE2b-256 fdcf0540d3418cce8d71902979a3e38e52e60867cda911a7e0f6393631ceb997

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c115b370360cbf7df875d3a6141ff05605c8140c2c15c2ead87f384a64fabcc3
MD5 47fdb4167328d2f5f149dbe596268562
BLAKE2b-256 2a386bba9210693c2d5ba822622bfc74f7b98270957fbfac7304184a00f81d45

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 93bd4ed38c219e7d38cb9750ddcd69f6345c3ac105a62ca9fe7302500ba40edd
MD5 7edb905ba805a76110f8e9121f630760
BLAKE2b-256 7530e7aed1a9283d1febe5e7adc6229d4de07a1c254b11e135092816e4b5cf1e

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 92502c81b58f1010a99473ae905dbce6b46050b57fbaf235af61288134fcee22
MD5 2ef49206d2d478d95a9517224e28fdd8
BLAKE2b-256 47f3d6d51c3c17fe46d4519d1b6d1fc1f925bf3a03dd5217e76ac96f64614b3a

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b0f54dd3efbf9f1f42a7153019e21487ae8a9b6acb3666d7518791b7f73799c
MD5 a4df4caa41c889ffff8b7feedc5c6971
BLAKE2b-256 f1fdecacb5fcf99a39bbbb3c062cd7292093243344b5a92f4579bf0f3728e7f6

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43430660936d97d60c01dc067e64f2454300043c34b2b2bb9a5a503d13ec3152
MD5 7eb174794ee59d27415bbdd97b0fd11c
BLAKE2b-256 df2579b111d52a05c4e8ee07d6c91f6f013f1ce30c678c537f082b4165dac88d

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 eeb762c07873efa968b0e5c541c995742f047415032c3526631a011a8712ff03
MD5 255b86db744ef94e7b472edb7d0d02a6
BLAKE2b-256 65c3a05e9a4557db0bc2917612e7f6ea8a89428e5fc3bade0a98f4c1c4a86d79

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 59cb689fc7a565272fd663f631b7b6e0cdaec06c8cade443d5fd9f12122b1afa
MD5 3ef0524e0613d889e0cf0fb200192897
BLAKE2b-256 d30fd0b710155d026521f867a59173fc75bb4fbffc583a845d0f0a9c2aaa529a

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ba8310a26ceac43a9357d80e95b322a0c50b49a1ba275b64cddb8753fb45b879
MD5 796fd891a2a230e4c910237077b658e8
BLAKE2b-256 d5d9eeeaccc6447e4102d3b2417f8fc1d6054eb643fe884d426f5d4c007743f8

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 194c1ac578c2881c87301c47fe05bb0a9a7adbf527bfe190bb9b95a50a4efc9d
MD5 2cbbd172d6d2d6f13fb2aec4f997a050
BLAKE2b-256 96d7b24f23b12f99f9a906938118a58407e7ccf9c85ed302102883f62890808d

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 42f8d2c10484d6222d789090e6e92924cb6d3b4062051bab2fea4e0c65b16c70
MD5 ad9975b3a3be8cc057afd05fb6dd88c1
BLAKE2b-256 3fe45a7ca56aa77a26f53db2198ef9e9788d1cb6c0df284920e671906e3e7e06

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 e3f89b4206cdc6cd0ca734eb74eef14f28fe3544f9637edb854eebd46e6a4656
MD5 84d7f61efca86dd2c058775a0344b8da
BLAKE2b-256 deda448afe4f0ce3766c82c71021558cc4f39c156bf773520000351691e6c6cd

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 455f8c994fc44e273fc72873c8b781c411c7a02b3e37cef3044aa521c13def21
MD5 ed1c0519b7093c7e4e13d278f09a18e1
BLAKE2b-256 60a5c54fbca46d2d8002c5d854ad18c032dc538ac18f9209e9b03c5b12509a26

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pypartmc-2.0.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-2.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 437788eeb85e5731bc02cb9221f5a4707eebc613d359c76b0159c7132c274b51
MD5 d4e3d3606a0cc63e164ae61b30f1a203
BLAKE2b-256 8685bc767a1731579c525fe9ed19760b37a4fbc7dac5a7ff7b7711696cbcaba9

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9672de67b29ce41d0d249dd4a9e862e5260608e0290775519621c492face8a2a
MD5 a7094f5bb8d2484e9ee0c872686523c1
BLAKE2b-256 7a1c8a7549802c1423d50daf2677cd6779530745296f78c40831dc0aa78955be

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 59eef7b989386c0c3380cb2b529222a622cc100b92a317520ad701040b857c5e
MD5 fa13db94c66cfc10cf449a84ab982894
BLAKE2b-256 1ce224e41c4ace5f66b91908db6712c8c61bfab6b0a3c059638055b20eae4ab3

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp39-cp39-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 fb5b035296d73d4e239e53188ef2b3fa73de1a96d529257977e57cdc3f86957d
MD5 0d13fd2ba912d28ceaffaea011bbd72a
BLAKE2b-256 8c0ecc691b8cee8149ebdc69997014aa747dc19c4d0244d45cb955c98acb950c

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.1-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.1-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e2f6ffc084d4b8c4c945a84fd43e8ee82cd0117e035784095cd38a20b1647b74
MD5 613a68e409a96d65a40a08472cb4630d
BLAKE2b-256 3911b49d76662977d09f832c3d31cbe4f09173fd8c6ef0c1f406e90379ad9d3f

See more details on using hashes here.

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