Skip to main content

PackLab logo - sphere packing and correlation curve.

Badge

Status

Python versions

Supported Python versions

Documentation

Documentation status

Continuous integration

Continuous integration status

Test coverage

Test coverage

PyPI package

PyPI version

PyPI downloads

PyPI downloads

Anaconda package

Anaconda version

Anaconda downloads

Anaconda downloads

Latest Anaconda release

Latest Anaconda release date

PackLab

PackLab is an open-source Python package for generating and analysing three-dimensional hard-sphere packings. Its C++ core provides fast random sequential adsorption (RSA), while its analytical tools implement a Percus–Yevick model for mixture correlations and structure factors.

Use PackLab when you need an explicit non-overlapping configuration, a reproducible packing statistic, or a fast analytical reference for validating an RSA result.

Features

  • Random sequential adsorption of mono- and polydisperse spheres.

  • Periodic or finite box domains with configurable stopping criteria.

  • Radius samplers for constant, uniform, normal, log-normal, and discrete distributions.

  • Pair-correlation estimates, packing statistics, and Matplotlib plots.

  • Percus–Yevick mixture solver with automatic, resolution-aware wavenumber grids.

  • Optional PyMieSim integration for scattering and phase-function workflows.

  • Unit-aware quantities throughout, via TypedUnit.

Installation

Install the core package from PyPI:

pip install packlab

Install optional scattering support:

pip install "packlab[scattering]"

The conda package is also available:

conda install -c martinpdes packlab

Verify that the compiled extensions are available with the interpreter you will use for simulations:

python -c "import PackLab; print(PackLab.__version__)"

First RSA packing

Create a periodic domain, choose a radius distribution, configure the RSA stopping conditions, and run the simulation. Dimensional inputs carry units.

from PackLab import monte_carlo, samplers, ureg

domain = monte_carlo.PackingDomain(
    length_x=6 * ureg.micrometer,
    length_y=6 * ureg.micrometer,
    length_z=6 * ureg.micrometer,
    use_periodic_boundaries=True,
)
radii = samplers.UniformRadiusSampler(
    minimum_radius=100 * ureg.nanometer,
    maximum_radius=200 * ureg.nanometer,
    bins=12,
)
options = monte_carlo.RSAOptions()
options.random_seed = 42
options.maximum_attempts = 100_000
options.target_packing_fraction = 0.15

result = monte_carlo.RSASimulator(domain, radii, options).run()
print(result.statistics.packing_fraction_geometry)
result.plot_slice_2d()

Analytical reference

Use the analytical solver for a fast Percus–Yevick reference. With wavenumber="auto", PackLab chooses a zero-inclusive wavenumber grid from the particle radii and requested distance range.

import numpy as np

from PackLab import analytical, ureg

domain = analytical.PercusYevickDomain(
    size=10 * ureg.micrometer,
    radii=[100, 150] * ureg.nanometer,
    volume_fraction=0.15,
    number_fractions=[0.7, 0.3],
)
distances = np.linspace(0.2, 1.5, 300) * ureg.micrometer
solver = analytical.PercusYevickSolver(
    densities=domain.particle_densities_per_radius,
    radii=domain.radii,
    wavenumber="auto",
)
result = solver.compute(distances)
print(result.wavenumber)

For an explicit grid, use analytical.make_wavenumber_grid(...). PackLab warns when a manually supplied grid is too coarse for the requested distances.

Choosing a workflow

  • Use PackLab.monte_carlo when individual centres, sampled radii, box boundaries, or finite-size effects are important.

  • Use PackLab.analytical for fast parameter sweeps and an analytical correlation reference.

  • Use the validation gallery examples to compare a matching RSA configuration against the analytical model.

Documentation and examples

The online documentation contains theory, API reference, and executable examples organised into Monte-Carlo, analytical, and validation workflows.

Building from source

For development, clone the repository and install it in editable mode. A C++20 compiler and CMake are required to build the native extensions.

git clone https://github.com/MartinPdeS/PackLab.git
cd PackLab
pip install -e ".[testing,documentation]"

Testing

Run the test suite with:

pytest

Citing PackLab

If PackLab contributes to academic work, cite the archived Zenodo release you used. Release metadata is included in .zenodo.json.

Contributing and contact

Issues and pull requests are welcome. For questions or collaborations, contact Martin Poinsinet de Sivry-Houle.

Metadata

