{"abstract":"Draw-no-bet prices ignore the draw refund value in the stated formula.","category":"Betting odds conversion","checks":7,"contract":"Derive secondary markets from 1X2 decimal prices [home, draw, away], keeping the original margin. Draw no bet side price = side * (1 - 1/draw). Double chance for two outcomes p, q = p * q / (p + q): 1X from home and draw, 12 from home and away, X2 from draw and away. Return a dict with keys dnb_home, dnb_away, 1X, 12, X2, values rounded half up to two decimals.","evaluation_group":"w2-odds-conversion-derived-double-chance-dnb","failed_approach":"Using side * draw / (draw - 1) lengthens the price instead of shortening it.","family":"w2-odds-conversion-derived-double-chance-dnb-draw-no-bet-formula","id":"FA-84776","implementations":{"attempt":{"sha256":"44facfe1faaacbd75d37fb3d0d9438677375dee205b438b1f47b98e7e09701b6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices):\n    h, x, a = (Fraction(p) for p in prices)\n    def dc(p, q):\n        return p * q / (p + q)\n    def fmt(v):\n        c = math.floor(v * 100 + Fraction(1, 2))\n        return '%d.%02d' % (c // 100, c % 100)\n    return {'dnb_home': fmt(h * x / (x - 1)), 'dnb_away': fmt(a * (1 - 1 / x)),\n            '1X': fmt(dc(h, x)), '12': fmt(dc(h, a)), 'X2': fmt(dc(x, a))}\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 balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['3.08', '3.98', '1.91'],),\n   {'12': '1.18', '1X': '1.74', 'X2': '1.29', 'dnb_away': '1.43', 'dnb_home': '2.31'}),\n  ('variant scenario 1',\n   (['2.70', '2.20', '3.94'],),\n   {'12': '1.60', '1X': '1.21', 'X2': '1.41', 'dnb_away': '2.15', 'dnb_home': '1.47'}),\n  ('variant scenario 2',\n   (['3.11', '3.69', '2.21'],),\n   {'12': '1.29', '1X': '1.69', 'X2': '1.38', 'dnb_away': '1.61', 'dnb_home': '2.27'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.39', '4.53', '2.23'],),\n   {'12': '1.15', '1X': '1.56', 'X2': '1.49', 'dnb_away': '1.74', 'dnb_home': '1.86'}),\n  ('variant scenario 1',\n   (['2.40', '2.78', '3.12'],),\n   {'12': '1.36', '1X': '1.29', 'X2': '1.47', 'dnb_away': '2.00', 'dnb_home': '1.54'}),\n  ('variant scenario 2',\n   (['2.45', '3.59', '2.74'],),\n   {'12': '1.29', '1X': '1.46', 'X2': '1.55', 'dnb_away': '1.98', 'dnb_home': '1.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.12', '4.35', '2.69'],),\n   {'12': '1.19', '1X': '1.43', 'X2': '1.66', 'dnb_away': '2.07', 'dnb_home': '1.63'}),\n  ('variant scenario 1',\n   (['2.72', '5.41', '2.07'],),\n   {'12': '1.18', '1X': '1.81', 'X2': '1.50', 'dnb_away': '1.69', 'dnb_home': '2.22'}),\n  ('variant scenario 2',\n   (['3.50', '3.49', '2.07'],),\n   {'12': '1.30', '1X': '1.75', 'X2': '1.30', 'dnb_away': '1.48', 'dnb_home': '2.50'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['5.07', '3.53', '1.84'],),\n   {'12': '1.35', '1X': '2.08', 'X2': '1.21', 'dnb_away': '1.32', 'dnb_home': '3.63'}),\n  ('variant scenario 1',\n   (['1.77', '3.37', '5.28'],),\n   {'12': '1.33', '1X': '1.16', 'X2': '2.06', 'dnb_away': '3.71', 'dnb_home': '1.24'}),\n  ('variant scenario 2',\n   (['3.90', '3.46', '2.07'],),\n   {'12': '1.35', '1X': '1.83', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.04', '3.57', '3.79'],),\n   {'12': '1.33', '1X': '1.30', 'X2': '1.84', 'dnb_away': '2.73', 'dnb_home': '1.47'}),\n  ('variant scenario 1',\n   (['3.66', '3.49', '2.06'],),\n   {'12': '1.32', '1X': '1.79', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.61'}),\n  ('variant scenario 2',\n   (['3.91', '3.51', '2.01'],),\n   {'12': '1.33', '1X': '1.85', 'X2': '1.28', 'dnb_away': '1.44', 'dnb_home': '2.80'})]]\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":"0cd29329f9c44646f8dfeb0f5a83788506337f57470baa29b391716f9019a687","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices):\n    h, x, a = (Fraction(p) for p in prices)\n    def dc(p, q):\n        return p * q / (p + q)\n    def fmt(v):\n        c = math.floor(v * 100 + Fraction(1, 2))\n        return '%d.%02d' % (c // 100, c % 100)\n    return {'dnb_home': fmt((1 / h + 1 / a) * h), 'dnb_away': fmt(a * (1 - 1 / x)),\n            '1X': fmt(dc(h, x)), '12': fmt(dc(h, a)), 'X2': fmt(dc(x, a))}\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 balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['3.08', '3.98', '1.91'],),\n   {'12': '1.18', '1X': '1.74', 'X2': '1.29', 'dnb_away': '1.43', 'dnb_home': '2.31'}),\n  ('variant scenario 1',\n   (['2.70', '2.20', '3.94'],),\n   {'12': '1.60', '1X': '1.21', 'X2': '1.41', 'dnb_away': '2.15', 'dnb_home': '1.47'}),\n  ('variant scenario 2',\n   (['3.11', '3.69', '2.21'],),\n   {'12': '1.29', '1X': '1.69', 'X2': '1.38', 'dnb_away': '1.61', 'dnb_home': '2.27'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.39', '4.53', '2.23'],),\n   {'12': '1.15', '1X': '1.56', 'X2': '1.49', 'dnb_away': '1.74', 'dnb_home': '1.86'}),\n  ('variant scenario 1',\n   (['2.40', '2.78', '3.12'],),\n   {'12': '1.36', '1X': '1.29', 'X2': '1.47', 'dnb_away': '2.00', 'dnb_home': '1.54'}),\n  ('variant scenario 2',\n   (['2.45', '3.59', '2.74'],),\n   {'12': '1.29', '1X': '1.46', 'X2': '1.55', 'dnb_away': '1.98', 'dnb_home': '1.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.12', '4.35', '2.69'],),\n   {'12': '1.19', '1X': '1.43', 'X2': '1.66', 'dnb_away': '2.07', 'dnb_home': '1.63'}),\n  ('variant scenario 1',\n   (['2.72', '5.41', '2.07'],),\n   {'12': '1.18', '1X': '1.81', 'X2': '1.50', 'dnb_away': '1.69', 'dnb_home': '2.22'}),\n  ('variant scenario 2',\n   (['3.50', '3.49', '2.07'],),\n   {'12': '1.30', '1X': '1.75', 'X2': '1.30', 'dnb_away': '1.48', 'dnb_home': '2.50'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['5.07', '3.53', '1.84'],),\n   {'12': '1.35', '1X': '2.08', 'X2': '1.21', 'dnb_away': '1.32', 'dnb_home': '3.63'}),\n  ('variant scenario 1',\n   (['1.77', '3.37', '5.28'],),\n   {'12': '1.33', '1X': '1.16', 'X2': '2.06', 'dnb_away': '3.71', 'dnb_home': '1.24'}),\n  ('variant scenario 2',\n   (['3.90', '3.46', '2.07'],),\n   {'12': '1.35', '1X': '1.83', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.04', '3.57', '3.79'],),\n   {'12': '1.33', '1X': '1.30', 'X2': '1.84', 'dnb_away': '2.73', 'dnb_home': '1.47'}),\n  ('variant scenario 1',\n   (['3.66', '3.49', '2.06'],),\n   {'12': '1.32', '1X': '1.79', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.61'}),\n  ('variant scenario 2',\n   (['3.91', '3.51', '2.01'],),\n   {'12': '1.33', '1X': '1.85', 'X2': '1.28', 'dnb_away': '1.44', 'dnb_home': '2.80'})]]\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"},"fixed":{"sha256":"56003fa37b9ef37572cea2a79f45d1685c6d9b84b2e23c4bb25c1800d98b5eeb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices):\n    h, x, a = (Fraction(p) for p in prices)\n    def dc(p, q):\n        return p * q / (p + q)\n    def fmt(v):\n        c = math.floor(v * 100 + Fraction(1, 2))\n        return '%d.%02d' % (c // 100, c % 100)\n    return {'dnb_home': fmt(h * (1 - 1 / x)), 'dnb_away': fmt(a * (1 - 1 / x)),\n            '1X': fmt(dc(h, x)), '12': fmt(dc(h, a)), 'X2': fmt(dc(x, a))}\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 balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['3.08', '3.98', '1.91'],),\n   {'12': '1.18', '1X': '1.74', 'X2': '1.29', 'dnb_away': '1.43', 'dnb_home': '2.31'}),\n  ('variant scenario 1',\n   (['2.70', '2.20', '3.94'],),\n   {'12': '1.60', '1X': '1.21', 'X2': '1.41', 'dnb_away': '2.15', 'dnb_home': '1.47'}),\n  ('variant scenario 2',\n   (['3.11', '3.69', '2.21'],),\n   {'12': '1.29', '1X': '1.69', 'X2': '1.38', 'dnb_away': '1.61', 'dnb_home': '2.27'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.39', '4.53', '2.23'],),\n   {'12': '1.15', '1X': '1.56', 'X2': '1.49', 'dnb_away': '1.74', 'dnb_home': '1.86'}),\n  ('variant scenario 1',\n   (['2.40', '2.78', '3.12'],),\n   {'12': '1.36', '1X': '1.29', 'X2': '1.47', 'dnb_away': '2.00', 'dnb_home': '1.54'}),\n  ('variant scenario 2',\n   (['2.45', '3.59', '2.74'],),\n   {'12': '1.29', '1X': '1.46', 'X2': '1.55', 'dnb_away': '1.98', 'dnb_home': '1.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.12', '4.35', '2.69'],),\n   {'12': '1.19', '1X': '1.43', 'X2': '1.66', 'dnb_away': '2.07', 'dnb_home': '1.63'}),\n  ('variant scenario 1',\n   (['2.72', '5.41', '2.07'],),\n   {'12': '1.18', '1X': '1.81', 'X2': '1.50', 'dnb_away': '1.69', 'dnb_home': '2.22'}),\n  ('variant scenario 2',\n   (['3.50', '3.49', '2.07'],),\n   {'12': '1.30', '1X': '1.75', 'X2': '1.30', 'dnb_away': '1.48', 'dnb_home': '2.50'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['5.07', '3.53', '1.84'],),\n   {'12': '1.35', '1X': '2.08', 'X2': '1.21', 'dnb_away': '1.32', 'dnb_home': '3.63'}),\n  ('variant scenario 1',\n   (['1.77', '3.37', '5.28'],),\n   {'12': '1.33', '1X': '1.16', 'X2': '2.06', 'dnb_away': '3.71', 'dnb_home': '1.24'}),\n  ('variant scenario 2',\n   (['3.90', '3.46', '2.07'],),\n   {'12': '1.35', '1X': '1.83', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.77'})],\n [('control balanced match',\n   (['2.50', '3.20', '3.00'],),\n   {'12': '1.36', '1X': '1.40', 'X2': '1.55', 'dnb_away': '2.06', 'dnb_home': '1.72'}),\n  ('control strong favourite',\n   (['1.50', '4.00', '6.00'],),\n   {'12': '1.20', '1X': '1.09', 'X2': '2.40', 'dnb_away': '4.50', 'dnb_home': '1.13'}),\n  ('boundary symmetric prices',\n   (['3.00', '3.00', '3.00'],),\n   {'12': '1.50', '1X': '1.50', 'X2': '1.50', 'dnb_away': '2.00', 'dnb_home': '2.00'}),\n  ('control home favourite',\n   (['2.00', '3.50', '4.00'],),\n   {'12': '1.33', '1X': '1.27', 'X2': '1.87', 'dnb_away': '2.86', 'dnb_home': '1.43'}),\n  ('regression: draw no bet formula',\n   (['2.04', '3.57', '3.79'],),\n   {'12': '1.33', '1X': '1.30', 'X2': '1.84', 'dnb_away': '2.73', 'dnb_home': '1.47'}),\n  ('variant scenario 1',\n   (['3.66', '3.49', '2.06'],),\n   {'12': '1.32', '1X': '1.79', 'X2': '1.30', 'dnb_away': '1.47', 'dnb_home': '2.61'}),\n  ('variant scenario 2',\n   (['3.91', '3.51', '2.01'],),\n   {'12': '1.33', '1X': '1.85', 'X2': '1.28', 'dnb_away': '1.44', 'dnb_home': '2.80'})]]\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-derived-double-chance-dnb-draw-no-bet-formula","generated_at":"2026-09-29T14:50:34.184464+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Sportsbooks price derived markets from the main 1X2 line.","repair":"Use side * (1 - 1/draw).","root_cause":"The home DNB price is computed from the home and away book only.","sha256":"b78239276085aa4da0b065599ecb2c2b37c9d3b951da058f63722585daa2301c","title":"Draw-no-bet price derived by renormalising home and away · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.875,"exit_code":1,"observations":[{"actual":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"3.64"},"check":"control balanced match","expected":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"1.72"},"passed":false},{"actual":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"2.00"},"check":"control strong favourite","expected":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"1.13"},"passed":false},{"actual":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"4.50"},"check":"boundary symmetric prices","expected":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"2.00"},"passed":false},{"actual":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"2.80"},"check":"control home favourite","expected":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"1.43"},"passed":false},{"actual":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"4.11"},"check":"regression: draw no bet formula","expected":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"2.31"},"passed":false},{"actual":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"4.95"},"check":"variant scenario 1","expected":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"1.47"},"passed":false},{"actual":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"4.27"},"check":"variant scenario 2","expected":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"2.27"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control balanced match\", \"actual\": {\"dnb_home\": \"3.64\", \"dnb_away\": \"2.06\", \"1X\": \"1.40\", \"12\": \"1.36\", \"X2\": \"1.55\"}, \"expected\": {\"12\": \"1.36\", \"1X\": \"1.40\", \"X2\": \"1.55\", \"dnb_away\": \"2.06\", \"dnb_home\": \"1.72\"}, \"passed\": false}, {\"check\": \"control strong favourite\", \"actual\": {\"dnb_home\": \"2.00\", \"dnb_away\": \"4.50\", \"1X\": \"1.09\", \"12\": \"1.20\", \"X2\": \"2.40\"}, \"expected\": {\"12\": \"1.20\", \"1X\": \"1.09\", \"X2\": \"2.40\", \"dnb_away\": \"4.50\", \"dnb_home\": \"1.13\"}, \"passed\": false}, {\"check\": \"boundary symmetric prices\", \"actual\": {\"dnb_home\": \"4.50\", \"dnb_away\": \"2.00\", \"1X\": \"1.50\", \"12\": \"1.50\", \"X2\": \"1.50\"}, \"expected\": {\"12\": \"1.50\", \"1X\": \"1.50\", \"X2\": \"1.50\", \"dnb_away\": \"2.00\", \"dnb_home\": \"2.00\"}, \"passed\": false}, {\"check\": \"control home favourite\", \"actual\": {\"dnb_home\": \"2.80\", \"dnb_away\": \"2.86\", \"1X\": \"1.27\", \"12\": \"1.33\", \"X2\": \"1.87\"}, \"expected\": {\"12\": \"1.33\", \"1X\": \"1.27\", \"X2\": \"1.87\", \"dnb_away\": \"2.86\", \"dnb_home\": \"1.43\"}, \"passed\": false}, {\"check\": \"regression: draw no bet formula\", \"actual\": {\"dnb_home\": \"4.11\", \"dnb_away\": \"1.43\", \"1X\": \"1.74\", \"12\": \"1.18\", \"X2\": \"1.29\"}, \"expected\": {\"12\": \"1.18\", \"1X\": \"1.74\", \"X2\": \"1.29\", \"dnb_away\": \"1.43\", \"dnb_home\": \"2.31\"}, \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": {\"dnb_home\": \"4.95\", \"dnb_away\": \"2.15\", \"1X\": \"1.21\", \"12\": \"1.60\", \"X2\": \"1.41\"}, \"expected\": {\"12\": \"1.60\", \"1X\": \"1.21\", \"X2\": \"1.41\", \"dnb_away\": \"2.15\", \"dnb_home\": \"1.47\"}, \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": {\"dnb_home\": \"4.27\", \"dnb_away\": \"1.61\", \"1X\": \"1.69\", \"12\": \"1.29\", \"X2\": \"1.38\"}, \"expected\": {\"12\": \"1.29\", \"1X\": \"1.69\", \"X2\": \"1.38\", \"dnb_away\": \"1.61\", \"dnb_home\": \"2.27\"}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.681,"exit_code":1,"observations":[{"actual":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"1.83"},"check":"control balanced match","expected":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"1.72"},"passed":false},{"actual":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"1.25"},"check":"control strong favourite","expected":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"1.13"},"passed":false},{"actual":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"2.00"},"check":"boundary symmetric prices","expected":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"2.00"},"passed":true},{"actual":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"1.50"},"check":"control home favourite","expected":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"1.43"},"passed":false},{"actual":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"2.61"},"check":"regression: draw no bet formula","expected":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"2.31"},"passed":false},{"actual":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"1.69"},"check":"variant scenario 1","expected":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"1.47"},"passed":false},{"actual":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"2.41"},"check":"variant scenario 2","expected":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"2.27"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control balanced match\", \"actual\": {\"dnb_home\": \"1.83\", \"dnb_away\": \"2.06\", \"1X\": \"1.40\", \"12\": \"1.36\", \"X2\": \"1.55\"}, \"expected\": {\"12\": \"1.36\", \"1X\": \"1.40\", \"X2\": \"1.55\", \"dnb_away\": \"2.06\", \"dnb_home\": \"1.72\"}, \"passed\": false}, {\"check\": \"control strong favourite\", \"actual\": {\"dnb_home\": \"1.25\", \"dnb_away\": \"4.50\", \"1X\": \"1.09\", \"12\": \"1.20\", \"X2\": \"2.40\"}, \"expected\": {\"12\": \"1.20\", \"1X\": \"1.09\", \"X2\": \"2.40\", \"dnb_away\": \"4.50\", \"dnb_home\": \"1.13\"}, \"passed\": false}, {\"check\": \"boundary symmetric prices\", \"actual\": {\"dnb_home\": \"2.00\", \"dnb_away\": \"2.00\", \"1X\": \"1.50\", \"12\": \"1.50\", \"X2\": \"1.50\"}, \"expected\": {\"12\": \"1.50\", \"1X\": \"1.50\", \"X2\": \"1.50\", \"dnb_away\": \"2.00\", \"dnb_home\": \"2.00\"}, \"passed\": true}, {\"check\": \"control home favourite\", \"actual\": {\"dnb_home\": \"1.50\", \"dnb_away\": \"2.86\", \"1X\": \"1.27\", \"12\": \"1.33\", \"X2\": \"1.87\"}, \"expected\": {\"12\": \"1.33\", \"1X\": \"1.27\", \"X2\": \"1.87\", \"dnb_away\": \"2.86\", \"dnb_home\": \"1.43\"}, \"passed\": false}, {\"check\": \"regression: draw no bet formula\", \"actual\": {\"dnb_home\": \"2.61\", \"dnb_away\": \"1.43\", \"1X\": \"1.74\", \"12\": \"1.18\", \"X2\": \"1.29\"}, \"expected\": {\"12\": \"1.18\", \"1X\": \"1.74\", \"X2\": \"1.29\", \"dnb_away\": \"1.43\", \"dnb_home\": \"2.31\"}, \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": {\"dnb_home\": \"1.69\", \"dnb_away\": \"2.15\", \"1X\": \"1.21\", \"12\": \"1.60\", \"X2\": \"1.41\"}, \"expected\": {\"12\": \"1.60\", \"1X\": \"1.21\", \"X2\": \"1.41\", \"dnb_away\": \"2.15\", \"dnb_home\": \"1.47\"}, \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": {\"dnb_home\": \"2.41\", \"dnb_away\": \"1.61\", \"1X\": \"1.69\", \"12\": \"1.29\", \"X2\": \"1.38\"}, \"expected\": {\"12\": \"1.29\", \"1X\": \"1.69\", \"X2\": \"1.38\", \"dnb_away\": \"1.61\", \"dnb_home\": \"2.27\"}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.914,"exit_code":0,"observations":[{"actual":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"1.72"},"check":"control balanced match","expected":{"12":"1.36","1X":"1.40","X2":"1.55","dnb_away":"2.06","dnb_home":"1.72"},"passed":true},{"actual":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"1.13"},"check":"control strong favourite","expected":{"12":"1.20","1X":"1.09","X2":"2.40","dnb_away":"4.50","dnb_home":"1.13"},"passed":true},{"actual":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"2.00"},"check":"boundary symmetric prices","expected":{"12":"1.50","1X":"1.50","X2":"1.50","dnb_away":"2.00","dnb_home":"2.00"},"passed":true},{"actual":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"1.43"},"check":"control home favourite","expected":{"12":"1.33","1X":"1.27","X2":"1.87","dnb_away":"2.86","dnb_home":"1.43"},"passed":true},{"actual":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"2.31"},"check":"regression: draw no bet formula","expected":{"12":"1.18","1X":"1.74","X2":"1.29","dnb_away":"1.43","dnb_home":"2.31"},"passed":true},{"actual":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"1.47"},"check":"variant scenario 1","expected":{"12":"1.60","1X":"1.21","X2":"1.41","dnb_away":"2.15","dnb_home":"1.47"},"passed":true},{"actual":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"2.27"},"check":"variant scenario 2","expected":{"12":"1.29","1X":"1.69","X2":"1.38","dnb_away":"1.61","dnb_home":"2.27"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control balanced match\", \"actual\": {\"dnb_home\": \"1.72\", \"dnb_away\": \"2.06\", \"1X\": \"1.40\", \"12\": \"1.36\", \"X2\": \"1.55\"}, \"expected\": {\"12\": \"1.36\", \"1X\": \"1.40\", \"X2\": \"1.55\", \"dnb_away\": \"2.06\", \"dnb_home\": \"1.72\"}, \"passed\": true}, {\"check\": \"control strong favourite\", \"actual\": {\"dnb_home\": \"1.13\", \"dnb_away\": \"4.50\", \"1X\": \"1.09\", \"12\": \"1.20\", \"X2\": \"2.40\"}, \"expected\": {\"12\": \"1.20\", \"1X\": \"1.09\", \"X2\": \"2.40\", \"dnb_away\": \"4.50\", \"dnb_home\": \"1.13\"}, \"passed\": true}, {\"check\": \"boundary symmetric prices\", \"actual\": {\"dnb_home\": \"2.00\", \"dnb_away\": \"2.00\", \"1X\": \"1.50\", \"12\": \"1.50\", \"X2\": \"1.50\"}, \"expected\": {\"12\": \"1.50\", \"1X\": \"1.50\", \"X2\": \"1.50\", \"dnb_away\": \"2.00\", \"dnb_home\": \"2.00\"}, \"passed\": true}, {\"check\": \"control home favourite\", \"actual\": {\"dnb_home\": \"1.43\", \"dnb_away\": \"2.86\", \"1X\": \"1.27\", \"12\": \"1.33\", \"X2\": \"1.87\"}, \"expected\": {\"12\": \"1.33\", \"1X\": \"1.27\", \"X2\": \"1.87\", \"dnb_away\": \"2.86\", \"dnb_home\": \"1.43\"}, \"passed\": true}, {\"check\": \"regression: draw no bet formula\", \"actual\": {\"dnb_home\": \"2.31\", \"dnb_away\": \"1.43\", \"1X\": \"1.74\", \"12\": \"1.18\", \"X2\": \"1.29\"}, \"expected\": {\"12\": \"1.18\", \"1X\": \"1.74\", \"X2\": \"1.29\", \"dnb_away\": \"1.43\", \"dnb_home\": \"2.31\"}, \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": {\"dnb_home\": \"1.47\", \"dnb_away\": \"2.15\", \"1X\": \"1.21\", \"12\": \"1.60\", \"X2\": \"1.41\"}, \"expected\": {\"12\": \"1.60\", \"1X\": \"1.21\", \"X2\": \"1.41\", \"dnb_away\": \"2.15\", \"dnb_home\": \"1.47\"}, \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": {\"dnb_home\": \"2.27\", \"dnb_away\": \"1.61\", \"1X\": \"1.69\", \"12\": \"1.29\", \"X2\": \"1.38\"}, \"expected\": {\"12\": \"1.29\", \"1X\": \"1.69\", \"X2\": \"1.38\", \"dnb_away\": \"1.61\", \"dnb_home\": \"2.27\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}