Releases: ragibson/ModularityPruning
v1.4.1
This release includes a few minor enhancements.
- Added support for Python 3.13
- Reformatted code and documentation to adhere to newer PEP8 guidelines
- Updated test suites to allow for parallel runs when possible
Note that we still support Python 3.8, even though it has reached end of life. Generally speaking, I expect to continue supporting older releases until they become a maintenance burden.
Full Changelog: v1.4.0...v1.4.1
v1.4.0
There are a number of separate improvements in this release.
- Improved memory usage and performance of parallel Leiden algorithm optimization (see #13). This also addresses pathologically bad job allocation when the number of runs is in the low 100s.
For example, on a very cheap (~$300) laptop with sweeps of gamma in (0, 2) and omega in (0, 2):
- 1,000,000 runs of a single-layer 32-node, 78-edge graph went from ~3.9 minutes to ~3.7 minutes
- 100 runs of a single-layer 100k-node, 500k-edge graph went from ~22.2 minutes to ~6.0 minutes
- 160,000 runs of a 3-layer 90-node, 416-edge graph went from ~4.3 minutes to ~4.2 minutes
- 50 runs of a 50-layer 25k-node, 102k-edge graph went from ~6.5 minutes to ~6.5 minutes
- Added basic test coverage for all documented functions (see #11).
- This includes tests for all documentation examples, including plotting functionality.
- As part of the parallel Leiden algorithm optimization, we've also added tests to ensure that parallel Leiden has nearly optimal scaling compared to single-threaded optimization.
- Corrected usage of outdated Matplotlib APIs and improved default arguments in plotting functionality.
- Tweaked warnings from common usage to better reflect their importance (see #10).
- Removed warnings about the inefficiency of the Leiden algorithm implementation in
leidenalg
for multi-layer networks as the number of layers increases. Although this inefficiency remains, it is still one of the most widely used modularity optimization implementations. - Added warnings when multi-layer pruning functions truncate omega to the user-specified limit. This was already mentioned in the documentation but realistically should also be a warning.
- Removed warnings about the inefficiency of the Leiden algorithm implementation in
- Improved documentation by adding basic descriptions of available multi-layer network topologies and tweaking examples to use parallel Leiden algorithm functions (see #12).
Full Changelog: v1.3.6...v1.4.0
v1.3.6
Fix minor documentation error involving an incorrect method link and upgrade ReadtheDocs configurations, integrations, and webhook to a more modern standard.
Full Changelog: v1.3.5...v1.3.6
v1.3.5
Add support and testing for Python 3.12, which was released on Monday.
Full Changelog: v1.3.4...v1.3.5
v1.3.4
v1.3.3
Streamline package README and documentation, especially with respect to linking to the journal article and its supplementary information.
Also simplify the setup and package installation in the GitHub action.
Full Changelog: v1.3.2...v1.3.3
v1.3.2
Add Python 3.11 testing and support
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Improve performance of multi-layer Leiden iteration and optimization.
For small numbers of layers, this is significantly faster than using the deprecated modularitypruning.louvain_utilities
.
Full Changelog: v1.3.0...v1.3.1
v1.3.0
Add Leiden modularity optimization
- Replace Louvain modularity optimization (from the deprecated
louvain-igraph
) with Leiden (fromleidenalg
). - Update documentation and resolve deprecated uses of
scipy
,matplotlib
, andrandom.sample
. - Drop support for Python 3.7, matching much of the Python scientific community.
Overall, this should make the single-layer functions faster and multi-layer functions faster when the number of layers is small. As the number of layers grows, the inefficiencies of the leidenalg
implementation will eventually make the algorithm extremely slow. As such, we keep the legacy Louvain multi-layer functionality in modularitypruning.louvain_utilities
.
By dropping support for Python 3.7, the dependency lists are greatly simplified (many of our dependencies, including numpy and scipy, stopped supporting 3.7 last year).
Full Changelog: v1.2.3...v1.3.0