# `Arcana.Graph.CommunityDetector.Leiden`
[🔗](https://github.com/georgeguimaraes/arcana/blob/main/lib/arcana/graph/community_detector/leiden.ex#L2)

Leiden algorithm implementation for community detection.

Uses the Leidenfold library (Rust NIF) to detect communities in entity graphs.
The Leiden algorithm is a refinement of the Louvain algorithm that
guarantees well-connected communities.

## Installation

Add `leidenfold` to your dependencies in `mix.exs`:

    defp deps do
      [
        {:arcana, "~> 1.2"},
        {:leidenfold, "~> 0.2"}
      ]
    end

Precompiled binaries are available for macOS (Apple Silicon) and Linux (x86_64, ARM64).

## Usage

    detector = {Arcana.Graph.CommunityDetector.Leiden, resolution: 1.0}
    {:ok, communities} = CommunityDetector.detect(detector, entities, relationships)

## Options

  - `:resolution` - Controls community granularity (default: 1.0)
    Higher values produce smaller communities
  - `:objective` - Quality function to optimize (default: :cpm)
    Options: :cpm, :modularity, :rber, :rbc, :significance, :surprise
  - `:iterations` - Number of optimization iterations (default: 2)
  - `:seed` - Random seed for reproducibility (default: 0 = random)
  - `:min_size` - Minimum community size to include (default: 1)
    Set to 2 to exclude singleton communities
  - `:max_level` - Maximum hierarchy levels to generate (default: 1)
    Higher levels contain coarser communities built by aggregating lower levels

---

*Consult [api-reference.md](api-reference.md) for complete listing*
