{"abstract":"The year-end LIFO increment is valued at the latest purchase prices, overstating ending inventory in inflationary years.","category":"Inventory cost layering","checks":9,"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":"Pricing the increment from the cheapest purchases is an unrelated rule and differs whenever prices are not monotonic.","family":"w2-inventory-cost-layering-periodic-lifo-increment-increment-layer-pricing-order","id":"FA-59871","implementations":{"attempt":{"sha256":"31bbae853a5036027c1bcd759e77c318c2793bc28951d2d2883bccc7321ffb05","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 sorted(purchases, key=lambda p: p[1]):\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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 4], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 48}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 5], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 50}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 6], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 52}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 7], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 54}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 8], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 56}]]]\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":"c1a3011f19f4c5b67e4018991e6083906959d1558774f105b5920897e7989b0c","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[::-1]:\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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 4], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 48}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 5], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 50}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 6], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 52}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 7], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 54}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 8], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 56}]]]\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":"eaa0566af407327b6f17f271e11b49eee69883c5fe3d68f9c2057e13c497c43b","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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 4], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 48}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 5], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 50}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 6], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 52}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 7], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 54}]], [['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}], ['non monotonic prices', {'begin': [[1, 1]], 'purchases': [[2, 9], [2, 8], [2, 20]], 'ending_qty': 3}, {'layers': [[1, 1], [2, 18]], 'ending_value': 19, 'cogs': 56}]]]\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-increment-layer-pricing-order","generated_at":"2026-09-29T14:46:40.303197+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":"Price the increment layer from the earliest purchases of the year forward.","root_cause":"The increment walks the purchase list from the end of the year instead of the beginning.","sha256":"986520c66343960140ab564d9f244a87d7086016e19e96906acefaa7c70d966d","title":"Periodic LIFO year-end layering: increment layer pricing order · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.731,"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]]},"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},{"actual":{"cogs":58,"ending_value":9,"layers":[[1,1],[2,8]]},"check":"non monotonic prices","expected":{"cogs":48,"ending_value":19,"layers":[[1,1],[2,18]]},"passed":false}],"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]], \"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}, {\"check\": \"non monotonic prices\", \"actual\": {\"layers\": [[1, 1], [2, 8]], \"ending_value\": 9, \"cogs\": 58}, \"expected\": {\"layers\": [[1, 1], [2, 18]], \"ending_value\": 19, \"cogs\": 48}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.629,"exit_code":1,"observations":[{"actual":{"cogs":82,"ending_value":114,"layers":[[10,50],[4,24],[4,40]]},"check":"increment layer","expected":{"cogs":94,"ending_value":102,"layers":[[10,50],[4,24],[4,28]]},"passed":false},{"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},{"actual":{"cogs":26,"ending_value":41,"layers":[[1,1],[2,40]]},"check":"non monotonic prices","expected":{"cogs":48,"ending_value":19,"layers":[[1,1],[2,18]]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"increment layer\", \"actual\": {\"layers\": [[10, 50], [4, 24], [4, 40]], \"ending_value\": 114, \"cogs\": 82}, \"expected\": {\"layers\": [[10, 50], [4, 24], [4, 28]], \"ending_value\": 102, \"cogs\": 94}, \"passed\": false}, {\"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}, {\"check\": \"non monotonic prices\", \"actual\": {\"layers\": [[1, 1], [2, 40]], \"ending_value\": 41, \"cogs\": 26}, \"expected\": {\"layers\": [[1, 1], [2, 18]], \"ending_value\": 19, \"cogs\": 48}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.749,"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},{"actual":{"cogs":48,"ending_value":19,"layers":[[1,1],[2,18]]},"check":"non monotonic prices","expected":{"cogs":48,"ending_value":19,"layers":[[1,1],[2,18]]},"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}, {\"check\": \"non monotonic prices\", \"actual\": {\"layers\": [[1, 1], [2, 18]], \"ending_value\": 19, \"cogs\": 48}, \"expected\": {\"layers\": [[1, 1], [2, 18]], \"ending_value\": 19, \"cogs\": 48}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}