multimodalsim-viewer 0.0.3__py3-none-any.whl → 0.1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- multimodalsim_viewer/common/environments/.env +2 -0
- multimodalsim_viewer/common/utils.py +11 -48
- multimodalsim_viewer/models/__init__.py +0 -0
- multimodalsim_viewer/models/environment.py +70 -0
- multimodalsim_viewer/models/leg.py +194 -0
- multimodalsim_viewer/models/passenger.py +148 -0
- multimodalsim_viewer/models/serializable.py +43 -0
- multimodalsim_viewer/models/simulation_information.py +84 -0
- multimodalsim_viewer/models/state.py +44 -0
- multimodalsim_viewer/models/stop.py +114 -0
- multimodalsim_viewer/models/update.py +616 -0
- multimodalsim_viewer/models/vehicle.py +151 -0
- multimodalsim_viewer/server/{simulation_visualization_data_collector.py → data_collector.py} +185 -198
- multimodalsim_viewer/server/data_manager.py +567 -0
- multimodalsim_viewer/server/http_routes.py +4 -7
- multimodalsim_viewer/server/log_manager.py +2 -2
- multimodalsim_viewer/server/server.py +8 -10
- multimodalsim_viewer/server/simulation.py +4 -5
- multimodalsim_viewer/server/simulation_manager.py +22 -23
- multimodalsim_viewer/ui/static/environment.json +2 -0
- multimodalsim_viewer/ui/static/index.html +2 -2
- multimodalsim_viewer/ui/static/{main-LUPJCMAF.js → main-EAYQBWLP.js} +173 -173
- multimodalsim_viewer/ui/static/scripts/load-environment.script.js +1 -1
- multimodalsim_viewer/ui/static/styles-257KETL3.css +1 -0
- {multimodalsim_viewer-0.0.3.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/METADATA +6 -12
- multimodalsim_viewer-0.1.0.0.dist-info/RECORD +53 -0
- multimodalsim_viewer/server/simulation_visualization_data_model.py +0 -1570
- multimodalsim_viewer/ui/static/styles-KU7LTPET.css +0 -1
- multimodalsim_viewer-0.0.3.dist-info/RECORD +0 -43
- {multimodalsim_viewer-0.0.3.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/WHEEL +0 -0
- {multimodalsim_viewer-0.0.3.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/entry_points.txt +0 -0
- {multimodalsim_viewer-0.0.3.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,151 @@
|
|
1
|
+
from multimodalsim.simulator.vehicle import Route, Vehicle
|
2
|
+
from multimodalsim.state_machine.status import VehicleStatus
|
3
|
+
|
4
|
+
from multimodalsim_viewer.models.serializable import Serializable
|
5
|
+
from multimodalsim_viewer.models.stop import StopType, VisualizedStop
|
6
|
+
|
7
|
+
|
8
|
+
# MARK: Enums
|
9
|
+
def convert_vehicle_status_to_string(status: VehicleStatus) -> str:
|
10
|
+
if status == VehicleStatus.RELEASE:
|
11
|
+
return "release"
|
12
|
+
if status == VehicleStatus.IDLE:
|
13
|
+
return "idle"
|
14
|
+
if status == VehicleStatus.BOARDING:
|
15
|
+
return "boarding"
|
16
|
+
if status == VehicleStatus.ENROUTE:
|
17
|
+
return "enroute"
|
18
|
+
if status == VehicleStatus.ALIGHTING:
|
19
|
+
return "alighting"
|
20
|
+
if status == VehicleStatus.COMPLETE:
|
21
|
+
return "complete"
|
22
|
+
raise ValueError(f"Unknown VehicleStatus {status}")
|
23
|
+
|
24
|
+
|
25
|
+
def convert_string_to_vehicle_status(status: str) -> VehicleStatus:
|
26
|
+
if status == "release":
|
27
|
+
return VehicleStatus.RELEASE
|
28
|
+
if status == "idle":
|
29
|
+
return VehicleStatus.IDLE
|
30
|
+
if status == "boarding":
|
31
|
+
return VehicleStatus.BOARDING
|
32
|
+
if status == "enroute":
|
33
|
+
return VehicleStatus.ENROUTE
|
34
|
+
if status == "alighting":
|
35
|
+
return VehicleStatus.ALIGHTING
|
36
|
+
if status == "complete":
|
37
|
+
return VehicleStatus.COMPLETE
|
38
|
+
raise ValueError(f"Unknown VehicleStatus {status}")
|
39
|
+
|
40
|
+
|
41
|
+
# MARK: Vehicle
|
42
|
+
class VisualizedVehicle(Serializable): # pylint: disable=too-many-instance-attributes
|
43
|
+
|
44
|
+
def __init__( # pylint: disable=too-many-arguments, too-many-positional-arguments
|
45
|
+
self,
|
46
|
+
vehicle_id: str | int,
|
47
|
+
mode: str | None,
|
48
|
+
status: VehicleStatus,
|
49
|
+
polylines: dict[str, tuple[str, list[float]]] | None,
|
50
|
+
previous_stops: list[VisualizedStop],
|
51
|
+
current_stop: VisualizedStop | None,
|
52
|
+
next_stops: list[VisualizedStop],
|
53
|
+
capacity: int,
|
54
|
+
name: str,
|
55
|
+
tags: list[str],
|
56
|
+
) -> None:
|
57
|
+
self.vehicle_id: str = str(vehicle_id)
|
58
|
+
self.mode: str | None = mode
|
59
|
+
self.status: VehicleStatus = status
|
60
|
+
self.polylines: dict[str, tuple[str, list[float]]] | None = polylines
|
61
|
+
|
62
|
+
self.previous_stops: list[VisualizedStop] = previous_stops
|
63
|
+
self.current_stop: VisualizedStop | None = current_stop
|
64
|
+
self.next_stops: list[VisualizedStop] = next_stops
|
65
|
+
|
66
|
+
self.capacity: int = capacity
|
67
|
+
self.name: str = name
|
68
|
+
|
69
|
+
self.tags: list[str] = tags
|
70
|
+
|
71
|
+
@property
|
72
|
+
def all_stops(self) -> list[VisualizedStop]:
|
73
|
+
return self.previous_stops + ([self.current_stop] if self.current_stop is not None else []) + self.next_stops
|
74
|
+
|
75
|
+
@classmethod
|
76
|
+
def from_vehicle_and_route(cls, vehicle: Vehicle, route: Route) -> "VisualizedVehicle":
|
77
|
+
previous_stops = [VisualizedStop.from_stop(stop, StopType.PREVIOUS) for stop in route.previous_stops]
|
78
|
+
current_stop = (
|
79
|
+
VisualizedStop.from_stop(route.current_stop, StopType.CURRENT) if route.current_stop is not None else None
|
80
|
+
)
|
81
|
+
next_stops = [VisualizedStop.from_stop(stop, StopType.NEXT) for stop in route.next_stops]
|
82
|
+
return cls(
|
83
|
+
vehicle.id,
|
84
|
+
vehicle.mode,
|
85
|
+
vehicle.status,
|
86
|
+
vehicle.polylines,
|
87
|
+
previous_stops,
|
88
|
+
current_stop,
|
89
|
+
next_stops,
|
90
|
+
vehicle.capacity,
|
91
|
+
vehicle.name,
|
92
|
+
vehicle.tags,
|
93
|
+
)
|
94
|
+
|
95
|
+
# Similar to VisualizedPassenger
|
96
|
+
# pylint: disable=duplicate-code
|
97
|
+
def serialize(self) -> dict:
|
98
|
+
serialized = {
|
99
|
+
"id": self.vehicle_id,
|
100
|
+
"status": convert_vehicle_status_to_string(self.status),
|
101
|
+
"previousStops": [stop.serialize() for stop in self.previous_stops],
|
102
|
+
"nextStops": [stop.serialize() for stop in self.next_stops],
|
103
|
+
"capacity": self.capacity,
|
104
|
+
"name": self.name,
|
105
|
+
}
|
106
|
+
|
107
|
+
if self.mode is not None:
|
108
|
+
serialized["mode"] = self.mode
|
109
|
+
|
110
|
+
if self.current_stop is not None:
|
111
|
+
serialized["currentStop"] = self.current_stop.serialize()
|
112
|
+
|
113
|
+
if len(self.tags) > 0:
|
114
|
+
serialized["tags"] = self.tags
|
115
|
+
|
116
|
+
return serialized
|
117
|
+
|
118
|
+
@classmethod
|
119
|
+
def deserialize(cls, serialized_data: dict | str) -> "VisualizedVehicle":
|
120
|
+
serialized_data = cls.serialized_data_to_dict(serialized_data)
|
121
|
+
|
122
|
+
required_keys = [
|
123
|
+
"id",
|
124
|
+
"status",
|
125
|
+
"name",
|
126
|
+
"previousStops",
|
127
|
+
"nextStops",
|
128
|
+
"capacity",
|
129
|
+
]
|
130
|
+
|
131
|
+
cls.verify_required_fields(serialized_data, required_keys, "VisualizedVehicle")
|
132
|
+
|
133
|
+
vehicle_id = str(serialized_data["id"])
|
134
|
+
mode = serialized_data.get("mode", None)
|
135
|
+
status = convert_string_to_vehicle_status(serialized_data["status"])
|
136
|
+
previous_stops = [VisualizedStop.deserialize(stop_data) for stop_data in serialized_data["previousStops"]]
|
137
|
+
next_stops = [VisualizedStop.deserialize(stop_data) for stop_data in serialized_data["nextStops"]]
|
138
|
+
capacity = int(serialized_data["capacity"])
|
139
|
+
name = serialized_data.get("name")
|
140
|
+
|
141
|
+
current_stop = serialized_data.get("currentStop", None)
|
142
|
+
if current_stop is not None:
|
143
|
+
current_stop = VisualizedStop.deserialize(current_stop)
|
144
|
+
|
145
|
+
tags = serialized_data.get("tags", [])
|
146
|
+
|
147
|
+
return VisualizedVehicle(
|
148
|
+
vehicle_id, mode, status, None, previous_stops, current_stop, next_stops, capacity, name, tags
|
149
|
+
)
|
150
|
+
|
151
|
+
# pylint: enable=duplicate-code
|