1313
1414warnings .simplefilter ("default" )
1515
16- SEPARATOR = b"$$__$$"
17- SEPARATOR_LENGTH = len (SEPARATOR )
1816BUFFER_SIZE = 1000000
1917
2018
@@ -47,7 +45,7 @@ def __init__(self, path=None, type_name="SensorView"):
4745 self .retrieved_scenario_size = 0
4846 self ._int_length = len (struct .pack ("<L" , 0 ))
4947
50- def from_file (self , path , type_name = "SensorView" , max_index = - 1 , format_type = None ):
48+ def from_file (self , path , type_name = "SensorView" , max_index = - 1 ):
5149 """Import a scenario from a file"""
5250
5351 if path .lower ().endswith ((".lzma" , ".xz" )):
@@ -57,68 +55,7 @@ def from_file(self, path, type_name="SensorView", max_index=-1, format_type=None
5755
5856 self .type_name = type_name
5957 self .format_type = format_type
60-
61- if self .format_type == "separated" :
62- # warnings.warn("The separated trace files will be completely removed in the near future. Please convert them to *.osi files with the converter in the main OSI repository.", PendingDeprecationWarning)
63- self .timestep_count = self .retrieve_message_offsets (max_index )
64- else :
65- self .timestep_count = self .retrieve_message ()
66-
67- def retrieve_message_offsets (self , max_index ):
68- """
69- Retrieve the offsets of all the messages of the scenario and store them
70- in the `message_offsets` attribute of the object
71-
72- It returns the number of discovered timesteps
73- """
74- scenario_size = get_size_from_file_stream (self .scenario_file )
75-
76- if max_index == - 1 :
77- max_index = float ("inf" )
78-
79- buffer_deque = deque (maxlen = 2 )
80-
81- self .message_offsets = [0 ]
82- eof = False
83-
84- self .scenario_file .seek (0 )
85-
86- while not eof and len (self .message_offsets ) <= max_index :
87- found = - 1 # SEP offset in buffer
88- buffer_deque .clear ()
89-
90- while found == - 1 and not eof :
91- new_read = self .scenario_file .read (BUFFER_SIZE )
92- buffer_deque .append (new_read )
93- buffer = b"" .join (buffer_deque )
94- found = buffer .find (SEPARATOR )
95- eof = len (new_read ) != BUFFER_SIZE
96-
97- buffer_offset = self .scenario_file .tell () - len (buffer )
98- message_offset = found + buffer_offset + SEPARATOR_LENGTH
99- self .message_offsets .append (message_offset )
100-
101- self .scenario_file .seek (message_offset )
102-
103- while eof and found != - 1 :
104- buffer = buffer [found + SEPARATOR_LENGTH :]
105- found = buffer .find (SEPARATOR )
106-
107- buffer_offset = scenario_size - len (buffer )
108-
109- message_offset = found + buffer_offset + SEPARATOR_LENGTH
110-
111- if message_offset >= scenario_size :
112- break
113- self .message_offsets .append (message_offset )
114-
115- if eof :
116- self .retrieved_scenario_size = scenario_size
117- else :
118- self .retrieved_scenario_size = self .message_offsets [- 1 ]
119- self .message_offsets .pop ()
120-
121- return len (self .message_offsets )
58+ self .timestep_count = self .retrieve_message ()
12259
12360 def retrieve_message (self ):
12461 scenario_size = get_size_from_file_stream (self .scenario_file )
@@ -180,42 +117,21 @@ def get_messages_in_index_range(self, begin, end):
180117 for abs_message_offset in self .message_offsets [begin :end ]
181118 ]
182119
183- if self .format_type == "separated" :
184- message_sequence_len = abs_last_offset - abs_first_offset - SEPARATOR_LENGTH
185- serialized_messages_extract = self .scenario_file .read (message_sequence_len )
186-
187- for rel_index , rel_message_offset in enumerate (rel_message_offsets ):
188- rel_begin = rel_message_offset
189- rel_end = (
190- rel_message_offsets [rel_index + 1 ] - SEPARATOR_LENGTH
191- if rel_index + 1 < len (rel_message_offsets )
192- else message_sequence_len
193- )
194- message = MESSAGES_TYPE [self .type_name ]()
195- serialized_message = serialized_messages_extract [rel_begin :rel_end ]
196- message .ParseFromString (serialized_message )
197- yield message
198-
199- elif self .format_type is None :
200- message_sequence_len = abs_last_offset - abs_first_offset
201- serialized_messages_extract = self .scenario_file .read (message_sequence_len )
202-
203- for rel_index , rel_message_offset in enumerate (rel_message_offsets ):
204- rel_begin = rel_message_offset + self ._int_length
205- rel_end = (
206- rel_message_offsets [rel_index + 1 ]
207- if rel_index + 1 < len (rel_message_offsets )
208- else message_sequence_len
209- )
210-
211- message = MESSAGES_TYPE [self .type_name ]()
212- serialized_message = serialized_messages_extract [rel_begin :rel_end ]
213- message .ParseFromString (serialized_message )
214- yield message
120+ message_sequence_len = abs_last_offset - abs_first_offset
121+ serialized_messages_extract = self .scenario_file .read (message_sequence_len )
215122
216- else :
217- self .scenario_file .close ()
218- raise Exception (f"The defined format { self .format_type } does not exist." )
123+ for rel_index , rel_message_offset in enumerate (rel_message_offsets ):
124+ rel_begin = rel_message_offset + self ._int_length
125+ rel_end = (
126+ rel_message_offsets [rel_index + 1 ]
127+ if rel_index + 1 < len (rel_message_offsets )
128+ else message_sequence_len
129+ )
130+
131+ message = MESSAGES_TYPE [self .type_name ]()
132+ serialized_message = serialized_messages_extract [rel_begin :rel_end ]
133+ message .ParseFromString (serialized_message )
134+ yield message
219135
220136 def make_readable (self , name , interval = None , index = None ):
221137 self .scenario_file .seek (0 )
0 commit comments