"""Application workflows for demand allocation.""" from app.algorithms.demand_allocation import allocate_demand_by_pipe_length from app.native.wndb.gis.region_geometry import Topology, get_nodes_in_region from app.native.wndb.model.elements import get_nodes def calculate_demand_to_nodes( project_code: str, demand: float, node_ids: list[str], ) -> dict[str, float]: if not node_ids or demand == 0.0: return {} topology = Topology(project_code, node_ids) return allocate_demand_by_pipe_length( demand, topology.nodes(), topology.links(), ) def calculate_demand_to_region( project_code: str, demand: float, region_id: str, ) -> dict[str, float]: node_ids = get_nodes_in_region(project_code, region_id) return calculate_demand_to_nodes(project_code, demand, node_ids) def calculate_demand_to_network( project_code: str, demand: float, ) -> dict[str, float]: node_ids = get_nodes(project_code) return calculate_demand_to_nodes(project_code, demand, node_ids)