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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

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

File metadata

  • Download URL: pypartmc-2.0.4.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.4.tar.gz
Algorithm Hash digest
SHA256 c3ecfc7e3582ffbe8c7f09668c916a45d23a37f4726f94c7cb71f917ee09dad7
MD5 0ed10cad810433f74620f398950c7e8b
BLAKE2b-256 b00d4bf046bddbf6ee364f2c71f61456712679c6cda43fc40f07418fd79632a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 503c29080d22846b7818547c504555bf052713b85e9434a3d8b4e95b97f4a0b0
MD5 0dd282bbdc4983d11f1169ee24ad8028
BLAKE2b-256 0c88b834ae8662b1668375f596b0f02c1115156370f88c68d07d33defb0af3cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a7c9392d659ccf853d6e8d0b45a76649783c1cf3ae967ba5a84a3e5a870384a
MD5 83c54a2f494c5383135e0aaf7bc7b471
BLAKE2b-256 37d00d3162da9cacdbdc345bdf893a2186cda46416417be37a12ae84e9271c6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 62f8cb42ef2df76425df4a8e23c6ee1f60a8800e9ff1da87e07bd0563a0cdd7d
MD5 3f5dfcc2aece29d3ef81dab5a4c8ef57
BLAKE2b-256 62cbd45aed3695683258b14db02b034b5c894f39d5e1bc6d5fc4572efb1b7a24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 24244d76976bf6ac96109cd217c924d1999611640e0c5da474fb454359f8f37e
MD5 3db01485f6285bfb7a1073e7f4c4011f
BLAKE2b-256 579e70e9419502d6bb2f165011de7c3e4a8ba4fafb86a931138908848643e790

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c51cb46a2a2fba57d566d6a35f903e9e3cea33dee601664a06d9c579f3652074
MD5 3096bff92b62c3baa191c88116493279
BLAKE2b-256 ae33ded7f15a7ea00319750df906d559775db848c569be734543102bd1bde0eb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b3aff84f1cbc36c1de653652d8e525da333d643acd1eab18c173c975c80e1700
MD5 887c2b24ca2723c5b2ff93455e91f3be
BLAKE2b-256 f0cd0e5f611b8d7213db72abae24f2ed42cc90e69cc6d565fa60852e41928700

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 95e17ffed73846f2f412628336fb1cfe509ccbf48f5e23f43a6e675c184f0a6d
MD5 25f623302a75ab70f219a28974ffbebd
BLAKE2b-256 627d347b4d4e69dd44a4f027860e1db0001bd7dd6f2fedc5af42b3fe524c5321

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a8ca4f2caf5f29f1e75dea6ad4e0872b8b6cd506bdf8063f1f94e936fc66eb7e
MD5 6b156631a9f290527a1c81001ee4e09d
BLAKE2b-256 41859583e489f4fe43acbdeb88fa629ae9bb47ed739992bdfb94a8da7515457e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 e342ff6daac7b3347f1b83c54eccf79524a6ca6338943aed44af756c4de7ec93
MD5 60c9a390a13c84d623a25b36b14bae5f
BLAKE2b-256 5915d4533d868533aed43b252c8f33c3f8024ebed968beb5908e799a9255eb4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 eecc31127da2c074f7e1f1b7ec0b4223d8f2da10369fdf28f546d48c8807e5d6
MD5 7e22a045a9ac58ae49083dcd233bdb56
BLAKE2b-256 a25ac2e58ddaef1c5ef40d5c417eaffea8ffe3d1c7c48fb0619f915b9ee9f50f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9a458bb3e037cf4600cbfe397ea0d7418eb571ec81e00b80002a1e938b15c2d8
MD5 026564d2fb0f033ff24c7189f37b40a6
BLAKE2b-256 75e3ac1466f87a83fd4f30f00d4a1d5cbf843ec4343458eb49ef47dae2a8830c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebd9e67ad93831484fa1466ac3d03d160583d851bd88be10c032123efa66b2b1
MD5 30fe43ac59cd03709bb111c92145a94a
BLAKE2b-256 33b3c79b2ab2e579cc9bc8c2f03cc23389b905dde646d21056a63629c0ca5bcd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 de248e3dc3314a20a55c1405cee2c601d872efde2624671ac3bc552a3c2ce5db
MD5 f2b452afb3213a86431b9558a0289a97
BLAKE2b-256 f2afd9ed05ee7bf2d163fb2113878601ad6b7a8adead2c7016f3f77613334a90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 1a56de7a4a376985f8ecdb93629659966c7f68321dcc88e831f97968ccf7ccd6
MD5 bc0c6f69ffe8bff5f16c5f1d8e5373d5
BLAKE2b-256 b160c14739325d358c499818fe1a5ec0081b0d10a8e0bb1e18cefa2933ad634e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4c684afa59585ca67852877ea2715378d87b16f87fe5d25c0974f0b77ad48f06
MD5 218e623107ba5615fe2c58ac26ef4443
BLAKE2b-256 c7d366f0180761c24ae6ddc86db91e35cda6d0fb7cb5d4553a4d962b645481c8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fb5917ba0c85a9a7ec83e0933c80418e090b27eb5c60659c38895cd1836cbfa2
MD5 5a0829e4c21de9a60006fb2891edfdb2
BLAKE2b-256 8495f7e5ae9bba7a7c4159acdd94a8fa89f6fbfab26947950610bab7dd6efb41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0fecdc3325a9644ae73febbd2af778c6616a7190502b2578e7e75b01503c7065
MD5 b04d8f32fabd1b55de8cf08de4dc07e0
BLAKE2b-256 045ff5165741f7af3d60edf688e09b6da88f2399743eba78d30e51e9c0c616ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 74193ca5592af98bdf0ef3b5111ead731c2951df88e81a7a276460c984747988
MD5 95b3413fdbdc172f6e7ce751de7b30b8
BLAKE2b-256 118069b2b58d846108398c3cc6da5bd36254a452f497008760a3dac4f0e1b663

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 6c7b12313aac6e3e5838ee8497f751ba150e52615ff4d67fc9f14287add471cb
MD5 dfc8c8c9aaa809917b40ae2458d2fc1c
BLAKE2b-256 7eb9b159963231be9c4fe00a31aacb2fe1fb7e07a3d664f1461718eb425e676e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1864227cd1f6527889ac3ee5769d1555af5bec01775e4252199c3ef227b60fd8
MD5 8af252909969f1f273b4b4b53c6bad18
BLAKE2b-256 7c90d6243afb9325b82b55874506b57ad4e0660692d323e2a5665a904f2b665a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4327caf161caddeb49584120fef9e9368a4cabdd77001da748d3afa174c5c110
MD5 af84a990daf8879663f9831b8def335b
BLAKE2b-256 e7b6b426f02442c6b32bf5f6b4149eebe0604704216318512d42e2a5c062badd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 560a2d49d0bab087e3d3c73da374e2ebf50afdd705ec861384f2aaafd00f6ca5
MD5 c61f84220e3bba827b6bc2b17d9dbf5e
BLAKE2b-256 9655b0d8ce9327d899109a3865ee0f213f4d73fefeb88319be2ea7f7895b3fea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 97fb9c1c4907c96139a9cc84f545e34fa927853fb4781fe0fbce82ac20caf6ba
MD5 eca7c6c0f6577066d57cacf0c47c60e8
BLAKE2b-256 c9906bb1d8194a62e0ce77cb9ac2fc4d6e38405402cb1d6e2e7fb6527f92edce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 03358ae7077256f4527821c14b55dfa5bcb041ccf6a4fbf576d6a4de8fb9062f
MD5 20d2772c9f847f7bdeda2437322778a8
BLAKE2b-256 fa3b6c7b8ad2a84452743a834ad209e230b1c741332dd54d324d9ac928acb23f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8738ecaf7c8502a92a0665c8d4a08bd89e3d025950a3e4d59a49798b258b6e8d
MD5 e5efe0ed53ea2b50b5fd572515b0e870
BLAKE2b-256 0b9ae5ee0cd802ea5d20bd8b5ef2a05c3f7c848380d0e0a4f668765726e51b88

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.4-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.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5b7a4aa6a62846ecf630d09ded29a0008201475d43be7b9da9bf1cb61e167f4b
MD5 df94be6d7bad663bb48f61cbcec25d85
BLAKE2b-256 b916f825002d61c857e73392de853cf76436871692f789105a5a7596f5bebc1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e57cb6fa88934c05f9a0a8d67fd319f15a116a0a2cbcd52876fe865f4822874
MD5 5910576465ebfe860b684548f7e3ab9e
BLAKE2b-256 ebe8480f62bf3c0a79240bcc175df1bf38320d7a1e8956f3a8f962874129b327

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cac7db9930dc7a66a8755fc4b3a34f978eaef738440205e5597d016375399b3e
MD5 5501dfd268865b5fa0e6680c942c3921
BLAKE2b-256 ba158a8b1c545371dbc64014d53a9e5045ec0479866b7c0c6c6cc2a6122969b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 75801e430a3396595802a7c880e1a90aa5121cf93fd8b07f25ed27d1da3b3ccf
MD5 b24ce18c7d5a858ca7326173f4fb99f7
BLAKE2b-256 ca62e6e019e1aa29a9d9b0bb50dd0f01c4834f45a5ff6c6a6065da7af346de26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.4-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 160ad2820c59955350faf61e61d9e9bf06a0b20c44c6a3f02c25390544c06a73
MD5 e9db6904f1d40f4e0e8c6cb5ba54db4b
BLAKE2b-256 98cb2e3b5ffdebf3b341fd3c97612b3c90c6438f900b5bce9c7ff52746f8bbed

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