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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.14macOS 14.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

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

Uploaded CPython 3.9macOS 15.0+ ARM64

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

File metadata

  • Download URL: pypartmc-2.0.7.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.7.tar.gz
Algorithm Hash digest
SHA256 2da9addf8a63fee1241c9e5878f7b47fe6546969e44cb0fc5464d583c7e9a3da
MD5 c3c977d374d2b78caaa1c4d0b404f15a
BLAKE2b-256 c456bb66898c9d456b5b39ebf26604e07af2e5580e45e69fd04e082920b3bce9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c87223f6cee81979b3cdc1b6627fda0b0a0072b05fa5904e5fe4ab21fe656bf2
MD5 8652bb8a09b9cabb2e98d39ab8d4d1fa
BLAKE2b-256 35acea71cce9a772ee19f36b032d53948df63e8a87a66645fef1fc7e14aabe4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8ee5d1de44a2e0048143d681f3ae1b13d4ad305d2f89e3a00c71885715b69c54
MD5 1b84d63aa7dcc3f1d5f63a058711bd06
BLAKE2b-256 437a105ced316d6717404e60e122b58e08a71fe96efbcd7a36ccca6275dced6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 518b1b937cb45bae0c12d07afc25badaf2e97a924fe3cfbb4fd17885e9b21f5a
MD5 3ecb8219a841c6fb669fbd07a5771c0f
BLAKE2b-256 aadc8a6d40b15b472f6eb9c80a65ef8f9837cd73ea04c1f2662d6e1cdbcfe93a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 170c170c17abdcb7e2d0c5486e938efc9548cc4b0e5fdbb16403fce7e03862f8
MD5 95f26d7cf9b1c8d9cc36d612d7ace7bd
BLAKE2b-256 0e63a179540b7cf0cb9479a2a935955684a53ebaecce4d6e5548032c5390f34a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 eabb9ea710189b059f4751f50fbac257d7614aa5227055bf3079c50d2f27c2a1
MD5 63a449cecb76e110bc3d3a2e6bb6b5d6
BLAKE2b-256 9eab123a7f61df49a4572cd14a188d7749365b793d5136211b012a5487958d99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a336046d9bf2bbe6745de602628b5e47d347bf21120f42c3893c01bc0b6ca879
MD5 9059b5929eaa391b78710f65562097f3
BLAKE2b-256 2fdd94c265db45c703e838bf0ee2070503910bc35534b51074e430aa29c0c442

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 44e44071cae499c1a2dfc785c13d33f64cca7f131e676e45236d2af900b761d2
MD5 b316fadd348726e8e5090a45a52e1a0f
BLAKE2b-256 f3f63f245d2cd60c959a1c6306a1129316ece5105b88e68f146bf484f0b43cd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 569d6aaeb9230f3536b8a621396dbd74ed0d95fa5fd0ec215a278fc16f3b9d11
MD5 225e091b940b9abe7ee24e998e2adcf7
BLAKE2b-256 0386854d0be0b6daaef1b3408a1c19a92465d7f60ead561b2253e4c8bcb45f1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c7c87ec0ee698814b9dc1eec16dc231998a055b92d8797d6ed08eebeeb6cd5a7
MD5 89c899e5091be344e9bff365e91dcc86
BLAKE2b-256 231e8d1bd362b35cdc3e5bac78fb8d5f59ae792467787c64b8e64ba798c47930

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f0a1f3deba23f513011a92d9ef222d6e20f988affde54a262be41acda9795870
MD5 238b8a6c146126d706c0586012eeee73
BLAKE2b-256 3562a6b67735f8722ea0ec39d373af8b3a5030cf1ff567daf165b53f774d1f11

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 166c81e128c4fb1f54e614655d2fb143930614398469935d9c8fb72d8fefcc77
MD5 e2def5022f3af1658a4be9cd71b90716
BLAKE2b-256 cc5b596f42788dc0d709968c9010219dbeb799d626603ab601e5d3ba15258bd7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1610e88e2e31c53d771d8c30e0b5a5b52a4b6a0c999a9af1ce5f14cc90d1ed51
MD5 35a3c63d63c5c0083e3b17d7017e69a6
BLAKE2b-256 19e61da43f3f232d8a03f4abab5ee4ba36d4af56a66546d2f289f70cc834ceff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f1a6f3fbfdc1ac8e4915968aed73285c52b5a2aff0c61e3a341cc2170fd2092a
MD5 92b8b01b6f4a9b91db88122972cf2e9c
BLAKE2b-256 c7043b73c15aab5326d7cf9713a0b7678073cdfae951c9924bbd9c479e032848

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c46d639fc8a358feb2f74f2da996139dd0efb23b404b6fe9cc734bc67ff7e73
MD5 89a4307ba4bbfbb188001d0616b23bdf
BLAKE2b-256 0dbc5d68eed67e421f8b9ebf60b6008a8ca3f76d836d33f9caea9b18d37cce0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 514c1a7e524884f7d482ede0fe3aa9f8f5854660fb2d6da3ebd9f3c05024f962
MD5 a78c2b916157e1ef1d1e8827afee0da5
BLAKE2b-256 d39036a29e0ac4523656d26f49b6cef2a7771d47c8f6f77983e764e0cf940d67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 7dc0308f221d827858f215cd7ccdf70574cd74bf712b0538e9ef8dd95b015b97
MD5 0db8678f6ffc9cf337d9b61da9a199db
BLAKE2b-256 af86ebca552a138fc8eb8a2bbbb87cc54b1a1712d421b55fe5b72417718f159c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 480810ed7d4747c767b64d4bd2b358a9eee791ca16d067cc5a22f279407a945b
MD5 c027a5ad554d1f83a569016ed9db1a6b
BLAKE2b-256 435d3a5dcaa3e7192e3d4f7e9917f886bb3bc6e77d3671b9ebf7d784df7b7e72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1ec11ac07f115c593f5babd36265eda49be2ebb0bd96e8c3164bcbae31655464
MD5 4f3a7df045635e497e07d71342724abd
BLAKE2b-256 78642f9b8c5dc87dad9cbdec12c57d909bfc198ab665638b1867d31ac9467eb9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d163de34369853a8e9d175cda82d2c376560cf9313f2f7df5a8ddcac2d7880d8
MD5 4a4f8ba3278751e2f04337187f039bca
BLAKE2b-256 4d43351cd466770b3ebe1c85f3625964c381405d29bb177e602efb5c8cb85ec5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9278c326321163e0b7d6fe0e2791cb72b001afad716595fa895a3034411a2600
MD5 288542c223b7492410dca95656c720c6
BLAKE2b-256 e6d561d784a527d8410be14667d9943c7b7bb1e144b914f7fb53810eda3549d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 46a3f0f795eba3089e4a6690478150c7e362c854db9455e4c00568f3888206b7
MD5 6da9dd4de691af9f3602f51435448475
BLAKE2b-256 a6bb5e37878a8b662c8fa8a8294c32b02a6a2a7dc149abe20090e96a25aaa269

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 d780c0c83fd0a33b5afdc6ccb6e4f3ac80ef050d26af7fc44cc5baaa0557cee2
MD5 df30a06b54fefeb1841e643dbdb36f47
BLAKE2b-256 21f270154156afbeb6468233decf6f512248d3713e95e996d93256b8c3889e52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 9d567f9a3dc970fc31bf373eb341a6bef766a4ef4cc7faa33c12e7134566d512
MD5 c8f18dd2cca8f1538054b473ce620cc9
BLAKE2b-256 e0808f5ae268a940d082cc0f311b81940bcdfee12689a546a13bdebf26a17b8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7944c29ae5cfe8d6d758d1d8dd0a2926cc2d6c4e143674259c860917026ee5ec
MD5 399e2b5c103cb01c63384e0915650ef4
BLAKE2b-256 e13670510c0204397f0f6408195fc8b0948b9367b1defe79d9088a7dad20d248

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ab2aa816cfe5b375f06a9d471194ffaf58dcf3fee8165a1331dd31cb8ab3bfbc
MD5 363b40f7ec143f793c2e27ce5deead43
BLAKE2b-256 2e0c76d13c143abcf22f3616aa357f5d9a3f3100ea74604ecce653da6bec049c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10c603edf18e511312229b4b77eed9ae301ebf89d618d661d3cb559de8483e7e
MD5 54e703a9f43cf8eeac5dfb254fc00a58
BLAKE2b-256 29ba41880128c66c70b2d9785e7c2abf39a486bdb874ab7933d3a58258924015

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 33085cf8ea0977aa1fe412c4edd6bd27c20ff2520668c2f277a60555337ce183
MD5 e95b02876625f105fc59c4518e65bd58
BLAKE2b-256 7b4497787d8b3c885f9cc9281f02b68ae3e3572308913294427b4b6862a8f171

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 690213cecb87a74ca3defb4cc7194459eaec559d5277094877931073089891bf
MD5 223091a92df1a016d542cfb3ef0110fb
BLAKE2b-256 825244084421248b5b087dd8778e3a7f87379ec5dd961c89a67619dff780e070

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6bed63884da14706eb5b84eafc10ca8e114344ac6a25fd5ad7bf11a1de9eff8e
MD5 df4f463c6d38e84f745dda5361d53dc9
BLAKE2b-256 75c7c75e191e078c30321920fc4cbd21e3f37df2381f8f443db9aafd320d2f20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8a50d20d4b01c5b4aadd9798efb077732deaccf72f2d9cfcf424c486b0db7205
MD5 b2f7261bcbcbe420b4621421dc013069
BLAKE2b-256 9122e18546512d77abc7d154e3cdd131d8b9e4c82dbc1d49a5103aebd3ff0638

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.7-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.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4523ec2f5c640544482fdfbdaa2e15b991bb3b9172b54516228c6e18e8dfeb8f
MD5 fe934b8335f30cb6b24eb542ca721efb
BLAKE2b-256 6ac74630d244674835e4686a41610d0d8d2cebf9ccc3d614dc3e9aa5beeebf85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f66d82d021375d9c602a4ca8991c54a6763fc6cee18f85701b51f2216788a7cb
MD5 a0c6cc38d6004f57a8c65ee8f270ead3
BLAKE2b-256 95c6a8ceacab093a608a3d9324a98312b777d98add7762abf51cca143cb470b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4f68330c2110455e1d89e8e7803a3386eb2056412c602f5084192f99abbb05f8
MD5 8b93defa23424eb4c4c81650b6d3ecfb
BLAKE2b-256 ca47e5351819397ec94f5d23a293b102418689d4631f3c2e39a72541f224493c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 75e8f7ca589f302152c0467747db8e21ca3ea5bfd72296784ea434e2f8d51dc9
MD5 d13671f86ddabc3b39003a19f61b64e5
BLAKE2b-256 d329a3b44c4b0874df4cb37d4192cc4475dd06c156306bccf254b2ce7b7ddaf8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4959f3ee4f51688dec6a75e7fdea8432156f48dc8ee0a481f06291b8d4157190
MD5 fa01c9c08a17851f249551e11e959d03
BLAKE2b-256 ae9bcb58099d16fdd3545c5b5eabd13b765470df527c1908c4f0bc05447378b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.7-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 cf9f98fa71bd8533df13fa90d53b1f3f5616158e11bc07be7ae0f857c48a4ff2
MD5 d7b3b9db4ac61102f1e77dae4926df04
BLAKE2b-256 bcc973e41dc4ac8d936a1ff0990268fdbb71466cb31f4aef0afbd97c77092283

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