import networkx as nx
from dataclasses import dataclass
from typing import Tuple, Union, NewType, Dict, Any, List, Callable
Node = int Edge = Tuple[Node, Node]
NodeData = Dict[str, Any] EdgeData = Dict[str, Any]
Wh = NewType('Wh', Union[float, int])
SoC = NewType('SoC', Wh)
ChargingCoefficient = Union[float, int, None]
Time = Union[float, int]
ConsumptionFunction = Callable[[nx.Graph, Node, Node], float]
@dataclass class Result: trip_time: Union[Time, None] charge_path: List[Tuple[Node, Time]] class EmptyResult(Result): def __init__(self): super().__init__(trip_time=None, charge_path=[])