FAILURE MAP
← Case archive

FA-61586 / Options payoff and settlement / Open access

Special opening settlement value for index options: component weights are ignored · case 01

Settlement is a plain price average scaled by the divisor.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Prices are summed without their weights.

VERIFIED REPAIR

Multiply each price by its weight.

Unsuccessful approach: Weighting only components that opened leaves fallback prices unweighted.

Case contract

Inputs components [weight, opening price or None, last close] and a divisor. Each component uses its opening price, or its last close if it did not open. Settlement = sum(weight*price)/divisor computed in Decimal and rounded half-up to cents. Return as a string.

Why this case matters

Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
    total = Decimal(0)
    for w, op, close in components:
        px = op if op is not None else close
        total += Decimal(str(px))
    val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
    return str(val)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression component weighting 1', [[[3, 13.479, 12.986], [0.5, 161.37, 158.976], [0.5, 193.135, 197.081]], 8], '27.21'], ['regression component weighting 2', [[[3, 51.56, 53.295], [0.5, 174.778, 175.271], [2, None, 155.681]], 4], '138.36'], ['partial repair probe 1', [[[2, 117.299, 112.037], [0.5, None, 24.449]], 4], '61.71'], ['partial repair probe 2', [[[1.5, 136.595, 140.125], [2, None, 78.392], [1.5, 102.304, 98.119], [1.5, 106.144, 103.36], [1.5, 65.339, 68.752], [2, None, 149.232]], 0.5], '2141.64'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 81.482, 82.869], [1, None, 60.357]], 1], '141.84'], ['normal control 2', [[[1, 66.523, 68.001], [1, 118.251, 120.993]], 2], '92.39'], ['normal control 3', [[[1, None, 88.977], [1, None, 49.669], [1, 68.444, 70.558], [1, 143.834, 140.092]], 8], '43.87']], [['regression component weighting 1', [[[3, 127.711, 129.547], [3, None, 97.406], [1.5, None, 128.005], [1.5, 108.974, 105.749], [1.5, None, 132.697], [2, 80.439, 81.276]], 1.25], '1112.59'], ['regression component weighting 2', [[[3, 19.347, 18.546], [3, 53.415, 51.55], [2, 62.823, 63.572], [1, 180.607, 184.998], [2, 116.252, 114.41]], 4], '189.26'], ['partial repair probe 1', [[[0.5, None, 88.66], [1.5, 110.336, 108.494]], 1], '209.83'], ['partial repair probe 2', [[[3, None, 154.303], [2, 111.662, 115.172], [0.5, None, 65.001], [2, 149.367, 155.124], [0.5, None, 11.233]], 0.5], '2046.17'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 78.421, 79.525], [1, 179.157, 177.457]], 1], '257.58'], ['normal control 2', [[[1, None, 166.839], [1, 184.801, 188.328]], 8], '43.96'], ['normal control 3', [[[1, 166.869, 166.945], [1, 155.555, 154.795]], 0.5], '644.85']], [['regression component weighting 1', [[[2, 128.325, 134.42], [2, 70.639, 68.693], [3, None, 33.965], [2, None, 109.542], [2, 117.98, 116.309], [0.5, 15.763, 16.39]], 1.25], '770.20'], ['regression component weighting 2', [[[1, 16.248, 16.214], [0.5, 203.435, 198.134], [3, None, 58.341], [2, None, 139.181], [0.5, None, 29.931]], 2], '293.16'], ['partial repair probe 1', [[[3, 182.204, 176.361], [3, None, 65.618], [1.5, 68.079, 70.602], [1, None, 194.423]], 0.5], '2080.02'], ['partial repair probe 2', [[[2, 76.311, 79.686], [1.5, 134.131, 131.019], [3, None, 131.954], [1, None, 83.653], [0.5, None, 107.976]], 2], '443.66'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, None, 137.951], [1, None, 129.725], [1, 94.553, 90.269], [1, 84.63, 85.23], [1, None, 33.797]], 1], '480.66'], ['normal control 2', [[[1, 95.732, 99.548], [1, 10.24, 10.021]], 2], '52.99'], ['normal control 3', [[[1, 192.215, 195.95], [1, 26.3, 26.83]], 0.5], '437.03']], [['regression component weighting 1', [[[1, 153.045, 147.169], [1, 59.608, 59.609], [1, 162.952, 160.301], [1, 12.856, 13.271], [0.5, 24.004, 23.062]], 0.5], '800.93'], ['regression component weighting 2', [[[1.5, 37.724, 38.183], [1, 162.145, 159.23], [1.5, 196.22, 194.54]], 2], '256.53'], ['partial repair probe 1', [[[1, 18.793, 18.089], [0.5, 116.372, 112.157], [2, 32.811, 32.915], [1.5, None, 197.202]], 1.25], '350.72'], ['partial repair probe 2', [[[0.5, None, 47.219], [2, None, 175.641]], 1.25], '299.91'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 20.872, 21.251], [1, None, 100.111]], 1], '120.98'], ['normal control 2', [[[1, 121.743, 124.99], [1, 17.002, 17.602]], 1], '138.75'], ['normal control 3', [[[1, 99.296, 100.215], [1, 188.519, 182.158]], 8], '35.98']], [['regression component weighting 1', [[[1, 208.403, 199.958], [3, 141.132, 144.086], [2, 48.774, 48.99], [2, None, 48.807], [3, None, 121.457]], 4], '297.83'], ['regression component weighting 2', [[[1.5, 62.219, 62.373], [1, 193.83, 198.269]], 4], '71.79'], ['partial repair probe 1', [[[1.5, None, 80.916], [1, 12.21, 11.683], [0.5, 154.941, 151.005], [1, 39.42, 39.707]], 0.5], '500.95'], ['partial repair probe 2', [[[1.5, None, 189.456], [2, 126.608, 131.279], [0.5, 191.182, 192.847], [2, None, 32.658], [1.5, 122.29, 125.114]], 2], '440.87'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 76.249, 73.412], [1, 146.143, 141.273], [1, None, 26.499]], 2], '124.45'], ['normal control 2', [[[1, 139.48, 138.297], [1, 149.017, 145.959]], 4], '72.12'], ['normal control 3', [[[1, None, 180.47], [1, 83.49, 85.396]], 0.5], '527.92']]]
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 fixtureActualExpectedOutcome
regression component weighting 146.0027.21Failed
regression component weighting 295.50138.36Failed
partial repair probe 135.4461.71Failed
partial repair probe 21276.012141.64Failed
boundary control 110.0110.01Passed
normal control 1141.84141.84Passed
normal control 292.3992.39Passed
normal control 343.8743.87Passed

