"""
Synthetic benchmark graphs for evaluating community detection algorithms.

This subpackage provides generators that produce networks with known
ground-truth community structure, ready to be fed into pySurprise's
algorithms and Surprise metric.

Available benchmarks
--------------------
- **LFR** (Lancichinetti–Fortunato–Radicchi): power-law degree *and*
  community-size distributions with a tunable mixing parameter *mu*.
  Supports native C++ binary and NetworkX fallback.  Includes **closed**
  degradation (Aldecoa & Marín, 2012).

- **Relaxed Caveman** (RC): clique-based benchmark with tunable degradation.
  Supports open, closed, and pure-removal modes.

Quick start::

    from pysurprise.benchmarks import (
        lfr_benchmark, lfr_generate, lfr_degrade_closed, LFR_PAPER_PRESETS,
        rc_benchmark, RC_PAPER_PRESETS,
    )

    # LFR: generate at mu=0.3
    edges, gt = lfr_generate(1000, mu=0.3, seed=42)

    # LFR: closed degradation
    edges, gt = lfr_benchmark(1000, mu=0.1, degradation=0.5, mode="closed", seed=42)

    # RC: 30% open degradation
    edges, gt = rc_benchmark(512, 16, degradation=0.3)

    # Paper presets
    edges, gt = lfr_benchmark(**LFR_PAPER_PRESETS["2013_scirep_N1000"], mu=0.3, seed=42)
    edges, gt = rc_benchmark(**RC_PAPER_PRESETS["2013_scirep"], degradation=0.3)
"""

from pysurprise.benchmarks.lfr_benchmark import (
    lfr_benchmark,
    lfr_generate,
    lfr_degrade_closed,
    set_lfr_binary,
    get_lfr_binary,
    describe as describe_lfr,
    LFR_PAPER_PRESETS,
    # Backward-compatible alias
    lfr,
)
from pysurprise.benchmarks.relaxed_caveman import (
    relaxed_caveman,
    rc_graph,
    RCResult,
)
from pysurprise.benchmarks.rc_benchmark import (
    rc_benchmark,
    rc_generate,
    rc_degrade_open,
    rc_degrade_closed,
    rc_degrade_removal,
    rc_degrade,
    pielou_index,
    broken_stick_sizes,
    describe as describe_rc,
    PAPER_PRESETS as RC_PAPER_PRESETS,
    RC_ASYMMETRIC_SIZES,
)

__all__ = [
    # LFR (new API)
    "lfr_benchmark",
    "lfr_generate",
    "lfr_degrade_closed",
    "set_lfr_binary",
    "get_lfr_binary",
    "describe_lfr",
    "LFR_PAPER_PRESETS",
    # LFR (backward-compatible)
    "lfr",
    # NetworkX RC
    "relaxed_caveman",
    "rc_graph",
    "RCResult",
    # Aldecoa RC
    "rc_benchmark",
    "rc_generate",
    "rc_degrade_open",
    "rc_degrade_closed",
    "rc_degrade_removal",
    "rc_degrade",
    "pielou_index",
    "broken_stick_sizes",
    "describe_rc",
    "RC_PAPER_PRESETS",
    "RC_ASYMMETRIC_SIZES",
]
