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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.14macOS 14.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ x86-64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ x86-64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ x86-64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 15.0+ x86-64

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

Uploaded CPython 3.9macOS 15.0+ ARM64

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

File metadata

  • Download URL: pypartmc-2.0.6.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.6.tar.gz
Algorithm Hash digest
SHA256 a3492672bab95c7772f4e5e3acfe8f37a352712ee4647bcfd4b64036ed55c301
MD5 0a7dae2c531ac65e2e57390f5a6d245d
BLAKE2b-256 29291b1a474473487834bbe8895acbbd7b3c5a10338a17dfe76bcf3d36447c7e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e109ad6e00a72836ce5e64d2871ea42534fb971337d1ca5831dfbb45e4385624
MD5 92f26d298d65b9a30d39f6c0ba9f0f5f
BLAKE2b-256 3e0cdc801efd1ba6e165789f804d426904fcc7e52c68b329608f28f071851d37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a27ac5e80f713d35bb47d33bb2ff09c1d6dcc36275e8ce076a4896dc782469d7
MD5 8662d0e1151113d1a4bfddcecbd2da91
BLAKE2b-256 67f01b209b686e8e44e340ad1c729e9d709998c3a2719704260eb403b8c1bb5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c6504d2aa14fb33a746a77f8719fa36f2d4b57671cfcda3ef1d9e13a2c83e30
MD5 c089ef24d7c5241c3b6581ae4a1a991d
BLAKE2b-256 376fe17c56f8eb67ef83b761ad2b6d65c1c907b807a56ca89bf5fcbdfe6b4904

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 ccaf6717435fee95384282d4eb9592539460319d371b106503f948f7e7418d1a
MD5 b49be32602ec8125c13de03f48f89a6f
BLAKE2b-256 22b85bf59039e6a6d9b661905a64db515c92b7ccfbf4717eae8ee99c3f49289a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d7f980c833c17d055e20f24338bafacf19278b7a42286003c41631ca534905a5
MD5 cc3a9c49684a89f5fb603bd373c5322a
BLAKE2b-256 dde5580daee5de704a131734e1c381e51014938e1cc0bdb8f6dd92542605ec72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1aa30ef43f6d11f27d36e47170995d3b70f1bc389d0172e24a37e36c103107d1
MD5 7a8674e81b039d50b73eb35846651cf4
BLAKE2b-256 0ccc9de9d774a21c13e3b0d19d605744cbaa9c92941e4ad0d7556951474a5131

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d2748e925c3b3e0ab0b0b939e1dd900ad43fc45b0e4e3d67c05e81938c53cd5e
MD5 d42213ee728ff1b0439c3132b867310d
BLAKE2b-256 e8455b4f24439e4b601e433cca50711f388ffbbd9116d3ff5ef52ddcb064b8ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b40c08b9667e879b1ae3b2ea9ef65ab3d23eaec42677ae7ea032c5ee92417071
MD5 0da9b83c2f9c210127589b3c2b19a6e9
BLAKE2b-256 9038926f2d662add5e89b596c200164fcff7ae5f77d6b93cdac1e9df77111056

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 85a9dd5e7345b90fda5ef1a9d77c55c41e781c131c69e753cc477192356c9f44
MD5 a07094c41cd6e43777ab9a5549d6e662
BLAKE2b-256 73bce4c53f438569fd212325feb5a7ad0e92b2ab70fcac20da6d5665080ed8e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 858ccafc1ceb987cbe73e65f1085686e4d990589ef4b278bacbd4392b076a001
MD5 f2bdee4eb522e65f51dca6909f9b9ad9
BLAKE2b-256 f44501ae35b8e3b530ac8c4a7151ec8c51d7bd5c6e1a1dfb7bc018ea8a70753f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 42bb6345491c6b610928c80b53d3edda4e153b7818f19f7b7d9421c852be19d1
MD5 4df9d261588c1cf6f9e5a3b48f108f2e
BLAKE2b-256 858873b43407594dfbd261de168bba9a5d4cdaadd29caef56f63e7b0738308e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3ac06dd5477a9e9f898b2d3f9e9b45606a58a4f075e81594561786463b1c636b
MD5 ff83c3db8ac3e4d8310c3a62ef8289f4
BLAKE2b-256 603ec60f421d4701535b6080a08e4e9f521d31f698fc1764f9d0c000977b0e21

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 37452a2389400428657cf095449a2877c236f0d1b0c395691a01de8a21a15093
MD5 66d030cbb111680d3426cc87e9f5eec9
BLAKE2b-256 7cfe508b5f89dc7a7982d97b2edd1cc8af5389bd1c1e5d7c766f5f4de8ec7bc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9025997ab2eadc6081a3c6e0e00e3b2cf951020d1911769280d43c5561091d4e
MD5 e2d31e22a0f42b1b82d1dcafdfd40d05
BLAKE2b-256 24d876f03b393ab52bfca3eddecff2db032c359e3aa98b11e63957318d8db4b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5aace22aae4d5bdac86b5426850216cd3aed3a4f95720c9fe7fb625efbb54fb9
MD5 9055e5cc1a4c384d5f0131d41570d7f5
BLAKE2b-256 facba5c711d7a455f56e31eb72ea01f7a76ac1e4f5ad97deef9970a33c1422a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 ed7fbdb35aa8ccdce64f87105f326fc85951c8834b7ac49bea2e89f596c0de3f
MD5 2252c5872e9bd6529c5903c6ab5ca6dc
BLAKE2b-256 8f209f18415c0492089129df1bf8f6b66adb905654560e2b602650db515785f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 54999b47b0a351b4c90216d33de44ad0b4f893304e330c17a7546bae7ad3e57d
MD5 9cc4908239820d608a65575a5f30f0cd
BLAKE2b-256 76b27a2f8acf0473fc183270dac681ba91d1dbf46efccbab590379a692ed07a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 239acf4856d1babe996e6f028a35d63fd78395e604a2fdc770dd823162120f8c
MD5 961c51952547d9a197e9418874f05977
BLAKE2b-256 a3a2e2c7d2f40435ef1407bb38d58d55942d89a6f5deeb9e2a7547ba20ce716a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7365c43c4ca0f657f326487bb84d96fe9312a5040f6b624558b8b29564615450
MD5 c5539848d55bef940250c1bd8bf4d381
BLAKE2b-256 193ef43143dcbdff77fa39e1cb8a082f17e1c24b2974197f5aba651767666925

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 637407e5f4f2a8a89fa433241656bf6444536f071e7dca2f0ae13abad45b27b7
MD5 3bff0246b81c2e6146cff6b7a21347ee
BLAKE2b-256 1c7e14965e1b13b0ff18ebb6db82eb9b406ca50bb35d814bcd49d61b20292309

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 da2df73c8d753a7ea1b52734b3834b48c125c2254d403badd664823a881d982c
MD5 96610a58bb0b4676400b9cd7fefee0c3
BLAKE2b-256 4e3d3d8f9f2bcc0309108f7a3fae47725b82f09385d59b682fca61e3febc7c55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 30c08754e9f32a04e0f1209f0de21448bba9ca4b2513069147ffc1f34004811c
MD5 8985944ef8a4b2453ba0428ab7666635
BLAKE2b-256 43a08d1978a0719780d75d43830c95bea969ef28a909016dbbd5b28ac2db4ddf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d9b91e52e1c21f626cf7de46d6abf01de87ee5d0551c6b1d4803bd753c9e7905
MD5 745497036c970623acefa59531d99345
BLAKE2b-256 96843a6b44b76d6bd24423e9c30b74f6bcb7383d479d988e029cbe9d529e3fca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b4d0f8c4e1757f57590355255b2f63d1f4b8cb896422f2d7b851dcf70caa87b2
MD5 89ad4ab220658db3f69341dd0b3c9935
BLAKE2b-256 4af12ac5254c47b098b13a02b23cff4aa7f28e90e06e192f9248fc61367ce78d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0e787ded450f2a35560d48e4a86ebcfe0d28fe894f0e7556789dc1afeec644d9
MD5 d86fae9b16dc1d91e3d7070abfc9ea70
BLAKE2b-256 706b517ca3f84257e69d1e27faebd7bed1bfd8c367ed8dda3573ea8d82e82b0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 536a88d3e9e5ba974ea7fcb34e4bc91b680078334a660dd9f8426d6bd02184b9
MD5 640150f3d89eb5de08ef10379ca3f709
BLAKE2b-256 2df8828ec55f4b9b3282fbd7bd9fd62edacb308f456fe3787502edded977ecf5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f090ad198e91cbd9d3246b0179c1d27f12500873bfd3f602f6673cab5b58efda
MD5 71acf1539888e032d7eae6a8263d8914
BLAKE2b-256 c6d5d988e42110a67276ad5ca297ae8b41223f10f747048fa4a85ed19a2d4d69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f5ee945fcd1b50f9fdc7462300362f6db4996388e51cb1e601bdeb249dde6382
MD5 0b3b11e268132e3ccf1ae1c6292bab05
BLAKE2b-256 ab1fa561d6c4777301fc79405a8c5c1226a71df6b73d505866b1f05d4a810b38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1873c6ea0383388cb7c97228d66c9ef4191ab0dfc9731b0ec7a4dd02805c6331
MD5 bbebae18d9d509b627923e02fbcbd75c
BLAKE2b-256 62829fa46763f5018083552803be86903ca52929c07e6ab0e426b6029342e858

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 75910aba825c854d233bac9d2fb0e4f41eb5fc9de9af5973926a8b7ed5996a53
MD5 46e11e6996edafad34e83d05ca260c21
BLAKE2b-256 f85b41a2a5dca497ec1c756036e2280dd5a508a2ea2195992165d8ecce619b9b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-2.0.6-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.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d645ad6a4a824344fd01de5311023700265c1686ae001df5bcf4b1a6d26ef849
MD5 ca027e6b0732e9101c9affd2b1cec20e
BLAKE2b-256 2c103ef2eca3910f4d449391969135f4ab50bc5d367cf5e04145298108aa6549

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f13d94c15e23ef3818adf5814f173812e5d280feee03946bcfd59b1348bea41
MD5 d377d8c159731ce77a7b929cb26299a9
BLAKE2b-256 ef9d02225a41e5b0da1ff52e7f0eea0a260619bf8c79cc33b2b9e4e7b5d13672

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 53a83cf2c4d1e1afb6f2e53bd6b9cc7680ed13745dc3de0f03b85dc7599b8b71
MD5 ce0a8a11730b880205841bb24750ada1
BLAKE2b-256 51b6916696f647c0c1283185d1486558c69756b73f465829166b7beb89835025

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c141edb07689716d4715403eb98af452327090f4b91bc0c316641717379e9745
MD5 cb21d4fc4f977de69ba31ec6d75ce2a9
BLAKE2b-256 cf4e6e241a8ac22c8148e2472116a56f2bcaa0c8d2b296a919d37a8bd47044dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 cdab00e9aa7bf993d7a0904e5816205b9a10e8d80f6ef39538c1a80715aa8ef6
MD5 de05ca29abe0e904774fdacf0a43589a
BLAKE2b-256 ad9329ae08d0b882081fb406e6d91df5be443213f8f67ec0e3185d642d9bf124

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-2.0.6-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c18e416380299af9125e115298153667b4953ace1d0aa3dff51aae28cbdc671b
MD5 7a83c2a8fc80f3fe1c557fa3b1f2585b
BLAKE2b-256 eed101ef218e1260a2e78a622cded1ceed0fa3fbdd2eefd4047eec422bd3c523

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