SHA-256 / b6bc247723240353ac63e92693d225a93ee3e116177000c0530be698bf05d6e9

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
    total = Decimal(0)
    for w, op, close in components:
        px = op if op is not None else close
        total += (Decimal(str(w)) if op is not None else 1) * Decimal(str(px))
    val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
    return str(val)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression component weighting 1', [[[3, 13.479, 12.986], [0.5, 161.37, 158.976], [0.5, 193.135, 197.081]], 8], '27.21'], ['regression component weighting 2', [[[3, 51.56, 53.295], [0.5, 174.778, 175.271], [2, None, 155.681]], 4], '138.36'], ['partial repair probe 1', [[[2, 117.299, 112.037], [0.5, None, 24.449]], 4], '61.71'], ['partial repair probe 2', [[[1.5, 136.595, 140.125], [2, None, 78.392], [1.5, 102.304, 98.119], [1.5, 106.144, 103.36], [1.5, 65.339, 68.752], [2, None, 149.232]], 0.5], '2141.64'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 81.482, 82.869], [1, None, 60.357]], 1], '141.84'], ['normal control 2', [[[1, 66.523, 68.001], [1, 118.251, 120.993]], 2], '92.39'], ['normal control 3', [[[1, None, 88.977], [1, None, 49.669], [1, 68.444, 70.558], [1, 143.834, 140.092]], 8], '43.87']], [['regression component weighting 1', [[[3, 127.711, 129.547], [3, None, 97.406], [1.5, None, 128.005], [1.5, 108.974, 105.749], [1.5, None, 132.697], [2, 80.439, 81.276]], 1.25], '1112.59'], ['regression component weighting 2', [[[3, 19.347, 18.546], [3, 53.415, 51.55], [2, 62.823, 63.572], [1, 180.607, 184.998], [2, 116.252, 114.41]], 4], '189.26'], ['partial repair probe 1', [[[0.5, None, 88.66], [1.5, 110.336, 108.494]], 1], '209.83'], ['partial repair probe 2', [[[3, None, 154.303], [2, 111.662, 115.172], [0.5, None, 65.001], [2, 149.367, 155.124], [0.5, None, 11.233]], 0.5], '2046.17'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 78.421, 79.525], [1, 179.157, 177.457]], 1], '257.58'], ['normal control 2', [[[1, None, 166.839], [1, 184.801, 188.328]], 8], '43.96'], ['normal control 3', [[[1, 166.869, 166.945], [1, 155.555, 154.795]], 0.5], '644.85']], [['regression component weighting 1', [[[2, 128.325, 134.42], [2, 70.639, 68.693], [3, None, 33.965], [2, None, 109.542], [2, 117.98, 116.309], [0.5, 15.763, 16.39]], 1.25], '770.20'], ['regression component weighting 2', [[[1, 16.248, 16.214], [0.5, 203.435, 198.134], [3, None, 58.341], [2, None, 139.181], [0.5, None, 29.931]], 2], '293.16'], ['partial repair probe 1', [[[3, 182.204, 176.361], [3, None, 65.618], [1.5, 68.079, 70.602], [1, None, 194.423]], 0.5], '2080.02'], ['partial repair probe 2', [[[2, 76.311, 79.686], [1.5, 134.131, 131.019], [3, None, 131.954], [1, None, 83.653], [0.5, None, 107.976]], 2], '443.66'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, None, 137.951], [1, None, 129.725], [1, 94.553, 90.269], [1, 84.63, 85.23], [1, None, 33.797]], 1], '480.66'], ['normal control 2', [[[1, 95.732, 99.548], [1, 10.24, 10.021]], 2], '52.99'], ['normal control 3', [[[1, 192.215, 195.95], [1, 26.3, 26.83]], 0.5], '437.03']], [['regression component weighting 1', [[[1, 153.045, 147.169], [1, 59.608, 59.609], [1, 162.952, 160.301], [1, 12.856, 13.271], [0.5, 24.004, 23.062]], 0.5], '800.93'], ['regression component weighting 2', [[[1.5, 37.724, 38.183], [1, 162.145, 159.23], [1.5, 196.22, 194.54]], 2], '256.53'], ['partial repair probe 1', [[[1, 18.793, 18.089], [0.5, 116.372, 112.157], [2, 32.811, 32.915], [1.5, None, 197.202]], 1.25], '350.72'], ['partial repair probe 2', [[[0.5, None, 47.219], [2, None, 175.641]], 1.25], '299.91'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 20.872, 21.251], [1, None, 100.111]], 1], '120.98'], ['normal control 2', [[[1, 121.743, 124.99], [1, 17.002, 17.602]], 1], '138.75'], ['normal control 3', [[[1, 99.296, 100.215], [1, 188.519, 182.158]], 8], '35.98']], [['regression component weighting 1', [[[1, 208.403, 199.958], [3, 141.132, 144.086], [2, 48.774, 48.99], [2, None, 48.807], [3, None, 121.457]], 4], '297.83'], ['regression component weighting 2', [[[1.5, 62.219, 62.373], [1, 193.83, 198.269]], 4], '71.79'], ['partial repair probe 1', [[[1.5, None, 80.916], [1, 12.21, 11.683], [0.5, 154.941, 151.005], [1, 39.42, 39.707]], 0.5], '500.95'], ['partial repair probe 2', [[[1.5, None, 189.456], [2, 126.608, 131.279], [0.5, 191.182, 192.847], [2, None, 32.658], [1.5, 122.29, 125.114]], 2], '440.87'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 76.249, 73.412], [1, 146.143, 141.273], [1, None, 26.499]], 2], '124.45'], ['normal control 2', [[[1, 139.48, 138.297], [1, 149.017, 145.959]], 4], '72.12'], ['normal control 3', [[[1, None, 180.47], [1, 83.49, 85.396]], 0.5], '527.92']]]
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 fixtureActualExpectedOutcome
regression component weighting 127.2127.21Passed
regression component weighting 299.44138.36Failed
partial repair probe 164.7661.71Failed
partial repair probe 21686.392141.64Failed
boundary control 110.0110.01Passed
normal control 1141.84141.84Passed
normal control 292.3992.39Passed
normal control 343.8743.87Passed

