def get_transition_map(TM, StateIndex, DropOutCatcher=None): if DropOutCatcher is None: DropOutCatcher = AnalyzerState(sm_index.get(), TransitionMap()) def get_door_id(Target): return DoorID(Target, 0) tm = TransitionMap.from_iterable(TM, get_door_id) return tm.relate_to_TargetByStateKeys(StateIndex, DropOutCatcher)
def __init__(self, SM, EngineType): assert EngineType in E_EngineTypes assert isinstance(SM, StateMachine) self.__acceptance_state_index_list = SM.get_acceptance_state_index_list() self.__init_state_index = SM.init_state_index self.__state_machine_id = SM.get_id() self.__engine_type = EngineType # (*) PathTrace database, Successor database self.__trace_db, self.__dangerous_positioning_state_set = track_analysis.do(SM) # (*) From/To Databases # # from_db: state_index --> states from which it is entered. # to_db: state_index --> states which it enters # from_db = defaultdict(set) to_db = defaultdict(set) for from_index, state in SM.states.iteritems(): to_db[from_index] = set(state.transitions().get_map().iterkeys()) for to_index in state.transitions().get_map().iterkeys(): from_db[to_index].add(from_index) self.__from_db = from_db self.__to_db = to_db # (*) Prepare AnalyzerState Objects self.__state_db = dict([(state_index, AnalyzerState(SM.states[state_index], state_index, state_index == SM.init_state_index, EngineType, from_db[state_index])) for state_index in self.__trace_db.iterkeys()]) if EngineType != E_EngineTypes.FORWARD: # BACKWARD_INPUT_POSITION, BACKWARD_PRE_CONTEXT: # # DropOut and Entry do not require any construction beyond what is # accomplished inside the constructor of 'AnalyzerState'. No positions # need to be stored and restored. self.__position_register_map = None self.__position_info_db = None return # (*) Positioning info: # # map: (state_index) --> (pattern_id) --> positioning info # self.__position_info_db = {} for state_index, trace_list in self.__trace_db.iteritems(): self.__position_info_db[state_index] = self.multi_path_positioning_analysis(trace_list) # (*) Drop Out Behavior # The PathTrace objects tell what to do at drop_out. From this, the # required entry actions of states can be derived. self.__require_acceptance_storage_list = [] self.__require_position_storage_list = [] for state_index, trace_list in self.__trace_db.iteritems(): state = self.__state_db[state_index] # trace_list: PathTrace objects for each path that guides to state. self.configure_drop_out(state, trace_list) # (*) Entry Behavior # Implement the required entry actions. self.configure_entries() # (*) Position Register Map (Used in 'optimizer.py') self.__position_register_map = position_register_map.do(self)
def get_AnalyzerState(StateIndex, TM): return AnalyzerState(StateIndex, TM)