FA-61491 / Options payoff and settlement / Open access
Option strategy max gain, max loss and breakevens: maximum loss is inferred from the presence of a short call · case 01
Covered calls report unbounded loss while naked short stock reports a finite loss.
ROOT CAUSE
Unbounded loss is flagged by leg type instead of by the tail slope.
VERIFIED REPAIR
Report an unbounded loss when the tail slope is negative.
Unsuccessful approach: Ignoring the tail entirely reports a finite loss for naked short calls.
Case contract
Inputs legs [kind C/P/S, strike (purchase price for stock S), signed qty, premium] and a multiplier. Expiry value V(S) = multiplier * sum(q*(intrinsic - premium)) for options and q*(S - price) for stock, in exact fractions. Breakpoints are 0 and every strike. Tail slope = V(top+1)-V(top). Max gain is None if the slope > 0 else the max over breakpoints; max loss is None if slope < 0 else the min. Breakevens are zeros at breakpoints and linear-interpolated sign changes between them and in the tail. Return [gain, loss, breakevens] rounded to 4.
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 fractions import Fraction
N = 1
observations = []
def solve(legs, multiplier):
def value(S):
t = Fraction(0)
for kind, k, q, prem in legs:
p = Fraction(str(prem))
if kind == 'C':
t += q * (max(S - k, 0) - p)
elif kind == 'P':
t += q * (max(k - S, 0) - p)
else:
t += q * (S - k)
return t * multiplier
pts = sorted(set([0] + [leg[1] for leg in legs]))
top = pts[-1]
slope = value(top + 1) - value(top)
vals = [value(p) for p in pts]
gain = None if slope > 0 else max(vals)
loss = min(vals)
bes = []
for a, b in zip(pts, pts[1:]):
va, vb = value(a), value(b)
if va == 0:
bes.append(Fraction(a))
elif va * vb < 0:
bes.append(a - va * (b - a) / (vb - va))
vt = value(top)
if vt == 0:
bes.append(Fraction(top))
elif vt * slope < 0:
bes.append(top - vt / slope)
def r4(x):
return None if x is None else float(round(x, 4))
return [r4(gain), r4(loss), [r4(x) for x in sorted(set(bes))]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression unbounded loss detection 1', [[['C', 90, -1, 3.4], ['C', 100, 1, 0.5], ['C', 115, -1, 5.1]], 100], [800.0, None, [98.0]]], ['regression unbounded loss detection 2', [[['S', 105, -1, 0.0]], 100], [10500.0, None, [105.0]]], ['partial repair probe 1', [[['P', 105, 1, 7.75], ['S', 90, 2, 0.0], ['C', 100, -2, 2.0]], 1], [21.25, -78.75, [78.75]]], ['partial repair probe 2', [[['C', 90, -1, 7.75], ['P', 120, 2, 1.25], ['P', 105, 1, 3.4], ['S', 95, 1, 0.0]], 100], [25185.0, -315.0, [118.425]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 100, -1, 0.5]], 100], [50.0, -9950.0, [99.5]]], ['normal control 2', [[['C', 100, 2, 0.5], ['P', 85, 2, 2.0]], 1], [None, -5.0, [82.5, 102.5]]]], [['regression unbounded loss detection 1', [[['S', 110, 1, 0.0], ['C', 110, -1, 7.75], ['C', 80, -1, 3.4]], 1], [-18.85, None, []]], ['regression unbounded loss detection 2', [[['P', 120, -1, 2.0], ['C', 95, -2, 7.75], ['C', 105, 1, 2.0], ['P', 80, -2, 3.4]], 1], [-2.7, None, []]], ['partial repair probe 1', [[['C', 120, 1, 7.75], ['P', 110, -1, 7.75], ['P', 85, -2, 3.4], ['C', 95, -1, 3.4]], 100], [-480.0, -26980.0, []]], ['partial repair probe 2', [[['S', 85, 1, 0.0], ['C', 110, -2, 3.4], ['S', 90, 1, 0.0]], 1], [51.8, -168.2, [84.1]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 115, 1, 7.75], ['P', 105, 1, 0.5], ['P', 85, -2, 5.1], ['S', 100, 1, 0.0]], 100], [None, -4805.0, [48.05]]], ['normal control 2', [[['P', 85, -1, 5.1], ['C', 110, 2, 5.1], ['P', 105, 1, 2.0]], 1], [None, -7.1, [97.9, 113.55]]]], [['regression unbounded loss detection 1', [[['C', 100, 1, 1.25], ['S', 80, -1, 0.0], ['C', 120, -1, 0.5]], 100], [7925.0, None, [79.25]]], ['regression unbounded loss detection 2', [[['S', 95, -2, 0.0], ['C', 95, -1, 2.0], ['C', 90, 1, 1.25]], 1], [190.75, None, [97.875]]], ['partial repair probe 1', [[['P', 105, -1, 5.1], ['P', 95, 1, 1.25], ['C', 100, -1, 1.25], ['C', 90, 2, 3.4]], 100], [None, -1170.0, [95.5667]]], ['partial repair probe 2', [[['P', 85, 1, 5.1], ['S', 110, 1, 0.0], ['C', 110, -1, 0.5]], 1], [-4.6, -29.6, []]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 105, 1, 1.25], ['C', 80, 2, 3.4]], 100], [None, 1695.0, []]], ['normal control 2', [[['P', 115, 1, 1.25], ['P', 90, -1, 1.25]], 1], [25.0, 0.0, [115.0]]]], [['regression unbounded loss detection 1', [[['C', 85, -2, 7.75], ['P', 100, 2, 1.25], ['S', 100, -2, 0.0], ['C', 95, 1, 3.4]], 100], [40960.0, None, [96.92]]], ['regression unbounded loss detection 2', [[['C', 100, -1, 7.75], ['C', 115, -2, 5.1], ['C', 110, 1, 7.75], ['P', 115, -2, 7.75]], 100], [1570.0, None, [104.3, 122.85]]], ['partial repair probe 1', [[['C', 105, -2, 1.25], ['P', 115, 1, 3.4], ['S', 115, 1, 0.0], ['C', 95, 1, 2.0]], 100], [710.0, -290.0, [97.9, 112.1]]], ['partial repair probe 2', [[['C', 115, -1, 2.0], ['P', 115, -2, 5.1], ['S', 120, 1, 0.0], ['C', 100, 1, 0.5]], 1], [None, -338.3, [109.575]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 95, 1, 1.25], ['S', 85, -2, 0.0], ['C', 110, 1, 2.0], ['C', 80, 2, 2.0]], 100], [None, 275.0, []]], ['normal control 2', [[['P', 95, 2, 0.5], ['P', 100, 1, 0.5], ['P', 115, -2, 7.75], ['S', 110, 1, 0.0]], 1], [None, -36.0, [108.6667]]]], [['regression unbounded loss detection 1', [[['C', 100, -2, 0.5], ['C', 100, -1, 0.5], ['P', 80, 1, 3.4], ['P', 110, 2, 0.5]], 100], [29710.0, None, [103.42]]], ['regression unbounded loss detection 2', [[['P', 100, -1, 0.5], ['C', 110, -1, 7.75], ['P', 95, 1, 2.0]], 1], [6.25, None, [116.25]]], ['partial repair probe 1', [[['C', 80, -1, 1.25], ['S', 115, 2, 0.0], ['P', 105, -1, 0.5], ['C', 100, 1, 2.0]], 1], [None, -335.25, [125.125]]], ['partial repair probe 2', [[['C', 80, -1, 5.1], ['S', 115, 1, 0.0], ['P', 100, -1, 5.1], ['P', 120, 2, 0.5]], 1], [34.2, -25.8, [107.1]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 85, 1, 7.75], ['C', 100, 1, 3.4], ['P', 110, -2, 3.4]], 1], [None, -139.35, [108.1167]]], ['normal control 2', [[['P', 90, -2, 2.0]], 1], [4.0, -176.0, [88.0]]]]]
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 |
|---|---|---|---|
| regression unbounded loss detection 1 | [800.0, -200.0, [98.0]] | [800.0, None, [98.0]] | Failed |
| regression unbounded loss detection 2 | [10500.0, 0.0, [105.0]] | [10500.0, None, [105.0]] | Failed |
| partial repair probe 1 | [21.25, -78.75, [78.75]] | [21.25, -78.75, [78.75]] | Passed |
| partial repair probe 2 | [25185.0, -315.0, [118.425]] | [25185.0, -315.0, [118.425]] | Passed |
| boundary control 1 | [None, -200.0, [102.0]] | [None, -200.0, [102.0]] | Passed |
| boundary control 2 | [98.0, -2.0, [98.0]] | [98.0, -2.0, [98.0]] | Passed |
| normal control 1 | [50.0, -9950.0, [99.5]] | [50.0, -9950.0, [99.5]] | Passed |
| normal control 2 | [None, -5.0, [82.5, 102.5]] | [None, -5.0, [82.5, 102.5]] | Passed |
SHA-256 / 57becafaec64bf46ef336583998478a6dd4fe88bb69a94e05ca66c338e077a67
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(legs, multiplier):
def value(S):
t = Fraction(0)
for kind, k, q, prem in legs:
p = Fraction(str(prem))
if kind == 'C':
t += q * (max(S - k, 0) - p)
elif kind == 'P':
t += q * (max(k - S, 0) - p)
else:
t += q * (S - k)
return t * multiplier
pts = sorted(set([0] + [leg[1] for leg in legs]))
top = pts[-1]
slope = value(top + 1) - value(top)
vals = [value(p) for p in pts]
gain = None if slope > 0 else max(vals)
loss = None if any(l[0] == 'C' and l[2] < 0 for l in legs) else min(vals)
bes = []
for a, b in zip(pts, pts[1:]):
va, vb = value(a), value(b)
if va == 0:
bes.append(Fraction(a))
elif va * vb < 0:
bes.append(a - va * (b - a) / (vb - va))
vt = value(top)
if vt == 0:
bes.append(Fraction(top))
elif vt * slope < 0:
bes.append(top - vt / slope)
def r4(x):
return None if x is None else float(round(x, 4))
return [r4(gain), r4(loss), [r4(x) for x in sorted(set(bes))]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression unbounded loss detection 1', [[['C', 90, -1, 3.4], ['C', 100, 1, 0.5], ['C', 115, -1, 5.1]], 100], [800.0, None, [98.0]]], ['regression unbounded loss detection 2', [[['S', 105, -1, 0.0]], 100], [10500.0, None, [105.0]]], ['partial repair probe 1', [[['P', 105, 1, 7.75], ['S', 90, 2, 0.0], ['C', 100, -2, 2.0]], 1], [21.25, -78.75, [78.75]]], ['partial repair probe 2', [[['C', 90, -1, 7.75], ['P', 120, 2, 1.25], ['P', 105, 1, 3.4], ['S', 95, 1, 0.0]], 100], [25185.0, -315.0, [118.425]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 100, -1, 0.5]], 100], [50.0, -9950.0, [99.5]]], ['normal control 2', [[['C', 100, 2, 0.5], ['P', 85, 2, 2.0]], 1], [None, -5.0, [82.5, 102.5]]]], [['regression unbounded loss detection 1', [[['S', 110, 1, 0.0], ['C', 110, -1, 7.75], ['C', 80, -1, 3.4]], 1], [-18.85, None, []]], ['regression unbounded loss detection 2', [[['P', 120, -1, 2.0], ['C', 95, -2, 7.75], ['C', 105, 1, 2.0], ['P', 80, -2, 3.4]], 1], [-2.7, None, []]], ['partial repair probe 1', [[['C', 120, 1, 7.75], ['P', 110, -1, 7.75], ['P', 85, -2, 3.4], ['C', 95, -1, 3.4]], 100], [-480.0, -26980.0, []]], ['partial repair probe 2', [[['S', 85, 1, 0.0], ['C', 110, -2, 3.4], ['S', 90, 1, 0.0]], 1], [51.8, -168.2, [84.1]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 115, 1, 7.75], ['P', 105, 1, 0.5], ['P', 85, -2, 5.1], ['S', 100, 1, 0.0]], 100], [None, -4805.0, [48.05]]], ['normal control 2', [[['P', 85, -1, 5.1], ['C', 110, 2, 5.1], ['P', 105, 1, 2.0]], 1], [None, -7.1, [97.9, 113.55]]]], [['regression unbounded loss detection 1', [[['C', 100, 1, 1.25], ['S', 80, -1, 0.0], ['C', 120, -1, 0.5]], 100], [7925.0, None, [79.25]]], ['regression unbounded loss detection 2', [[['S', 95, -2, 0.0], ['C', 95, -1, 2.0], ['C', 90, 1, 1.25]], 1], [190.75, None, [97.875]]], ['partial repair probe 1', [[['P', 105, -1, 5.1], ['P', 95, 1, 1.25], ['C', 100, -1, 1.25], ['C', 90, 2, 3.4]], 100], [None, -1170.0, [95.5667]]], ['partial repair probe 2', [[['P', 85, 1, 5.1], ['S', 110, 1, 0.0], ['C', 110, -1, 0.5]], 1], [-4.6, -29.6, []]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 105, 1, 1.25], ['C', 80, 2, 3.4]], 100], [None, 1695.0, []]], ['normal control 2', [[['P', 115, 1, 1.25], ['P', 90, -1, 1.25]], 1], [25.0, 0.0, [115.0]]]], [['regression unbounded loss detection 1', [[['C', 85, -2, 7.75], ['P', 100, 2, 1.25], ['S', 100, -2, 0.0], ['C', 95, 1, 3.4]], 100], [40960.0, None, [96.92]]], ['regression unbounded loss detection 2', [[['C', 100, -1, 7.75], ['C', 115, -2, 5.1], ['C', 110, 1, 7.75], ['P', 115, -2, 7.75]], 100], [1570.0, None, [104.3, 122.85]]], ['partial repair probe 1', [[['C', 105, -2, 1.25], ['P', 115, 1, 3.4], ['S', 115, 1, 0.0], ['C', 95, 1, 2.0]], 100], [710.0, -290.0, [97.9, 112.1]]], ['partial repair probe 2', [[['C', 115, -1, 2.0], ['P', 115, -2, 5.1], ['S', 120, 1, 0.0], ['C', 100, 1, 0.5]], 1], [None, -338.3, [109.575]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 95, 1, 1.25], ['S', 85, -2, 0.0], ['C', 110, 1, 2.0], ['C', 80, 2, 2.0]], 100], [None, 275.0, []]], ['normal control 2', [[['P', 95, 2, 0.5], ['P', 100, 1, 0.5], ['P', 115, -2, 7.75], ['S', 110, 1, 0.0]], 1], [None, -36.0, [108.6667]]]], [['regression unbounded loss detection 1', [[['C', 100, -2, 0.5], ['C', 100, -1, 0.5], ['P', 80, 1, 3.4], ['P', 110, 2, 0.5]], 100], [29710.0, None, [103.42]]], ['regression unbounded loss detection 2', [[['P', 100, -1, 0.5], ['C', 110, -1, 7.75], ['P', 95, 1, 2.0]], 1], [6.25, None, [116.25]]], ['partial repair probe 1', [[['C', 80, -1, 1.25], ['S', 115, 2, 0.0], ['P', 105, -1, 0.5], ['C', 100, 1, 2.0]], 1], [None, -335.25, [125.125]]], ['partial repair probe 2', [[['C', 80, -1, 5.1], ['S', 115, 1, 0.0], ['P', 100, -1, 5.1], ['P', 120, 2, 0.5]], 1], [34.2, -25.8, [107.1]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 85, 1, 7.75], ['C', 100, 1, 3.4], ['P', 110, -2, 3.4]], 1], [None, -139.35, [108.1167]]], ['normal control 2', [[['P', 90, -2, 2.0]], 1], [4.0, -176.0, [88.0]]]]]
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 |
|---|---|---|---|
| regression unbounded loss detection 1 | [800.0, None, [98.0]] | [800.0, None, [98.0]] | Passed |
| regression unbounded loss detection 2 | [10500.0, 0.0, [105.0]] | [10500.0, None, [105.0]] | Failed |
| partial repair probe 1 | [21.25, None, [78.75]] | [21.25, -78.75, [78.75]] | Failed |
| partial repair probe 2 | [25185.0, None, [118.425]] | [25185.0, -315.0, [118.425]] | Failed |
| boundary control 1 | [None, -200.0, [102.0]] | [None, -200.0, [102.0]] | Passed |
| boundary control 2 | [98.0, -2.0, [98.0]] | [98.0, -2.0, [98.0]] | Passed |
| normal control 1 | [50.0, -9950.0, [99.5]] | [50.0, -9950.0, [99.5]] | Passed |
| normal control 2 | [None, -5.0, [82.5, 102.5]] | [None, -5.0, [82.5, 102.5]] | Passed |
SHA-256 / 8fc89b9acb0c6b7e9df96ed8528055ea309c3f1491451e4b500f5b37943081a8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(legs, multiplier):
def value(S):
t = Fraction(0)
for kind, k, q, prem in legs:
p = Fraction(str(prem))
if kind == 'C':
t += q * (max(S - k, 0) - p)
elif kind == 'P':
t += q * (max(k - S, 0) - p)
else:
t += q * (S - k)
return t * multiplier
pts = sorted(set([0] + [leg[1] for leg in legs]))
top = pts[-1]
slope = value(top + 1) - value(top)
vals = [value(p) for p in pts]
gain = None if slope > 0 else max(vals)
loss = None if slope < 0 else min(vals)
bes = []
for a, b in zip(pts, pts[1:]):
va, vb = value(a), value(b)
if va == 0:
bes.append(Fraction(a))
elif va * vb < 0:
bes.append(a - va * (b - a) / (vb - va))
vt = value(top)
if vt == 0:
bes.append(Fraction(top))
elif vt * slope < 0:
bes.append(top - vt / slope)
def r4(x):
return None if x is None else float(round(x, 4))
return [r4(gain), r4(loss), [r4(x) for x in sorted(set(bes))]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression unbounded loss detection 1', [[['C', 90, -1, 3.4], ['C', 100, 1, 0.5], ['C', 115, -1, 5.1]], 100], [800.0, None, [98.0]]], ['regression unbounded loss detection 2', [[['S', 105, -1, 0.0]], 100], [10500.0, None, [105.0]]], ['partial repair probe 1', [[['P', 105, 1, 7.75], ['S', 90, 2, 0.0], ['C', 100, -2, 2.0]], 1], [21.25, -78.75, [78.75]]], ['partial repair probe 2', [[['C', 90, -1, 7.75], ['P', 120, 2, 1.25], ['P', 105, 1, 3.4], ['S', 95, 1, 0.0]], 100], [25185.0, -315.0, [118.425]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 100, -1, 0.5]], 100], [50.0, -9950.0, [99.5]]], ['normal control 2', [[['C', 100, 2, 0.5], ['P', 85, 2, 2.0]], 1], [None, -5.0, [82.5, 102.5]]]], [['regression unbounded loss detection 1', [[['S', 110, 1, 0.0], ['C', 110, -1, 7.75], ['C', 80, -1, 3.4]], 1], [-18.85, None, []]], ['regression unbounded loss detection 2', [[['P', 120, -1, 2.0], ['C', 95, -2, 7.75], ['C', 105, 1, 2.0], ['P', 80, -2, 3.4]], 1], [-2.7, None, []]], ['partial repair probe 1', [[['C', 120, 1, 7.75], ['P', 110, -1, 7.75], ['P', 85, -2, 3.4], ['C', 95, -1, 3.4]], 100], [-480.0, -26980.0, []]], ['partial repair probe 2', [[['S', 85, 1, 0.0], ['C', 110, -2, 3.4], ['S', 90, 1, 0.0]], 1], [51.8, -168.2, [84.1]]], ['boundary control 1', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['boundary control 2', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['normal control 1', [[['P', 115, 1, 7.75], ['P', 105, 1, 0.5], ['P', 85, -2, 5.1], ['S', 100, 1, 0.0]], 100], [None, -4805.0, [48.05]]], ['normal control 2', [[['P', 85, -1, 5.1], ['C', 110, 2, 5.1], ['P', 105, 1, 2.0]], 1], [None, -7.1, [97.9, 113.55]]]], [['regression unbounded loss detection 1', [[['C', 100, 1, 1.25], ['S', 80, -1, 0.0], ['C', 120, -1, 0.5]], 100], [7925.0, None, [79.25]]], ['regression unbounded loss detection 2', [[['S', 95, -2, 0.0], ['C', 95, -1, 2.0], ['C', 90, 1, 1.25]], 1], [190.75, None, [97.875]]], ['partial repair probe 1', [[['P', 105, -1, 5.1], ['P', 95, 1, 1.25], ['C', 100, -1, 1.25], ['C', 90, 2, 3.4]], 100], [None, -1170.0, [95.5667]]], ['partial repair probe 2', [[['P', 85, 1, 5.1], ['S', 110, 1, 0.0], ['C', 110, -1, 0.5]], 1], [-4.6, -29.6, []]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 105, 1, 1.25], ['C', 80, 2, 3.4]], 100], [None, 1695.0, []]], ['normal control 2', [[['P', 115, 1, 1.25], ['P', 90, -1, 1.25]], 1], [25.0, 0.0, [115.0]]]], [['regression unbounded loss detection 1', [[['C', 85, -2, 7.75], ['P', 100, 2, 1.25], ['S', 100, -2, 0.0], ['C', 95, 1, 3.4]], 100], [40960.0, None, [96.92]]], ['regression unbounded loss detection 2', [[['C', 100, -1, 7.75], ['C', 115, -2, 5.1], ['C', 110, 1, 7.75], ['P', 115, -2, 7.75]], 100], [1570.0, None, [104.3, 122.85]]], ['partial repair probe 1', [[['C', 105, -2, 1.25], ['P', 115, 1, 3.4], ['S', 115, 1, 0.0], ['C', 95, 1, 2.0]], 100], [710.0, -290.0, [97.9, 112.1]]], ['partial repair probe 2', [[['C', 115, -1, 2.0], ['P', 115, -2, 5.1], ['S', 120, 1, 0.0], ['C', 100, 1, 0.5]], 1], [None, -338.3, [109.575]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 95, 1, 1.25], ['S', 85, -2, 0.0], ['C', 110, 1, 2.0], ['C', 80, 2, 2.0]], 100], [None, 275.0, []]], ['normal control 2', [[['P', 95, 2, 0.5], ['P', 100, 1, 0.5], ['P', 115, -2, 7.75], ['S', 110, 1, 0.0]], 1], [None, -36.0, [108.6667]]]], [['regression unbounded loss detection 1', [[['C', 100, -2, 0.5], ['C', 100, -1, 0.5], ['P', 80, 1, 3.4], ['P', 110, 2, 0.5]], 100], [29710.0, None, [103.42]]], ['regression unbounded loss detection 2', [[['P', 100, -1, 0.5], ['C', 110, -1, 7.75], ['P', 95, 1, 2.0]], 1], [6.25, None, [116.25]]], ['partial repair probe 1', [[['C', 80, -1, 1.25], ['S', 115, 2, 0.0], ['P', 105, -1, 0.5], ['C', 100, 1, 2.0]], 1], [None, -335.25, [125.125]]], ['partial repair probe 2', [[['C', 80, -1, 5.1], ['S', 115, 1, 0.0], ['P', 100, -1, 5.1], ['P', 120, 2, 0.5]], 1], [34.2, -25.8, [107.1]]], ['boundary control 1', [[['P', 100, 1, 2.0]], 1], [98.0, -2.0, [98.0]]], ['boundary control 2', [[['C', 100, 1, 2.0]], 100], [None, -200.0, [102.0]]], ['normal control 1', [[['P', 85, 1, 7.75], ['C', 100, 1, 3.4], ['P', 110, -2, 3.4]], 1], [None, -139.35, [108.1167]]], ['normal control 2', [[['P', 90, -2, 2.0]], 1], [4.0, -176.0, [88.0]]]]]
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 |
|---|---|---|---|
| regression unbounded loss detection 1 | [800.0, None, [98.0]] | [800.0, None, [98.0]] | Passed |
| regression unbounded loss detection 2 | [10500.0, None, [105.0]] | [10500.0, None, [105.0]] | Passed |
| partial repair probe 1 | [21.25, -78.75, [78.75]] | [21.25, -78.75, [78.75]] | Passed |
| partial repair probe 2 | [25185.0, -315.0, [118.425]] | [25185.0, -315.0, [118.425]] | Passed |
| boundary control 1 | [None, -200.0, [102.0]] | [None, -200.0, [102.0]] | Passed |
| boundary control 2 | [98.0, -2.0, [98.0]] | [98.0, -2.0, [98.0]] | Passed |
| normal control 1 | [50.0, -9950.0, [99.5]] | [50.0, -9950.0, [99.5]] | Passed |
| normal control 2 | [None, -5.0, [82.5, 102.5]] | [None, -5.0, [82.5, 102.5]] | Passed |
SHA-256 / 463b5f16cd7e52fc88739b83cb37f095ea4db961d5eb71ab57daff67351d3584
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:55.714992+00:00.
Case digest / 5bbc6493745d1fe4429475f37f37dde3de8b56f433206e9bc433390024536826