SHA-256 / 236d21148f7ca786f6690a594a4965b644a9f29d7e239b22fec3e3d61d4176bd

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
    total = Decimal(0)
    for w, op, close in components:
        px = op if op is not None else close
        total += Decimal(str(w)) * Decimal(str(px))
    val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
    return str(val)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression component weighting 1', [[[3, 13.479, 12.986], [0.5, 161.37, 158.976], [0.5, 193.135, 197.081]], 8], '27.21'], ['regression component weighting 2', [[[3, 51.56, 53.295], [0.5, 174.778, 175.271], [2, None, 155.681]], 4], '138.36'], ['partial repair probe 1', [[[2, 117.299, 112.037], [0.5, None, 24.449]], 4], '61.71'], ['partial repair probe 2', [[[1.5, 136.595, 140.125], [2, None, 78.392], [1.5, 102.304, 98.119], [1.5, 106.144, 103.36], [1.5, 65.339, 68.752], [2, None, 149.232]], 0.5], '2141.64'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 81.482, 82.869], [1, None, 60.357]], 1], '141.84'], ['normal control 2', [[[1, 66.523, 68.001], [1, 118.251, 120.993]], 2], '92.39'], ['normal control 3', [[[1, None, 88.977], [1, None, 49.669], [1, 68.444, 70.558], [1, 143.834, 140.092]], 8], '43.87']], [['regression component weighting 1', [[[3, 127.711, 129.547], [3, None, 97.406], [1.5, None, 128.005], [1.5, 108.974, 105.749], [1.5, None, 132.697], [2, 80.439, 81.276]], 1.25], '1112.59'], ['regression component weighting 2', [[[3, 19.347, 18.546], [3, 53.415, 51.55], [2, 62.823, 63.572], [1, 180.607, 184.998], [2, 116.252, 114.41]], 4], '189.26'], ['partial repair probe 1', [[[0.5, None, 88.66], [1.5, 110.336, 108.494]], 1], '209.83'], ['partial repair probe 2', [[[3, None, 154.303], [2, 111.662, 115.172], [0.5, None, 65.001], [2, 149.367, 155.124], [0.5, None, 11.233]], 0.5], '2046.17'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 78.421, 79.525], [1, 179.157, 177.457]], 1], '257.58'], ['normal control 2', [[[1, None, 166.839], [1, 184.801, 188.328]], 8], '43.96'], ['normal control 3', [[[1, 166.869, 166.945], [1, 155.555, 154.795]], 0.5], '644.85']], [['regression component weighting 1', [[[2, 128.325, 134.42], [2, 70.639, 68.693], [3, None, 33.965], [2, None, 109.542], [2, 117.98, 116.309], [0.5, 15.763, 16.39]], 1.25], '770.20'], ['regression component weighting 2', [[[1, 16.248, 16.214], [0.5, 203.435, 198.134], [3, None, 58.341], [2, None, 139.181], [0.5, None, 29.931]], 2], '293.16'], ['partial repair probe 1', [[[3, 182.204, 176.361], [3, None, 65.618], [1.5, 68.079, 70.602], [1, None, 194.423]], 0.5], '2080.02'], ['partial repair probe 2', [[[2, 76.311, 79.686], [1.5, 134.131, 131.019], [3, None, 131.954], [1, None, 83.653], [0.5, None, 107.976]], 2], '443.66'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, None, 137.951], [1, None, 129.725], [1, 94.553, 90.269], [1, 84.63, 85.23], [1, None, 33.797]], 1], '480.66'], ['normal control 2', [[[1, 95.732, 99.548], [1, 10.24, 10.021]], 2], '52.99'], ['normal control 3', [[[1, 192.215, 195.95], [1, 26.3, 26.83]], 0.5], '437.03']], [['regression component weighting 1', [[[1, 153.045, 147.169], [1, 59.608, 59.609], [1, 162.952, 160.301], [1, 12.856, 13.271], [0.5, 24.004, 23.062]], 0.5], '800.93'], ['regression component weighting 2', [[[1.5, 37.724, 38.183], [1, 162.145, 159.23], [1.5, 196.22, 194.54]], 2], '256.53'], ['partial repair probe 1', [[[1, 18.793, 18.089], [0.5, 116.372, 112.157], [2, 32.811, 32.915], [1.5, None, 197.202]], 1.25], '350.72'], ['partial repair probe 2', [[[0.5, None, 47.219], [2, None, 175.641]], 1.25], '299.91'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 20.872, 21.251], [1, None, 100.111]], 1], '120.98'], ['normal control 2', [[[1, 121.743, 124.99], [1, 17.002, 17.602]], 1], '138.75'], ['normal control 3', [[[1, 99.296, 100.215], [1, 188.519, 182.158]], 8], '35.98']], [['regression component weighting 1', [[[1, 208.403, 199.958], [3, 141.132, 144.086], [2, 48.774, 48.99], [2, None, 48.807], [3, None, 121.457]], 4], '297.83'], ['regression component weighting 2', [[[1.5, 62.219, 62.373], [1, 193.83, 198.269]], 4], '71.79'], ['partial repair probe 1', [[[1.5, None, 80.916], [1, 12.21, 11.683], [0.5, 154.941, 151.005], [1, 39.42, 39.707]], 0.5], '500.95'], ['partial repair probe 2', [[[1.5, None, 189.456], [2, 126.608, 131.279], [0.5, 191.182, 192.847], [2, None, 32.658], [1.5, 122.29, 125.114]], 2], '440.87'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 76.249, 73.412], [1, 146.143, 141.273], [1, None, 26.499]], 2], '124.45'], ['normal control 2', [[[1, 139.48, 138.297], [1, 149.017, 145.959]], 4], '72.12'], ['normal control 3', [[[1, None, 180.47], [1, 83.49, 85.396]], 0.5], '527.92']]]
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 fixtureActualExpectedOutcome
regression component weighting 127.2127.21Passed
regression component weighting 2138.36138.36Passed
partial repair probe 161.7161.71Passed
partial repair probe 22141.642141.64Passed
boundary control 110.0110.01Passed
normal control 1141.84141.84Passed
normal control 292.3992.39Passed
normal control 343.8743.87Passed

SHA-256 / 38d8ac81b20961ad6b9737908fd8b63c202494ca4ef6732d28b0b71312fd5483

Verification & scope

A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any exchange or clearing rulebook. 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:46:56.700161+00:00.

Case digest / 2ed0ce7b20f94b705fc5f8c2a80024b051b2b3f512ae0993614274e7c8878057