FA-62266 / Currency rounding and FX conversion / Open access
Inverted USD legs are rounded to four decimals · case 01
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
ROOT CAUSE
1/quote is quantized to 0.0001 before being used as a leg.
VERIFIED REPAIR
Keep the inverted leg at full working precision.
Unsuccessful approach: Rounding the inverted leg to eight decimals still perturbs the sixth decimal of large crosses.
Case contract
solve(quotes, target): quotes maps six-letter pairs to rates (QUOTE units per BASE unit). For currency c, units per USD are: 1 for USD; quotes['USD'+c] if present (authoritative when both orientations exist); else 1/quotes[c+'USD']; else unknown. The target BBBQQQ rate = (QQQ per USD)/(BBB per USD), rounded half-even to 6 decimals and returned as a string; an unknown leg returns 'ERR:no-quote'.
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(quotes, target):
def per_usd(c):
if c == 'USD': return Decimal(1)
if 'USD' + c in quotes: return Decimal(quotes['USD' + c])
if c + 'USD' in quotes: return (1 / Decimal(quotes[c + 'USD'])).quantize(Decimal('0.0001'))
return None
b, q = target[:3], target[3:]
pb, pq = per_usd(b), per_usd(q)
if pb is None or pq is None: return 'ERR:no-quote'
return format((pq / pb).quantize(Decimal('0.000001'), rounding=ROUND_HALF_EVEN), 'f')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('partial repair guard 2',
({'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPCAD'),
'1.717490'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('partial repair guard 1',
({'USDJPY': '151.37', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPCAD'),
'1.717490'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'AUDCHF'),
'0.581922'),
('regression inverse-leg-precision 2',
({'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'CHFGBP'),
'0.898209'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPJPY'),
'191.483050'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURAUD'),
'1.638687'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'USDGBP'),
'0.790514'),
('partial repair guard 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'USDCAD': '1.3577'}, 'EURJPY'),
'164.009395'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'GBPCHF'),
'1.113326'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote')],
[('regression inverse-leg-precision 1',
({'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'EURGBP'), '0.856369'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'CADGBP'),
'0.582245'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURJPY'),
'164.009395'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935')]]
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 inverse-leg-precision 1 | 164.015603 | 164.009395 | Failed |
| regression inverse-leg-precision 2 | 1.167489 | 1.167513 | Failed |
| partial repair guard 2 | 1.717521 | 1.717490 | Failed |
| control: direct usd base | 151.370000 | 151.370000 | Passed |
| control: usd quote | 0.006606 | 0.006606 | Passed |
| control: missing leg | ERR:no-quote | ERR:no-quote | Passed |
| control: franc aussie | 1.718441 | 1.718443 | Failed |
SHA-256 / ce14be340e54b2ec1d341142f36fa5b8862327b17635ec1fc0d2ae2237e29214
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(quotes, target):
def per_usd(c):
if c == 'USD': return Decimal(1)
if 'USD' + c in quotes: return Decimal(quotes['USD' + c])
if c + 'USD' in quotes: return (1 / Decimal(quotes[c + 'USD'])).quantize(Decimal('0.00000001'))
return None
b, q = target[:3], target[3:]
pb, pq = per_usd(b), per_usd(q)
if pb is None or pq is None: return 'ERR:no-quote'
return format((pq / pb).quantize(Decimal('0.000001'), rounding=ROUND_HALF_EVEN), 'f')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('partial repair guard 2',
({'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPCAD'),
'1.717490'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('partial repair guard 1',
({'USDJPY': '151.37', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPCAD'),
'1.717490'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'AUDCHF'),
'0.581922'),
('regression inverse-leg-precision 2',
({'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'CHFGBP'),
'0.898209'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPJPY'),
'191.483050'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURAUD'),
'1.638687'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'USDGBP'),
'0.790514'),
('partial repair guard 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'USDCAD': '1.3577'}, 'EURJPY'),
'164.009395'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'GBPCHF'),
'1.113326'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote')],
[('regression inverse-leg-precision 1',
({'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'EURGBP'), '0.856369'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'CADGBP'),
'0.582245'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURJPY'),
'164.009395'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935')]]
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 inverse-leg-precision 1 | 164.009396 | 164.009395 | Failed |
| regression inverse-leg-precision 2 | 1.167513 | 1.167513 | Passed |
| partial repair guard 2 | 1.717491 | 1.717490 | Failed |
| control: direct usd base | 151.370000 | 151.370000 | Passed |
| control: usd quote | 0.006606 | 0.006606 | Passed |
| control: missing leg | ERR:no-quote | ERR:no-quote | Passed |
| control: franc aussie | 1.718443 | 1.718443 | Passed |
SHA-256 / 0298320b4aa7779368a6b32884eeb9be413b6405f15a1e11d7586778b7d06beb
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(quotes, target):
def per_usd(c):
if c == 'USD': return Decimal(1)
if 'USD' + c in quotes: return Decimal(quotes['USD' + c])
if c + 'USD' in quotes: return 1 / Decimal(quotes[c + 'USD'])
return None
b, q = target[:3], target[3:]
pb, pq = per_usd(b), per_usd(q)
if pb is None or pq is None: return 'ERR:no-quote'
return format((pq / pb).quantize(Decimal('0.000001'), rounding=ROUND_HALF_EVEN), 'f')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('partial repair guard 2',
({'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPCAD'),
'1.717490'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('partial repair guard 1',
({'USDJPY': '151.37', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDCAD': '1.3577'}, 'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPCAD'),
'1.717490'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'AUDCHF'),
'0.581922'),
('regression inverse-leg-precision 2',
({'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'CHFGBP'),
'0.898209'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'USDCAD': '1.3577',
'JPYUSD': '0.006610'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577',
'USDEUR': '0.9231'},
'GBPJPY'),
'191.483050'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935'),
('control: euro yen',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURJPY'),
'164.009395'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513')],
[('regression inverse-leg-precision 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURAUD'),
'1.638687'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'USDGBP'),
'0.790514'),
('partial repair guard 1',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'USDCAD': '1.3577'}, 'EURJPY'),
'164.009395'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'GBPCHF'),
'1.113326'),
('control: sterling euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'GBPEUR'),
'1.167513'),
('control: direct usd base',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDJPY'),
'151.370000'),
('control: usd quote',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'JPYUSD'),
'0.006606'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote')],
[('regression inverse-leg-precision 1',
({'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612', 'USDEUR': '0.9231'}, 'EURGBP'), '0.856369'),
('regression inverse-leg-precision 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'CADGBP'),
'0.582245'),
('partial repair guard 1',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'GBPJPY'),
'191.483050'),
('partial repair guard 2',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDCAD': '1.3577'},
'EURJPY'),
'164.009395'),
('control: missing leg',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'EURSEK'),
'ERR:no-quote'),
('control: franc aussie',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'CHFAUD'),
'1.718443'),
('control: both orientations',
({'USDJPY': '151.37',
'EURUSD': '1.0835',
'GBPUSD': '1.2650',
'USDCHF': '0.8801',
'AUDUSD': '0.6612',
'USDEUR': '0.9231'},
'EURCHF'),
'0.953418'),
('control: usd to euro',
({'USDJPY': '151.37', 'EURUSD': '1.0835', 'GBPUSD': '1.2650', 'USDCHF': '0.8801', 'AUDUSD': '0.6612'}, 'USDEUR'),
'0.922935')]]
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 inverse-leg-precision 1 | 164.009395 | 164.009395 | Passed |
| regression inverse-leg-precision 2 | 1.167513 | 1.167513 | Passed |
| partial repair guard 2 | 1.717490 | 1.717490 | Passed |
| control: direct usd base | 151.370000 | 151.370000 | Passed |
| control: usd quote | 0.006606 | 0.006606 | Passed |
| control: missing leg | ERR:no-quote | ERR:no-quote | Passed |
| control: franc aussie | 1.718443 | 1.718443 | Passed |
SHA-256 / e664720a772c1138b6a05e4763b59e54324f04d3d97d035af2a5555adf95bd88
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:03.015314+00:00.
Case digest / dd9e26aada6d567e400a3a2f62f18c56b0912ec2ce1af2e28b196f597fada1ab