from __future__ import annotations from dovla_cil.eval.lattice_eval import ( _empty_task_stats, _finalize_task_stats, _ndcg, _validation_group_ids, ) def test_lattice_ndcg_rewards_correct_order() -> None: utilities = [2.0, 1.0, 0.0] assert _ndcg([3.0, 2.0, 1.0], utilities) == 1.0 assert _ndcg([1.0, 2.0, 3.0], utilities) < 1.0 def test_lattice_validation_split_is_group_deterministic() -> None: groups = [f"g{index}" for index in range(10)] first = _validation_group_ids(groups, val_fraction=0.2, seed=7) second = _validation_group_ids(groups, val_fraction=0.2, seed=7) assert first == second assert len(first) == 2 assert len(set(first)) == len(first) def test_edge_metrics_are_undefined_without_comparable_pairs() -> None: metrics = _finalize_task_stats(_empty_task_stats()) assert metrics["num_pairs"] == 0 assert metrics["pairwise_ranking_accuracy"] is None assert metrics["potential_edge_mae"] is None