PyAPD
PyAPD is a Python library for generating anisotropic power diagrams (APDs) and polynomial diagrams — GPU-accelerated generalisations of Voronoi diagrams applicable to any problem requiring optimal assignment of regions with prescribed volumes, shapes, and anisotropy. The main application is geometric modelling of polycrystalline microstructures, but the framework extends naturally to other domain decomposition and geometric modelling problems.
- Optimal APDs and polynomial diagrams in 2D and 3D
- Prescribed-volume region generation with fine control over shape and orientation
- Arbitrary domain support (non-rectangular EBSD scans, masked grids)
- EBSD data loading, fitting, and export (
.ang,.h5oina, MTEX validation) - GPU-accelerated via KeOps; CPU fallback supported
Installation
Install with pip:
pip install PyAPD
Requires PyTorch and KeOps; see setup.py for full dependencies.
Tutorials
-
Core tutorial —
apd_systemAPI, weight optimisation, Lloyd's algorithm, 2D/3D examples:
example_usage.ipynb -
Arbitrary domains — non-rectangular pixel clouds, masked grids,
set_pixels/mask_pixels:
arbitrary_domains.ipynb -
EBSD interoperability — loading EBSD grain data, APD fitting,
.angexport,.h5oinaimport, MTEX validation:
ebsd_interoperability.ipynb
Google Colab: notebooks run on CPU by default. To enable GPU: Runtime > Change runtime type > T4 GPU (free) or A100 (subscription). Without a GPU you will see a KeOps warning but the library remains fully functional.
Publications
(1) CMS 2024:
M. Buze, J. Feydy, S.M. Roper, K. Sedighiani, D.P. Bourne, Anisotropic power diagrams for polycrystal modelling: Efficient generation of curved grains via optimal transport, Computational Materials Science, 245, 2024. DOI · Link
Companion notebooks
The examples from the paper can be found in notebooks/paper_examples/, including all notebooks as run, generated data, and figures. Notebooks that load pre-computed data will not run out of the box in Google Colab — the relevant data files would need to be uploaded manually.
- Runtime tests
(2) Preprint:
v0.2.0 accompanies a preprint on polynomial diagrams (generalisations of APDs):
D.P. Bourne, M. Buze, T. Gallouët, Q. Mérigot, Polynomial diagrams for microstructure modelling, arXiv:2605.20816 (2026). arXiv
The companion notebooks (EBSD benchmark on Tata Steel data, synthetic APD reconstruction) can be found in notebooks/paper_examples/pmd_paper/:
Results shown are pre-computed on an A100 GPU; result pkl files are not included in the repository.
Citing this work
If you use PyAPD for academic research, please cite the paper to which our library is tied:
@article{PyAPD,
title = {Anisotropic power diagrams for polycrystal modelling: Efficient generation of curved grains via optimal transport},
journal = {Computational Materials Science},
volume = {245},
pages = {113317},
year = {2024},
issn = {0927-0256},
doi = {https://doi.org/10.1016/j.commatsci.2024.113317},
url = {https://www.sciencedirect.com/science/article/pii/S092702562400538X},
author = {M. Buze and J. Feydy and S.M. Roper and K. Sedighiani and D.P. Bourne},
keywords = {Anisotropic power diagrams, Polycrystalline materials, Microstructure generation, Optimal transport},
}
If you use the polynomial diagram functionality (min_diagram_system) or the EBSD interoperability features introduced in v0.2.0, please also cite:
@misc{PyAPD_PMD,
author = {David P. Bourne and Maciej Buze and Thomas Gallouët and Quentin Mérigot},
title = {Polynomial diagrams for microstructure modelling},
year = {2026},
eprint = {2605.20816},
archivePrefix = {arXiv},
}
Related projects
Metadata
Release files for PyAPD 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyapd-0.2.0.tar.gz | 37.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyapd-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.0 kB
Release files / pyapd-0.2.0.tar.gz
| Download URL | pyapd-0.2.0.tar.gz |
|---|---|
| Size | 37.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6ecf9201da7287573c6c9e233a3740e5a9537fa97944bf09ced5f32c9ab0985
|
|
BLAKE2b-256 checksum How to use checksums |
0b05e697706a840b6c0dd4b61e70e3cec8b4cc7b76a73966e5927aaa16d47751
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pyapd-0.2.0-py3-none-any.whl
| Download URL | pyapd-0.2.0-py3-none-any.whl |
|---|---|
| Size | 33.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b900c725a5348bc64c242ba49b7c3dde934afc15c7074f49a9b97172277783d8
|
|
BLAKE2b-256 checksum How to use checksums |
0d34ba3a3fb9ef3e7dcdeac5f008f7c635b7870ef1421e748ffb504751f48aee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|