FAILURE MAP
← Case archive

FA-13761 / Numerical aggregation / Open access

Adjusted partition pair agreement: Observed agreement compares label names instead of co-membership. · case 01

The reduction disagrees with its explicit aggregation oracle.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Observed agreement compares label names instead of co-membership.

VERIFIED REPAIR

Preserve the adjusted partition pair agreement contract at the identified reduction decision.

Unsuccessful approach: Filtering contingency cells by equal names is not label-invariant.

Case contract

Two equal-length integer cluster label arrays describe the same observations. Return exact adjusted Rand index from pair-count contingency reduction. Label names have no numerical meaning. Matching degenerate partitions with zero normalization return "1"; length mismatch returns None.

Why this case matters

Exact bounded examples isolate a reduction defect without floating-point or external-service effects.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(a, b):
    if len(a)!=len(b): return None
    n=len(a)
    if n<2: return "1"
    pairs=n*(n-1)//2
    joint=Counter(zip(a,b))
    ra,rb=Counter(a),Counter(b)
    choose=lambda k:k*(k-1)//2
    same=sum(u==v for u,v in zip(a,b))
    x=sum(choose(v) for v in ra.values())
    y=sum(choose(v) for v in rb.values())
    expected=Fraction(x*y,pairs)
    ceiling=Fraction(x+y,2)
    return "1" if ceiling==expected else str((same-expected)/(ceiling-expected))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([0, 0, 1, 1], [4, 4, 5, 5])), '1')
check('regression 2', solve(*([0, 0, 1, 1], [0, 1, 0, 1])), '-1/2')
check('regression 3', solve(*([], [])), '1')
check('regression 4', solve(*([0], [9])), '1')
check('regression 5', solve(*([0, 0, 0, 1, 2], [1, 1, 2, 2, 2])), '-2/23')
check('regression 6', solve(*([0, 1, 2], [8, 9, 10])), '1')
check('regression 7', solve(*([0, 0], [1])), None)
check('regression 8', solve(*([0, 0, 1, 2, 2, 2], [4, 5, 4, 5, 5, 5])), '34/109')
check("variable label names",solve([N,N,N+1,N+1],[7,7,8,8]),"1")
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 1-1/21Failed
regression 21-1/2Failed
regression 311Passed
regression 411Passed
regression 5-2/23-2/23Passed
regression 611Passed
regression 7NoneNonePassed
regression 8-56/10934/109Failed
variable label names-1/21Failed

SHA-256 / 75b9d1a38743f2b047716d11e3ebd5fef1dfdda10ebaec5d9a52d44fd1aa5402

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(a, b):
    if len(a)!=len(b): return None
    n=len(a)
    if n<2: return "1"
    pairs=n*(n-1)//2
    joint=Counter(zip(a,b))
    ra,rb=Counter(a),Counter(b)
    choose=lambda k:k*(k-1)//2
    same=sum(choose(v) for (u,w),v in joint.items() if u==w)
    x=sum(choose(v) for v in ra.values())
    y=sum(choose(v) for v in rb.values())
    expected=Fraction(x*y,pairs)
    ceiling=Fraction(x+y,2)
    return "1" if ceiling==expected else str((same-expected)/(ceiling-expected))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([0, 0, 1, 1], [4, 4, 5, 5])), '1')
check('regression 2', solve(*([0, 0, 1, 1], [0, 1, 0, 1])), '-1/2')
check('regression 3', solve(*([], [])), '1')
check('regression 4', solve(*([0], [9])), '1')
check('regression 5', solve(*([0, 0, 0, 1, 2], [1, 1, 2, 2, 2])), '-2/23')
check('regression 6', solve(*([0, 1, 2], [8, 9, 10])), '1')
check('regression 7', solve(*([0, 0], [1])), None)
check('regression 8', solve(*([0, 0, 1, 2, 2, 2], [4, 5, 4, 5, 5, 5])), '34/109')
check("variable label names",solve([N,N,N+1,N+1],[7,7,8,8]),"1")
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 1-1/21Failed
regression 2-1/2-1/2Passed
regression 311Passed
regression 411Passed
regression 5-12/23-2/23Failed
regression 611Passed
regression 7NoneNonePassed
regression 8-56/10934/109Failed
variable label names-1/21Failed

SHA-256 / 0b5e713c6dc83a169a74b4dc520e3d3cba6ad0ba48f6453ac79c4d1eefe7769a

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(a, b):
    if len(a)!=len(b): return None
    n=len(a)
    if n<2: return "1"
    pairs=n*(n-1)//2
    joint=Counter(zip(a,b))
    ra,rb=Counter(a),Counter(b)
    choose=lambda k:k*(k-1)//2
    same=sum(choose(v) for v in joint.values())
    x=sum(choose(v) for v in ra.values())
    y=sum(choose(v) for v in rb.values())
    expected=Fraction(x*y,pairs)
    ceiling=Fraction(x+y,2)
    return "1" if ceiling==expected else str((same-expected)/(ceiling-expected))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([0, 0, 1, 1], [4, 4, 5, 5])), '1')
check('regression 2', solve(*([0, 0, 1, 1], [0, 1, 0, 1])), '-1/2')
check('regression 3', solve(*([], [])), '1')
check('regression 4', solve(*([0], [9])), '1')
check('regression 5', solve(*([0, 0, 0, 1, 2], [1, 1, 2, 2, 2])), '-2/23')
check('regression 6', solve(*([0, 1, 2], [8, 9, 10])), '1')
check('regression 7', solve(*([0, 0], [1])), None)
check('regression 8', solve(*([0, 0, 1, 2, 2, 2], [4, 5, 4, 5, 5, 5])), '34/109')
check("variable label names",solve([N,N,N+1,N+1],[7,7,8,8]),"1")
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 111Passed
regression 2-1/2-1/2Passed
regression 311Passed
regression 411Passed
regression 5-2/23-2/23Passed
regression 611Passed
regression 7NoneNonePassed
regression 834/10934/109Passed
variable label names11Passed

SHA-256 / f1d717731848ae1508be0aed6706e7ae4b085082a44842998adbcafe1bc5ec7c

Verification & scope

Small offline integer/rational inputs only; no performance, statistical inference, or production-library conformance claim. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:39:10.316259+00:00.

Case digest / b0991346019664fd466325d7fa5843bd70bb0cf0e5059e77137fc59c316a02e8