multimodalsim-viewer 0.0.2__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.
Files changed (43) hide show
  1. multimodalsim_viewer/common/environments/.env +2 -0
  2. multimodalsim_viewer/common/utils.py +11 -48
  3. multimodalsim_viewer/models/__init__.py +0 -0
  4. multimodalsim_viewer/models/environment.py +70 -0
  5. multimodalsim_viewer/models/leg.py +194 -0
  6. multimodalsim_viewer/models/passenger.py +148 -0
  7. multimodalsim_viewer/models/serializable.py +43 -0
  8. multimodalsim_viewer/models/simulation_information.py +84 -0
  9. multimodalsim_viewer/models/state.py +44 -0
  10. multimodalsim_viewer/models/stop.py +114 -0
  11. multimodalsim_viewer/models/update.py +616 -0
  12. multimodalsim_viewer/models/vehicle.py +151 -0
  13. multimodalsim_viewer/server/{simulation_visualization_data_collector.py → data_collector.py} +185 -198
  14. multimodalsim_viewer/server/data_manager.py +567 -0
  15. multimodalsim_viewer/server/http_routes.py +4 -7
  16. multimodalsim_viewer/server/log_manager.py +2 -2
  17. multimodalsim_viewer/server/server.py +8 -10
  18. multimodalsim_viewer/server/simulation.py +4 -5
  19. multimodalsim_viewer/server/simulation_manager.py +22 -23
  20. multimodalsim_viewer/ui/static/chunk-BQ2VC5TN.js +7 -0
  21. multimodalsim_viewer/ui/static/{chunk-IGIP6IOU.js → chunk-RHGMGEGM.js} +1 -1
  22. multimodalsim_viewer/ui/static/environment.json +2 -0
  23. multimodalsim_viewer/ui/static/images/undefined-texture.png +0 -0
  24. multimodalsim_viewer/ui/static/images/zoomed-out-stop.png +0 -0
  25. multimodalsim_viewer/ui/static/index.html +2 -2
  26. multimodalsim_viewer/ui/static/main-EAYQBWLP.js +3648 -0
  27. multimodalsim_viewer/ui/static/scripts/load-environment.script.js +1 -1
  28. multimodalsim_viewer/ui/static/styles-257KETL3.css +1 -0
  29. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/METADATA +6 -12
  30. multimodalsim_viewer-0.1.0.0.dist-info/RECORD +53 -0
  31. multimodalsim_viewer/server/simulation_visualization_data_model.py +0 -1552
  32. multimodalsim_viewer/ui/static/chunk-6VAXIXEZ.js +0 -7
  33. multimodalsim_viewer/ui/static/main-FGMGJ32M.js +0 -3648
  34. multimodalsim_viewer/ui/static/styles-KU7LTPET.css +0 -1
  35. multimodalsim_viewer-0.0.2.dist-info/RECORD +0 -41
  36. /multimodalsim_viewer/ui/static/images/{sample-wait.png → passenger.png} +0 -0
  37. /multimodalsim_viewer/ui/static/images/{sample-stop.png → stop.png} +0 -0
  38. /multimodalsim_viewer/ui/static/images/{sample-bus.png → vehicle.png} +0 -0
  39. /multimodalsim_viewer/ui/static/images/{zoom-out-passenger.png → zoomed-out-passenger.png} +0 -0
  40. /multimodalsim_viewer/ui/static/images/{zoom-out-vehicle.png → zoomed-out-vehicle.png} +0 -0
  41. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/WHEEL +0 -0
  42. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/entry_points.txt +0 -0
  43. {multimodalsim_viewer-0.0.2.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