FA-94866 / Warehouse slotting and bin packing / Open access
ABC velocity: report follows ranking not input · case 01
The class report is returned in velocity rank order, misaligning it with the caller item master rows.
ROOT CAUSE
The final projection iterates the ranked list instead of the caller input list.
VERIFIED REPAIR
Emit one row per input SKU in the original input order.
Unsuccessful approach: Sorting the report by sku code still disagrees with the input order of the item master.
Case contract
Input [[sku, weekly_picks]]. Rank by picks descending then sku ascending. SKUs with equal picks form a tie group whose cumulative prior share is the picks of strictly faster groups. picks 0 -> D (dead stock); prior share < 80% -> A; < 95% -> B; else C. Return [[sku, class]] in input order.
Why this case matters
Velocity classes drive which SKUs are slotted into forward pick areas.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['generated mix 1', [[['S23', 2], ['S10', 5]]], [['S23', 'A'], ['S10', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['generated mix 17', [[['S01', 10], ['S12', 10], ['S04', 8]]], [['S01', 'A'], ['S12', 'A'], ['S04', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]]], [['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['generated mix 14', [[['S13', 60], ['S02', 8], ['S18', 5], ['S26', 5], ['S20', 5], ['S10', 5], ['S01', 10]]], [['S13', 'A'], ['S02', 'A'], ['S18', 'A'], ['S26', 'A'], ['S20', 'A'], ['S10', 'A'], ['S01', 'A']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['generated mix 20', [[['S23', 2], ['S15', 60], ['S10', 5]]], [['S23', 'C'], ['S15', 'A'], ['S10', 'B']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 40', [[['S28', 20], ['S12', 0], ['S02', 2], ['S21', 10], ['S16', 40], ['S17', 60], ['S11', 5], ['S13', 2]]], [['S28', 'A'], ['S12', 'D'], ['S02', 'C'], ['S21', 'B'], ['S16', 'A'], ['S17', 'A'], ['S11', 'B'], ['S13', 'C']]]], [['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| input order kept | [['a', 'A'], ['k', 'B'], ['m', 'C']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Failed |
| generated mix 1 | [['S10', 'A'], ['S23', 'A']] | [['S23', 'A'], ['S10', 'A']] | Failed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| exact 95 boundary | [['p', 'A'], ['q', 'B'], ['r', 'C']] | [['p', 'A'], ['q', 'B'], ['r', 'C']] | Passed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S25', 'A'], ['S14', 'A'], ['S17', 'A'], ['S28', 'A'], ['S16', 'B'], ['S01', 'C'], ['S19', 'C'], ['S10', 'D']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / 2aaa6726400e881610c1bf9e2fc9e9a76f75d8f0b3b6ad4eeb897299f98583cf
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in sorted(skus)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['generated mix 1', [[['S23', 2], ['S10', 5]]], [['S23', 'A'], ['S10', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['generated mix 17', [[['S01', 10], ['S12', 10], ['S04', 8]]], [['S01', 'A'], ['S12', 'A'], ['S04', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]]], [['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['generated mix 14', [[['S13', 60], ['S02', 8], ['S18', 5], ['S26', 5], ['S20', 5], ['S10', 5], ['S01', 10]]], [['S13', 'A'], ['S02', 'A'], ['S18', 'A'], ['S26', 'A'], ['S20', 'A'], ['S10', 'A'], ['S01', 'A']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['generated mix 20', [[['S23', 2], ['S15', 60], ['S10', 5]]], [['S23', 'C'], ['S15', 'A'], ['S10', 'B']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 40', [[['S28', 20], ['S12', 0], ['S02', 2], ['S21', 10], ['S16', 40], ['S17', 60], ['S11', 5], ['S13', 2]]], [['S28', 'A'], ['S12', 'D'], ['S02', 'C'], ['S21', 'B'], ['S16', 'A'], ['S17', 'A'], ['S11', 'B'], ['S13', 'C']]]], [['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| input order kept | [['a', 'A'], ['k', 'B'], ['m', 'C']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Failed |
| generated mix 1 | [['S10', 'A'], ['S23', 'A']] | [['S23', 'A'], ['S10', 'A']] | Failed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| exact 95 boundary | [['p', 'A'], ['q', 'B'], ['r', 'C']] | [['p', 'A'], ['q', 'B'], ['r', 'C']] | Passed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S01', 'C'], ['S10', 'D'], ['S14', 'A'], ['S16', 'B'], ['S17', 'A'], ['S19', 'C'], ['S25', 'A'], ['S28', 'A']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / 59044ce5e553498fda6744e4886748f517b806a555d7caf7e175302bb4b78090
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['generated mix 1', [[['S23', 2], ['S10', 5]]], [['S23', 'A'], ['S10', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['generated mix 17', [[['S01', 10], ['S12', 10], ['S04', 8]]], [['S01', 'A'], ['S12', 'A'], ['S04', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]]], [['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['generated mix 14', [[['S13', 60], ['S02', 8], ['S18', 5], ['S26', 5], ['S20', 5], ['S10', 5], ['S01', 10]]], [['S13', 'A'], ['S02', 'A'], ['S18', 'A'], ['S26', 'A'], ['S20', 'A'], ['S10', 'A'], ['S01', 'A']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['generated mix 20', [[['S23', 2], ['S15', 60], ['S10', 5]]], [['S23', 'C'], ['S15', 'A'], ['S10', 'B']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 40', [[['S28', 20], ['S12', 0], ['S02', 2], ['S21', 10], ['S16', 40], ['S17', 60], ['S11', 5], ['S13', 2]]], [['S28', 'A'], ['S12', 'D'], ['S02', 'C'], ['S21', 'B'], ['S16', 'A'], ['S17', 'A'], ['S11', 'B'], ['S13', 'C']]]], [['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['generated mix 25', [[['S25', 1], ['S06', 5], ['S15', 8], ['S19', 2]]], [['S25', 'B'], ['S06', 'A'], ['S15', 'A'], ['S19', 'B']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| input order kept | [['m', 'C'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Passed |
| generated mix 1 | [['S23', 'A'], ['S10', 'A']] | [['S23', 'A'], ['S10', 'A']] | Passed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| exact 95 boundary | [['p', 'A'], ['q', 'B'], ['r', 'C']] | [['p', 'A'], ['q', 'B'], ['r', 'C']] | Passed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Passed |
SHA-256 / 0751eef189979f8a018857ce256e45716aabac166567c7362e6db3f83769688e
Verification & scope
Stipulated toy ABC policy with fixed 80/95 bands; not a vendor WMS rule set. 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:08.469288+00:00.
Case digest / aa2c431290186df7fdfd865c64a72821b101bfc7b47f4416e6397b4cf894dbbe