15
15
from .dataset_item import DatasetItemType , DatasetItem
16
16
17
17
18
- @dataclass
19
18
class Frame :
20
- items : Dict [str , DatasetItem ] = field (default_factory = dict )
21
- index : Union [int , None ] = None
19
+ def __init__ (self , ** kwargs ):
20
+ self .items = {}
21
+ for key , value in kwargs .items ():
22
+ self .items [key ] = value
22
23
23
24
def __post_init__ (self ):
24
25
for key , value in self .items .items ():
@@ -28,7 +29,7 @@ def __post_init__(self):
28
29
), "All values must be DatasetItems"
29
30
30
31
def __repr__ (self ) -> str :
31
- return f"Frame(index= { self . index } , items={ self .items } )"
32
+ return f"Frame(items={ self .items } )"
32
33
33
34
def add_item (self , item : DatasetItem , sensor_name : str ):
34
35
self .items [sensor_name ] = item
@@ -46,9 +47,6 @@ def get_items(self):
46
47
def get_sensors (self ):
47
48
return list (self .items .keys ())
48
49
49
- def get_index (self ):
50
- return self .index
51
-
52
50
@classmethod
53
51
def from_json (cls , payload : dict ):
54
52
items = {
@@ -71,18 +69,10 @@ class Scene(ABC):
71
69
metadata : Optional [dict ] = None
72
70
73
71
def __post_init__ (self ):
74
- self .check_valid_frame_indices ()
75
72
self .sensors = set (
76
73
flatten ([frame .get_sensors () for frame in self .frames ])
77
74
)
78
- if all ((frame .index is not None for frame in self .frames )):
79
- self .frames_dict = {frame .index : frame for frame in self .frames }
80
- else :
81
- indexed_frames = [
82
- Frame (index = i , items = frame .items )
83
- for i , frame in enumerate (self .frames )
84
- ]
85
- self .frames_dict = dict (enumerate (indexed_frames ))
75
+ self .frames_dict = dict (enumerate (self .frames ))
86
76
87
77
@property
88
78
def length (self ) -> int :
@@ -92,17 +82,6 @@ def length(self) -> int:
92
82
def num_sensors (self ) -> int :
93
83
return len (self .get_sensors ())
94
84
95
- def check_valid_frame_indices (self ):
96
- infer_from_list_position = all (
97
- (frame .index is None for frame in self .frames )
98
- )
99
- explicit_frame_order = all (
100
- (frame .index is not None for frame in self .frames )
101
- )
102
- assert (
103
- infer_from_list_position or explicit_frame_order
104
- ), "Must specify index explicitly for all frames or infer from list position for all frames"
105
-
106
85
def validate (self ):
107
86
assert self .length > 0 , "Must have at least 1 frame in a scene"
108
87
for frame in self .frames_dict .values ():
@@ -113,21 +92,18 @@ def validate(self):
113
92
def add_item (self , index : int , sensor_name : str , item : DatasetItem ):
114
93
self .sensors .add (sensor_name )
115
94
if index not in self .frames_dict :
116
- new_frame = Frame (index = index , items = {sensor_name : item })
95
+ new_frame = Frame (items = {sensor_name : item })
117
96
self .frames_dict [index ] = new_frame
118
97
else :
119
98
self .frames_dict [index ].items [sensor_name ] = item
120
99
121
- def add_frame (self , frame : Frame , update : bool = False ):
122
- assert (
123
- frame .index is not None
124
- ), "Must specify index explicitly when calling add_frame"
100
+ def add_frame (self , frame : Frame , index : int , update : bool = False ):
125
101
if (
126
- frame . index not in self .frames_dict
127
- or frame . index in self .frames_dict
102
+ index not in self .frames_dict
103
+ or index in self .frames_dict
128
104
and update
129
105
):
130
- self .frames_dict [frame . index ] = frame
106
+ self .frames_dict [index ] = frame
131
107
self .sensors .update (frame .get_sensors ())
132
108
133
109
def get_frame (self , index : int ):
0 commit comments