{"abstract":"The margin column repeats the overround (4.71 instead of 4.50 for 1.91/1.91).","category":"Betting odds conversion","checks":7,"contract":"Market book analysis for decimal prices (strings, each > 1, else \"invalid\"). Implied probability is 1/d; book = sum of implied probabilities. Return [overround percent (book - 1) * 100, bookmaker margin percent (1 - 1/book) * 100, fair prices d * book for proportional margin removal], every number rounded half up to two decimals (negative values are rounded toward +infinity at the half) and formatted with two decimals.","contract_signature":"prices","evaluation_group":"w2-odds-conversion-book-overround-fair-odds","failed_approach":"Dividing the overround by the number of outcomes gives a per-outcome figure, not the margin.","family":"w2-odds-conversion-book-overround-fair-odds-margin-versus-overround","id":"FA-84411","implementations":{"attempt":{"sha256":"52d40802950a41e3040733aeeffa40330fe843e45073159d6ae219d669a1ba3e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices):\n    def fmt(x):\n        c = math.floor(x * 100 + Fraction(1, 2))\n        sign = '-' if c < 0 else ''\n        c = abs(c)\n        return sign + '%d.%02d' % (c // 100, c % 100)\n    ds = [Fraction(p) for p in prices]\n    if any(d <= 1 for d in ds):\n        return 'invalid'\n    book = sum(1 / d for d in ds)\n    over = (book - 1) * 100\n    margin = (book - 1) / len(ds) * 100\n    fair = [fmt(d * book) for d in ds]\n    return [fmt(over), fmt(margin), fair]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['2.23', '1.91', '5.75'],),\n   ['14.59', '12.73', ['2.56', '2.19', '6.59']]),\n  ('variant scenario 1',\n   (['5.06', '2.28', '4.51', '3.78'],),\n   ['12.25', '10.91', ['5.68', '2.56', '5.06', '4.24']]),\n  ('variant scenario 2', (['1.14', '3.87'],), ['13.56', '11.94', ['1.29', '4.39']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.85', '3.37', '2.18'],),\n   ['1.52', '1.50', ['3.91', '3.42', '2.21']]),\n  ('variant scenario 1', (['1.99', '2.86', '3.67'],), ['12.46', '11.08', ['2.24', '3.22', '4.13']]),\n  ('variant scenario 2',\n   (['2.92', '8.98', '1.89'],),\n   ['-1.71', '-1.74', ['2.87', '8.83', '1.86']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.10', '8.19', '3.32', '3.05'],),\n   ['7.38', '6.87', ['3.33', '8.79', '3.56', '3.27']]),\n  ('variant scenario 1',\n   (['2.51', '4.38', '4.81', '3.77'],),\n   ['9.99', '9.08', ['2.76', '4.82', '5.29', '4.15']]),\n  ('variant scenario 2', (['2.41', '2.33', '4.15'],), ['8.51', '7.84', ['2.62', '2.53', '4.50']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.20', '3.70', '2.55', '7.93'],),\n   ['10.10', '9.18', ['3.52', '4.07', '2.81', '8.73']]),\n  ('variant scenario 1', (['1.21', '4.22'],), ['6.34', '5.96', ['1.29', '4.49']]),\n  ('variant scenario 2',\n   (['19.30', '2.55', '6.75', '2.08'],),\n   ['7.29', '6.79', ['20.71', '2.74', '7.24', '2.23']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround', (['4.37', '1.19'],), ['6.92', '6.47', ['4.67', '1.27']]),\n  ('variant scenario 1', (['1.29', '4.02'],), ['2.40', '2.34', ['1.32', '4.12']]),\n  ('variant scenario 2', (['4.42', '2.56', '2.27'],), ['5.74', '5.43', ['4.67', '2.71', '2.40']])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"e53179ba357dcbab17f4e559a846a60d48bc9c045b2157ddb51f5ebd71b54fe9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices):\n    def fmt(x):\n        c = math.floor(x * 100 + Fraction(1, 2))\n        sign = '-' if c < 0 else ''\n        c = abs(c)\n        return sign + '%d.%02d' % (c // 100, c % 100)\n    ds = [Fraction(p) for p in prices]\n    if any(d <= 1 for d in ds):\n        return 'invalid'\n    book = sum(1 / d for d in ds)\n    over = (book - 1) * 100\n    margin = (book - 1) * 100\n    fair = [fmt(d * book) for d in ds]\n    return [fmt(over), fmt(margin), fair]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['2.23', '1.91', '5.75'],),\n   ['14.59', '12.73', ['2.56', '2.19', '6.59']]),\n  ('variant scenario 1',\n   (['5.06', '2.28', '4.51', '3.78'],),\n   ['12.25', '10.91', ['5.68', '2.56', '5.06', '4.24']]),\n  ('variant scenario 2', (['1.14', '3.87'],), ['13.56', '11.94', ['1.29', '4.39']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.85', '3.37', '2.18'],),\n   ['1.52', '1.50', ['3.91', '3.42', '2.21']]),\n  ('variant scenario 1', (['1.99', '2.86', '3.67'],), ['12.46', '11.08', ['2.24', '3.22', '4.13']]),\n  ('variant scenario 2',\n   (['2.92', '8.98', '1.89'],),\n   ['-1.71', '-1.74', ['2.87', '8.83', '1.86']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.10', '8.19', '3.32', '3.05'],),\n   ['7.38', '6.87', ['3.33', '8.79', '3.56', '3.27']]),\n  ('variant scenario 1',\n   (['2.51', '4.38', '4.81', '3.77'],),\n   ['9.99', '9.08', ['2.76', '4.82', '5.29', '4.15']]),\n  ('variant scenario 2', (['2.41', '2.33', '4.15'],), ['8.51', '7.84', ['2.62', '2.53', '4.50']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround',\n   (['3.20', '3.70', '2.55', '7.93'],),\n   ['10.10', '9.18', ['3.52', '4.07', '2.81', '8.73']]),\n  ('variant scenario 1', (['1.21', '4.22'],), ['6.34', '5.96', ['1.29', '4.49']]),\n  ('variant scenario 2',\n   (['19.30', '2.55', '6.75', '2.08'],),\n   ['7.29', '6.79', ['20.71', '2.74', '7.24', '2.23']])],\n [('control fair coin', (['2.00', '2.00'],), ['0.00', '0.00', ['2.00', '2.00']]),\n  ('control standard juice', (['1.91', '1.91'],), ['4.71', '4.50', ['2.00', '2.00']]),\n  ('boundary three-way', (['2.50', '3.20', '2.90'],), ['5.73', '5.42', ['2.64', '3.38', '3.07']]),\n  ('boundary no-profit price', (['1.00', '5.00'],), 'invalid'),\n  ('regression: margin versus overround', (['4.37', '1.19'],), ['6.92', '6.47', ['4.67', '1.27']]),\n  ('variant scenario 1', (['1.29', '4.02'],), ['2.40', '2.34', ['1.32', '4.12']]),\n  ('variant scenario 2', (['4.42', '2.56', '2.27'],), ['5.74', '5.43', ['4.67', '2.71', '2.40']])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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 toy contract stated in the contract field; not a claim of conformance with any operator, exchange or regulator 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-odds-conversion-book-overround-fair-odds-margin-versus-overround","generated_at":"2026-09-29T14:50:30.523871+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Trading tools report overround and margin separately and derive no-vig fair prices.","root_cause":"The margin is computed as book - 1 instead of 1 - 1/book.","sha256":"38477139a36fcaaaf71d58ebd1e9d756464257edb9dae2911ed0e1dfb1f59313","title":"Bookmaker margin reported as the overround · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.251,"exit_code":1,"observations":[{"actual":["0.00","0.00",["2.00","2.00"]],"check":"control fair coin","expected":["0.00","0.00",["2.00","2.00"]],"passed":true},{"actual":["4.71","2.36",["2.00","2.00"]],"check":"control standard juice","expected":["4.71","4.50",["2.00","2.00"]],"passed":false},{"actual":["5.73","1.91",["2.64","3.38","3.07"]],"check":"boundary three-way","expected":["5.73","5.42",["2.64","3.38","3.07"]],"passed":false},{"actual":"invalid","check":"boundary no-profit price","expected":"invalid","passed":true},{"actual":["14.59","4.86",["2.56","2.19","6.59"]],"check":"regression: margin versus overround","expected":["14.59","12.73",["2.56","2.19","6.59"]],"passed":false},{"actual":["12.25","3.06",["5.68","2.56","5.06","4.24"]],"check":"variant scenario 1","expected":["12.25","10.91",["5.68","2.56","5.06","4.24"]],"passed":false},{"actual":["13.56","6.78",["1.29","4.39"]],"check":"variant scenario 2","expected":["13.56","11.94",["1.29","4.39"]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control fair coin\", \"actual\": [\"0.00\", \"0.00\", [\"2.00\", \"2.00\"]], \"expected\": [\"0.00\", \"0.00\", [\"2.00\", \"2.00\"]], \"passed\": true}, {\"check\": \"control standard juice\", \"actual\": [\"4.71\", \"2.36\", [\"2.00\", \"2.00\"]], \"expected\": [\"4.71\", \"4.50\", [\"2.00\", \"2.00\"]], \"passed\": false}, {\"check\": \"boundary three-way\", \"actual\": [\"5.73\", \"1.91\", [\"2.64\", \"3.38\", \"3.07\"]], \"expected\": [\"5.73\", \"5.42\", [\"2.64\", \"3.38\", \"3.07\"]], \"passed\": false}, {\"check\": \"boundary no-profit price\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"regression: margin versus overround\", \"actual\": [\"14.59\", \"4.86\", [\"2.56\", \"2.19\", \"6.59\"]], \"expected\": [\"14.59\", \"12.73\", [\"2.56\", \"2.19\", \"6.59\"]], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"12.25\", \"3.06\", [\"5.68\", \"2.56\", \"5.06\", \"4.24\"]], \"expected\": [\"12.25\", \"10.91\", [\"5.68\", \"2.56\", \"5.06\", \"4.24\"]], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [\"13.56\", \"6.78\", [\"1.29\", \"4.39\"]], \"expected\": [\"13.56\", \"11.94\", [\"1.29\", \"4.39\"]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.143,"exit_code":1,"observations":[{"actual":["0.00","0.00",["2.00","2.00"]],"check":"control fair coin","expected":["0.00","0.00",["2.00","2.00"]],"passed":true},{"actual":["4.71","4.71",["2.00","2.00"]],"check":"control standard juice","expected":["4.71","4.50",["2.00","2.00"]],"passed":false},{"actual":["5.73","5.73",["2.64","3.38","3.07"]],"check":"boundary three-way","expected":["5.73","5.42",["2.64","3.38","3.07"]],"passed":false},{"actual":"invalid","check":"boundary no-profit price","expected":"invalid","passed":true},{"actual":["14.59","14.59",["2.56","2.19","6.59"]],"check":"regression: margin versus overround","expected":["14.59","12.73",["2.56","2.19","6.59"]],"passed":false},{"actual":["12.25","12.25",["5.68","2.56","5.06","4.24"]],"check":"variant scenario 1","expected":["12.25","10.91",["5.68","2.56","5.06","4.24"]],"passed":false},{"actual":["13.56","13.56",["1.29","4.39"]],"check":"variant scenario 2","expected":["13.56","11.94",["1.29","4.39"]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control fair coin\", \"actual\": [\"0.00\", \"0.00\", [\"2.00\", \"2.00\"]], \"expected\": [\"0.00\", \"0.00\", [\"2.00\", \"2.00\"]], \"passed\": true}, {\"check\": \"control standard juice\", \"actual\": [\"4.71\", \"4.71\", [\"2.00\", \"2.00\"]], \"expected\": [\"4.71\", \"4.50\", [\"2.00\", \"2.00\"]], \"passed\": false}, {\"check\": \"boundary three-way\", \"actual\": [\"5.73\", \"5.73\", [\"2.64\", \"3.38\", \"3.07\"]], \"expected\": [\"5.73\", \"5.42\", [\"2.64\", \"3.38\", \"3.07\"]], \"passed\": false}, {\"check\": \"boundary no-profit price\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"regression: margin versus overround\", \"actual\": [\"14.59\", \"14.59\", [\"2.56\", \"2.19\", \"6.59\"]], \"expected\": [\"14.59\", \"12.73\", [\"2.56\", \"2.19\", \"6.59\"]], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"12.25\", \"12.25\", [\"5.68\", \"2.56\", \"5.06\", \"4.24\"]], \"expected\": [\"12.25\", \"10.91\", [\"5.68\", \"2.56\", \"5.06\", \"4.24\"]], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [\"13.56\", \"13.56\", [\"1.29\", \"4.39\"]], \"expected\": [\"13.56\", \"11.94\", [\"1.29\", \"4.39\"]], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}