{"abstract":"Returned goods are removed at the blended average rather than their own invoice cost.","category":"Inventory cost layering","checks":7,"contract":"Input {begin:[qty,value], purchases:[[qty,value]], vendor_returns:[[purchase_index,qty]], ending_qty}. Each vendor return removes qty units and floor(value*qty/purchase_qty) value of that purchase. The pool is beginning plus purchases less returns; ending value = round-half-up(ending_qty*pool value/pool units); COGS = pool value - ending value. ending_qty outside [0, pool units] returns {\"error\"}. Return {units, pool, ending_value, cogs}.","evaluation_group":"w2-inventory-cost-layering-periodic-weighted-average","failed_approach":"Valuing every return at the latest purchase cost is still the wrong line.","family":"w2-inventory-cost-layering-periodic-weighted-average-vendor-return-valuation","id":"FA-60286","implementations":{"attempt":{"sha256":"95fb593790b30cce53cce3d048354cc6c44e77bd8b41b39b2673eb9e0f13183a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    units = x['begin'][0] + sum(q for q, v in x['purchases'])\n    pool = x['begin'][1] + sum(v for q, v in x['purchases'])\n    for i, rq in x['vendor_returns']:\n        pq, pv = x['purchases'][i]\n        pool -= x[\"purchases\"][-1][1] * rq // x[\"purchases\"][-1][0]\n        units -= rq\n    e = x['ending_qty']\n    if e < 0 or e > units:\n        return {'error': 'invalid count'}\n    ending = (2 * e * pool + units) // (2 * units) if units else 0\n    return {'units': units, 'pool': pool, 'ending_value': ending, 'cogs': pool - ending}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1501]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4451, 'ending_value': 1526, 'cogs': 2925}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 781]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1261, 'ending_value': 378, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1410]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2501], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3001, 'ending_value': 1200, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1502]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4452, 'ending_value': 1526, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 782]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1262, 'ending_value': 379, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1411]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2502], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3002, 'ending_value': 1201, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1503]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4453, 'ending_value': 1527, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 783]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1263, 'ending_value': 379, 'cogs': 884}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1412]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1825, 'ending_value': 1027, 'cogs': 798}], ['pricey begin', {'begin': [5, 2503], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3003, 'ending_value': 1201, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1504]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4454, 'ending_value': 1527, 'cogs': 2927}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 784]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1264, 'ending_value': 379, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1413]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2504], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3004, 'ending_value': 1202, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1505]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4455, 'ending_value': 1527, 'cogs': 2928}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 785]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1265, 'ending_value': 380, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1414]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2505], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3005, 'ending_value': 1202, 'cogs': 1803}]]]\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":"5d5cd550baaab398841950643c716c4bcfcf87795629df46e4858aba80982914","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    units = x['begin'][0] + sum(q for q, v in x['purchases'])\n    pool = x['begin'][1] + sum(v for q, v in x['purchases'])\n    for i, rq in x['vendor_returns']:\n        pq, pv = x['purchases'][i]\n        pool -= (x[\"begin\"][1] + sum(v for q, v in x[\"purchases\"])) * rq // (x[\"begin\"][0] + sum(q for q, v in x[\"purchases\"]))\n        units -= rq\n    e = x['ending_qty']\n    if e < 0 or e > units:\n        return {'error': 'invalid count'}\n    ending = (2 * e * pool + units) // (2 * units) if units else 0\n    return {'units': units, 'pool': pool, 'ending_value': ending, 'cogs': pool - ending}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1501]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4451, 'ending_value': 1526, 'cogs': 2925}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 781]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1261, 'ending_value': 378, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1410]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2501], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3001, 'ending_value': 1200, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1502]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4452, 'ending_value': 1526, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 782]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1262, 'ending_value': 379, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1411]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2502], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3002, 'ending_value': 1201, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1503]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4453, 'ending_value': 1527, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 783]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1263, 'ending_value': 379, 'cogs': 884}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1412]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1825, 'ending_value': 1027, 'cogs': 798}], ['pricey begin', {'begin': [5, 2503], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3003, 'ending_value': 1201, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1504]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4454, 'ending_value': 1527, 'cogs': 2927}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 784]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1264, 'ending_value': 379, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1413]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2504], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3004, 'ending_value': 1202, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1505]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4455, 'ending_value': 1527, 'cogs': 2928}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 785]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1265, 'ending_value': 380, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1414]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2505], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3005, 'ending_value': 1202, 'cogs': 1803}]]]\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":"aec8083932a6b9f18deae3d637a9883b4370defb82f687947de97bf8175659c4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    units = x['begin'][0] + sum(q for q, v in x['purchases'])\n    pool = x['begin'][1] + sum(v for q, v in x['purchases'])\n    for i, rq in x['vendor_returns']:\n        pq, pv = x['purchases'][i]\n        pool -= pv * rq // pq\n        units -= rq\n    e = x['ending_qty']\n    if e < 0 or e > units:\n        return {'error': 'invalid count'}\n    ending = (2 * e * pool + units) // (2 * units) if units else 0\n    return {'units': units, 'pool': pool, 'ending_value': ending, 'cogs': pool - ending}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1501]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4451, 'ending_value': 1526, 'cogs': 2925}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 781]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1261, 'ending_value': 378, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1410]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2501], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3001, 'ending_value': 1200, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1502]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4452, 'ending_value': 1526, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 782]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1262, 'ending_value': 379, 'cogs': 883}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1411]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1824, 'ending_value': 1026, 'cogs': 798}], ['pricey begin', {'begin': [5, 2502], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3002, 'ending_value': 1201, 'cogs': 1801}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1503]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4453, 'ending_value': 1527, 'cogs': 2926}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 783]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1263, 'ending_value': 379, 'cogs': 884}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1412]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1825, 'ending_value': 1027, 'cogs': 798}], ['pricey begin', {'begin': [5, 2503], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3003, 'ending_value': 1201, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1504]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4454, 'ending_value': 1527, 'cogs': 2927}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 784]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1264, 'ending_value': 379, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 2]], 'ending_qty': 5}, {'units': 8, 'pool': 655, 'ending_value': 409, 'cogs': 246}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 6}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1413]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2504], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3004, 'ending_value': 1202, 'cogs': 1802}]], [['basic', {'begin': [10, 1000], 'purchases': [[20, 2600], [10, 1505]], 'vendor_returns': [[0, 5]], 'ending_qty': 12}, {'units': 35, 'pool': 4455, 'ending_value': 1527, 'cogs': 2928}], ['no returns', {'begin': [4, 480], 'purchases': [[6, 785]], 'vendor_returns': [], 'ending_qty': 3}, {'units': 10, 'pool': 1265, 'ending_value': 380, 'cogs': 885}], ['return second', {'begin': [0, 0], 'purchases': [[3, 100], [7, 777]], 'vendor_returns': [[1, 3]], 'ending_qty': 5}, {'units': 7, 'pool': 544, 'ending_value': 389, 'cogs': 155}], ['too many counted', {'begin': [2, 200], 'purchases': [[5, 600]], 'vendor_returns': [[0, 2]], 'ending_qty': 7}, {'error': 'invalid count'}], ['empty count', {'begin': [3, 330], 'purchases': [[3, 390]], 'vendor_returns': [[0, 1]], 'ending_qty': 0}, {'units': 5, 'pool': 590, 'ending_value': 0, 'cogs': 590}], ['odd costs', {'begin': [7, 701], 'purchases': [[3, 337], [11, 1414]], 'vendor_returns': [[1, 4], [0, 1]], 'ending_qty': 9}, {'units': 16, 'pool': 1826, 'ending_value': 1027, 'cogs': 799}], ['pricey begin', {'begin': [5, 2505], 'purchases': [[5, 500]], 'vendor_returns': [], 'ending_qty': 4}, {'units': 10, 'pool': 3005, 'ending_value': 1202, 'cogs': 1803}]]]\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-weighted-average-vendor-return-valuation","generated_at":"2026-09-29T14:46:44.191138+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":"Remove each return at its purchase line cost.","root_cause":"Vendor returns are valued at the pre-return pool average.","sha256":"1974016e580bcacc8a3e510880c06d03be5a69122b01d4d6ecde4d39840ca466","title":"Periodic weighted average with vendor returns: vendor return valuation · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.639,"exit_code":1,"observations":[{"actual":{"cogs":2859,"ending_value":1492,"pool":4351,"units":35},"check":"basic","expected":{"cogs":2925,"ending_value":1526,"pool":4451,"units":35},"passed":false},{"actual":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"check":"no returns","expected":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"passed":true},{"actual":{"cogs":155,"ending_value":389,"pool":544,"units":7},"check":"return second","expected":{"cogs":155,"ending_value":389,"pool":544,"units":7},"passed":true},{"actual":{"error":"invalid count"},"check":"too many counted","expected":{"error":"invalid count"},"passed":true},{"actual":{"cogs":590,"ending_value":0,"pool":590,"units":5},"check":"empty count","expected":{"cogs":590,"ending_value":0,"pool":590,"units":5},"passed":true},{"actual":{"cogs":791,"ending_value":1017,"pool":1808,"units":16},"check":"odd costs","expected":{"cogs":798,"ending_value":1026,"pool":1824,"units":16},"passed":false},{"actual":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"check":"pricey begin","expected":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"basic\", \"actual\": {\"units\": 35, \"pool\": 4351, \"ending_value\": 1492, \"cogs\": 2859}, \"expected\": {\"units\": 35, \"pool\": 4451, \"ending_value\": 1526, \"cogs\": 2925}, \"passed\": false}, {\"check\": \"no returns\", \"actual\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"expected\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"passed\": true}, {\"check\": \"return second\", \"actual\": {\"units\": 7, \"pool\": 544, \"ending_value\": 389, \"cogs\": 155}, \"expected\": {\"units\": 7, \"pool\": 544, \"ending_value\": 389, \"cogs\": 155}, \"passed\": true}, {\"check\": \"too many counted\", \"actual\": {\"error\": \"invalid count\"}, \"expected\": {\"error\": \"invalid count\"}, \"passed\": true}, {\"check\": \"empty count\", \"actual\": {\"units\": 5, \"pool\": 590, \"ending_value\": 0, \"cogs\": 590}, \"expected\": {\"units\": 5, \"pool\": 590, \"ending_value\": 0, \"cogs\": 590}, \"passed\": true}, {\"check\": \"odd costs\", \"actual\": {\"units\": 16, \"pool\": 1808, \"ending_value\": 1017, \"cogs\": 791}, \"expected\": {\"units\": 16, \"pool\": 1824, \"ending_value\": 1026, \"cogs\": 798}, \"passed\": false}, {\"check\": \"pricey begin\", \"actual\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"expected\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.392,"exit_code":1,"observations":[{"actual":{"cogs":2933,"ending_value":1531,"pool":4464,"units":35},"check":"basic","expected":{"cogs":2925,"ending_value":1526,"pool":4451,"units":35},"passed":false},{"actual":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"check":"no returns","expected":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"passed":true},{"actual":{"cogs":175,"ending_value":439,"pool":614,"units":7},"check":"return second","expected":{"cogs":155,"ending_value":389,"pool":544,"units":7},"passed":false},{"actual":{"error":"invalid count"},"check":"too many counted","expected":{"error":"invalid count"},"passed":true},{"actual":{"cogs":600,"ending_value":0,"pool":600,"units":5},"check":"empty count","expected":{"cogs":590,"ending_value":0,"pool":590,"units":5},"passed":false},{"actual":{"cogs":816,"ending_value":1050,"pool":1866,"units":16},"check":"odd costs","expected":{"cogs":798,"ending_value":1026,"pool":1824,"units":16},"passed":false},{"actual":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"check":"pricey begin","expected":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"basic\", \"actual\": {\"units\": 35, \"pool\": 4464, \"ending_value\": 1531, \"cogs\": 2933}, \"expected\": {\"units\": 35, \"pool\": 4451, \"ending_value\": 1526, \"cogs\": 2925}, \"passed\": false}, {\"check\": \"no returns\", \"actual\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"expected\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"passed\": true}, {\"check\": \"return second\", \"actual\": {\"units\": 7, \"pool\": 614, \"ending_value\": 439, \"cogs\": 175}, \"expected\": {\"units\": 7, \"pool\": 544, \"ending_value\": 389, \"cogs\": 155}, \"passed\": false}, {\"check\": \"too many counted\", \"actual\": {\"error\": \"invalid count\"}, \"expected\": {\"error\": \"invalid count\"}, \"passed\": true}, {\"check\": \"empty count\", \"actual\": {\"units\": 5, \"pool\": 600, \"ending_value\": 0, \"cogs\": 600}, \"expected\": {\"units\": 5, \"pool\": 590, \"ending_value\": 0, \"cogs\": 590}, \"passed\": false}, {\"check\": \"odd costs\", \"actual\": {\"units\": 16, \"pool\": 1866, \"ending_value\": 1050, \"cogs\": 816}, \"expected\": {\"units\": 16, \"pool\": 1824, \"ending_value\": 1026, \"cogs\": 798}, \"passed\": false}, {\"check\": \"pricey begin\", \"actual\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"expected\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.749,"exit_code":0,"observations":[{"actual":{"cogs":2925,"ending_value":1526,"pool":4451,"units":35},"check":"basic","expected":{"cogs":2925,"ending_value":1526,"pool":4451,"units":35},"passed":true},{"actual":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"check":"no returns","expected":{"cogs":883,"ending_value":378,"pool":1261,"units":10},"passed":true},{"actual":{"cogs":155,"ending_value":389,"pool":544,"units":7},"check":"return second","expected":{"cogs":155,"ending_value":389,"pool":544,"units":7},"passed":true},{"actual":{"error":"invalid count"},"check":"too many counted","expected":{"error":"invalid count"},"passed":true},{"actual":{"cogs":590,"ending_value":0,"pool":590,"units":5},"check":"empty count","expected":{"cogs":590,"ending_value":0,"pool":590,"units":5},"passed":true},{"actual":{"cogs":798,"ending_value":1026,"pool":1824,"units":16},"check":"odd costs","expected":{"cogs":798,"ending_value":1026,"pool":1824,"units":16},"passed":true},{"actual":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"check":"pricey begin","expected":{"cogs":1801,"ending_value":1200,"pool":3001,"units":10},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"basic\", \"actual\": {\"units\": 35, \"pool\": 4451, \"ending_value\": 1526, \"cogs\": 2925}, \"expected\": {\"units\": 35, \"pool\": 4451, \"ending_value\": 1526, \"cogs\": 2925}, \"passed\": true}, {\"check\": \"no returns\", \"actual\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"expected\": {\"units\": 10, \"pool\": 1261, \"ending_value\": 378, \"cogs\": 883}, \"passed\": true}, {\"check\": \"return second\", \"actual\": {\"units\": 7, \"pool\": 544, \"ending_value\": 389, \"cogs\": 155}, \"expected\": {\"units\": 7, \"pool\": 544, \"ending_value\": 389, \"cogs\": 155}, \"passed\": true}, {\"check\": \"too many counted\", \"actual\": {\"error\": \"invalid count\"}, \"expected\": {\"error\": \"invalid count\"}, \"passed\": true}, {\"check\": \"empty count\", \"actual\": {\"units\": 5, \"pool\": 590, \"ending_value\": 0, \"cogs\": 590}, \"expected\": {\"units\": 5, \"pool\": 590, \"ending_value\": 0, \"cogs\": 590}, \"passed\": true}, {\"check\": \"odd costs\", \"actual\": {\"units\": 16, \"pool\": 1824, \"ending_value\": 1026, \"cogs\": 798}, \"expected\": {\"units\": 16, \"pool\": 1824, \"ending_value\": 1026, \"cogs\": 798}, \"passed\": true}, {\"check\": \"pricey begin\", \"actual\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"expected\": {\"units\": 10, \"pool\": 3001, \"ending_value\": 1200, \"cogs\": 1801}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}