{"abstract":"A physical count that includes goods already returned to the vendor is accepted.","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":"Checking only for negative counts drops the upper bound altogether.","family":"w2-inventory-cost-layering-periodic-weighted-average-count-validity-bound","id":"FA-60301","implementations":{"attempt":{"sha256":"6fdb22af9289fe8b74380753703ac195b263c94473925e65e13f7a6ba5058dbf","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:\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":"f217aace96aa33c24710adbe3a795ab81f280b4af350ed8b9c710c45faa32b9e","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 > x['begin'][0] + sum(q for q, v in x['purchases']):\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-count-validity-bound","generated_at":"2026-09-29T14:46:44.362974+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":"Validate the count against pool units after returns.","root_cause":"The count bound is checked against units before vendor returns.","sha256":"451cab23877bdd34f59266406a9cdf9237bda07e3171f9b3defb2b8fa783fe65","title":"Periodic weighted average with vendor returns: count validity bound · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.868,"exit_code":1,"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":{"cogs":-224,"ending_value":784,"pool":560,"units":5},"check":"too many counted","expected":{"error":"invalid count"},"passed":false},{"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":false,"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\": {\"units\": 5, \"pool\": 560, \"ending_value\": 784, \"cogs\": -224}, \"expected\": {\"error\": \"invalid count\"}, \"passed\": false}, {\"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\": false}\n"},"broken":{"elapsed_ms":42.229,"exit_code":1,"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":{"cogs":-224,"ending_value":784,"pool":560,"units":5},"check":"too many counted","expected":{"error":"invalid count"},"passed":false},{"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":false,"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\": {\"units\": 5, \"pool\": 560, \"ending_value\": 784, \"cogs\": -224}, \"expected\": {\"error\": \"invalid count\"}, \"passed\": false}, {\"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\": false}\n"},"fixed":{"elapsed_ms":42.094,"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"}