idea159-arbsphere-federated.../tests/test_ir_full_mapping.py

30 lines
1.4 KiB
Python

from arbsphere.primitives import LocalArbProblem, SharedSignals, DualVariables, AuditLog, AuditLogEntry, PrivacyBudget
from arbsphere.ir import map_to_full_ir
def test_full_ir_mapping_includes_optional_components():
lp = LocalArbProblem(asset_pair=("AAPL", "USD"), target_mispricing=0.5, liquidity_budget=100000.0, latency_budget=0.2)
shared = SharedSignals(
deltas=[0.1, -0.05],
cross_venue_corr=0.8,
liquidity_availability={"venue-1": 100000.0, "venue-2": 90000.0},
latency_proxy=0.6,
)
dual = DualVariables(shadow_prices={"AAPL/USD": 1.0})
privacy = PrivacyBudget(budgets={"signals": 0.5})
audit = AuditLog(entries=[AuditLogEntry(ts=1.0, event="dept", details={"ok": True}, signature="sig")])
ir = map_to_full_ir(lp, shared=shared, dual=dual, privacy=privacy, audit=audit)
# Basic structure checks
assert ir.get("type") == "LocalArbProblem" or ir.get("asset_pair") is not None
assert "asset_pair" in ir and ir["asset_pair"] == ["AAPL", "USD"]
assert "shared_signals" in ir
assert ir["shared_signals"]["cross_venue_corr"] == 0.8
assert "dual_variables" in ir
assert ir["dual_variables"]["shadow_prices"]["AAPL/USD"] == 1.0
assert "privacy_budget" in ir
assert ir["privacy_budget"]["budgets"]["signals"] == 0.5
assert "audit_log" in ir
assert isinstance(ir["audit_log"]["entries"], list)