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.2

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.2
File
packlab-0.6.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
packlab-0.6.2-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.2-cp313-cp313-macosx_26_0_arm64.whl CPython 3.13 CPython 3.13 macOS 26.0+ ARM64 Details
packlab-0.6.2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
packlab-0.6.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
packlab-0.6.2-cp312-cp312-macosx_26_0_arm64.whl CPython 3.12 CPython 3.12 macOS 26.0+ ARM64 Details
packlab-0.6.2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
packlab-0.6.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
packlab-0.6.2-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.2-cp313-cp313-win_amd64.whl

Download URL packlab-0.6.2-cp313-cp313-win_amd64.whl
Size 5.2 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
97cd3aa5062eb128e1cbc1701ab0a3d452662629c4c96f5d395a55b2c4db45a2
BLAKE2b-256 checksum
How to use checksums
5c2c264f4d16b666a5a54d2af793cb0993fada0a662c8abc180df84716a81412
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.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.2-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
d36db95b8a374dcdff6c6a30f1fcd8d5e0d29d3b0653bd64a81ab42cb6522f5d
BLAKE2b-256 checksum
How to use checksums
51c155a808ea98379b1f95c709d1f828953942dcad93302e007bb64515ec4cdc
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.2-cp313-cp313-macosx_26_0_arm64.whl

Download URL packlab-0.6.2-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
f4f47d86fc572c45cdeb583322585df9f868633178f46861ac7c5a860eec9fdc
BLAKE2b-256 checksum
How to use checksums
3322f4932c049f1680683f8933e9a65d0a5a6ed1e13303f3db2f5afde3e6afbf
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.2-cp312-cp312-win_amd64.whl

Download URL packlab-0.6.2-cp312-cp312-win_amd64.whl
Size 5.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
54caeabbc65a5c1e5ed6247cd38b50ed8b09a84161058267b94b91595744ea8f
BLAKE2b-256 checksum
How to use checksums
b6efb888e4454913d7e5d39a1415dd465484591bf38388f75e544056d6f7bdef
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.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.2-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
9e8821c00c3a3fbec8a47bb153f8af5dfca766d0b34dd175a0fe7ba7e19b2cff
BLAKE2b-256 checksum
How to use checksums
fafbcfce9df1a0d8270ed19d998886f60b2bb2489a248dd26703549f0cf43a73
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.2-cp312-cp312-macosx_26_0_arm64.whl

Download URL packlab-0.6.2-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
00177e0928f3bd1246fd150a411b52c49e60cf6fc27243607b54d7f9e0fd0196
BLAKE2b-256 checksum
How to use checksums
752275458cd051ff724d950ace74439086dcf0a0be92ecf31da79068c14a969e
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.2-cp311-cp311-win_amd64.whl

Download URL packlab-0.6.2-cp311-cp311-win_amd64.whl
Size 5.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
823dc406fd82ef7dbf9f825c26f1b463c1a243ece13e9aea62fb1e1142bc1eb4
BLAKE2b-256 checksum
How to use checksums
e4102dab689339553e6ca9cebe654911304215351c38c902a3a3f5839d428992
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.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL packlab-0.6.2-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
afe33573a645575492a00ece8ffe5a06cfad824b3a1aa00d3d415e0d33bc13eb
BLAKE2b-256 checksum
How to use checksums
167924b473242f4bf14aeb6211933644eaaaf97dc71cdc024ea6db39e733e408
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.2-cp311-cp311-macosx_26_0_arm64.whl

Download URL packlab-0.6.2-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
25c2c9fb8ec9a6b5bc0449ecfbbd19ec1480fc2c9c83f429a6366ed7e1276efb
BLAKE2b-256 checksum
How to use checksums
c07887dd8d380a18c8fb53a2d679df5c3ccb4edaf0587450aeeff8197cb8c5a2
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

0.6.5

9 release files

0.6.4

9 release files

0.6.3

9 release files

This release

0.6.2 This release

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