1818)
1919
2020from .annotation import is_local_path
21- from .dataset_item import DatasetItem , DatasetItemType
21+ from .dataset_item import (
22+ DatasetItem ,
23+ DatasetItemType ,
24+ check_for_duplicate_reference_ids ,
25+ )
2226
2327
2428class Frame :
25- """Collection of sensor data pertaining to a single timestep .
29+ """Collection of sensor data pertaining to a single time step .
2630
27- For 3D data, each Frame hosues a sensor-to-data mapping and must have exactly
31+ For 3D data, each Frame houses a sensor-to-data mapping and must have exactly
2832 one pointcloud with any number of camera images.
2933
3034 Parameters:
@@ -37,16 +41,15 @@ class Frame:
3741 """
3842
3943 def __init__ (self , ** kwargs ):
40- self .items = {}
44+ self .items : Dict [ str , DatasetItem ] = {}
4145 for key , value in kwargs .items ():
42- self .items [key ] = value
43-
44- def __post_init__ (self ):
45- for key , value in self .items .items ():
4646 assert isinstance (key , str ), "All keys must be names of sensors"
4747 assert isinstance (
4848 value , DatasetItem
49- ), "All values must be DatasetItems"
49+ ), f"All values must be DatasetItems, instead got type { type (value )} "
50+ self .items [key ] = value
51+
52+ check_for_duplicate_reference_ids (list (self .items .values ()))
5053
5154 def __repr__ (self ) -> str :
5255 return f"Frame(items={ self .items } )"
@@ -129,6 +132,8 @@ def __post_init__(self):
129132 if self .metadata is None :
130133 self .metadata = {}
131134
135+ self .validate ()
136+
132137 def __eq__ (self , other ):
133138 return all (
134139 [
@@ -151,10 +156,14 @@ def num_sensors(self) -> int:
151156 def validate (self ):
152157 # TODO: make private
153158 assert self .length > 0 , "Must have at least 1 frame in a scene"
159+ all_items = []
154160 for frame in self .frames_dict .values ():
155161 assert isinstance (
156162 frame , Frame
157163 ), "Each frame in a scene must be a Frame object"
164+ all_items .extend (frame .get_items ())
165+
166+ check_for_duplicate_reference_ids (all_items )
158167
159168 def add_item (
160169 self , index : int , sensor_name : str , item : DatasetItem
0 commit comments