:rocket: New features
- Added optional parallelization to many functions using dask
- Added image-based invasion percolation algorithm (ibip) to filters
- GPU-accelerated the image-based invasion percolation (IBIP) algorithm
- Added nl\_means\_layered function for parallelized noise removal \new
- Added boxcount to metrics \new
- Added random\_cantor\_dust and sierpinski\_foam to generators \new
- Added borders and faces to generators \new
- Added pseudo\_electrostatic\_packing to generators \new
- Added pseudo\_gravity\_packing of spheres to generators \new
- Added wrapper to generic ImageJ functions \new
- Added a lightweight wrapper for the classic MaximalBall algorithm \new
- Added settings to top level of package to control behavior like hidding progress bars and messages \new
- Added unpad function to tools module \new
- New IO method to_stl for exporting an image to STL mesh \new
- Added cylinder\_plug function to generators, used in extract\_cylinder function for improved speed \new
- Added ps\_round function to tools to produce disk and ball strels programmtically \new
- Added ps\_rect function to tools for programatically generating 2D or 3D rectilinear strels \new
- Added io function to save an image as a Paraview state file and open directly in Paraview \new
- Added function to export a sphere pack image to COMSOL \new
:cake: Enhancements
- Exposed sigma and r\_max in snow\_2 \enh
- Better support for 2D images \enh
- Added option to trim\_nearby\_peak to apply a threshold for distance check \enh
- Added ability to set loglevel by number as well as name \enh
- Unified various snow extraction algorithms under new snow2 function \enh
- Added more robust inference of Python environment (terminal vs. notebook) \enh
- Migrated to "loguru" from Python's stdlib "logging" for logger messages \enh
- Improved various metrics and the bar chart function in the visualization module to work together better \enh
- Added spacing to show\_planes \enh
- Extended RSA api with clearance and return\_spheres arguments, and now accepts im or shape \enh
- Cylinders generator now also accepts porosity (previously only number of cylinders) \enh
- Refactored make\_contiguous to use less memory and by 5x faster \enh
:wrench: Maintenance
- Fix a bug in examples CI where if no tests were collected, CI reported as failed \maint
- Replaced array\_split dependency with custom-made function \maint
- Parallelized examples' CI, and switched to Mambaforge \maint
- Fixed codecov to include numba-jitted methods in coverage report \maint
- Removed Dask progress bars and minor refactoring \maint
- Included ParaView unit tests in the macOS build \maint
- Update Actions to accommodate the native support of "ci skip" by GitHub + minor tweaks \maint
- Migrate from pip to conda for CI \maint
:warning: API changes
- Replaced namedtuples with custom Results container \api
- Replaced perlin\_noise with fractal\_noise in the generators module based on fastnoisesimd (and pyfastnoisesimd) packages \api
- Moved several functions between submodules, deleted others, and renamed files \api
- Altered phase\_fractions to accept alias and return dict, e.g. {'void': 0.44, 'solid':0.56} \api
- Switched radius argument to just r throughout package \api
- Switched to maxiter throughout, instead of max_iter or max_iters or iter_max \api
- Radial density distribution now only accepts distance transform \api
- Reduced the number of arguments in the snow family of functions \api
- Enhanced add\_boundary\_regions function to accept pad\_width instead of face names \api
- Updated lattice\_spheres to be much more flexible, renamed and added args \api
- Remove to\_openpnm function from io module \api
- Renamed some metrics to be more consistent with each other \api
- Fixed up regionprops\_3d to behave equivalently to scikits-image, including delayed evaluation \api
:bug: Bugfixes
- Fixed tqdm progress bar bug that always defaulted to text-based \bug
- Fixed edge case bugs on RSA and insert\_cylinders \bug
- Rewrote trim\_saddle\_points to avoid hitting max\_iters as oftern \bug
- Fixed tiny bug in L value used in dns.tortuosity (L -\> (L -1)) that was prevent tau =1 in open space \bug
- Fixed bug in find\_outer\_region \bug
- Fixed missing type check in hold\_peaks \bug
- Added check to ensure filter output size matches input in chunked\_func \bug
- Fixed bug in trim\_percolation\_paths \bug
- Fixed snow\_dual to handle unsegmented solid regions \bug
- Fixed a bug in add\_boundary\_regions that occasionally led to some unlabeled pores \bug
:green\_book: Documentation
- Large overhaul of docstrings, consistent argument naming between functions \doc
- Added many new example notebooks and revamped documentation site \docs
- Moved documentation from readthedocs to GitHub Pages + major enhancements \doc