1919from OTAnalytics .application .export_formats .export_mode import ExportMode
2020from OTAnalytics .application .use_cases .create_events import CreateEvents
2121from OTAnalytics .application .use_cases .section_repository import GetSectionsById
22- from OTAnalytics .domain .event import Event , EventRepository
22+ from OTAnalytics .domain .event import (
23+ Event ,
24+ EventDataset ,
25+ EventRepository ,
26+ PythonEventDataset ,
27+ )
2328from OTAnalytics .domain .flow import Flow , FlowRepository
2429from OTAnalytics .domain .section import Section , SectionId
30+ from OTAnalytics .domain .track_dataset .track_dataset import TrackIdSet , TrackIdSetFactory
2531from OTAnalytics .domain .types import EventType
2632
2733DATETIME_FORMAT = "%Y-%m-%d_%H-%M-%S"
@@ -598,16 +604,23 @@ class RoadUserAssignments:
598604 """
599605
600606 @property
601- def road_user_ids (self ) -> list [ str ] :
607+ def road_user_ids (self ) -> TrackIdSet :
602608 """Returns a sorted list of all road user ids within this group of assignments.
603609
604610 Returns:
605611 list[str]: the road user ids.
606612 """
607- return sorted ([assignment .road_user for assignment in self ._assignments ])
613+ return self ._track_id_set_factory .create (
614+ {assignment .road_user for assignment in self ._assignments }
615+ )
608616
609- def __init__ (self , assignments : list [RoadUserAssignment ]) -> None :
617+ def __init__ (
618+ self ,
619+ assignments : list [RoadUserAssignment ],
620+ track_id_set_factory : TrackIdSetFactory ,
621+ ) -> None :
610622 self ._assignments = assignments .copy ()
623+ self ._track_id_set_factory = track_id_set_factory
611624
612625 def tag (self , by : Tagger ) -> TaggedAssignments :
613626 """
@@ -688,9 +701,9 @@ class FilterBySectionEnterEvent(RoadUserAssignerDecorator):
688701 """Decorator to filters events by event type section-enter."""
689702
690703 def assign (self , events : Iterable [Event ], flows : list [Flow ]) -> RoadUserAssignments :
691- section_enter_events : list [ Event ] = [
692- event for event in events if event .event_type == EventType .SECTION_ENTER
693- ]
704+ section_enter_events = PythonEventDataset (
705+ [ event for event in events if event .event_type == EventType .SECTION_ENTER ]
706+ )
694707 return super ().assign (section_enter_events , flows )
695708
696709
@@ -700,7 +713,9 @@ class SimpleRoadUserAssigner(RoadUserAssigner):
700713 """
701714
702715 def __init__ (
703- self , flow_selection : FlowSelection = MaxDurationFlowSelection ()
716+ self ,
717+ track_id_set_factory : TrackIdSetFactory ,
718+ flow_selection : FlowSelection = MaxDurationFlowSelection (),
704719 ) -> None :
705720 """
706721 Initialize the SimpleRoadUserAssigner with a flow selection strategy.
@@ -710,6 +725,7 @@ def __init__(
710725 Defaults to MaxDurationFlowSelection.
711726 """
712727 self ._flow_selection = flow_selection
728+ self ._track_id_set_factory = track_id_set_factory
713729
714730 def assign (self , events : Iterable [Event ], flows : list [Flow ]) -> RoadUserAssignments :
715731 """
@@ -748,18 +764,18 @@ def __group_flows_by_sections(
748764
749765 def __group_events_by_road_user (
750766 self , events : Iterable [Event ]
751- ) -> dict [tuple [str , str ], list [ Event ] ]:
767+ ) -> dict [tuple [str , str ], EventDataset ]:
752768 """
753769 Group events by road user.
754770
755771 Args:
756772 events (Iterable[Event]): events of a road user
757773
758774 Returns:
759- dict[tuple[RoadUserId, RoadUserType], list[Event] ]: events grouped by user
775+ dict[tuple[RoadUserId, RoadUserType], EventDataset ]: events grouped by user
760776 """
761- events_by_road_user : dict [tuple [RoadUserId , RoadUserType ], list [ Event ] ] = (
762- defaultdict (list )
777+ events_by_road_user : dict [tuple [RoadUserId , RoadUserType ], EventDataset ] = (
778+ defaultdict (PythonEventDataset )
763779 )
764780 sorted_events = sorted (
765781 events , key = lambda _event : _event .interpolated_occurrence
@@ -774,15 +790,15 @@ def __group_events_by_road_user(
774790 def __assign_user_to_flow (
775791 self ,
776792 flows : dict [tuple [SectionId , SectionId ], list [Flow ]],
777- events_by_road_user : dict [tuple [str , str ], list [ Event ] ],
793+ events_by_road_user : dict [tuple [str , str ], EventDataset ],
778794 ) -> RoadUserAssignments :
779795 """
780796 Assign each user to flows based on the flow selection strategy.
781797
782798 Args:
783799 flows (dict[tuple[SectionId, SectionId], list[Flow]]): flows by start and
784800 end section
785- events_by_road_user (dict[str, list[Event] ]): events by road user
801+ events_by_road_user (dict[str, EventDataset ]): events by road user
786802
787803 Returns:
788804 RoadUserAssignments: group of RoadUserAssignment objects
@@ -795,35 +811,35 @@ def __assign_user_to_flow(
795811 road_user_id = road_user_id , road_user_type = road_user_type
796812 )
797813 assignments .extend (user_assignments )
798- return RoadUserAssignments (assignments )
814+ return RoadUserAssignments (assignments , self . _track_id_set_factory )
799815
800816 def __create_candidates (
801817 self ,
802818 flows : dict [tuple [SectionId , SectionId ], list [Flow ]],
803- events : list [ Event ] ,
819+ events : EventDataset ,
804820 ) -> list [FlowCandidate ]:
805821 """
806822 Create flow candidates to select one from in a later step.
807823
808824 Args:
809825 flows (dict[tuple[SectionId, SectionId], list[Flow]]): flows by start and
810826 end section
811- events (list[Event] ): events belonging to road user
827+ events (EventDataset ): events belonging to road user
812828
813829 Returns:
814830 list[FlowCandidate]: the flow candidates pertaining to road user
815831 """
816832 event_pairs = self .__create_event_pairs (events )
817833 return self .__create_candidate_flows (flows , event_pairs )
818834
819- def __create_event_pairs (self , events : list [ Event ] ) -> list [EventPair ]:
835+ def __create_event_pairs (self , events : EventDataset ) -> list [EventPair ]:
820836 """
821837 Create event pairs.
822838
823839 Requires and assumes events to be sorted by occurrence.
824840
825841 Args:
826- events(list[Event] ): events to create the event pairs with
842+ events(EventDataset ): events to create the event pairs with
827843
828844 Returns:
829845 list[EventPair]: event pairs
0 commit comments