Exemple #1
0
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)
Exemple #2
0
    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)
Exemple #3
0
def get_AnalyzerState(StateIndex, TM):
    return AnalyzerState(StateIndex, TM)