causalis-backend / backend /src /temporal_model.py
volfiros
Initial deploy
3daa112
Raw History Blame Contribute Delete
1.94 kB
from src.data_loader import load_carriers
from src.world_model import MaritimeWorldModel
class TemporalModel:
def __init__(self, world_model: MaritimeWorldModel):
self._ports = world_model.get_port_graph()
self._routes = world_model.get_routes()
self._carriers = load_carriers()
self._port_data = {port["id"]: port for _, port in world_model._ports.iterrows()}
self._route_data = {route["id"]: route for _, route in self._routes.iterrows()}
self._carrier_data = {carrier["id"]: carrier for _, carrier in self._carriers.iterrows()}
def get_baseline(self, port_id: str) -> dict:
if port_id not in self._port_data:
raise KeyError(f"Port not found: {port_id}")
port = self._port_data[port_id]
dwell = int(port["typical_dwell_hours"])
return {
"port_id": port_id,
"typical_dwell_hours": dwell,
"congestion_baseline": dwell / 72.0,
}
def get_delay_distribution(self, route_id: str) -> dict:
if route_id not in self._route_data:
raise KeyError(f"Route not found: {route_id}")
route = self._route_data[route_id]
transit = int(route["transit_days"])
return {
"route_id": route_id,
"transit_days": transit,
"delay_std_days": transit * 0.1,
"on_time_pct": 0.85,
}
def get_carrier_pattern(self, carrier_id: str) -> dict:
if carrier_id not in self._carrier_data:
raise KeyError(f"Carrier not found: {carrier_id}")
carrier = self._carrier_data[carrier_id]
exposures = carrier["chokepoint_exposure"]
avg_exposure = sum(exposures.values()) / len(exposures) if exposures else 0.0
return {
"carrier_id": carrier_id,
"routes": list(carrier["typical_routes"]),
"avg_exposure": round(avg_exposure, 4),
}