FA-62096 / Currency rounding and FX conversion / Open access
Fully offset currencies remain in the settlement instruction list · case 01
A currency that nets to zero still produces a zero payment instruction.
ROOT CAUSE
Zero nets are not filtered before emitting instructions.
VERIFIED REPAIR
Skip currencies whose net Decimal equals zero.
Unsuccessful approach: Filtering on the formatted text '0' misses zeros rendered with minor digits such as '0.00'.
Case contract
solve(trades): each trade is [pay_ccy, pay_amount, recv_ccy, recv_amount] from our side. Net per currency = received - paid. Return [[ccy, net], ...] sorted by currency code, omitting currencies whose net is exactly zero; nets are plain strings at the currency exponent (JPY 0, KWD 3, else 2).
Why this case matters
Currency amounts must be rounded at the right stage and in the right unit, or ledgers, quotes and settlements drift by minor units.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_FLOOR, ROUND_CEILING, ROUND_DOWN, ROUND_UP, ROUND_HALF_DOWN
N = 1
observations = []
def solve(trades):
exps = {'JPY': 0, 'KWD': 3}
net = {}
for pay_c, pay_a, rec_c, rec_a in trades:
net[pay_c] = net.get(pay_c, Decimal(0)) - Decimal(pay_a)
net[rec_c] = net.get(rec_c, Decimal(0)) + Decimal(rec_a)
out = []
for c in sorted(net):
v = net[c]
pass
out.append([c, format(v.quantize(Decimal(1).scaleb(-exps.get(c, 2))), 'f')])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression zero-net-omission 1', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('regression zero-net-omission 2', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']])],
[('regression zero-net-omission 1',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('regression zero-net-omission 2',
([['JPY', '1806', 'KWD', '4720.108'], ['USD', '3724.50', 'JPY', '222'], ['KWD', '4720.108', 'JPY', '1806']],),
[['JPY', '222'], ['USD', '-3724.50']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']])],
[('regression zero-net-omission 1', ([['JPY', '2849', 'USD', '3944.10'], ['USD', '3944.10', 'JPY', '2849']],), []),
('regression zero-net-omission 2',
([['USD', '1062.91', 'GBP', '4208.76'], ['EUR', '468.58', 'EUR', '2562.98'], ['GBP', '4208.76', 'USD', '1062.91']],),
[['EUR', '2094.40']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])],
[('regression zero-net-omission 1',
([['EUR', '4958.34', 'JPY', '456'], ['KWD', '149.894', 'EUR', '4865.00'], ['GBP', '4322.22', 'GBP', '4150.09'],
['USD', '4134', 'GBP', '151.91'], ['JPY', '456', 'EUR', '4958.34']],),
[['EUR', '4865.00'], ['GBP', '-20.22'], ['KWD', '-149.894'], ['USD', '-4134.00']]),
('regression zero-net-omission 2', ([['USD', '4066.17', 'EUR', '2513'], ['EUR', '2513', 'USD', '4066.17']],), []),
('partial repair guard 2',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']])],
[('regression zero-net-omission 1',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('regression zero-net-omission 2',
([['USD', '4986.84', 'JPY', '4037'], ['EUR', '357', 'EUR', '2273.42'], ['JPY', '4037', 'USD', '4986.84']],),
[['EUR', '1916.42']]),
('partial repair guard 2',
([['GBP', '3621.77', 'USD', '651.33'], ['GBP', '1148.32', 'EUR', '4519'], ['EUR', '1042.18', 'KWD', '4279.575'],
['USD', '651.33', 'GBP', '3621.77']],),
[['EUR', '3476.82'], ['GBP', '-1148.32'], ['KWD', '4279.575']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])]]
for label, args, expected in cases[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 zero-net-omission 1 | [['EUR', '0.00'], ['USD', '0.00']] | [] | Failed |
| regression zero-net-omission 2 | [['EUR', '0.00'], ['JPY', '16200'], ['USD', '-108.35']] | [['JPY', '16200'], ['USD', '-108.35']] | Failed |
| control: short amounts | [['GBP', '4.00'], ['USD', '-5.00']] | [['GBP', '4.00'], ['USD', '-5.00']] | Passed |
| control: same currency swap | [['KWD', '-0.250']] | [['KWD', '-0.250']] | Passed |
| control: empty | [] | [] | Passed |
| control: unsorted codes | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307'], ['USD', '0.00']] | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']] | Failed |
SHA-256 / 0192588186f90a19f88c07c41cf2f2441192dfa72e5d36a758db397dbb66a6b4
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_FLOOR, ROUND_CEILING, ROUND_DOWN, ROUND_UP, ROUND_HALF_DOWN
N = 1
observations = []
def solve(trades):
exps = {'JPY': 0, 'KWD': 3}
net = {}
for pay_c, pay_a, rec_c, rec_a in trades:
net[pay_c] = net.get(pay_c, Decimal(0)) - Decimal(pay_a)
net[rec_c] = net.get(rec_c, Decimal(0)) + Decimal(rec_a)
out = []
for c in sorted(net):
v = net[c]
if format(v.quantize(Decimal(1).scaleb(-exps.get(c, 2))), 'f') == '0': continue
out.append([c, format(v.quantize(Decimal(1).scaleb(-exps.get(c, 2))), 'f')])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression zero-net-omission 1', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('regression zero-net-omission 2', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']])],
[('regression zero-net-omission 1',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('regression zero-net-omission 2',
([['JPY', '1806', 'KWD', '4720.108'], ['USD', '3724.50', 'JPY', '222'], ['KWD', '4720.108', 'JPY', '1806']],),
[['JPY', '222'], ['USD', '-3724.50']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']])],
[('regression zero-net-omission 1', ([['JPY', '2849', 'USD', '3944.10'], ['USD', '3944.10', 'JPY', '2849']],), []),
('regression zero-net-omission 2',
([['USD', '1062.91', 'GBP', '4208.76'], ['EUR', '468.58', 'EUR', '2562.98'], ['GBP', '4208.76', 'USD', '1062.91']],),
[['EUR', '2094.40']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])],
[('regression zero-net-omission 1',
([['EUR', '4958.34', 'JPY', '456'], ['KWD', '149.894', 'EUR', '4865.00'], ['GBP', '4322.22', 'GBP', '4150.09'],
['USD', '4134', 'GBP', '151.91'], ['JPY', '456', 'EUR', '4958.34']],),
[['EUR', '4865.00'], ['GBP', '-20.22'], ['KWD', '-149.894'], ['USD', '-4134.00']]),
('regression zero-net-omission 2', ([['USD', '4066.17', 'EUR', '2513'], ['EUR', '2513', 'USD', '4066.17']],), []),
('partial repair guard 2',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']])],
[('regression zero-net-omission 1',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('regression zero-net-omission 2',
([['USD', '4986.84', 'JPY', '4037'], ['EUR', '357', 'EUR', '2273.42'], ['JPY', '4037', 'USD', '4986.84']],),
[['EUR', '1916.42']]),
('partial repair guard 2',
([['GBP', '3621.77', 'USD', '651.33'], ['GBP', '1148.32', 'EUR', '4519'], ['EUR', '1042.18', 'KWD', '4279.575'],
['USD', '651.33', 'GBP', '3621.77']],),
[['EUR', '3476.82'], ['GBP', '-1148.32'], ['KWD', '4279.575']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])]]
for label, args, expected in cases[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 zero-net-omission 1 | [['EUR', '0.00'], ['USD', '0.00']] | [] | Failed |
| regression zero-net-omission 2 | [['EUR', '0.00'], ['JPY', '16200'], ['USD', '-108.35']] | [['JPY', '16200'], ['USD', '-108.35']] | Failed |
| control: short amounts | [['GBP', '4.00'], ['USD', '-5.00']] | [['GBP', '4.00'], ['USD', '-5.00']] | Passed |
| control: same currency swap | [['KWD', '-0.250']] | [['KWD', '-0.250']] | Passed |
| control: empty | [] | [] | Passed |
| control: unsorted codes | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307'], ['USD', '0.00']] | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']] | Failed |
SHA-256 / 7aac2437fc6dacb01e205c588b7e2e01a394e58690c9ad85b92e41f82a26f9cc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_FLOOR, ROUND_CEILING, ROUND_DOWN, ROUND_UP, ROUND_HALF_DOWN
N = 1
observations = []
def solve(trades):
exps = {'JPY': 0, 'KWD': 3}
net = {}
for pay_c, pay_a, rec_c, rec_a in trades:
net[pay_c] = net.get(pay_c, Decimal(0)) - Decimal(pay_a)
net[rec_c] = net.get(rec_c, Decimal(0)) + Decimal(rec_a)
out = []
for c in sorted(net):
v = net[c]
if v == 0: continue
out.append([c, format(v.quantize(Decimal(1).scaleb(-exps.get(c, 2))), 'f')])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression zero-net-omission 1', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('regression zero-net-omission 2', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']])],
[('regression zero-net-omission 1',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('regression zero-net-omission 2',
([['JPY', '1806', 'KWD', '4720.108'], ['USD', '3724.50', 'JPY', '222'], ['KWD', '4720.108', 'JPY', '1806']],),
[['JPY', '222'], ['USD', '-3724.50']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']])],
[('regression zero-net-omission 1', ([['JPY', '2849', 'USD', '3944.10'], ['USD', '3944.10', 'JPY', '2849']],), []),
('regression zero-net-omission 2',
([['USD', '1062.91', 'GBP', '4208.76'], ['EUR', '468.58', 'EUR', '2562.98'], ['GBP', '4208.76', 'USD', '1062.91']],),
[['EUR', '2094.40']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])],
[('regression zero-net-omission 1',
([['EUR', '4958.34', 'JPY', '456'], ['KWD', '149.894', 'EUR', '4865.00'], ['GBP', '4322.22', 'GBP', '4150.09'],
['USD', '4134', 'GBP', '151.91'], ['JPY', '456', 'EUR', '4958.34']],),
[['EUR', '4865.00'], ['GBP', '-20.22'], ['KWD', '-149.894'], ['USD', '-4134.00']]),
('regression zero-net-omission 2', ([['USD', '4066.17', 'EUR', '2513'], ['EUR', '2513', 'USD', '4066.17']],), []),
('partial repair guard 2',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']]),
('control: empty', ([],), []),
('control: unsorted codes',
([['USD', '1.00', 'EUR', '0.92'], ['GBP', '0.79', 'USD', '1.00'], ['KWD', '0.307', 'CHF', '0.88']],),
[['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']])],
[('regression zero-net-omission 1',
([['JPY', '1210', 'GBP', '400.13'], ['JPY', '1882', 'EUR', '1387'], ['JPY', '133', 'KWD', '4882'],
['GBP', '400.13', 'JPY', '1210']],),
[['EUR', '1387.00'], ['JPY', '-2015'], ['KWD', '4882.000']]),
('regression zero-net-omission 2',
([['USD', '4986.84', 'JPY', '4037'], ['EUR', '357', 'EUR', '2273.42'], ['JPY', '4037', 'USD', '4986.84']],),
[['EUR', '1916.42']]),
('partial repair guard 2',
([['GBP', '3621.77', 'USD', '651.33'], ['GBP', '1148.32', 'EUR', '4519'], ['EUR', '1042.18', 'KWD', '4279.575'],
['USD', '651.33', 'GBP', '3621.77']],),
[['EUR', '3476.82'], ['GBP', '-1148.32'], ['KWD', '4279.575']]),
('control: chained trades', ([['USD', '108.35', 'EUR', '100.00'], ['EUR', '100.00', 'JPY', '16200']],),
[['JPY', '16200'], ['USD', '-108.35']]),
('control: short amounts', ([['USD', '5', 'GBP', '4']],), [['GBP', '4.00'], ['USD', '-5.00']]),
('control: fully offset', ([['USD', '10.00', 'EUR', '9.20'], ['EUR', '9.20', 'USD', '10.00']],), []),
('control: same currency swap', ([['KWD', '1.250', 'KWD', '1.000']],), [['KWD', '-0.250']])]]
for label, args, expected in cases[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 zero-net-omission 1 | [] | [] | Passed |
| regression zero-net-omission 2 | [['JPY', '16200'], ['USD', '-108.35']] | [['JPY', '16200'], ['USD', '-108.35']] | Passed |
| control: short amounts | [['GBP', '4.00'], ['USD', '-5.00']] | [['GBP', '4.00'], ['USD', '-5.00']] | Passed |
| control: same currency swap | [['KWD', '-0.250']] | [['KWD', '-0.250']] | Passed |
| control: empty | [] | [] | Passed |
| control: unsorted codes | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']] | [['CHF', '0.88'], ['EUR', '0.92'], ['GBP', '-0.79'], ['KWD', '-0.307']] | Passed |
SHA-256 / 7714ddb60b096a59da3028066a888f34934d214324b26d407f94bb3fd2e8018e
Verification & scope
A deterministic, bounded teaching model with a stipulated toy contract; it makes no claim of conformance to any real regulation, standard, or institution's rules. 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:47:01.369067+00:00.
Case digest / ceb5fec14e4387294d184d222704b1282123cf026ed26caaa5901c2dba0bc342