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

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

pypartmc-2.0.3-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.3.tar.gz.

File metadata

  • Download URL: pypartmc-2.0.3.tar.gz
  • Upload date:
  • Size: 6.9 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.3.tar.gz
Algorithm Hash digest
SHA256 68e9be9fc4a1a5ee3b5fdb0a356eb719a66df2a99c14801625f3de44ee04d94d
MD5 3052d71b59d767360d385d714277a819
BLAKE2b-256 6bf90f3c162365325b9747542ae3cf026924505a3e0df86bf469d7a81b7895b9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 96e6c3b15b2865f9e00002ad8e8c1dfd8b9bb1bde4d9db81878e783dfa9e2cc0
MD5 befc21333d0b136da2df69015d8af14b
BLAKE2b-256 42fa086fce947711a255bcd19c6537069c84e743a5a0c2d492d6ab8725f9c284

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd5a5b26b1a2ac630f659ed57a6c3d4199138b2e2e780aa30a6c5af72743e371
MD5 374ba1fa5280c88eeba1f9fdca2efa81
BLAKE2b-256 b323098354087c835c8e5964af38290fbbcf2b6c2e3d2ba6fd91eec01c2d5a03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2854b623c8da089fc5832ef600171d7f893f3f419a1a6147d223c43a8f9ca33d
MD5 6e89d6814e3cbd838e024a2c781738fa
BLAKE2b-256 43c3ddcabdfc4bbac929ed0e1710f903ac5e70f8a15e635571f16b934edece32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 2e2c6a02202139a9ea6a40efe107d297b248f94c2ab67db4a8411928458937a1
MD5 a02fa60f6c4f610934ae3385ed869717
BLAKE2b-256 5d0eb19f385943f5c19d21cdb6b50e6597b3a6a9cd0af5b64916c9a0a48629fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2633de2480190ff37674caf72965a75a464127a449b191389127e2951ff33025
MD5 fbfde0df48920a1bd6107cfa52e687d3
BLAKE2b-256 0d95d1460bda3d4d58adfe6d10d19c7271f1f4e3c18a488d698dfaf48d1d3313

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d1e77e4ca14f0611d55e0c3b8d6b65256c25720cd8a1668277254741c1bdbfa5
MD5 1e5b44e94f0331f7e3b56313ef025543
BLAKE2b-256 025cb406365a8099b85dedc2ec6d8e16c68dfbac491919f2cc9086b8688a59f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9eb081d4733ce724e7aab432b75e0a5bab7bc136a0b123100bbc554765d26678
MD5 b880cd1892da5bc04f325d50c860c45c
BLAKE2b-256 7517dfe35a121cce327235a4e0368505fde369c79493e27a6e14ed9c6fd2d989

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d203faf5f6989c26a2faf52bfad8f4857b5a08ff13a0d2b4fdd713eeb336369
MD5 8f2605571e74fb71d86f9774b76e0739
BLAKE2b-256 4e8a42003ca75ca5c7d10ef91b1e3ec89e93612d0a9eb8e2461edcd631c7bd06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 4403bf331ce068fb4b9370ddcf181098043bdbaee1b0cac32b15c2e61be1194c
MD5 497fcef14da5f532f6960241bc6e07e6
BLAKE2b-256 8855a615ad15eea13227c8931626f2bf7f3720cc55912860d9aab89d5f39ddd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8f07adfb6e49c32c63ece6b73d6a297637a1ac4705ddeb60c5d73f23f50ee386
MD5 c2309249f85c62c970f0ba8747df597b
BLAKE2b-256 67e3129896d33201dcd7ca754d3c2f84e9cd6165db74c9c0dd2fdb3f57314199

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d5a45fc7b84b1c49d12fda7d19d3b46f30511ad7f16eda17972e6aba27647f47
MD5 746455f397882bad51b8393b2204fa02
BLAKE2b-256 fc28975692f803c2affa80f54a8e7032029b12e09c58d585176073b878277794

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e34c7b12c34adce7fd1ca1fff994db6016bff30a286e01898dcdd1b3440c7cf1
MD5 630fd0eafe71a146f09cf5bdc74b5b20
BLAKE2b-256 8da4192eb2a4152d06eeb24e68acabc8e5d45a87e1dd2ce3a78eee5019b9c64f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 27185d8eea7b3bfb4ac7449b10aeda6bc5dce426feab0111c0665b0e306d72d2
MD5 220d55f207e16316674f0e8a11c2a2db
BLAKE2b-256 1bf6750b0975797b6e66505bf7572d33a35d1d47a666ddfe632f86b92617ba0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 5ea13a7accaabed50c365d34ddf37e86ee30c8cdf9679167e70325f7014aa7fb
MD5 d2da70babc8db3e184841f229dbeced0
BLAKE2b-256 8d2238b54e11d9ad2dc36cfd7b24cde4961de2dba7f8f906cd79cc6cb90deb77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5805b5ce163a8db1107cacd03abff9c115d7269f0c7768b689bfcf3be98311c8
MD5 e34607d69867a78bb7f30712307768d7
BLAKE2b-256 368aade77e900a8f0f0f379c3448b666c07f1d28c9a7daa3de9c58a6b629b7e9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bc698cd4436d3db6468727e482e74af560326d260442b6c407564d1beb81e8fc
MD5 d295d18e90ee7b0046eaac1073b33315
BLAKE2b-256 92981b58dfbe6bc4eef1952c1f6f410c0d00fe683b76540bae05d103c1181b9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 707dd290a83c4e2a45956b7038f7f07354c09c6cd704a4e47b3484e51cd7581b
MD5 0390cb11851b3fac31cefdba123adb6c
BLAKE2b-256 db6d46f2f8ff5264e6fc0118a7d01605080aa4e63a9a3e31f5eb3823dc2782f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 db04167e0ab62c90a4792eb705fd3eecd2bcbe08c616fd5a710ad472adfd5e08
MD5 3ff31e1ff5493c4dd165f1b7c65182f4
BLAKE2b-256 3f50adbd6491eb784eae95426ed91ebcb0cbac09f795d21b945561d8b4999553

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 da96ce6a029cc2564b0ccb9f39f6d7398018cff40a072527ea028c9399bf68d3
MD5 9b52e474d10b7f0b38af38f137c1c7c1
BLAKE2b-256 482b8bc2ec88a5bf576b2ee7bff958ad36db8d72fd9b4339458ff5dce9b7804e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a9951764c074ea7547100937e2882a5c3696cd55c40d5fa811a4720dfa922612
MD5 cc0c63eb58a03d38c6231695f695ff1b
BLAKE2b-256 5cdd4346020878afe5b318892a4e59fbe940c4581d14fd4568cb9187eb7e5f56

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b0559fcfd7031f23b0a09d090b2eb856832aa382e42c3c2d9cd6a1f3b1ab1bf6
MD5 4cfee9d228b03fe843c8fc9accd25626
BLAKE2b-256 115bd03d24951069880a025a89ab501926adffcab193918ecc52f43fed3bb339

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1b6802b83bbf1a464b28d8a8dd92eb08f173b9d1ce9c45623db94c380425750f
MD5 b675ed99ce4cc474fe89b2aada78a5a0
BLAKE2b-256 ddb3bedb044f2f36998208d396073ea8653bca0e0937cc926e8aa84ab5c0b107

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8abda2c7c479158d3fd28237f0c63cb464123cb75d1cce7230729514abd53ff1
MD5 e7036c9a5afec5af26c9b7e32000ec85
BLAKE2b-256 bd7f762b9a04489007e1170f636d69ef84397939b4f1eecc4653a237b773cd1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 836bea2673acfd335642112201c6ff44da5f3d63737b89cdaa0c52444933840c
MD5 aac696cc5e1a07d1e47624cb6e493d47
BLAKE2b-256 1cd6a1976a64757a1cd30d130d66eb02ea46d60207f938267c2f6dedd79775d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0926840271246647f3a02ade189313ede321ab22370227a6f4d0710c17057eb2
MD5 8f6e52e6447bc060a25f998942147528
BLAKE2b-256 209b28c8e0442f95aaf5705fcf8ea42e517f398af318217cf15c9313fd671648

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.3-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.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bbe20320b32b5b6ce7ecba8bddc9241610a43280ec584b0d43e0dc05f588ffec
MD5 8ce9cdd6db0b76d6a7240c0d64e6a020
BLAKE2b-256 801fe8f8c5169a89ac0b874858090e037769ea8fbae7595fd8f52e81478bb996

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ffc09ac26132c1f0abea2a1b3304d3d125990646cd6675de2141bc1f9013f8ce
MD5 cc43aabc0662405575675bb091678a33
BLAKE2b-256 9d5be2ccb13bbb3f38345e81804d21ce09c04b8152401dfc06af5ba5ac3e8d30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 30626b693713fb1398cc21acf7cf37bfda190131b4338f65b3f489333176f27c
MD5 a01407eb5d0656c2955e9de48e634323
BLAKE2b-256 889f507ebe2dd4b66b9e6ef1abb9b90a38ba5500f40e12fe190e5fc3724417e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 6aadc7466db8e81cbc970e15136df9d0fbdbd9c70cdab4748c0d1bcbc1163884
MD5 0e9df1faec8fcf422ba04267638bcea4
BLAKE2b-256 68f6c91411d3cf05b6f1f7e7714d251dbfca3b4c44f68ae14c7ec576bd830c7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.3-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 92d053577cf539db58a38c6bafee397a9b7606aa4dc46964b4d19ec769ea8c20
MD5 e9399a362ac444a152cc2b88ad5d8d79
BLAKE2b-256 45644dc992a11fa8214ca05dabc85eeada53b7a043b53b3ccd8916da1860c509

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