13
13
14
14
warnings .simplefilter ("default" )
15
15
16
- SEPARATOR = b"$$__$$"
17
- SEPARATOR_LENGTH = len (SEPARATOR )
18
16
BUFFER_SIZE = 1000000
19
17
20
18
@@ -47,7 +45,7 @@ def __init__(self, path=None, type_name="SensorView"):
47
45
self .retrieved_scenario_size = 0
48
46
self ._int_length = len (struct .pack ("<L" , 0 ))
49
47
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 ):
51
49
"""Import a scenario from a file"""
52
50
53
51
if path .lower ().endswith ((".lzma" , ".xz" )):
@@ -56,69 +54,7 @@ def from_file(self, path, type_name="SensorView", max_index=-1, format_type=None
56
54
self .scenario_file = open (path , "rb" )
57
55
58
56
self .type_name = type_name
59
- 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 )
57
+ self .timestep_count = self .retrieve_message ()
122
58
123
59
def retrieve_message (self ):
124
60
scenario_size = get_size_from_file_stream (self .scenario_file )
@@ -180,42 +116,21 @@ def get_messages_in_index_range(self, begin, end):
180
116
for abs_message_offset in self .message_offsets [begin :end ]
181
117
]
182
118
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
119
+ message_sequence_len = abs_last_offset - abs_first_offset
120
+ serialized_messages_extract = self .scenario_file .read (message_sequence_len )
215
121
216
- else :
217
- self .scenario_file .close ()
218
- raise Exception (f"The defined format { self .format_type } does not exist." )
122
+ for rel_index , rel_message_offset in enumerate (rel_message_offsets ):
123
+ rel_begin = rel_message_offset + self ._int_length
124
+ rel_end = (
125
+ rel_message_offsets [rel_index + 1 ]
126
+ if rel_index + 1 < len (rel_message_offsets )
127
+ else message_sequence_len
128
+ )
129
+
130
+ message = MESSAGES_TYPE [self .type_name ]()
131
+ serialized_message = serialized_messages_extract [rel_begin :rel_end ]
132
+ message .ParseFromString (serialized_message )
133
+ yield message
219
134
220
135
def make_readable (self , name , interval = None , index = None ):
221
136
self .scenario_file .seek (0 )
0 commit comments