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.2

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.2.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.2-cp314-cp314-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

pypartmc-2.0.2-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.2.tar.gz.

File metadata

  • Download URL: pypartmc-2.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 857aefded97fd4661ac05f18cd1677234dd8f8caf76f5e0a2965d3ffd8276201
MD5 16a1014cbb1d9a924c1b3332b81a1185
BLAKE2b-256 cfd8358809c18ead030dd0f29f5ab27b1c94ab80c89076b0988aa4571c5c5227

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b0dddbbb3c9bcea135d9cc079575c0ebcc5d016c4113182336c15e10403a4173
MD5 88f11dd875f67b4267fda48794615879
BLAKE2b-256 4caa81121b70e9b1ceff762df2aebb216e30d88b5b41950dec84abdf923a58a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7956ef7e8d72281a467ad08ff2a360a0554a2e27e6a975b9796fe0064341781a
MD5 87044441ec151dc1561cddfdcc8cb4c6
BLAKE2b-256 a9100cfcfcb3d4122cd624bcb9c0136417f05bff6d9ae227183354f576a07a7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fa87bc58b6cecc6fb0ef4eb08b867890bd1c2c9f595ca82fb741a9afd7c9e7df
MD5 390273f3c9df6e673395a8d8b63c6fed
BLAKE2b-256 da7122a3a6627b2db16f8a7f5faea785d650d9a7c8ac0fe1402a34d563e6a1a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 02c29efd3b3422ab732809a3b664e6bb2efd5ebb34cd0d7f3e8459cdba8f16d3
MD5 7df8ee939fe222f49ff8f98a254d3cdb
BLAKE2b-256 8bfa132cf7ad7fccfd22f5d8181cbee84fdd9ca31f2016316e0eac82f03cf69c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f85bee295b214734e8517d2ec98369ae786ff1ddd085ddab9e808401d00c1d83
MD5 4c1f06ef46be3dccf2bfd93e2d3052e0
BLAKE2b-256 f8d2ede943525ab34c0b803a4c4898c6ba768f560776b553c3b6e0e7841e7dac

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4a6d0e097a043aece1dc79a9be58cfeba067736ecc496bc84f3842c0fe1dc45e
MD5 b2b594e3666d6f4383aaa53055b8e301
BLAKE2b-256 f734eea1b5a314702a5f3e70e2c277a4b913a9fb317ffad25d279a1800d2b39b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8961d2cd532dd8414c2ebccb1ff023e1be5d066f9521bf0f6376eec1cd3ba52a
MD5 d6dcc5e5599f714e999f91929b07422c
BLAKE2b-256 aa0a689cd13fcdacb8d8fc5db3cbd17d5d269d5649deb2173eb099d00eecef6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9c53a525fd989b89ab98858c06adb5e0284e778b15f3ad661ad6c60c939fff35
MD5 b481eaab954550c1513172342e27f5ab
BLAKE2b-256 d17553fcb3333ee16b34361327bd407afc8094bf18fe7be88df9e3a6f531eb60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c1cd46cabf63105b35bdf79a98350dec9ef9d65bc5f18724b3ae08a999990098
MD5 900d493bf14b107b4df8f777936883be
BLAKE2b-256 c0e57c796cb0a25355ea63e461ff3e91d24a2aa2d990d86f0290a1972af217b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 04c4b195b8017b519afc01b5c202ab27dd0b39e7c92e46983f518a5904deb344
MD5 a064b1c63484bb4da049fa2607a8fdf1
BLAKE2b-256 489da88d447123605bc19d7baf9c4094b23549b5516a46a683f4e658ca98b6e1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e5326dd6fdd0683e4ec17d58dcbbeb0b962da2312f601be48d8ad83aab42fe0c
MD5 319fc57da6322aa7c46d4fdcdeabbc3c
BLAKE2b-256 58867a46093ae4800dfb8c6e12d9d21b03859789d2391e118fb98ada257ad44e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f85d762d07670c8383860675691aa0ec2bad6fb4864baae1b57ddfec8ae5d9e7
MD5 9eb957aa8afc3ea11f2e0776f2e3f664
BLAKE2b-256 111c17a2f93e480f56c6d7fe2322167015cbc1c812f61b9d03481d91527d112a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2bca75db49362bd9c2556919d7231ba213e3b41d55931c27e1765d9bb7a2579f
MD5 fef1dcf4e189c06b4ca34b4971b22e4b
BLAKE2b-256 451b902f263af3de59ecaa3bb7f21e19156b878c0bb7ee176bf560f679814222

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 a4f653e57cd60853a4361a609c7380710de7bfffe367bcd98efe2f0394fc221a
MD5 89e80430f7a761a2e6564f209a6cb199
BLAKE2b-256 a3471e307aed3104929455da751896d5969829bc798a2471cf3be48503f9dc84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 dcd44e22a061aef83753aa62ccd9c09de8f2c2ff722e613bb5b1b715cbdec0f8
MD5 9fd790244788c7a5898e0d4f6178c31b
BLAKE2b-256 b9fc702e5e927397d08d7cd3eb6214f726d43505d7bdf323bb663ce0f46c1445

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 afc6399bef7585b202bc72f023e93ef94a0c3fd0824b8241396f3ceb8fbf5edb
MD5 a6453fab05d41881ddceaced79f8cd18
BLAKE2b-256 941b51c192d71c8a95def75af428d0dcb396f26f6e3d9595e0db45c69bc21c49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 633605a829eddadaa3a45c2ae99e5df9ae790d024782dd7ed751adacda3c9122
MD5 2f0be2a24fa5b91acc4466b0023b6a96
BLAKE2b-256 dbda48e184ff25c992332178ee56cd4a9f95777cc929a0f4af2232e287fd1d10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 080c61a275dca1d4ac7fc5cc72c16b7d980e138a82ce02488ce173a2a4dc1fe2
MD5 5ae20d1f518bd16b7e274cca31805893
BLAKE2b-256 aaf79bf0a88f52cfd016b1da02da6b9725b5026d5bbf523188c5c097a23ec69f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 65bb177aa89bf428b0967d04bb905682a5f2bb47e205b35fb59fcd41e156490e
MD5 75e2785d19f20c708476929cf3bdef18
BLAKE2b-256 f6d7548b09da9a535b1e1818d7eceb2dd49beb4be9d884afff1f980efed89f6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 493757a71b92204f91014caffb4f33fed859a65a0a89a536f1e522bcf8d8126d
MD5 8151c5976e1754a68e36a6c6541eec83
BLAKE2b-256 5019c20dc2912e73e48b391f3f6e4f91efca8ea90ce914cfa2f3566039a243d1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bfb46312fd7eb24983a82e1e382dbd247fb11ed04d15d6a98a94c1f1d1355801
MD5 6430b1fdc953d131d2369f9914fd6cde
BLAKE2b-256 569aead99bce0025b45657f87f3528d0115d020e1ade7bddb4ff92168f186e98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2b9992cae0508e91b36e581bb50edd69c96681ed3174b761af609992e19ada86
MD5 f5878f2b0ee3ae94c1312fc86dc3b5b8
BLAKE2b-256 7593feabfdd9f5939ca70a08e77b52600f7de0417628c53e2428c87ffde5343f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 63471bf685c6e6c9364cba2cadba5915eb9b7534c2603e0b908170b154efc2ee
MD5 71a18ec7cdbc8360e81a86f480f6ff19
BLAKE2b-256 0fc2ff94269a1777d5d47688cda061c7bc42bd9a0223453fbc19e637d45c66df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 fc2bf434ec33cb75dde5fc4aa8df051de804b1207af2fe650a1890526cb08fda
MD5 f25f46a57e73d4863a61da5a4295d226
BLAKE2b-256 b7d28bf75120d834f7d36c82cf6ca0dec30b3c5965f0513f89e721df17bf3379

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 bd9b30c150c06dc1c4aaf65d012bae156e9c71f8a1a2be7938502e572c81aac6
MD5 a83e8bea7b1cafa16b06f0308946e1a1
BLAKE2b-256 5c4b73f88d4ab0ad0367348198c2d74281d2f303e3be241c83d4f70ce8df4f5c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pypartmc-2.0.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8d9f7e3b45317b7a14ee3119fdeeecd84d84c901dd8ca2a07bb4529ce0eaa35b
MD5 6c9bd2c44c66cec327d9bf878b297b2f
BLAKE2b-256 7bff62fd67bd44e5f6a23f3fce75ddf71041c60258f08282ed0d5ede848ce232

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 630690073e0c57598a6500c5e13cd72b869f4d24298ad84b1379c36c1ef218e2
MD5 60024dfc5ad8cf2c34e1be25cfefe27b
BLAKE2b-256 f6893778dd7320f55cfd71950c2f33622d3ff47cfb44c677737c40e0d13efe3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bbfd072b02b227a0c6b44f9f44e40dbb2fd77e87a612f43fea516be4ab58c466
MD5 c382ce3ef9720dd02145fe2ff7b418c7
BLAKE2b-256 29b58f47a1e162f02c060e3152ec60f2a83a8ff93e8289864f78ec8a3ab6837d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 7d27568eede97a5b8d6eb78e40c6186aa81b003774931fef1f6eb6af70ce7b9e
MD5 404d234255ef7a9757bc875fbe9af1fa
BLAKE2b-256 49b4abc983ce93dea675d637e3d275e75556baeb84a96b12b7577bb456f3de65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.2-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a0e19ee7023d510f25806f28c2b26c0c049bc556b6a6ad45bf2ec889ec383233
MD5 6961a34f82d42c6c65e183c6140f7e27
BLAKE2b-256 4dc6727cb8d97c2b2e00931ac240999782e49cd03a511f6e3cfc4b51aac26b85

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