def get_flatted_representation(self, meta_data=MetaData()): """ Trans 1: A -> B Trans 2: B -> C Trans 3 Q-Start: C -> D Trans 4: C -> D Trans 5: C -> D Trans 6 Q-End: C -> D Trans 7: D -> E :returns: states = [A, B, C, D, D, D, D, E] transitions = [A -> B, B -> C, C -> D, D -> D, D -> D, D -> D, D -> E] """ transitions = [] states = [] flatted_meta_data = MetaData() last_res_s = None processing_queue = False for trans in self.transitions: src_s = trans.source_state_o res_s = trans.resulting_state_o if processing_queue: states.append(res_s) new_trans = Transition( trans.resulting_state, trans.resulting_state_o, trans.action, trans.interacted_widget, trans.interacted_widget_o, trans.resulting_state, trans.resulting_state_o, trans.start_time, trans.end_time, trans.successful, trans.exception, trans.data, trans.action_id, trans.has_result_screen, trans.custom) transitions.append(new_trans) # We copy the data of the sequence element within the original meta data and apply to the # flatted states and transition representation if self in meta_data.data: flatted_meta_data.put(res_s, meta_data.get(self)) flatted_meta_data.put(new_trans, meta_data.get(self)) else: if last_res_s != src_s: states.append(src_s) if self in meta_data.data: flatted_meta_data.put(src_s, meta_data.get(self)) states.append(res_s) transitions.append(trans) # We copy the data of the sequence element within the origin meta data and apply to the # flatted states and transition representation if self in meta_data.data: flatted_meta_data.put(res_s, meta_data.get(self)) flatted_meta_data.put(trans, meta_data.get(self)) last_res_s = res_s if droidmateutil.is_queue_start(trans): processing_queue = True if droidmateutil.is_queue_end(trans): processing_queue = False return states, transitions, flatted_meta_data