{"abstract":"Liquidation output contains zero-quantity layers for fully liquidated base years.","category":"Inventory cost layering","checks":8,"contract":"Input {begin:[[qty,unit]] oldest first, purchases:[[qty,unit]] chronological, ending_qty}. Ending inventory keeps the oldest units: if ending_qty covers the base, all base layers stay and one increment layer is priced at the EARLIEST purchases of the year; otherwise the newest base layers are liquidated. ending_qty outside [0, available] returns {\"error\"}. Return {layers:[[qty,value]], ending_value, cogs}.","evaluation_group":"w2-inventory-cost-layering-periodic-lifo-increment","failed_approach":"Guarding on a non-negative take still admits zero-quantity layers.","family":"w2-inventory-cost-layering-periodic-lifo-increment-empty-layer-suppression","id":"FA-59886","implementations":{"attempt":{"sha256":"cbf0513155d5df4ebf2a1d7c36e02799fb055ae6b66de30645484d281e541023","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    begin = [list(l) for l in x['begin']]\n    purchases = x['purchases']\n    end_q = x['ending_qty']\n    base_q = sum(l[0] for l in begin)\n    buy_q = sum(p[0] for p in purchases)\n    avail = base_q + buy_q\n    if end_q < 0 or end_q > avail:\n        return {'error': 'invalid ending quantity'}\n    layers = []\n    if end_q >= base_q:\n        layers = [[q, q * c] for q, c in begin]\n        inc = end_q - base_q\n        new_q = 0\n        new_v = 0\n        for q, c in purchases:\n            if inc == 0:\n                break\n            take = min(inc, q)\n            new_q += take\n            new_v += take * c\n            inc -= take\n        if new_q > 0:\n            layers.append([new_q, new_v])\n    else:\n        rem = end_q\n        for bq, bc in begin:\n            take = min(rem, bq)\n            if take >= 0:\n                layers.append([take, take * bc])\n            rem -= take\n    begin_value = sum(q * c for q, c in begin)\n    buy_value = sum(q * c for q, c in purchases)\n    ending_value = sum(v for q, v in layers)\n    return {'layers': layers, 'ending_value': ending_value, 'cogs': begin_value + buy_value - ending_value}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 10]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 94}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 1}, {'layers': [[1, 2]], 'ending_value': 2, 'cogs': 50}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 6}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[3, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[1, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 35}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 11]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 95}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 2}, {'layers': [[2, 4]], 'ending_value': 4, 'cogs': 48}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 7}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -2}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[4, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[2, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 46}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 12]], 'ending_qty': 17}, {'layers': [[10, 50], [4, 24], [3, 21]], 'ending_value': 95, 'cogs': 117}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 3}, {'layers': [[3, 6]], 'ending_value': 6, 'cogs': 46}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 8}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -3}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[5, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[3, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 57}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 13]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 118}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 4}, {'layers': [[3, 6], [1, 4]], 'ending_value': 10, 'cogs': 42}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 9}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -4}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[6, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[4, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 68}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 14]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 119}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 5}, {'layers': [[3, 6], [2, 8]], 'ending_value': 14, 'cogs': 38}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 10}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -5}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[7, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[5, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 79}]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"bfd9373ba9f496a614e100411b1c48f7ee5ab19e13edce9f113d812821b68666","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    begin = [list(l) for l in x['begin']]\n    purchases = x['purchases']\n    end_q = x['ending_qty']\n    base_q = sum(l[0] for l in begin)\n    buy_q = sum(p[0] for p in purchases)\n    avail = base_q + buy_q\n    if end_q < 0 or end_q > avail:\n        return {'error': 'invalid ending quantity'}\n    layers = []\n    if end_q >= base_q:\n        layers = [[q, q * c] for q, c in begin]\n        inc = end_q - base_q\n        new_q = 0\n        new_v = 0\n        for q, c in purchases:\n            if inc == 0:\n                break\n            take = min(inc, q)\n            new_q += take\n            new_v += take * c\n            inc -= take\n        if new_q > 0:\n            layers.append([new_q, new_v])\n    else:\n        rem = end_q\n        for bq, bc in begin:\n            take = min(rem, bq)\n            if True:\n                layers.append([take, take * bc])\n            rem -= take\n    begin_value = sum(q * c for q, c in begin)\n    buy_value = sum(q * c for q, c in purchases)\n    ending_value = sum(v for q, v in layers)\n    return {'layers': layers, 'ending_value': ending_value, 'cogs': begin_value + buy_value - ending_value}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 10]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 94}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 1}, {'layers': [[1, 2]], 'ending_value': 2, 'cogs': 50}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 6}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[3, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[1, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 35}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 11]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 95}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 2}, {'layers': [[2, 4]], 'ending_value': 4, 'cogs': 48}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 7}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -2}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[4, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[2, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 46}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 12]], 'ending_qty': 17}, {'layers': [[10, 50], [4, 24], [3, 21]], 'ending_value': 95, 'cogs': 117}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 3}, {'layers': [[3, 6]], 'ending_value': 6, 'cogs': 46}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 8}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -3}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[5, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[3, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 57}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 13]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 118}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 4}, {'layers': [[3, 6], [1, 4]], 'ending_value': 10, 'cogs': 42}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 9}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -4}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[6, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[4, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 68}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 14]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 119}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 5}, {'layers': [[3, 6], [2, 8]], 'ending_value': 14, 'cogs': 38}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 10}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -5}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[7, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[5, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 79}]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"953c6075f67fa22ecf38b9c8df39830879a6138b4ac3c2f1f900c8918d8a2ff7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    begin = [list(l) for l in x['begin']]\n    purchases = x['purchases']\n    end_q = x['ending_qty']\n    base_q = sum(l[0] for l in begin)\n    buy_q = sum(p[0] for p in purchases)\n    avail = base_q + buy_q\n    if end_q < 0 or end_q > avail:\n        return {'error': 'invalid ending quantity'}\n    layers = []\n    if end_q >= base_q:\n        layers = [[q, q * c] for q, c in begin]\n        inc = end_q - base_q\n        new_q = 0\n        new_v = 0\n        for q, c in purchases:\n            if inc == 0:\n                break\n            take = min(inc, q)\n            new_q += take\n            new_v += take * c\n            inc -= take\n        if new_q > 0:\n            layers.append([new_q, new_v])\n    else:\n        rem = end_q\n        for bq, bc in begin:\n            take = min(rem, bq)\n            if take > 0:\n                layers.append([take, take * bc])\n            rem -= take\n    begin_value = sum(q * c for q, c in begin)\n    buy_value = sum(q * c for q, c in purchases)\n    ending_value = sum(v for q, v in layers)\n    return {'layers': layers, 'ending_value': ending_value, 'cogs': begin_value + buy_value - ending_value}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 10]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 94}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 1}, {'layers': [[1, 2]], 'ending_value': 2, 'cogs': 50}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 6}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[3, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[1, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 35}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 11]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 95}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 2}, {'layers': [[2, 4]], 'ending_value': 4, 'cogs': 48}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 7}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -2}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[4, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[2, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 46}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 12]], 'ending_qty': 17}, {'layers': [[10, 50], [4, 24], [3, 21]], 'ending_value': 95, 'cogs': 117}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 3}, {'layers': [[3, 6]], 'ending_value': 6, 'cogs': 46}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 8}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -3}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[5, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[3, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 57}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 13]], 'ending_qty': 18}, {'layers': [[10, 50], [4, 24], [4, 28]], 'ending_value': 102, 'cogs': 118}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 11}, {'layers': [[10, 50], [1, 6]], 'ending_value': 56, 'cogs': 60}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 4}, {'layers': [[3, 6], [1, 4]], 'ending_value': 10, 'cogs': 42}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 9}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -4}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[6, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[4, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 68}]], [['increment layer', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7], [8, 14]], 'ending_qty': 19}, {'layers': [[10, 50], [4, 24], [5, 35]], 'ending_value': 109, 'cogs': 119}], ['liquidation', {'begin': [[10, 5], [4, 6]], 'purchases': [[6, 7]], 'ending_qty': 10}, {'layers': [[10, 50]], 'ending_value': 50, 'cogs': 66}], ['deep liquidation', {'begin': [[3, 2], [3, 4], [3, 6]], 'purchases': [[2, 8]], 'ending_qty': 5}, {'layers': [[3, 6], [2, 8]], 'ending_value': 14, 'cogs': 38}], ['over available', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': 10}, {'error': 'invalid ending quantity'}], ['negative ending', {'begin': [[2, 3]], 'purchases': [[3, 4]], 'ending_qty': -5}, {'error': 'invalid ending quantity'}], ['count of minus one', {'begin': [[7, 3]], 'purchases': [[3, 4]], 'ending_qty': -1}, {'error': 'invalid ending quantity'}], ['all sold', {'begin': [[5, 3]], 'purchases': [[5, 4]], 'ending_qty': 0}, {'layers': [], 'ending_value': 0, 'cogs': 35}], ['exact base', {'begin': [[4, 10]], 'purchases': [[5, 11], [2, 12]], 'ending_qty': 4}, {'layers': [[4, 40]], 'ending_value': 40, 'cogs': 79}]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated bounded teaching model with explicit toy rules; not an accounting-standard implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-inventory-cost-layering-periodic-lifo-increment-empty-layer-suppression","generated_at":"2026-09-29T14:46:40.428208+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Inventory valuation and cost-of-goods decisions depend on this rule.","repair":"Append only layers with a positive kept quantity.","root_cause":"The keep loop appends a layer even when nothing is kept from it.","sha256":"2fdb7218ef53dd27f641efb4cae060ab8dd643f065df086c1dd0cf5a001a6b18","title":"Periodic LIFO year-end layering: empty layer suppression · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.309,"exit_code":1,"observations":[{"actual":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"check":"increment layer","expected":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"passed":true},{"actual":{"cogs":66,"ending_value":50,"layers":[[10,50],[0,0]]},"check":"liquidation","expected":{"cogs":66,"ending_value":50,"layers":[[10,50]]},"passed":false},{"actual":{"cogs":50,"ending_value":2,"layers":[[1,2],[0,0],[0,0]]},"check":"deep liquidation","expected":{"cogs":50,"ending_value":2,"layers":[[1,2]]},"passed":false},{"actual":{"error":"invalid ending quantity"},"check":"over available","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"negative ending","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"count of minus one","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"cogs":35,"ending_value":0,"layers":[[0,0]]},"check":"all sold","expected":{"cogs":35,"ending_value":0,"layers":[]},"passed":false},{"actual":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"check":"exact base","expected":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"increment layer\", \"actual\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"expected\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"passed\": true}, {\"check\": \"liquidation\", \"actual\": {\"layers\": [[10, 50], [0, 0]], \"ending_value\": 50, \"cogs\": 66}, \"expected\": {\"layers\": [[10, 50]], \"ending_value\": 50, \"cogs\": 66}, \"passed\": false}, {\"check\": \"deep liquidation\", \"actual\": {\"layers\": [[1, 2], [0, 0], [0, 0]], \"ending_value\": 2, \"cogs\": 50}, \"expected\": {\"layers\": [[1, 2]], \"ending_value\": 2, \"cogs\": 50}, \"passed\": false}, {\"check\": \"over available\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"negative ending\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"count of minus one\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"all sold\", \"actual\": {\"layers\": [[0, 0]], \"ending_value\": 0, \"cogs\": 35}, \"expected\": {\"layers\": [], \"ending_value\": 0, \"cogs\": 35}, \"passed\": false}, {\"check\": \"exact base\", \"actual\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"expected\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.845,"exit_code":1,"observations":[{"actual":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"check":"increment layer","expected":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"passed":true},{"actual":{"cogs":66,"ending_value":50,"layers":[[10,50],[0,0]]},"check":"liquidation","expected":{"cogs":66,"ending_value":50,"layers":[[10,50]]},"passed":false},{"actual":{"cogs":50,"ending_value":2,"layers":[[1,2],[0,0],[0,0]]},"check":"deep liquidation","expected":{"cogs":50,"ending_value":2,"layers":[[1,2]]},"passed":false},{"actual":{"error":"invalid ending quantity"},"check":"over available","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"negative ending","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"count of minus one","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"cogs":35,"ending_value":0,"layers":[[0,0]]},"check":"all sold","expected":{"cogs":35,"ending_value":0,"layers":[]},"passed":false},{"actual":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"check":"exact base","expected":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"increment layer\", \"actual\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"expected\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"passed\": true}, {\"check\": \"liquidation\", \"actual\": {\"layers\": [[10, 50], [0, 0]], \"ending_value\": 50, \"cogs\": 66}, \"expected\": {\"layers\": [[10, 50]], \"ending_value\": 50, \"cogs\": 66}, \"passed\": false}, {\"check\": \"deep liquidation\", \"actual\": {\"layers\": [[1, 2], [0, 0], [0, 0]], \"ending_value\": 2, \"cogs\": 50}, \"expected\": {\"layers\": [[1, 2]], \"ending_value\": 2, \"cogs\": 50}, \"passed\": false}, {\"check\": \"over available\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"negative ending\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"count of minus one\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"all sold\", \"actual\": {\"layers\": [[0, 0]], \"ending_value\": 0, \"cogs\": 35}, \"expected\": {\"layers\": [], \"ending_value\": 0, \"cogs\": 35}, \"passed\": false}, {\"check\": \"exact base\", \"actual\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"expected\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.692,"exit_code":0,"observations":[{"actual":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"check":"increment layer","expected":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"passed":true},{"actual":{"cogs":66,"ending_value":50,"layers":[[10,50]]},"check":"liquidation","expected":{"cogs":66,"ending_value":50,"layers":[[10,50]]},"passed":true},{"actual":{"cogs":50,"ending_value":2,"layers":[[1,2]]},"check":"deep liquidation","expected":{"cogs":50,"ending_value":2,"layers":[[1,2]]},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"over available","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"negative ending","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"error":"invalid ending quantity"},"check":"count of minus one","expected":{"error":"invalid ending quantity"},"passed":true},{"actual":{"cogs":35,"ending_value":0,"layers":[]},"check":"all sold","expected":{"cogs":35,"ending_value":0,"layers":[]},"passed":true},{"actual":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"check":"exact base","expected":{"cogs":35,"ending_value":40,"layers":[[4,40]]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"increment layer\", \"actual\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"expected\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"passed\": true}, {\"check\": \"liquidation\", \"actual\": {\"layers\": [[10, 50]], \"ending_value\": 50, \"cogs\": 66}, \"expected\": {\"layers\": [[10, 50]], \"ending_value\": 50, \"cogs\": 66}, \"passed\": true}, {\"check\": \"deep liquidation\", \"actual\": {\"layers\": [[1, 2]], \"ending_value\": 2, \"cogs\": 50}, \"expected\": {\"layers\": [[1, 2]], \"ending_value\": 2, \"cogs\": 50}, \"passed\": true}, {\"check\": \"over available\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"negative ending\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"count of minus one\", \"actual\": {\"error\": \"invalid ending quantity\"}, \"expected\": {\"error\": \"invalid ending quantity\"}, \"passed\": true}, {\"check\": \"all sold\", \"actual\": {\"layers\": [], \"ending_value\": 0, \"cogs\": 35}, \"expected\": {\"layers\": [], \"ending_value\": 0, \"cogs\": 35}, \"passed\": true}, {\"check\": \"exact base\", \"actual\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"expected\": {\"layers\": [[4, 40]], \"ending_value\": 40, \"cogs\": 35}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}