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://open-atmos.github.io/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.8

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.8.tar.gz (6.9 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.8-cp314-cp314-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14Windows x86-64

pypartmc-2.0.8-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.8-cp314-cp314-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

pypartmc-2.0.8-cp314-cp314-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

pypartmc-2.0.8-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.8-cp313-cp313-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

pypartmc-2.0.8-cp313-cp313-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

pypartmc-2.0.8-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.8-cp312-cp312-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

pypartmc-2.0.8-cp312-cp312-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pypartmc-2.0.8-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.8-cp311-cp311-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

pypartmc-2.0.8-cp311-cp311-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

pypartmc-2.0.8-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.8-cp310-cp310-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

pypartmc-2.0.8-cp310-cp310-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

pypartmc-2.0.8-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.8-cp39-cp39-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

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

Uploaded CPython 3.9macOS 15.0+ ARM64

pypartmc-2.0.8-cp39-cp39-macosx_14_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.8.tar.gz
Algorithm Hash digest
SHA256 13416e99e08122d9e058c1972fb88dbf18b8fb8adea888cdbca54bbe7945a258
MD5 1a1d7982799e13da605971b393ed8fd8
BLAKE2b-256 e5e4f0a37d9c6c5a5541f80ef9c5d7f3a9b932ca0c8fe2c894a2c560e629bd65

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1c222928842908e9588a740aaece6e0739c3674f480a426b41f5ca7652e1371f
MD5 9989b8f38b255955aa1eda77954a8d60
BLAKE2b-256 5ca74ac31998392c68fdabee49c61f15f15ac6b94539f6074ce953f3829c4293

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0a2a01385bc7f84988a8b92592f7f216f901e518d3fb9343225cc7a84d262b3d
MD5 0a092e21bc817f285b27ced83556194e
BLAKE2b-256 bfbca536fdf3dbda952dce95aa179c517e5b45527ac1fb66d3c7082a31d9db2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d33ba760e464e71d437f4cfe8f733fb003066b3e6501b8722afe399ba15c506e
MD5 023198159e74e2990181fea14d840428
BLAKE2b-256 c7330990c891658dcf6018aa92df4ca275a3b85bde1eb83aa9d17b850db0d01f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 6386d0da5f157c23d1ec5c38e159a0ced767a556381c4f7b80aa7b959e85579a
MD5 c097bf838daabec5c35e57068d9cb587
BLAKE2b-256 69391cabf50483d85215509d6ddbd8abb6d6a73631a1e4d123733c072be0bb39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6e3d429b12844d80471edc2bc4337837b2872069ba11cf86d9f9eab44b6ea0d8
MD5 158c02d6a966100fb4cc6ec5e6b66049
BLAKE2b-256 4c6ecfe9226d37a0aa535e32fa317506a998a4d5696eac984e0b2a6802face73

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 feb5404545c9ab42e5963376f021815398b3c0e46e072bc28adc2998a17dfcd8
MD5 d7dcdd021217a01afd305dd33f01f658
BLAKE2b-256 dfb8a6e62db74ab3304eca9fa7548e6eb9e27ab4f4e0637a12771639ad90ecce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a081f34dd96f7f5fb8224cfa0c1ff405abc797f426c3a18f5ebd3a5dd26f27cb
MD5 977841a271af78f909c642fbf5cb0449
BLAKE2b-256 b53e94e1b5ff6a5d5a94325dafbd0f0c21205cd1ed87fcb3cf18c9c23bf9ab56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cd421ed66f81a89afe9ab54cc9591b38688c5866228bbcf92544042c062abdb3
MD5 777a446cca56a4caba51a938a90cfe17
BLAKE2b-256 fda540501d04c8d7e3c96d24df2abba92bf523a2a01bd686672bc458e82ec70c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 84550ee5d1c041c37e47219ffb47e65e5aadae4f1dc9a58cb72aab4b4103e7b3
MD5 80702b07a8d0af407a5f7e988cf18636
BLAKE2b-256 2afb32140032b9c9647182a16472bdf159e8740194852691d56c1f698465b515

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 fb41d59e50a753d4c506c35c475c82747e848de08b3bba3b82c40b9618b014e1
MD5 c124a1030921d04398476704f1c8edd3
BLAKE2b-256 ca883656bfb2fc6a47ccc2639fd3c9601cf552451e1be0a9ae336124252fa824

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 209613eaa282f24ae317622ca5716a1829e712ce1a4333a421feb77e0dda6e90
MD5 4159bece88cfe70ac5316c1ba1ae8e8e
BLAKE2b-256 666b77eaa30bf309c97045409a05e091a02308e9b9ea4948d00aac3519d7654c

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c70d2e1ecd75b7ca23eb400a1b08dd4c6002097f1bd5c1142780ab63fcaffd68
MD5 50d69775b2b2d53e7ecdd61734d208b2
BLAKE2b-256 4c1f3e4822c33f5331685d8f6ad6c09fa07f6dc6a2aa038a7b9832ead44869d6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 894c15964d1fe2620828eae908ac158abcb223a8f03e1f052e21d82f4f5025fb
MD5 83110653c60672cb4f8bdeede494570e
BLAKE2b-256 6d3c2796817aef93b67d260c5235866c23a7346efc0758681a0d89d12e62ab6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9da2f940b9b6c61b30941967a0f2c2671fc061109aceb4f67b147eb0e501b321
MD5 d04ac49a285469b11bbca7f00d4dbb87
BLAKE2b-256 6a984c9f69c7a691d8fca52326d01d2c1d50c70a8f3156f51b62b6408b6890f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7d9f1605e6d7df203ade3d9390ddbbef85a64fe9ee1734ab116b3c31d80e920
MD5 b84c52b7ee15407ead930617688ce1b8
BLAKE2b-256 7d5a571815483588b498d020d31450bc6e104beee548f54211c7bfa9de24a01b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 93fb004058ef28d79b8e4011e1b2a86cdd5ea028e54c53781f166c7718691721
MD5 85a67689fe565b1099681ac6ed1460a5
BLAKE2b-256 bef15c4d63773ee7f51aa317ef1a7bdc2d8079d8da3cff3c89c7271e35d61e1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 29220866bce851c81a952553002fc8b0040fb8ca6c1f464a51f035c97e91d587
MD5 3bb4016462353ee606799f8d8925eb05
BLAKE2b-256 5c62463052adcbe1ce882dbf168d9f04581d6b67a4423d00b9a4c5634c6759e6

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1ddfecfd2dceef8a612b7cf81dd5e50d871ab71efc43def0b21704ac11290d2f
MD5 f28b50d7fa385128e1afe6992d86e1ec
BLAKE2b-256 5eed9d5f759c7e2898c38d8f39e7f6ba50fca5e3bb5b300b1956f5624e8be194

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e25b443773ad4ccea4cbc9cb951c41198af53a0f6f666510b561b2ecdd23dbd4
MD5 3900fb6123d112ebd401c10ff5fb4cf7
BLAKE2b-256 58ac9568265033353899ccd613b024ef742af58e2c057c8a405b613730d3877c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c9079376904ca3126cb76b9dc5b289dadd279af8cde2f1f88769b47fc4e9add
MD5 8ccb9e6ef9c1c52fd0ae51d7626e5dbc
BLAKE2b-256 dcb39bc5f720d896adc6519d4ddffa5b864e68e7ca20e256ff4057729695f65e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ca2237d58bf8ca337218491fb107791a32f29e9d4ad17d5d30eb5c380a11e03a
MD5 8d2ee59998a4d2c7fbc9b8e0a24af022
BLAKE2b-256 fb60b90b0124197d5c01b77b3ee5ec8c97faefefa1e9b316c22f256017175ec0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 a5797b5799a58166670b41e9043daa7bdbfa6e7c0de8a25107f7abe07c96cd0c
MD5 57e568fb783fd50db5d5b529f4730a3d
BLAKE2b-256 1cf1d08157b236ded866612b990f462f03e0b06d0bd9ab6e02b05d37c8ac94de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 88d6f1de4438b3d869e1dc54a13dea3965d00119d403c7f91ae6639cf36ccc49
MD5 8a2fdaf40a84fb3e801e0f37faa6863b
BLAKE2b-256 c8a6dad5b7e35a171a20c444410c9e05059f0fb6933ab6986dca1e7f22dc1696

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ab678a9a3b176678b7d9b2169e900223cb81bcb5d206b4745b6ff3c309baa29e
MD5 2129644a41007c7d7bb3de40eaa11f7d
BLAKE2b-256 ab9bc57be946a615249316344db14cd864e4370e0f7850c58ef0b54b71f33e57

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ab3a98f3b91b872e8bb26dc22b71a2cc9e74dc3cb11f73f7f2037f8cafa5b3cb
MD5 40277a6dcfb5b916091e994fcb45a9ea
BLAKE2b-256 763577aca57030bde95ca3075c47f6f9b9451f7e0294874e672291135715a792

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c588374a6d6c3d8007d8bd594cea3ab90d5ace75ea3bd9d1c9e9194c86f2251
MD5 8bc53148d78e19591a005953678a8d13
BLAKE2b-256 34eca3287d5a09fa97b5b75f635c79c22f8ddc47463497d194e735a7af93399e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ba5738ff6d32998a12b80a92ad0cc4617655a224bdab37223a877c47d93fb290
MD5 c7d52dcedd487c48b22ce2da0ab6794a
BLAKE2b-256 7a729eb1528a7e10ce76be346be3b0bb783cd2b59291dca81f758787cfe39131

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 eb939c481fb570fbe466ba98c2c73b97489c9f6116f69924556a2b30ca20553b
MD5 0e5c10575c467dcfd896c4fc5b934a65
BLAKE2b-256 320b3436e693f2a520e176594ced8c9d1e4781d874cc94691661b79e12b20d10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7e423e4902ded07ba989b658835dedd24fa8ef022db3aa79a3afa86f112053db
MD5 b7bf6184903cda6875345ea9413bc2d3
BLAKE2b-256 58dae2e211a5200e1f806d55c105d04d5cbccda3591d28e064f497111213ceb8

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2893241405eb153c65a1b5be18604455f23bfe031396afe24a2d3bbe4417571f
MD5 af9ad92c905d044f3f10a650206f7db5
BLAKE2b-256 ba4e87c62f45762afdd567ff31f793969cc4a9fff82562470eca3244b4276510

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.8-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.13.12

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bd32cb998936cb12d5aacf7fbbd694719b479e5cd29d5cace5b987c88cd95dee
MD5 f82570a96a4b71626eae5ce9512ad1e1
BLAKE2b-256 cd79cf659887c87150450d8651f4992690e994fe8245ca3b7f83518dd1ea4498

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ef3ee7af54d5003bd999fb136e69021b912ea7d3e6fc97c5f440761cf940f6c
MD5 098d357be6463995b01d79f37db55731
BLAKE2b-256 ece764d53abc8880e4afaef49161b17b93d913671640e09b0e1ac380e7047e8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5cfecf0cf403d6590d63dcffe40d09b36c23bb82aaa1048d70396ea086314b1c
MD5 c0ce77bac515dc8458edd206524fe4ba
BLAKE2b-256 944e15880b777d15e2798f5c794cf6b5976feffddda95f33b15137338e960b64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 b6e406e302251234709387d181df553af783f1500cf3b68f19722ee3d129a1a3
MD5 daf6920766b7b8c3bb0374244dafe20a
BLAKE2b-256 f7055c68ea144cdc8a420080a9fe5ce4fb6d107e5cbe73582cdd6bc75aa2688e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 35feca71836997a64418d9eb4358d876bb7ea97178c0087df1d55666d6fb6b59
MD5 dae551ad671eabd9681c714c628be4ea
BLAKE2b-256 e835c2e972b2c5855678c4e1dd37a574f57aee49bb0bb6914a9a619a0e1d7f38

See more details on using hashes here.

File details

Details for the file pypartmc-2.0.8-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-2.0.8-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5129e2ee48776b1caac857789da7e0f9e4c2fe18096d982a04e077c92801c13d
MD5 1179a187e3733ef2a2a497131fc98471
BLAKE2b-256 739f5a706be99e10d773f1350da9fc41fb6c3cef62cf05f06ee9a011348ef9e7

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