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
  • 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
  • Coagulation model intercomparison for additive (Golovin) kernel with: PyPartMC, PySDM, Droplets.jl and dustpy:
    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]
    {"OC": [1000 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0.001]},
    {"BC": [1800 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 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)
  Dict("OC"=>(1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001)),
  Dict("BC"=>(1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 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;
  • a single-line pybind11_builtins.py file with just pybind11_type=type inside needs to be placed within Matlab's PYTHONPATH to sort out a Matlab-pybind11 incompatibility.
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}))), ...
  py.dict(pyargs("BC", py.tuple({1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

Uploaded CPython 3.13 Windows x86-64

pypartmc-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp313-cp313-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.13 macOS 14.0+ ARM64

pypartmc-1.7.2-cp313-cp313-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13 macOS 13.0+ x86-64

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

Uploaded CPython 3.12 Windows x86-64

pypartmc-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp312-cp312-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.12 macOS 14.0+ ARM64

pypartmc-1.7.2-cp312-cp312-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

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

Uploaded CPython 3.11 Windows x86-64

pypartmc-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp311-cp311-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.11 macOS 14.0+ ARM64

pypartmc-1.7.2-cp311-cp311-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

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

Uploaded CPython 3.10 Windows x86-64

pypartmc-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp310-cp310-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.10 macOS 14.0+ ARM64

pypartmc-1.7.2-cp310-cp310-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

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

Uploaded CPython 3.9 Windows x86-64

pypartmc-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp39-cp39-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.9 macOS 14.0+ ARM64

pypartmc-1.7.2-cp39-cp39-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9 macOS 13.0+ x86-64

pypartmc-1.7.2-cp38-cp38-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.8 Windows x86-64

pypartmc-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp38-cp38-macosx_14_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.8 macOS 14.0+ ARM64

pypartmc-1.7.2-cp38-cp38-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.8 macOS 13.0+ x86-64

pypartmc-1.7.2-cp37-cp37m-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.7m Windows x86-64

pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

pypartmc-1.7.2-cp37-cp37m-macosx_13_0_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.7m macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: pypartmc-1.7.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 66f385d0aa4a673995eba1af3c6f8be9f17aececdc969359770ad1561bbc3549
MD5 6fb3534606749cd472e063e0abeaf472
BLAKE2b-256 9850d4b8e96f6a9ec3d9e059dc4e98a2a6b548fb4f461b4d0b8d2b2c4f1e49d2

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a24bad19cf96c9a8edb9405a5680256c7ac7ccae569a3eb3cc8477b7b0ef22e0
MD5 98f8a386a14bd4206a5ad80bbd91139f
BLAKE2b-256 8717b11c9e7541aac388876ceb74cbb305e2a14e4db7676d17e6a9aa21ffcf9d

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 84e73e3b9bcacad724edc5acd85e8dbb7254399fa4c9f9c869bcfc3bf5ad30fa
MD5 96e51286d3d2d36b23bae0e854de43ba
BLAKE2b-256 511aff6ec6300e4a542d25f9afa7c82866ee65fbce1c1d0262244f6dc5a244ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2cde00a9c34c6c6445d7529ca9775fc0a66905b3314a01a3f40a2404aceaea64
MD5 57fc17f08661e8e4639e4de927724cce
BLAKE2b-256 118b0a76ec461f3d7d31608d980e9d412e32007552b6f004424d60b76e40763f

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 63287f902717680ed08c5c1d1af9e8fdd6a41122b61195e92383b061cdcb2891
MD5 6465c7759430025a01bf44aaa8a4942b
BLAKE2b-256 84bc4fa64ae3d975a6de09fb6d212b6f69a0bb66584538d757e0ecaa82091337

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-1.7.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 33f3a3586999ca5b15e4d4d8f5c88b0fc70fb516686bfae3c3e17e779430e30c
MD5 83aee20c17e447d84479ac2d5b57f008
BLAKE2b-256 ab207d3c195dc6957837de419b777da5a114e54afeca7aa7a80f2307c448cd86

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7ef4d3cf4a3363d05fa2b66309354aaf26ff6c8c68cbb4257e8d247ba754aa1
MD5 844cbc26342753894be060d384894b6e
BLAKE2b-256 4ef7838086216bb3abb8264e31c7699095972483592eb6f57a8ab0b6a4423cc6

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 459fd3b48002ef3e5d6d124fda91d0ca89070065737fc3618c19245d69be599f
MD5 422c827bb55a0505a6e0bd0751f8bc3a
BLAKE2b-256 eacd4ee48b211c61d021d149bec17062e5e8e7c5b3acffdedbdd6cee2dc603b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 68557afd1e051c5411f7747648a8cd32bf073f2d2acfc87e52a40836aa9fd0f4
MD5 4f07d98f97b1b8e32aba793357471966
BLAKE2b-256 cf7d92aa8df2fa717ef2f8b053c6389781a79ba0ce9b38351e9946f4bf56d2d8

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 2f4b5da6dc78a36ba186df238f3f19140f841a7453d7b2e1ad22e5e997c92a57
MD5 d7988be62e8954a444b8798cf66d0c54
BLAKE2b-256 967029504de9d5c0ff4a47f76f91c630bfad97600a894f9b89a5feb7d27ac2ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-1.7.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1fad683aa7ddaab213945b5e96a086a5c29e779c5e432eaefdb49c99f7a6922a
MD5 35e8ab88005e12ef7ad7dbf24058b182
BLAKE2b-256 956eef38b261aad6946785cd83b22a7f0af50dc31c2f0f250874e0817bbd4b1d

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c8a168f10f4317d3cfd501b579e46bf0ad99a1887795e9952926b546e3c565a
MD5 dcb2ee12ed88ceab2d410a5df3cf8384
BLAKE2b-256 c74c11cda8854a03f999ee7680644c0ff6a450b35a7a058764c85955530d04e0

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b3830a367b5b5c64e02e8a5cd6e87f7afdf115ab47eea0bb9821240355aa13a
MD5 2c65aaff287d81f3931c621f34b71251
BLAKE2b-256 a5d2a7e03ac7d8539784759acfaa17d0beabcec7874d22829f07b8bc23a98a53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e3367f02bc8721eaace57ec1c2bbab86539148bc1ba5d0ed7285df33edd8dcd7
MD5 b7141b9fb5830ec05d0dcb58aa859d29
BLAKE2b-256 a0b7cd2bf7681a2e4163ef7ac6dfa7b025d39c41fbebc0858c0af1321a6a8c80

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 0fc23c28965992667b32e726f2d396a6a340ef06de33520c95582035485ac107
MD5 b5feb1aae462fedea2db30cf264346a0
BLAKE2b-256 cc2455b3c4f6f48aee34fa03f3dfab51f5fe3e1895e89533a605db2b9d9ee0ec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-1.7.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c0386f4be1546310f1896ed338e1cd0924a8940347088e1e0d07095a740e4c89
MD5 ff9a354cf914fbf21598c7c9880ba86a
BLAKE2b-256 48d1bf27b959aa5f1991274e56d3698efa33b3019ddd9cab65c66053f7d7f238

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5301d6b8ea4e3696cb6c7d31926ed065fad9667d07e0c8c1317aaee8ac452aee
MD5 33924c24fe8c55030a7367b3fabece3b
BLAKE2b-256 93021f38d79156e801bfbaf60fc2119dfd4c05bc29a53cb4607f058c6e2995d9

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6efea6b2814e0917c292cf409bf219756eeaec433f0ce8885141f9ca2cb15683
MD5 cce3307efb360455480f6df79ac5f358
BLAKE2b-256 21dcfef92f78fcf54cf7231e8f4b99adfe5fabff50015e74a57021c8ed9555ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 af93195b514b8b16737a18a2ed4dbc1f317a554b4bcc277d9b80db43e77d7a5a
MD5 694a7fd64d4125206b17260c232afb5f
BLAKE2b-256 720ca752751cb8c7a8f721fec1e9a9e371d013ec663f709ee492dbb681503c19

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 103695020c8af3885f369c43e5719672a4b9d52f028a4b5655b955e0d4b79ff0
MD5 9ab5a2fee0df9db65ae2cd50a08324b1
BLAKE2b-256 7a3920a33ff1df3dd1ba487f4f130dd26795fc196f46308731dc0a3798a1381f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pypartmc-1.7.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0649f9581c293d1bc6ed2ffaf84685020e898be292d22f6d220292ce68eedfa4
MD5 4f7e522627298d92e784cf970fe54b17
BLAKE2b-256 25662c1992ea67debdde64bece85fc67d0652d1efdd5ec705e571533de2eb842

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc8f28d2fa08599a394231a01551b3583c97e06d524c31ea6de64b4e8a9a2fb9
MD5 4c6ce9b9351708cbc7736d5bb3c5cb62
BLAKE2b-256 072b852a50c05942c20876d330b89f81f0d21266cc756a65d618d7cf13c82399

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 615354a25ed2cd7d7b368d496736edb724b3050c3f0b136b73c1dd23f39acfe5
MD5 fc467d11079777e6c348b0a7880f090d
BLAKE2b-256 f1b9112a321992b89984f90a7457bf8671fd592d14b645f486d707af60202d58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 347467790dcbdd67f2c8963d0e72470fecd5f8314ebb19478bfc1ff677386717
MD5 2dd2340a8bf0e847e0a889a706720d2f
BLAKE2b-256 f1ae25930411fb9e6237070932906b8c45c2a078a3e8231d642608e71a0df4b0

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3bc156b6bc7fd17398cb39f54d5ef3a975a0aecb2995f6d08a99e3404655382e
MD5 fa6d92bbd86176581e3d38533d1ef2c6
BLAKE2b-256 c2ac7a66aa027b2eb93ce65f1ba2d72764f3ce0c303842048468ef2df3bddc98

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pypartmc-1.7.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 f5e7f32d48bf5a7f4807e1537103806c5f7eb4c46e8b07c542d017e69094c1d1
MD5 a5f92ce20fadcabd20763b85b035d500
BLAKE2b-256 d8a5a2baccecc3c59200de23ec9f4f6cedcc075f5243e51096774931b72e5700

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6dddf1420acd9ace120242558babead7b3cf15d797f41cb09856117171f0ec60
MD5 ae6daa648ef732bed1618d2eb0278122
BLAKE2b-256 5babefe6156f3789d9b9a65fd54291cb19fc24e186432b5c6b08b55354b26608

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d6473602f6bb3f4c2b6d24c4f22a70d3c87e9f630a4397e945e9007fd2bbf8cf
MD5 ef2d1c0ed753fc3bed68bb6124088a86
BLAKE2b-256 bade0943a3f6fbf6197b0c123435129898712d37c5209fef0f1bdc8eff84e728

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp38-cp38-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e20eb6b7cb1abee3bdc14f08e7b9b73e2efcf32f206f79ad6b2f848c30b69288
MD5 c5e35c8e5e834d0e4d270d50b8c9966b
BLAKE2b-256 9eda36c3a2c66c0fb5acbdef20266ca60aa2cc212ddb8acf1c7bcc021f0fd6f0

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b26af5056a5f24d9872b797357ca92910c5f34c37d22ed02b8c71c4351afc4dd
MD5 a0be81b5f9b9b83128f25661b7889d8c
BLAKE2b-256 a22c389b3943f79c1fd263ccd6e04eb6fae2766d62a19102cca764e365f74a42

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pypartmc-1.7.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pypartmc-1.7.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d9132f8c06193e3698b567d959f2cbaa690dd119c7a4515b87556bf3ac8f24ca
MD5 a6d6c274a4435b44bcf6ecbe35af6765
BLAKE2b-256 b97646684c239e44d1c9b720387c0bc88c51ed7ce7b804ad217f6be62aee0d5f

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 921ffa69ec02876d8dfe2a1efc33ce9e8668f6ec20a34b006d278342e140eb68
MD5 8eab1774c00a74d78abdbbe546460b44
BLAKE2b-256 c03830e96cef24ff590450422ff617bd8cd7f88762e81fe7eb2cb417a2fbb787

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 16f87253127bd394224748e618bac2049b35945780a0259e49129c64e25ca08a
MD5 4ccaa410a6b16892d66810f8ac4b8d4b
BLAKE2b-256 0429a2d568e9181d5f124ac1c0250a1cb75ea77bc62e06bd7a6c329b8579a751

See more details on using hashes here.

File details

Details for the file pypartmc-1.7.2-cp37-cp37m-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pypartmc-1.7.2-cp37-cp37m-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 28a6a268a59c509edca4ae59292898da49e4c47eae1cf1147c2b469c6ee19c88
MD5 8f4e70891bec45389b9bc9fbc78615fa
BLAKE2b-256 deabf1944fa6b67264908d46f6f6009904b5ee80adfc13222b474e5d21085ff1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page