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

N = 1
observations = []
def solve(operation, s):
    route, cached_route, version, cached_version, expires, now, status, subscribers = s
    if operation == 'adopt-exact-route-version':
        return route==cached_route and version==cached_version
    if operation == 'expiry-at-boundary':
        return expires is None or now<expires
    if operation == 'ready-resource-adoption':
        return status=='ready'
    if operation == 'pending-resource-sharing':
        return status=='pending' and route==cached_route
    if operation == 'unobserved-cancel':
        return not subscribers and status=='pending'
    if operation == 'subscriber-reference-count':
        return len(subscribers)
    if operation == 'failed-prefetch-retry':
        return status=='failed'
    if operation == 'prefetch-promote-consumer':
        return ['navigation']
    if operation == 'remaining-resource-life':
        return None if expires is None else max(0,expires-now)
    if operation == 'refresh-old-build':
        return version!=cached_version
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('adopt-exact-route-version scenario 1', solve('adopt-exact-route-version', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('adopt-exact-route-version scenario 2', solve('adopt-exact-route-version', ('/a','/a',1,1,10,10,'ready',[])), True)
check('adopt-exact-route-version scenario 3', solve('adopt-exact-route-version', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('adopt-exact-route-version scenario 4', solve('adopt-exact-route-version', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('adopt-exact-route-version scenario 5', solve('adopt-exact-route-version', ('/b','/b',1,1,12,10,'failed',[])), True)
check('adopt-exact-route-version scenario 6', solve('adopt-exact-route-version', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('expiry-at-boundary scenario 1', solve('expiry-at-boundary', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('expiry-at-boundary scenario 2', solve('expiry-at-boundary', ('/a','/a',1,1,10,10,'ready',[])), False)
check('expiry-at-boundary scenario 3', solve('expiry-at-boundary', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('expiry-at-boundary scenario 4', solve('expiry-at-boundary', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('expiry-at-boundary scenario 5', solve('expiry-at-boundary', ('/b','/b',1,1,12,10,'failed',[])), True)
check('expiry-at-boundary scenario 6', solve('expiry-at-boundary', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('ready-resource-adoption scenario 1', solve('ready-resource-adoption', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('ready-resource-adoption scenario 2', solve('ready-resource-adoption', ('/a','/a',1,1,10,10,'ready',[])), True)
check('ready-resource-adoption scenario 3', solve('ready-resource-adoption', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('ready-resource-adoption scenario 4', solve('ready-resource-adoption', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('ready-resource-adoption scenario 5', solve('ready-resource-adoption', ('/b','/b',1,1,12,10,'failed',[])), False)
check('ready-resource-adoption scenario 6', solve('ready-resource-adoption', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('pending-resource-sharing scenario 1', solve('pending-resource-sharing', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('pending-resource-sharing scenario 2', solve('pending-resource-sharing', ('/a','/a',1,1,10,10,'ready',[])), False)
check('pending-resource-sharing scenario 3', solve('pending-resource-sharing', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('pending-resource-sharing scenario 4', solve('pending-resource-sharing', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('pending-resource-sharing scenario 5', solve('pending-resource-sharing', ('/b','/b',1,1,12,10,'failed',[])), False)
check('pending-resource-sharing scenario 6', solve('pending-resource-sharing', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('unobserved-cancel scenario 1', solve('unobserved-cancel', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('unobserved-cancel scenario 2', solve('unobserved-cancel', ('/a','/a',1,1,10,10,'ready',[])), False)
check('unobserved-cancel scenario 3', solve('unobserved-cancel', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('unobserved-cancel scenario 4', solve('unobserved-cancel', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('unobserved-cancel scenario 5', solve('unobserved-cancel', ('/b','/b',1,1,12,10,'failed',[])), False)
check('unobserved-cancel scenario 6', solve('unobserved-cancel', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('subscriber-reference-count scenario 1', solve('subscriber-reference-count', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('subscriber-reference-count scenario 2', solve('subscriber-reference-count', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('subscriber-reference-count scenario 3', solve('subscriber-reference-count', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('subscriber-reference-count scenario 4', solve('subscriber-reference-count', ('/a','/a',2,1,12,10,'pending',['screen'])), 1)
check('subscriber-reference-count scenario 5', solve('subscriber-reference-count', ('/b','/b',1,1,12,10,'failed',[])), 0)
check('subscriber-reference-count scenario 6', solve('subscriber-reference-count', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), 2)
check('failed-prefetch-retry scenario 1', solve('failed-prefetch-retry', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('failed-prefetch-retry scenario 2', solve('failed-prefetch-retry', ('/a','/a',1,1,10,10,'ready',[])), False)
check('failed-prefetch-retry scenario 3', solve('failed-prefetch-retry', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('failed-prefetch-retry scenario 4', solve('failed-prefetch-retry', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('failed-prefetch-retry scenario 5', solve('failed-prefetch-retry', ('/b','/b',1,1,12,10,'failed',[])), True)
check('failed-prefetch-retry scenario 6', solve('failed-prefetch-retry', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('prefetch-promote-consumer scenario 1', solve('prefetch-promote-consumer', ('/a','/a',N,N,10,9,'ready',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 2', solve('prefetch-promote-consumer', ('/a','/a',1,1,10,10,'ready',[])), ['navigation'])
check('prefetch-promote-consumer scenario 3', solve('prefetch-promote-consumer', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), ['screen','preview','navigation'])
check('prefetch-promote-consumer scenario 4', solve('prefetch-promote-consumer', ('/a','/a',2,1,12,10,'pending',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 5', solve('prefetch-promote-consumer', ('/b','/b',1,1,12,10,'failed',[])), ['navigation'])
check('prefetch-promote-consumer scenario 6', solve('prefetch-promote-consumer', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), ['screen','screen','navigation'])
check('remaining-resource-life scenario 1', solve('remaining-resource-life', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('remaining-resource-life scenario 2', solve('remaining-resource-life', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('remaining-resource-life scenario 3', solve('remaining-resource-life', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('remaining-resource-life scenario 4', solve('remaining-resource-life', ('/a','/a',2,1,12,10,'pending',['screen'])), 2)
check('remaining-resource-life scenario 5', solve('remaining-resource-life', ('/b','/b',1,1,12,10,'failed',[])), 2)
check('remaining-resource-life scenario 6', solve('remaining-resource-life', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), None)
check('refresh-old-build scenario 1', solve('refresh-old-build', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('refresh-old-build scenario 2', solve('refresh-old-build', ('/a','/a',1,1,10,10,'ready',[])), False)
check('refresh-old-build scenario 3', solve('refresh-old-build', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('refresh-old-build scenario 4', solve('refresh-old-build', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('refresh-old-build scenario 5', solve('refresh-old-build', ('/b','/b',1,1,12,10,'failed',[])), False)
check('refresh-old-build scenario 6', solve('refresh-old-build', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
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(operation, s):
    route, cached_route, version, cached_version, expires, now, status, subscribers = s
    if operation == 'adopt-exact-route-version':
        return route==cached_route and version==cached_version
    if operation == 'expiry-at-boundary':
        return expires is None or now<expires
    if operation == 'ready-resource-adoption':
        return status=='ready'
    if operation == 'pending-resource-sharing':
        return status=='pending' and route==cached_route
    if operation == 'unobserved-cancel':
        return not subscribers and status=='pending'
    if operation == 'subscriber-reference-count':
        return len(subscribers)
    if operation == 'failed-prefetch-retry':
        return status=='failed'
    if operation == 'prefetch-promote-consumer':
        return list(set(subscribers+['navigation']))
    if operation == 'remaining-resource-life':
        return None if expires is None else max(0,expires-now)
    if operation == 'refresh-old-build':
        return version!=cached_version
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('adopt-exact-route-version scenario 1', solve('adopt-exact-route-version', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('adopt-exact-route-version scenario 2', solve('adopt-exact-route-version', ('/a','/a',1,1,10,10,'ready',[])), True)
check('adopt-exact-route-version scenario 3', solve('adopt-exact-route-version', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('adopt-exact-route-version scenario 4', solve('adopt-exact-route-version', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('adopt-exact-route-version scenario 5', solve('adopt-exact-route-version', ('/b','/b',1,1,12,10,'failed',[])), True)
check('adopt-exact-route-version scenario 6', solve('adopt-exact-route-version', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('expiry-at-boundary scenario 1', solve('expiry-at-boundary', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('expiry-at-boundary scenario 2', solve('expiry-at-boundary', ('/a','/a',1,1,10,10,'ready',[])), False)
check('expiry-at-boundary scenario 3', solve('expiry-at-boundary', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('expiry-at-boundary scenario 4', solve('expiry-at-boundary', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('expiry-at-boundary scenario 5', solve('expiry-at-boundary', ('/b','/b',1,1,12,10,'failed',[])), True)
check('expiry-at-boundary scenario 6', solve('expiry-at-boundary', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('ready-resource-adoption scenario 1', solve('ready-resource-adoption', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('ready-resource-adoption scenario 2', solve('ready-resource-adoption', ('/a','/a',1,1,10,10,'ready',[])), True)
check('ready-resource-adoption scenario 3', solve('ready-resource-adoption', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('ready-resource-adoption scenario 4', solve('ready-resource-adoption', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('ready-resource-adoption scenario 5', solve('ready-resource-adoption', ('/b','/b',1,1,12,10,'failed',[])), False)
check('ready-resource-adoption scenario 6', solve('ready-resource-adoption', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('pending-resource-sharing scenario 1', solve('pending-resource-sharing', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('pending-resource-sharing scenario 2', solve('pending-resource-sharing', ('/a','/a',1,1,10,10,'ready',[])), False)
check('pending-resource-sharing scenario 3', solve('pending-resource-sharing', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('pending-resource-sharing scenario 4', solve('pending-resource-sharing', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('pending-resource-sharing scenario 5', solve('pending-resource-sharing', ('/b','/b',1,1,12,10,'failed',[])), False)
check('pending-resource-sharing scenario 6', solve('pending-resource-sharing', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('unobserved-cancel scenario 1', solve('unobserved-cancel', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('unobserved-cancel scenario 2', solve('unobserved-cancel', ('/a','/a',1,1,10,10,'ready',[])), False)
check('unobserved-cancel scenario 3', solve('unobserved-cancel', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('unobserved-cancel scenario 4', solve('unobserved-cancel', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('unobserved-cancel scenario 5', solve('unobserved-cancel', ('/b','/b',1,1,12,10,'failed',[])), False)
check('unobserved-cancel scenario 6', solve('unobserved-cancel', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('subscriber-reference-count scenario 1', solve('subscriber-reference-count', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('subscriber-reference-count scenario 2', solve('subscriber-reference-count', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('subscriber-reference-count scenario 3', solve('subscriber-reference-count', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('subscriber-reference-count scenario 4', solve('subscriber-reference-count', ('/a','/a',2,1,12,10,'pending',['screen'])), 1)
check('subscriber-reference-count scenario 5', solve('subscriber-reference-count', ('/b','/b',1,1,12,10,'failed',[])), 0)
check('subscriber-reference-count scenario 6', solve('subscriber-reference-count', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), 2)
check('failed-prefetch-retry scenario 1', solve('failed-prefetch-retry', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('failed-prefetch-retry scenario 2', solve('failed-prefetch-retry', ('/a','/a',1,1,10,10,'ready',[])), False)
check('failed-prefetch-retry scenario 3', solve('failed-prefetch-retry', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('failed-prefetch-retry scenario 4', solve('failed-prefetch-retry', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('failed-prefetch-retry scenario 5', solve('failed-prefetch-retry', ('/b','/b',1,1,12,10,'failed',[])), True)
check('failed-prefetch-retry scenario 6', solve('failed-prefetch-retry', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('prefetch-promote-consumer scenario 1', solve('prefetch-promote-consumer', ('/a','/a',N,N,10,9,'ready',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 2', solve('prefetch-promote-consumer', ('/a','/a',1,1,10,10,'ready',[])), ['navigation'])
check('prefetch-promote-consumer scenario 3', solve('prefetch-promote-consumer', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), ['screen','preview','navigation'])
check('prefetch-promote-consumer scenario 4', solve('prefetch-promote-consumer', ('/a','/a',2,1,12,10,'pending',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 5', solve('prefetch-promote-consumer', ('/b','/b',1,1,12,10,'failed',[])), ['navigation'])
check('prefetch-promote-consumer scenario 6', solve('prefetch-promote-consumer', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), ['screen','screen','navigation'])
check('remaining-resource-life scenario 1', solve('remaining-resource-life', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('remaining-resource-life scenario 2', solve('remaining-resource-life', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('remaining-resource-life scenario 3', solve('remaining-resource-life', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('remaining-resource-life scenario 4', solve('remaining-resource-life', ('/a','/a',2,1,12,10,'pending',['screen'])), 2)
check('remaining-resource-life scenario 5', solve('remaining-resource-life', ('/b','/b',1,1,12,10,'failed',[])), 2)
check('remaining-resource-life scenario 6', solve('remaining-resource-life', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), None)
check('refresh-old-build scenario 1', solve('refresh-old-build', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('refresh-old-build scenario 2', solve('refresh-old-build', ('/a','/a',1,1,10,10,'ready',[])), False)
check('refresh-old-build scenario 3', solve('refresh-old-build', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('refresh-old-build scenario 4', solve('refresh-old-build', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('refresh-old-build scenario 5', solve('refresh-old-build', ('/b','/b',1,1,12,10,'failed',[])), False)
check('refresh-old-build scenario 6', solve('refresh-old-build', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
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:
Prefetch promote consumer.

A prefetch handle is keyed by route and build version, has an exclusive expiration deadline, shares pending work, and is adopted only when ready. Consumer registrations are counted, including repeated registrations. Operation prefetch-promote-consumer has the six explicit input/output oracles below.

split: open-access


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

N = 1
observations = []
def solve(operation, s):
    route, cached_route, version, cached_version, expires, now, status, subscribers = s
    if operation == 'adopt-exact-route-version':
        return route==cached_route and version==cached_version
    if operation == 'expiry-at-boundary':
        return expires is None or now<expires
    if operation == 'ready-resource-adoption':
        return status=='ready'
    if operation == 'pending-resource-sharing':
        return status=='pending' and route==cached_route
    if operation == 'unobserved-cancel':
        return not subscribers and status=='pending'
    if operation == 'subscriber-reference-count':
        return len(subscribers)
    if operation == 'failed-prefetch-retry':
        return status=='failed'
    if operation == 'prefetch-promote-consumer':
        return subscribers+['navigation']
    if operation == 'remaining-resource-life':
        return 0 if expires is None else expires-now
    if operation == 'refresh-old-build':
        return version!=cached_version
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('adopt-exact-route-version scenario 1', solve('adopt-exact-route-version', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('adopt-exact-route-version scenario 2', solve('adopt-exact-route-version', ('/a','/a',1,1,10,10,'ready',[])), True)
check('adopt-exact-route-version scenario 3', solve('adopt-exact-route-version', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('adopt-exact-route-version scenario 4', solve('adopt-exact-route-version', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('adopt-exact-route-version scenario 5', solve('adopt-exact-route-version', ('/b','/b',1,1,12,10,'failed',[])), True)
check('adopt-exact-route-version scenario 6', solve('adopt-exact-route-version', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('expiry-at-boundary scenario 1', solve('expiry-at-boundary', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('expiry-at-boundary scenario 2', solve('expiry-at-boundary', ('/a','/a',1,1,10,10,'ready',[])), False)
check('expiry-at-boundary scenario 3', solve('expiry-at-boundary', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('expiry-at-boundary scenario 4', solve('expiry-at-boundary', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('expiry-at-boundary scenario 5', solve('expiry-at-boundary', ('/b','/b',1,1,12,10,'failed',[])), True)
check('expiry-at-boundary scenario 6', solve('expiry-at-boundary', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('ready-resource-adoption scenario 1', solve('ready-resource-adoption', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('ready-resource-adoption scenario 2', solve('ready-resource-adoption', ('/a','/a',1,1,10,10,'ready',[])), True)
check('ready-resource-adoption scenario 3', solve('ready-resource-adoption', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('ready-resource-adoption scenario 4', solve('ready-resource-adoption', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('ready-resource-adoption scenario 5', solve('ready-resource-adoption', ('/b','/b',1,1,12,10,'failed',[])), False)
check('ready-resource-adoption scenario 6', solve('ready-resource-adoption', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('pending-resource-sharing scenario 1', solve('pending-resource-sharing', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('pending-resource-sharing scenario 2', solve('pending-resource-sharing', ('/a','/a',1,1,10,10,'ready',[])), False)
check('pending-resource-sharing scenario 3', solve('pending-resource-sharing', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('pending-resource-sharing scenario 4', solve('pending-resource-sharing', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('pending-resource-sharing scenario 5', solve('pending-resource-sharing', ('/b','/b',1,1,12,10,'failed',[])), False)
check('pending-resource-sharing scenario 6', solve('pending-resource-sharing', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('unobserved-cancel scenario 1', solve('unobserved-cancel', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('unobserved-cancel scenario 2', solve('unobserved-cancel', ('/a','/a',1,1,10,10,'ready',[])), False)
check('unobserved-cancel scenario 3', solve('unobserved-cancel', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('unobserved-cancel scenario 4', solve('unobserved-cancel', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('unobserved-cancel scenario 5', solve('unobserved-cancel', ('/b','/b',1,1,12,10,'failed',[])), False)
check('unobserved-cancel scenario 6', solve('unobserved-cancel', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('subscriber-reference-count scenario 1', solve('subscriber-reference-count', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('subscriber-reference-count scenario 2', solve('subscriber-reference-count', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('subscriber-reference-count scenario 3', solve('subscriber-reference-count', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('subscriber-reference-count scenario 4', solve('subscriber-reference-count', ('/a','/a',2,1,12,10,'pending',['screen'])), 1)
check('subscriber-reference-count scenario 5', solve('subscriber-reference-count', ('/b','/b',1,1,12,10,'failed',[])), 0)
check('subscriber-reference-count scenario 6', solve('subscriber-reference-count', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), 2)
check('failed-prefetch-retry scenario 1', solve('failed-prefetch-retry', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('failed-prefetch-retry scenario 2', solve('failed-prefetch-retry', ('/a','/a',1,1,10,10,'ready',[])), False)
check('failed-prefetch-retry scenario 3', solve('failed-prefetch-retry', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('failed-prefetch-retry scenario 4', solve('failed-prefetch-retry', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('failed-prefetch-retry scenario 5', solve('failed-prefetch-retry', ('/b','/b',1,1,12,10,'failed',[])), True)
check('failed-prefetch-retry scenario 6', solve('failed-prefetch-retry', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('prefetch-promote-consumer scenario 1', solve('prefetch-promote-consumer', ('/a','/a',N,N,10,9,'ready',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 2', solve('prefetch-promote-consumer', ('/a','/a',1,1,10,10,'ready',[])), ['navigation'])
check('prefetch-promote-consumer scenario 3', solve('prefetch-promote-consumer', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), ['screen','preview','navigation'])
check('prefetch-promote-consumer scenario 4', solve('prefetch-promote-consumer', ('/a','/a',2,1,12,10,'pending',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 5', solve('prefetch-promote-consumer', ('/b','/b',1,1,12,10,'failed',[])), ['navigation'])
check('prefetch-promote-consumer scenario 6', solve('prefetch-promote-consumer', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), ['screen','screen','navigation'])
check('remaining-resource-life scenario 1', solve('remaining-resource-life', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('remaining-resource-life scenario 2', solve('remaining-resource-life', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('remaining-resource-life scenario 3', solve('remaining-resource-life', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('remaining-resource-life scenario 4', solve('remaining-resource-life', ('/a','/a',2,1,12,10,'pending',['screen'])), 2)
check('remaining-resource-life scenario 5', solve('remaining-resource-life', ('/b','/b',1,1,12,10,'failed',[])), 2)
check('remaining-resource-life scenario 6', solve('remaining-resource-life', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), None)
check('refresh-old-build scenario 1', solve('refresh-old-build', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('refresh-old-build scenario 2', solve('refresh-old-build', ('/a','/a',1,1,10,10,'ready',[])), False)
check('refresh-old-build scenario 3', solve('refresh-old-build', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('refresh-old-build scenario 4', solve('refresh-old-build', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('refresh-old-build scenario 5', solve('refresh-old-build', ('/b','/b',1,1,12,10,'failed',[])), False)
check('refresh-old-build scenario 6', solve('refresh-old-build', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
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(operation, s):
    route, cached_route, version, cached_version, expires, now, status, subscribers = s
    if operation == 'adopt-exact-route-version':
        return route==cached_route and version==cached_version
    if operation == 'expiry-at-boundary':
        return expires is None or now<expires
    if operation == 'ready-resource-adoption':
        return status=='ready'
    if operation == 'pending-resource-sharing':
        return status=='pending' and route==cached_route
    if operation == 'unobserved-cancel':
        return not subscribers and status=='pending'
    if operation == 'subscriber-reference-count':
        return len(subscribers)
    if operation == 'failed-prefetch-retry':
        return status=='failed'
    if operation == 'prefetch-promote-consumer':
        return subscribers+['navigation']
    if operation == 'remaining-resource-life':
        return None if expires is None else expires
    if operation == 'refresh-old-build':
        return version!=cached_version
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('adopt-exact-route-version scenario 1', solve('adopt-exact-route-version', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('adopt-exact-route-version scenario 2', solve('adopt-exact-route-version', ('/a','/a',1,1,10,10,'ready',[])), True)
check('adopt-exact-route-version scenario 3', solve('adopt-exact-route-version', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('adopt-exact-route-version scenario 4', solve('adopt-exact-route-version', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('adopt-exact-route-version scenario 5', solve('adopt-exact-route-version', ('/b','/b',1,1,12,10,'failed',[])), True)
check('adopt-exact-route-version scenario 6', solve('adopt-exact-route-version', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('expiry-at-boundary scenario 1', solve('expiry-at-boundary', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('expiry-at-boundary scenario 2', solve('expiry-at-boundary', ('/a','/a',1,1,10,10,'ready',[])), False)
check('expiry-at-boundary scenario 3', solve('expiry-at-boundary', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('expiry-at-boundary scenario 4', solve('expiry-at-boundary', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('expiry-at-boundary scenario 5', solve('expiry-at-boundary', ('/b','/b',1,1,12,10,'failed',[])), True)
check('expiry-at-boundary scenario 6', solve('expiry-at-boundary', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('ready-resource-adoption scenario 1', solve('ready-resource-adoption', ('/a','/a',N,N,10,9,'ready',['screen'])), True)
check('ready-resource-adoption scenario 2', solve('ready-resource-adoption', ('/a','/a',1,1,10,10,'ready',[])), True)
check('ready-resource-adoption scenario 3', solve('ready-resource-adoption', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), True)
check('ready-resource-adoption scenario 4', solve('ready-resource-adoption', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('ready-resource-adoption scenario 5', solve('ready-resource-adoption', ('/b','/b',1,1,12,10,'failed',[])), False)
check('ready-resource-adoption scenario 6', solve('ready-resource-adoption', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), True)
check('pending-resource-sharing scenario 1', solve('pending-resource-sharing', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('pending-resource-sharing scenario 2', solve('pending-resource-sharing', ('/a','/a',1,1,10,10,'ready',[])), False)
check('pending-resource-sharing scenario 3', solve('pending-resource-sharing', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('pending-resource-sharing scenario 4', solve('pending-resource-sharing', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('pending-resource-sharing scenario 5', solve('pending-resource-sharing', ('/b','/b',1,1,12,10,'failed',[])), False)
check('pending-resource-sharing scenario 6', solve('pending-resource-sharing', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('unobserved-cancel scenario 1', solve('unobserved-cancel', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('unobserved-cancel scenario 2', solve('unobserved-cancel', ('/a','/a',1,1,10,10,'ready',[])), False)
check('unobserved-cancel scenario 3', solve('unobserved-cancel', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('unobserved-cancel scenario 4', solve('unobserved-cancel', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('unobserved-cancel scenario 5', solve('unobserved-cancel', ('/b','/b',1,1,12,10,'failed',[])), False)
check('unobserved-cancel scenario 6', solve('unobserved-cancel', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('subscriber-reference-count scenario 1', solve('subscriber-reference-count', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('subscriber-reference-count scenario 2', solve('subscriber-reference-count', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('subscriber-reference-count scenario 3', solve('subscriber-reference-count', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('subscriber-reference-count scenario 4', solve('subscriber-reference-count', ('/a','/a',2,1,12,10,'pending',['screen'])), 1)
check('subscriber-reference-count scenario 5', solve('subscriber-reference-count', ('/b','/b',1,1,12,10,'failed',[])), 0)
check('subscriber-reference-count scenario 6', solve('subscriber-reference-count', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), 2)
check('failed-prefetch-retry scenario 1', solve('failed-prefetch-retry', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('failed-prefetch-retry scenario 2', solve('failed-prefetch-retry', ('/a','/a',1,1,10,10,'ready',[])), False)
check('failed-prefetch-retry scenario 3', solve('failed-prefetch-retry', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('failed-prefetch-retry scenario 4', solve('failed-prefetch-retry', ('/a','/a',2,1,12,10,'pending',['screen'])), False)
check('failed-prefetch-retry scenario 5', solve('failed-prefetch-retry', ('/b','/b',1,1,12,10,'failed',[])), True)
check('failed-prefetch-retry scenario 6', solve('failed-prefetch-retry', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
check('prefetch-promote-consumer scenario 1', solve('prefetch-promote-consumer', ('/a','/a',N,N,10,9,'ready',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 2', solve('prefetch-promote-consumer', ('/a','/a',1,1,10,10,'ready',[])), ['navigation'])
check('prefetch-promote-consumer scenario 3', solve('prefetch-promote-consumer', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), ['screen','preview','navigation'])
check('prefetch-promote-consumer scenario 4', solve('prefetch-promote-consumer', ('/a','/a',2,1,12,10,'pending',['screen'])), ['screen','navigation'])
check('prefetch-promote-consumer scenario 5', solve('prefetch-promote-consumer', ('/b','/b',1,1,12,10,'failed',[])), ['navigation'])
check('prefetch-promote-consumer scenario 6', solve('prefetch-promote-consumer', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), ['screen','screen','navigation'])
check('remaining-resource-life scenario 1', solve('remaining-resource-life', ('/a','/a',N,N,10,9,'ready',['screen'])), 1)
check('remaining-resource-life scenario 2', solve('remaining-resource-life', ('/a','/a',1,1,10,10,'ready',[])), 0)
check('remaining-resource-life scenario 3', solve('remaining-resource-life', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), 2)
check('remaining-resource-life scenario 4', solve('remaining-resource-life', ('/a','/a',2,1,12,10,'pending',['screen'])), 2)
check('remaining-resource-life scenario 5', solve('remaining-resource-life', ('/b','/b',1,1,12,10,'failed',[])), 2)
check('remaining-resource-life scenario 6', solve('remaining-resource-life', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), None)
check('refresh-old-build scenario 1', solve('refresh-old-build', ('/a','/a',N,N,10,9,'ready',['screen'])), False)
check('refresh-old-build scenario 2', solve('refresh-old-build', ('/a','/a',1,1,10,10,'ready',[])), False)
check('refresh-old-build scenario 3', solve('refresh-old-build', ('/a','/b',1,1,12,10,'ready',['screen','preview'])), False)
check('refresh-old-build scenario 4', solve('refresh-old-build', ('/a','/a',2,1,12,10,'pending',['screen'])), True)
check('refresh-old-build scenario 5', solve('refresh-old-build', ('/b','/b',1,1,12,10,'failed',[])), False)
check('refresh-old-build scenario 6', solve('refresh-old-build', ('/a','/a',1,1,None,10,'ready',['screen','screen'])), False)
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:
Remaining resource life.

A prefetch handle is keyed by route and build version, has an exclusive expiration deadline, shares pending work, and is adopted only when ready. Consumer registrations are counted, including repeated registrations. Operation remaining-resource-life has the six explicit input/output oracles below.

split: open-access


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

N = 1
observations = []
def solve(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or any(a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return dependencies!=previous
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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:
Dependency shape comparison.

An effect tracks dependency length, values and scalar types; an empty dependency vector differs from no prior run. Cleanup precedes setup, unmount suppresses completion writes, and each setup advances a generation. Operation dependency-shape-comparison has the six explicit input/output oracles below.

split: open-access


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

N = 1
observations = []
def solve(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return False
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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:
Unmount cleanup.

An effect tracks dependency length, values and scalar types; an empty dependency vector differs from no prior run. Cleanup precedes setup, unmount suppresses completion writes, and each setup advances a generation. Operation unmount-cleanup has the six explicit input/output oracles below.

split: open-access


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

N = 1
observations = []
def solve(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return not dependencies
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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:
Initial effect run.

An effect tracks dependency length, values and scalar types; an empty dependency vector differs from no prior run. Cleanup precedes setup, unmount suppresses completion writes, and each setup advances a generation. Operation initial-effect-run has the six explicit input/output oracles below.

split: open-access