Community detection via Louvain/Leiden + Genetic Algorithm
Project description
TAU Community Detection
tau-community-detection implements TAU, an evolutionary community detection algorithm
that couples genetic search with Leiden refinements. It is designed for scalable graph
clustering with configurable hyper-parameters and multiprocessing support.
Highlights
- Evolutionary search: Maintains a population of candidate partitions and applies crossover/mutation tailored for graph clustering.
- Leiden optimization: Refines every candidate with Leiden to ensure modularity gains.
- Multiprocessing aware: Utilises worker pools for population optimization.
- Deterministic options: Accepts a user-specified random seed for reproducibility.
- Simple API: Access everything through the
TauClusteringclass.
Installation
The project targets Python 3.10 or newer.
pip install tau-community-detection
To work from a clone, install the package in editable mode inside a virtual environment:
git clone https://github.com/HillelCharbit/community_TAU.git
cd community_TAU
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
Quick Start (Python API)
from tau_community_detection import TauClustering
import networkx as nx
graph = nx.read_adjlist("path/to/graph.adjlist")
clustering = TauClustering(
graph,
population_size=80,
max_generations=250,
)
vertex_clustering = clustering.run()
print("community for node 0:", vertex_clustering.membership[0])
print("best modularity:", vertex_clustering.modularity)
Need detailed per-generation metrics? Call run(track_stats=True) to receive
(vertex_clustering, generation_stats) where generation_stats is a list of
dictionaries containing runtime and fitness diagnostics (including per-generation modularity).
Graph input
To optimize for very large graphs or when using many worker processes, it is recommended to pass a file path (e.g., to an .adjlist or edge list file) directly to TauClustering rather than a pre-loaded graph object. This allows efficient memory sharing.
Supported input:
- File path to a graph in common NetworkX or igraph format (auto-detects weighting and structure).
- Already-loaded
networkx.Graphorigraph.Graphobjects.
By default, the loader auto-detects whether the graph is weighted based on the file or graph structure. You can override this by setting TauConfig(is_weighted=True/False) when constructing TauClustering; if your override disagrees with the detected type, a warning is issued and auto-detection is used.
Examples:
from tau_community_detection import TauClustering
# Recommended for large graphs:
clustering = TauClustering("mygraph.graph", population_size=40, max_generations=30)
# In-memory NetworkX graph:
import networkx as nx
g = nx.read_adjlist("mygraph.adjlist")
clustering2 = TauClustering(g, population_size=40, max_generations=30)
# Force unweighted input (ignore/strip weights if present) via config:
from tau_community_detection import TauConfig
custom_config = TauConfig(is_weighted=False)
clustering3 = TauClustering("mygraph.graph", population_size=40, max_generations=30, config=custom_config)
For details on accepted formats, see below.
Configuration
All algorithm hyper-parameters live on the TauConfig dataclass. You can pass a custom
configuration instance to TauClustering or adjust attributes on the default one. Key
fields include:
population_size: number of partitions maintained per generation.max_generations: upper bound on evolutionary iterations.elite_fraction/immigrant_fraction: govern selection pressure.stopping_generations/stopping_jaccard: convergence checks based on membership stability.random_seed: makes runs reproducible across processes.
See src/tau_community_detection/config.py for the complete list.
Development
pip install -r requirements-dev.txt
make lint
make test
To build local distributions:
make build
Continuous Integration
- GitHub Actions run lint, tests, and package builds on pushes and pull requests.
- Set the
CODECOV_TOKENsecret to upload coverage reports.
Publishing
- Bump the version in
setup.cfg/pyproject.tomland commit. - Tag the release with
git tag vX.Y.Z && git push --tags. - Run the Publish Package workflow (defaults to TestPyPI). For PyPI, supply the
pypiinput and ensurePYPI_API_TOKENis set. UseTEST_PYPI_API_TOKENfor dry runs.
License
Released under the MIT License. See LICENSE for
details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tau_community_detection-1.2.6.tar.gz.
File metadata
- Download URL: tau_community_detection-1.2.6.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21aab6ab23d07ae1281b670f424dd123c30e6d5369c3c5aa40bdab2f3d3d3d84
|
|
| MD5 |
73ddb0d70bad374b166342455ccdf160
|
|
| BLAKE2b-256 |
118ae1a261ca764d81557e1c344dc672d953ff42ea6fbc8688d7ab5b03772d9a
|
File details
Details for the file tau_community_detection-1.2.6-py3-none-any.whl.
File metadata
- Download URL: tau_community_detection-1.2.6-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
351fbf536dd5d4732f5d9a77e889261bc95a61c725f3b81aeb91c92e12a09098
|
|
| MD5 |
d3bf8b89a0cdd19c953c346c27a9cf35
|
|
| BLAKE2b-256 |
170b28bcd791aa765457b87ab21a077cf4811c5c7130cd0a698e6efb416bdf42
|