broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    denied=set(d['denied'])
    blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
    redacted={x for x in denied if x in d['summaries'] and x not in blocked}
    exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
    selectable=[x for x in exposed if x not in redacted]
    selected=[x for x in d['selected'] if x in selectable]
    expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
    labels={x:(d['labels'][x]) for x in exposed}
    focus=d['focus'] if d['focus'] in selectable else (selectable[0] if selectable else None)
    counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
    return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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)

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    denied=set(d['denied'])
    blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
    redacted={x for x in denied if x in d['summaries'] and x not in blocked}
    exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
    selectable=[x for x in exposed if x not in redacted]
    selected=[x for x in d['selected'] if x in selectable]
    expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
    labels={x:('Restricted branch') for x in exposed}
    focus=d['focus'] if d['focus'] in selectable else (selectable[0] if selectable else None)
    counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
    return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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)

prompt:
Redacted branch exposes its private label produces the wrong hierarchical widget state in a regression fixture.

Denied branches suppress descendants even when descendants grant access. A denied branch itself may remain a nonselectable redacted row if a summary is allowed. Metadata counts exposed siblings only, and active focus never references a redacted row.

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    denied=set(d['denied'])
    blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
    redacted={x for x in denied if x in d['summaries'] and x not in blocked}
    exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
    selectable=[x for x in exposed if x not in redacted]
    selected=[x for x in d['selected'] if x in selectable]
    expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
    labels={x:('Restricted branch' if x in redacted else d['labels'][x]) for x in exposed}
    focus=d['focus'] if d['focus'] in exposed else (selectable[0] if selectable else None)
    counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
    return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    denied=set(d['denied'])
    blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
    redacted={x for x in denied if x in d['summaries'] and x not in blocked}
    exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
    selectable=[x for x in exposed if x not in redacted]
    selected=[x for x in d['selected'] if x in selectable]
    expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
    labels={x:('Restricted branch' if x in redacted else d['labels'][x]) for x in exposed}
    focus=selectable[0] if selectable else None
    counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
    return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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)

prompt:
Focus stays on a noninteractive redaction row produces the wrong hierarchical widget state in a regression fixture.

Denied branches suppress descendants even when descendants grant access. A denied branch itself may remain a nonselectable redacted row if a summary is allowed. Metadata counts exposed siblings only, and active focus never references a redacted row.

split: open-access