Release files for PackLab 0.6.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for PackLab 0.6.5
File
packlab-0.6.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
packlab-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
packlab-0.6.5-cp313-cp313-macosx_26_0_arm64.whl CPython 3.13 CPython 3.13 macOS 26.0+ ARM64 Details
packlab-0.6.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
packlab-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
packlab-0.6.5-cp312-cp312-macosx_26_0_arm64.whl CPython 3.12 CPython 3.12 macOS 26.0+ ARM64 Details
packlab-0.6.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
packlab-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
packlab-0.6.5-cp311-cp311-macosx_26_0_arm64.whl CPython 3.11 CPython 3.11 macOS 26.0+ ARM64 Details

Total release size: 28.0 MB

Release files / packlab-0.6.5-cp313-cp313-win_amd64.whl

Download URL packlab-0.6.5-cp313-cp313-win_amd64.whl
Size 5.2 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
ea3d5f3a9a890c0c22adbeb936de46d64e0d95615609b30275ff98033bf2a617
BLAKE2b-256 checksum
How to use checksums
478072becf9d5b2628145c778a5ab9c6eec57520cbee60528ef61391c421bf8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6b70b2a8da81b1c4fc14dab49cc3d1dcc5fb0b9f6e7b086de2b6d0972379511a
BLAKE2b-256 checksum
How to use checksums
5d25b41891c3417500cb9d6084a0603f408fa193360b4ce84151a86a282861a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp313-cp313-macosx_26_0_arm64.whl

Download URL packlab-0.6.5-cp313-cp313-macosx_26_0_arm64.whl
Size 2.7 MB
Tags CPython 3.13 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
a5d371718c14a277ef5c638676a7b5902be97a6e9fb5a4a789cb720fb4227d2c
BLAKE2b-256 checksum
How to use checksums
d924e24b60719b382aca67c0acea91dc956b6caa51055e2a065e323c94711775
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp312-cp312-win_amd64.whl

Download URL packlab-0.6.5-cp312-cp312-win_amd64.whl
Size 5.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
48f2be7a617bf9bfd90378adaa65fc5d85ee63f21503ffd444acd6ebe732cbe9
BLAKE2b-256 checksum
How to use checksums
19f17afc4a2cf759c72022b249ab4875480cd3b6143b2e762ba96999d508aa15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a02c23337c72660f1c5f95e0aad7943094b3a49765c712ee0842f77f69320797
BLAKE2b-256 checksum
How to use checksums
5d05eeec4819394f1837e53ef25e8675ba6560981dab2491a705b0292669c2bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp312-cp312-macosx_26_0_arm64.whl

Download URL packlab-0.6.5-cp312-cp312-macosx_26_0_arm64.whl
Size 2.7 MB
Tags CPython 3.12 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
ef6953c31d0de77f454d4dd5a290cf5532e565848ff20a54dd6cd0daee195d1b
BLAKE2b-256 checksum
How to use checksums
4df0ca0ded5c70c1be7e65c069fc975d7a1704a454e2a8c281cb7444fe79fac1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp311-cp311-win_amd64.whl

Download URL packlab-0.6.5-cp311-cp311-win_amd64.whl
Size 5.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0c052ea9b510262ba68cddbc5f9108c1c66f9927d4ac59ebc7633ccdbf2e9f40
BLAKE2b-256 checksum
How to use checksums
8b3148a747971c1a3844f38f1626a88743db63cf2c9e8bb07c595ec694338470
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f5a1dfe959079c69db5360a3b7d437924deb53ef1a84c806023106d8df7b1442
BLAKE2b-256 checksum
How to use checksums
db318c64a8bee12915e9b50dcbfa2901c0b01d00e37a129eae18dfd6e6e38996
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / packlab-0.6.5-cp311-cp311-macosx_26_0_arm64.whl

Download URL packlab-0.6.5-cp311-cp311-macosx_26_0_arm64.whl
Size 2.7 MB
Tags CPython 3.11 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
1a6b4d16a8acd40e0f138c2220f7c7ab30168c92115571890e6069d4d5fa334f
BLAKE2b-256 checksum
How to use checksums
58e77c50a367d86987ca4d26291bcc11817ea983c3aae3af58102c5675200e96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

0.7.8

9 release files

0.7.7

9 release files

0.7.5

9 release files

0.7.4

9 release files

0.7.3

9 release files

0.7.2

9 release files

0.7.0

9 release files

0.6.9

9 release files

0.6.8

9 release files

0.6.7

9 release files

0.6.6

9 release files

This release

0.6.5 This release

9 release files

0.6.4

9 release files

0.6.3

9 release files

0.6.2

9 release files

0.6.1

9 release files

0.6.0

9 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page