def __init__(self):

        transitions = [
            ['login', InteractionState.start, InteractionState.login],
            ['register', InteractionState.start, InteractionState.register],
            ['study', InteractionState.login, InteractionState.study],
            ['study', InteractionState.register, InteractionState.study],
            ['learnnew', InteractionState.study, InteractionState.learnnew],
            ['review', InteractionState.study, InteractionState.review],
            ['answer', InteractionState.learnnew, InteractionState.answer],
            ['answer', InteractionState.review, InteractionState.answer],
            ['skip', InteractionState.learnnew, InteractionState.skip],
            ['skip', InteractionState.review, InteractionState.skip],
            ['study', InteractionState.answer, InteractionState.study],
            ['study', InteractionState.skip, InteractionState.study],
            ['exit', InteractionState.login, InteractionState.start],
            ['exit', InteractionState.register, InteractionState.start],
            ['exit', InteractionState.start, InteractionState.finish],
            ['exit', InteractionState.study, InteractionState.finish]
            #    ['error', InteractionState.learnnew, InteractionState.study],
            #    ['error', InteractionState.review, InteractionState.study]
        ]

        Machine.__init__(self,
                         states=InteractionState,
                         initial=InteractionState.start,
                         transitions=transitions)
예제 #2
0
    def __init__(self):
        states = ['pre_trial', 'moving']

        pre_trial_t = {
            'source': 'pre_trial',
            'trigger': 'step',
            'conditions': 'wait_for_space',
            'after': ['reset_baseline', 'start_trial_countdown'],
            'dest': 'moving'
        }

        moving_t = {
            'source': 'moving',
            'prepare': [],
            'trigger': 'step',
            'conditions': 'time_elapsed',
            'after': ['start_trial_countdown'],
            'dest': 'pre_trial'
        }

        transitions = [pre_trial_t, moving_t]
        Machine.__init__(self,
                         states=states,
                         transitions=transitions,
                         initial='pre_trial')
    def __init__(self):
        # Define the different states of the state machine
        states = ['secure', 'takeoff', 'follow', 'take_picture', \
                  'land', 'reacquisition', 'emergency']

        # Define the transitions between states
        # FORMAT: ['trigger_event', 'source_state', 'destination_state']
        transitions = [
            ['takeoff_command', 'secure', 'takeoff'],
            ['takeoff_alt_reached', 'takeoff', 'follow'],
            ['picture_command', 'follow', 'take_picture'],
            ['picture_taken', 'take_picture', 'land'],
            ['land_alt_reached', 'land', 'secure'],
            [
                'emergency_condition',
                ['takeoff', 'follow', 'take_picture', 'land'], 'emergency'
            ], ['takeoff_tag_lost', 'takeoff', 'reacquisition'],
            ['follow_tag_lost', 'follow', 'reacquisition'],
            ['land_tag_lost', 'land', 'reacquisition'],
            ['take_picture_tag_lost', 'take_picture', 'reacquisition'],
            ['takeoff_tag_found', 'reacquisition', 'takeoff'],
            ['follow_tag_found', 'reacquisition', 'follow'],
            ['land_tag_found', 'reacquisition', 'land'],
            ['take_picture_tag_found', 'reacquisition', 'take_picture'],
            ['timed_out', 'reacquisition', 'emergency'],
            ['reset', 'emergency', 'secure']
        ]

        Machine.__init__(self, states=states, transitions=transitions, \
                         initial='secure')
예제 #4
0
파일: rule.py 프로젝트: niimailtah/Euphoria
 def __init__(self):
     self.states = [
         {'name': 'Begin'},         #
         {'name': 'End'},           #
         {'name': 'ChoosePage'},    #
         {'name': 'FirstPage'},     #
         {'name': 'SecondPage'},    #
         {'name': 'Error'}          #
     ]
     self.transitions = [
         {'trigger': 'step', 'source': 'Begin',      'dest': 'ChoosePage'},
         {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'FirstPage',  'conditions': ['verify', 'answerIsOne'], 'after': 'to_ChoosePage'},
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'Error',  'after': 'err'},
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'FirstPage',  'conditions': 'verify', 'after': 'to_ChoosePage'},
         {'trigger': 'step', 'source': 'FirstPage',  'dest': 'ChoosePage'},
         # {'trigger': 'step', 'source': 'FirstPage',  'dest': 'Error',  'after': 'err'},
         {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'SecondPage', 'conditions': ['verify', 'answerIsTwo'], 'after': 'to_ChoosePage'},
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'SecondPage', 'conditions': 'verify', 'after': 'to_ChoosePage'},
         {'trigger': 'step', 'source': 'SecondPage', 'dest': 'ChoosePage'},
         {'trigger': 'step', 'source': 'SecondPage', 'dest': 'Error',  'after': 'err'},
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'End',        'conditions': ['verify', 'answerIsThree']},
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'End',        'conditions': 'verify'}
         # {'trigger': 'step', 'source': 'ChoosePage', 'dest': 'End'},
         {'trigger': 'step', 'source': '*', 'dest': 'End'}
     ]
     Machine.__init__(self, states=self.states, transitions=self.transitions,
                      initial='Begin', send_event=True)
     self.pageNumber = None
     self.answer = None
    def __init__(self, fridge):
        states = ['pump_hot_cooling_mainplate',
                  'pump_warming',
                  'pump_warming_cooling_mainplate',
                  'cooling_pump',
                  'cold',
                  'heat_switch_cooling',
                  'system_warm',
                  'warming_up',
                  'manual',
                  'unknown'
                  ]

        Machine.__init__(self, states=states,
                         initial='manual')
        self.fridge = fridge
        self.config = fridge.config
        self.manual_mode = True
        self.time_last_transition = time.time()
        self.logger = None
        self.console = None
        # self.logger = logging.getLogger('fridge_machine')
        # self.logger.setLevel(logging.INFO)
        # self.logger.info('logging from fridge_machine')
        self.recycle_hour = self.config['recycle_time']
        self.recycle_period = \
            datetime.timedelta(days=self.config['recycle_period'])
        self.update_next_recycle_time()
예제 #6
0
    def __init__(self, acc):

        Machine.__init__(self, states=BicycleController.states, initial='nap')

        self.previous = self.state
        self.accelFileName = ''
        self.gpsFileName = ''
        self.accelDataBuffer = ''

        self.lat = 1.0
        self.lon = 1.0

        self.accel = acc

        self.turningRight = False
        self.turningLeft = False

        self.freshData = False

        self.add_transition('awaken', 'nap', 'commute')
        self.add_transition('slumber', 'commute', 'nap')
        self.add_transition('there', 'commute', 'ride', before='emailThere')
        self.add_transition('back_again',
                            'ride',
                            'commute',
                            before='emailBack')
예제 #7
0
파일: state.py 프로젝트: gamgi/powerline
    def __init__(self, bot):
        self.bot = bot
        self.language = 'EN'  # TODO
        states = [
            {'name': 'unregistered'},
            {'name': 'idle'},
            {'name': 'dummy_state'}]

        # Transitions
        transitions = [
            {'trigger': 'reset', 'source': '*', 'dest': 'unregistered'},
            {'trigger': 'dummy', 'source': '*', 'dest': 'dummy_state'}
        ]

        # Append to Machine
        try:
            self.transitions += transitions
        except BaseException:
            self.transitions = transitions
        try:
            self.states += states
        except BaseException:
            self.states = states
        Machine.__init__(
            self,
            states=self.states,
            transitions=self.transitions,
            send_event=True,
            initial='unregistered')
예제 #8
0
    def __init__(self):
        states = ['wait',
                  'in_trial',
                  'post_trial',
                  'done']
        
        transitions = [
            {'source': 'wait',
             'trigger': 'step',
             'conditions': 'check_for_space',
             'after': 'remove_text',
             'dest': 'in_trial'},

            {'source': 'in_trial',
             'trigger': 'step',
             'prepare': ['update_target_pos', 'update_target_color_and_count'],
             'conditions': 'samples_exhausted',
             'after': ['draw_time_on_target', 'start_countdown'],
             'dest': 'post_trial'},
            
            {'source': 'post_trial',
             'trigger': 'step',
             'conditions': 'time_elapsed',
             'dest': 'done'}
        ]
        Machine.__init__(self, states=states,
                         transitions=transitions, initial='wait')
예제 #9
0
파일: models.py 프로젝트: zxt50330/blogdemo
 def __init__(self, **kwargs):
     super(Comment, self).__init__(**kwargs)
     # 状态定义
     states = ['wait', 'pass', 'not pass']
     Machine.__init__(self, states=states, initial='wait')
     self.add_transition('review', 'wait', 'pass')
     self.status = 'wait'
예제 #10
0
 def __init__(self, name):
     self.name = name
     Machine.__init__(self,
                      states=ServerState.STATES,
                      initial=self.DEFAULT_STATE)
     self.define_state_paths()
     self.path = [self.DNE]
예제 #11
0
 def __init__(self):
     # States
     states = ["s"+str(i) for i in range(14)]
     transitions = splitter(["s0->s1",
                             "s1->s2",
                             "s2->s3",
                             "s3->s2",
                             "s3->s4",
                             "s3->s5",
                             "s4->s5",
                             "s5->s6",
                             "s5->s8",
                             "s6->s6",
                             "s6->s7",
                             "s8->s9",
                             "s0->s10",
                             "s10->s11",
                             "s11->s12",
                             "s7->s2",
                             "s7->s6",
                             "s7->s8",
                             "s7->s13",
                             "s13->s7"])
     Machine.__init__(self, states=states, initial='s0', transitions=transitions)
     
     self.to_s0()
예제 #12
0
    def __init__(self):
        self.running = True
        self.isEnabled = False
        self.isEjectEnabled = False
        self.isDispenseEnabled = False
        self.isOK = False

        # break beam sensor status
        self.break_beam_sensor = False
        # conveyor counter reset
        self.idxcount = 0

        #setup break beam sensor
        GPIO.setmode(GPIO.BCM)
        # GPIO 24 set up as input, pulled up to avoid false detection.
        GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)

        states = ['init', 'ready', 'start', 'stop', 'dispense', 'eject']
        Machine.__init__(self, states=states, initial='init')

        self.add_transition('trigger',
                            'init',
                            'ready',
                            conditions='is_enabled')
        self.add_transition('trigger', 'ready', 'start', conditions='is_hw_ok')
        self.add_transition('trigger',
                            'start',
                            'stop',
                            conditions='is_beam_broken')
        self.add_transition('trigger',
                            'stop',
                            'dispense',
                            conditions='is_dispense_ready')
        self.add_transition('trigger', 'dispense', 'eject')
        self.add_transition('trigger', 'eject', 'ready')
예제 #13
0
파일: fsm.py 프로젝트: anbasile/pmu
    def __init__(self):


        states=['chitchat',
                'requestingRide', 'offeringRide',
                'sendingLocation','sendingDestination',
                'waiting',
                'matchFound','nomatchFound',
                'completed']
            
        transitions = [
            { 'trigger': 'abort', 'source': '*', 'dest': 'chitchat'},
            { 'trigger': 'wantRide', 'source': 'chitchat', 'dest': 'requestingRide'},
            { 'trigger': 'offerRide', 'source': 'chitchat', 'dest': 'offeringRide'},
            { 'trigger': 'hasToSendLocation', 'source': 'requestingRide', 'dest': 'sendingLocation'},
            { 'trigger': 'hasToSendLocation', 'source': 'offeringRide', 'dest': 'sendingLocation' },
            { 'trigger': 'hasToSendDestination', 'source': 'sendingLocation', 'dest': 'sendingDestination' },
            { 'trigger': 'gotPosition', 'source': 'sendingDestination', 'dest': 'waiting'},
            { 'trigger': 'OK', 'source': 'waiting', 'dest': 'matchFound' },
            { 'trigger': 'sorry', 'source': 'waiting', 'dest': 'nomatchFound' },
            { 'trigger': 'done', 'source': 'matchFound', 'dest': 'completed' },
            { 'trigger': 'done', 'source': 'nomatchFound', 'dest': 'completed' },
            { 'trigger': 'end', 'source': 'completed', 'dest': 'chitchat' },
            ]
        Machine.__init__(self, states=states, transitions=transitions,auto_transitions=False,initial='chitchat')
예제 #14
0
    def __init__(self):
        state = ['Up', 'Failed', 'Maintenance', 'Blocked']
        Machine.__init__(self, states = state, initial='Up')
        self.add_transition('start', 'Up', 'Up', after = "startJob")
        self.add_transition('fail', 'Up', 'Failed', after = 'startFail')
        self.add_transition('repair', 'Failed', 'Up', after = 'rep')
        self.add_transition('maint', 'Up', 'Maintenance', after='startmaint')
        self.add_transition('maintcpl', 'Maintenance', 'Up')
        self.add_transition('interrep', 'Failed', 'Maintenance', after='startmaint')
        self.add_transition('block', 'Up', 'Blocked')
        self.add_transition('unblock', 'Blocked', 'Up')
        self.queue = SortedSet(key = lambda job: job.arrivalTime)
        self.numServers = 1
        self.busyServers = 0
        self.prevState = None
        Server._ids +=1
        self.serviceTimeDistribution = None
        self.name = "Server {}".format(Server._ids)
        self.In = None
        self.Out = None
        self.scheduler = None
        self.activejob = None
        self.interuptjob = None

        #debugging
        self.jobsarrived = 0
        self.jobsprocessed = 0
        self.numfailures = 0
        self.nummaint = 0
        self.onzin = 0
예제 #15
0
    def __init__(self, data_dic):
        if data_dic:
            self.states = data_dic['states']
            self.transitions = data_dic['transitions']
            self.audio_data = data_dic['audio_data']
            self.recognition_data = data_dic['recognition_data']
            self.tts_data = data_dic['tts_data']
            self.grammar_data = data_dic['grammar_data']
            self.trigger_data = data_dic['trigger_data']
            self.action_data = data_dic['action_data']

            self.local = data_dic['local_proc']
            self.player = TestVoice(local=self.local)
            # available only when deployed in a raspberry pi
            if app.config['RASPI']:
                self.traction = CholitaTraction()

        # init fsm part
            Machine.__init__(self,
                             states=self.states,
                             transitions=self.transitions,
                             initial='init',
                             ignore_invalid_triggers=True)
        else:
            pass
예제 #16
0
    def __init__(self, vehicle):
        self.cur_mode = None
        self.mode_pub = None
        self.mode_pub_rate = None
        self.prev_publish_time = None
        self.set_mode_service = None
        self.vehicle = vehicle

        modes = [
            Inactive(self.vehicle),
            RTD(self.vehicle),
            Autospray(self.vehicle)
        ]

        self.initial_state = modes[0].name
        Machine.__init__(self,
                         states=modes,
                         initial=self.initial_state,
                         after_state_change='set_new_mode')
        self.set_new_mode()
        self.setup_services()
        self.setup_publisher()
        # TODO could be included as a transition, however, this might be more
        #       resource friendly
        rospy.Timer(rospy.Duration(0.5), self.check_manual_mode_change)
예제 #17
0
    def __init__(self):
        self.running = True

        states = ['init', 'ready', 'start', 'stop', 'pickplace', 'eject']
        Machine.__init__(self, states=states, initial='init')

        self.add_transition('trigger', 'init', 'ready')
        self.add_transition('trigger',
                            'ready',
                            'start',
                            conditions='is_enabled')
        self.add_transition('trigger',
                            'start',
                            'stop',
                            conditions='is_beam_broken')
        self.add_transition('trigger',
                            'stop',
                            'pickplace',
                            conditions='is_pickplace_ready')
        self.add_transition('trigger', 'pickplace', 'eject')
        self.add_transition('trigger', 'eject', 'ready')

        self.state = states[0]
        self.iterator = cycle([1, 0, 0, 0, 0, 0, 0, 0, 0])

        self.count = 0  #trigger counter

        # define hardware objects at start
        self.conveyor = Conveyor_cmd()
        self.robot = Robot_cmd()

        # setup break beam sensor
        GPIO.setmode(GPIO.BCM)
        # GPIO 16 set up as input, pulled up to avoid false detection.
        GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
예제 #18
0
    def __init__(self, manifold):
        self.manifold = manifold
        self.gui = None

        # Record controller states
        states = [
            State(name='disconnected',  on_enter=['unbusyUI', 'updateUI']),
            State(name='connected',     on_enter=['unbusyUI', 'updateUI']),
            State(name='confirmed',     on_enter=['unbusyUI', 'updateUI']),
            State(name='ready',         on_enter=['unbusyUI', 'updateUI', 'prepRecording']),
            State(name='started',       on_enter=['unbusyUI', 'updateUI', 'startRecording']),
            State(name='paused',        on_enter=['unbusyUI', 'updateUI', 'pauseRecording'])
        ]

        # Record controller state transition definition
        transitions = [
            {'trigger': 'connect',    'source': 'disconnected', 'dest': 'connected'    , 'prepare': ['busyUI', 'connectToServers', 'pingServers'], 'conditions': 'connection_confirmed'},
            {'trigger': 'disconnect', 'source': 'connected',    'dest': 'disconnected' , 'prepare': ['busyUI'] },
            {'trigger': 'disconnect', 'source': 'paused',       'dest': 'disconnected' , 'prepare': ['busyUI'] },
            {'trigger': 'new',        'source': 'connected',    'dest': 'ready'        , 'prepare': ['busyUI'] },
            {'trigger': 'new',        'source': 'paused',       'dest': 'ready'        , 'prepare': ['busyUI'] },
            {'trigger': 'start',      'source': 'ready',        'dest': 'started'      , 'prepare': ['busyUI'] },
            {'trigger': 'pause',      'source': 'started',      'dest': 'paused'       , 'prepare': ['busyUI'] },
        ]

        # Record machine
        Machine.__init__(self,
                         states=states,
                         transitions=transitions,
                         initial='disconnected')
예제 #19
0
    def __init__(self, vehicle, states, transitions):
        """
        This class is used to create a state machine for modes
        :param vehicle: The vehicle object
        :param states: an array of State classes
        :param transitions: a double list of state transitions, [[source, dest, conditions, unless],..]
        """
        self.name = self.__class__.__name__
        self.cur_state = None
        self.transitions = transitions
        self.vehicle = vehicle

        # initialize the states
        activeStates = []
        for x in states:
            activeStates.append(x(vehicle))

        self.initial_state = activeStates[0].name

        # set a default trigger name for each transition
        if transitions is not None:
            for transition in transitions:
                transition.insert(0, 'attempt_transition')

        Machine.__init__(self,
                         states=activeStates,
                         transitions=self.transitions,
                         initial=self.initial_state,
                         after_state_change='set_current_state')
        self.set_current_state()
        super(Mode, self).__init__(self.name)  # initialize the State class
예제 #20
0
    def __init__(self):
        states = ['wait', 'in_trial', 'post_trial', 'done']

        transitions = [{
            'source': 'wait',
            'trigger': 'step',
            'conditions': 'check_for_space',
            'after': 'remove_text',
            'dest': 'in_trial'
        }, {
            'source':
            'in_trial',
            'trigger':
            'step',
            'prepare': ['update_target_pos', 'update_target_color_and_count'],
            'conditions':
            'samples_exhausted',
            'after': ['draw_time_on_target', 'start_countdown'],
            'dest':
            'post_trial'
        }, {
            'source': 'post_trial',
            'trigger': 'step',
            'conditions': 'time_elapsed',
            'dest': 'done'
        }]
        Machine.__init__(self,
                         states=states,
                         transitions=transitions,
                         initial='wait')
예제 #21
0
    def __init__(self):
        # Define the different states of the state machine
        states = ['secure', 'takeoff', 'follow', 'take_picture', \
                  'land', 'reacquisition', 'emergency']

        # Define the transitions between states
        # FORMAT: ['trigger_event', 'source_state', 'destination_state']
        transitions = [
            ['takeoff_command', 'secure', 'takeoff'],
            ['takeoff_alt_reached', 'takeoff', 'follow'],
            ['picture_command', 'follow', 'take_picture'],
            ['picture_taken', 'take_picture', 'land'],
            ['land_alt_reached', 'land', 'secure'],
            ['emergency_condition', ['takeoff', 'follow', 'take_picture', 'land'], 'emergency'],
            ['takeoff_tag_lost', 'takeoff', 'reacquisition'],
            ['follow_tag_lost', 'follow', 'reacquisition'],
            ['land_tag_lost', 'land', 'reacquisition'],
            ['take_picture_tag_lost', 'take_picture', 'reacquisition'],
            ['takeoff_tag_found', 'reacquisition', 'takeoff'],
            ['follow_tag_found', 'reacquisition', 'follow'],
            ['land_tag_found', 'reacquisition', 'land'],
            ['take_picture_tag_found', 'reacquisition', 'take_picture'],
            ['timed_out', 'reacquisition', 'emergency'],
            ['reset', 'emergency', 'secure']
        ]

        Machine.__init__(self, states=states, transitions=transitions, \
                         initial='secure')
예제 #22
0
    def __init__(self, current_time=Time('2018-01-01', scale='utc',
                                         location=P48_loc),
                 current_ha=0. * u.deg, current_dec=33.36 * u.deg,
                 current_domeaz=180. * u.deg,
                 current_filter_id=2, filters=FILTER_IDS,
                 current_zenith_seeing=2.0 * u.arcsec,
                 target_skycoord=None,
                 historical_observability_year=2015):

        # Define some states.
        states = ['ready', 'cant_observe',
                  'slewing', 'changing_filters', 'exposing']

        # define the transitions

        transitions = [
            {'trigger': 'start_slew', 'source': 'ready', 'dest': 'slewing',
                'after': ['process_slew', 'stop_slew'],
                'conditions': 'slew_allowed'},
            {'trigger': 'stop_slew', 'source': 'slewing', 'dest': 'ready'},
            # for now do not require filter changes to include a slew....
            {'trigger': 'start_filter_change', 'source': 'ready',
                'dest': 'changing_filters',
                'after': ['process_filter_change', 'stop_filter_change']},
            {'trigger': 'stop_filter_change', 'source': 'changing_filters',
                'dest': 'ready'},
            {'trigger': 'start_exposing', 'source': 'ready', 'dest': 'exposing',
                'after': ['process_exposure', 'stop_exposing']},
            {'trigger': 'stop_exposing', 'source': 'exposing', 'dest': 'ready'},
            # I would like to automatically set the cant_observe state from
            # start_exposing, but that doesn't seem to work.
            {'trigger': 'check_if_ready', 'source': ['ready', 'cant_observe'],
                'dest': 'ready', 'conditions': 'can_observe'},
            {'trigger': 'set_cant_observe', 'source': '*',
                'dest': 'cant_observe'}
        ]

        # Initialize the state machine.  syntax from
        # https://github.com/tyarkoni/transitions
        Machine.__init__(self, states=states,
                         transitions=transitions,
                         initial='ready')

        self.current_time = current_time
        self.current_ha = current_ha
        self.current_dec = current_dec
        self.current_domeaz = current_domeaz
        self.current_filter_id = current_filter_id
        self.filters = filters
        self.current_zenith_seeing = current_zenith_seeing
        self.target_skycoord = target_skycoord

        # historical observability
        self.historical_observability_year = historical_observability_year
        self.observability = PTFObservabilityDB()

        self.logger = logging.getLogger(__name__)
예제 #23
0
    def __init__(self, device=None, opts=None):
        self.__opts = opts
        self.__device = device
        self.__user_info = None
        self.__logout_timer = None
        self.__logger = ClientLogger.setup(opts)
        self.__tinkerAccessServerApi = TinkerAccessServerApi(opts)

        states = []
        for key, value in vars(State).items():
            if not key.startswith('__'):
                states.append(value)

        transitions = [
            {
                'source': [State.INITIALIZED],
                'trigger': Trigger.IDLE,
                'dest': State.IDLE
            },

            {
                'source': [State.IDLE],
                'trigger': Trigger.LOGIN,
                'dest': State.IN_USE,
                'conditions': ['is_authorized']
            },

            {
                'source': [State.IN_USE],
                'trigger': Trigger.LOGIN,
                'dest': State.IN_USE,
                'conditions': ['should_extend_current_session']
            },

            {
                'source': [State.IN_USE, State.IN_TRAINING],
                'trigger': Trigger.LOGOUT,
                'dest': State.IDLE
            },

            {
                'source': [State.IDLE],
                'trigger': Trigger.LOGOUT,
                'dest': State.IN_TRAINING,
                'conditions': ['is_waiting_for_training']
            },

            {
                'source': '*',
                'trigger': Trigger.TERMINATE,
                'dest': State.TERMINATED
            }
        ]

        Machine.__init__(self, queued=True, states=states,
                         transitions=transitions, initial=State.INITIALIZED, after_state_change='update_status')
예제 #24
0
파일: automaton.py 프로젝트: uds-lsv/human
 def __init__(self):
     self.annotations = {}
     self.for_loops = {}
     self.history: List[HistoryState] = []
     Machine.__init__(self,
                      initial='start',
                      auto_transitions=False,
                      before_state_change=[self.add_state_to_history])
     self.add_state(State(name='end', meta={}, on_enter=['write_to_db']))
     self.add_state(State(name='failure', meta={}, on_enter=['failure']))
 def __init__(self):
     Machine.__init__(
         self,
         states=self.states,
         initial='idle',
         transitions=self.transitions,
         after_state_change=self.set_state_start_time_and_update_flushing)
     self.state_start_time = time.time()
     self.pending_actions = deque([])
     self.flushing = False  # flush caused by timer
     self.hard_flushing = False  # flush forced by user input via web UI
예제 #26
0
 def __init__(self):
     self.states = [
         {'name': 'Begin'},         #
         {'name': 'End'},           #
         {'name': 'Error'}          #
     ]
     self.transitions = [
         {'trigger': 'step', 'source': 'Begin',      'dest': 'End'}
     ]
     Machine.__init__(self, states=self.states, transitions=self.transitions,
                      initial='Begin', send_event=True)
     self.answer = None
예제 #27
0
    def __init__(self, states, initial_state):
        # To store response from model to user.
        self.cache_response = []

        Machine.__init__(self,
                         states=states,
                         initial=initial_state,
                         ignore_invalid_triggers=False,
                         send_event=True,
                         auto_transitions=False)
        self.add_ordered_transitions(conditions=[self.static_check_new_state],
                                     prepare=[self.static_handle])
예제 #28
0
파일: Simulation.py 프로젝트: cescjf/EDL-Py
    def __init__(self, states, conditions, cycle=None, output=True):

        if len(states) != len(conditions):
            raise ValueError(
                "Number of states must equal number of conditions.")

        if cycle is None:
            if output:
                print "Simulation using default guidance cycle."
            cycle = Cycle()

        self.__conditions = conditions
        self.__states = states
        self.__output = output

        self.cycle = cycle  # The guidance cycle governing the simulation. Data logging and control updates occur every cycle.duration seconds while trigger checking happens 10x per cycle
        self.time = 0.0  # Current simulation time
        self.times = [
        ]  # Collection of times at which the state history is logged
        self.index = 0  # The index of the current phase
        self.sample = None  # Uncertainty sample to be run
        self.x = None  # Current state vector
        self.history = []  # Collection of state vectors
        self.u = None  # Previous controls
        self.control_history = []  # Collection of controls
        self.ie = [0]  # Indices of event transitions
        self.edlModel = None  # The dynamics and other functions associated with EDL
        self.fullEDL = None  # The type of edl model used - "ideal" with perfect knowledge and no bank angle constraints, or "full" truth/nav/constraints/filters etc
        self.triggerInput = None  # An input to triggers and controllers

        states.append('Complete')
        transitions = [{
            'trigger': 'advance',
            'source': states[i - 1],
            'dest': states[i],
            'conditions': 'integrate'
        } for i in range(1, len(states))]
        try:
            iSRP = states.index('SRP')
            transitions[iSRP - 1]['after'] = 'ignite'
        except:
            pass
        Machine.__init__(self,
                         model=None,
                         states=states,
                         initial=states[0],
                         transitions=transitions,
                         auto_transitions=False,
                         after_state_change='printState')
예제 #29
0
    def __init__(self, config):
        Machine.__init__(self,
                         states=self.states,
                         initial='awake',
                         queued=True)
        self.add_transition('check',
                            '*',
                            'asleep',
                            conditions='is_sleepy_time')
        self.add_transition('check', '*', 'awake', unless='is_sleepy_time')

        self.lock_command = config['lock command']
        self.sleepy_start = datetime.time(hour=config['time to sleep'])
        self.sleepy_end = datetime.time(hour=config['time to sleep'] +
                                        config['sleep length'])
예제 #30
0
파일: track.py 프로젝트: MirichST/patchcap
 def __init__(self, tracker, blob):
     Machine.__init__(self, states=BlobTracker.States, initial='hypothesis')
     self.blob = None
     self.age = 1
     self.tracker = tracker
     self.kalman = cv2.KalmanFilter(4, 2, 0)
     self.setup_kalman(blob.centroid)
     self._ocr = PlateDetector.Instance()
     r = lambda: random.randint(0,255)
     self.color = (r(),r(),r())
     self.id = BlobTracker.id
     BlobTracker.id += 1
     self.code = None
     self.best_image = None
     self._addblob(blob)
예제 #31
0
    def __init__(self, *args, **kwargs):
        Machine.__init__(self, *args, **kwargs)

        if len(self.states) < 2:
            raise ValueError('OrderedStateMachine must be defined at constuction time')

        def add_transition(_from,_to):
            self.add_transition('%s_to_%s' % (_from,_to), _from, _to)

        #auto define transitions between states
        state_names = self.states.keys()
        for states in pairwise(state_names):
            add_transition(*states)
        #add a transition from the last to the initial state
        add_transition(state_names[-1], self._initial)
        #add a transition from the last to the first non-initial state
        add_transition(state_names[-1],[s for s in state_names if s != self._initial][0])
예제 #32
0
 def __init__(self, table_view):
     self._data = {}
     self._table = table_view
     self._view = self._table.VIEW
     self._raw = ''
     self._lines = []
     self.states = ['row_column', 'title_data', 'regex_data',
                    'delimiter_data', 'exists_bool_data']
     self.transitions = [
         {'trigger': 'column_provided', 'source': '*', 'dest': 'row_column',
          'conditions': 'match_columns', 'before': 'check_header_bar',
          'after': 'parse_raw_columns'},
         {'trigger': 'check_next_row', 'source': 'row_column',
          'dest': 'row_column', 'conditions': 'prev_next_row_same_type',
          'after': 'parse_raw_columns'},
         {'trigger': 'title_provided', 'source': 'start',
          'dest': 'title_data', 'conditions':
              ['match_title', 'title_not_followed_by_columns'],
          'after': 'parse_title_data'},
         {'trigger': 'regex_provided', 'source': 'title_data',
          'dest': 'regex_data', 'conditions': ['match_title'],
          'before': 'check_header_bar', 'after': 'parse_using_regex'},
         {'trigger': 'delimiter_without_title', 'source': 'start', 'dest':
             'delimiter_data', 'after': 'parse_using_delimiter'},
         {'trigger': 'delimiter_with_title', 'source': ['start',
                                                        'delimiter_data'],
          'dest': 'delimiter_data',
          'conditions': ['match_title'], 'before': 'check_header_bar',
          'after': 'parse_using_delimiter'},
         {'trigger': 'regex_with_item', 'source': ['start', 'regex_data'],
          'dest': 'regex_data', 'after': 'parse_using_item_and_regex'},
         {'trigger': 'regex_parser', 'source': 'start',
          'dest': 'regex_data', 'after': 'parse_using_regex'},
         {'trigger': 'regex_parser', 'source': 'regex_data',
          'dest': 'regex_data', 'after': 'parse_using_regex'},
         {'trigger': 'regex_parser', 'source': 'row_column',
          'dest': 'regex_data', 'after': 'parse_using_regex'},
         {'trigger': 'exists_check', 'source': ['start', 'regex_data',
                                                'row_column'],
          'dest': 'exists_bool_data', 'after': 'parse_exists'},
         {'trigger': 'exists_check', 'source': 'title_data',
          'dest': 'exists_bool_data', 'after': 'parse_exists'},
     ]
     Machine.__init__(self, states=self.states, transitions=self.transitions,
                      initial='start', send_event=True)
예제 #33
0
    def __init__(self, *args, **kwargs):
        Machine.__init__(self, *args, **kwargs)

        if len(self.states) < 2:
            raise ValueError(
                'OrderedStateMachine must be defined at constuction time')

        def add_transition(_from, _to):
            self.add_transition('%s_to_%s' % (_from, _to), _from, _to)

        #auto define transitions between states
        state_names = self.states.keys()
        for states in pairwise(state_names):
            add_transition(*states)
        #add a transition from the last to the initial state
        add_transition(state_names[-1], self._initial)
        #add a transition from the last to the first non-initial state
        add_transition(state_names[-1],
                       [s for s in state_names if s != self._initial][0])
예제 #34
0
 def __init__(self, initialState, radio, useUSB=True, first=False):
     states = ["s" + str(i) for i in range(14)]
     transitions = splitter([
         "s0->s1", "s1->s2", "s2->s3", "s3->s2", "s3->s4", "s3->s5",
         "s4->s5", "s5->s6", "s5->s8", "s6->s6", "s6->s7", "s8->s9",
         "s0->s10", "s10->s11", "s12->s7"
         "s11->s12", "s7->s6", "s7->s2", "s7->s13", "s7->s8", "s13->s7"
     ])
     Machine.__init__(self,
                      states=states,
                      initial='s0',
                      transitions=transitions)
     self.stateFSM = initialState
     self.pipe_master_tx = self.pipe_slave_rx = PIPES[0]
     self.pipe_slave_tx = self.pipe_master_rx = PIPES[1]
     self.radio = radio
     # The FSM begins at state S0
     # First and useUSB is only used for testing by reading form the SD not from USB
     self.to_s0(useUSB, first)
예제 #35
0
    def __init__(self, service, maxqueue, mtbf, mttr, mInt, mTime, stoch):
        super().__init__()

        # initialize state machine
        state = ['Up', 'Failed', 'Maintenance', 'Blocked']
        Machine.__init__(self, states=state, initial='Up')
        self.add_transition('start', 'Up', 'Up', after='start_job')
        self.add_transition('fail', 'Up', 'Failed', after='start_fail')
        self.add_transition('repair', 'Failed', 'Up', after='rep')
        self.add_transition('maintain', 'Up', 'Maintenance', after='start_maint')
        self.add_transition('maintcpl', 'Maintenance', 'Up', after='stop_maint')
        self.add_transition('interrep', 'Failed', 'Maintenance', after='start_maint')
        self.add_transition('block', 'Up', 'Blocked')
        self.add_transition('unblock', 'Blocked', 'Up')

        # initialize all kind of variables
        self.queue = Queue(maxqueue)
        self.numServers = 1
        self.busyServers = 0
        self.mtbf = mtbf
        self.mttr = mttr
        self.maintInt = mInt
        self.maintTime = mTime
        self.serviceTimeDistribution = service
        self.blocked = False
        Server.stochastic = stoch

        Server._ids += 1
        self.name = 'Server {}'.format(Server._ids)
        self.In, self.Out, self.scheduler, self.activejob, self.interuptjob = None, None, None, None, None
        self.blocked = False

        # logging variables
        self.jobsarrived = 0
        self.jobsprocessed = 0
        self.jobsprocessed = 0
        self.numfailures = 0
        self.numMaint = 0
        self.ctime = []
        self.logging = []
        self.idletime = 0
        self.previdle = 0
        self.startidle = 0
예제 #36
0
    def __init__(self):
        """
        @Type 0
        E[第一次到max Lv.] = 8
        分佈:左低右高,分散
        機器人種類:溫和。偶爾性情不定。
        
        @Type 1        
        E[第一次到max Lv.] = 8
        分佈:左低右高,集中
        機器人種類:溫和。很有規則的機器人,生氣的時機都差不多
        """
        self.T = self.Trans[1]

        self.states = [{'name': '0'}]
        Machine.__init__(self, states=self.states, initial='0')
        other_states = list(map(str, range(1, self.T.shape[0])))
        self.add_states(other_states)
        self.max_lv = self.T.shape[0] - 1
    def __init__(self, conf):
        self.conf = conf
        self.mystery_state = Light.UNKN
        states = [Light.ON, Light.OFF, Light.BAT]

        # XXX this causes a weirdo hole and indeterminite startup if run in the off_hour hour I guess, I don't super care as verify_state will catch things
        t = self._add_times_to_schedule(self.conf['schedule'])
        #logging.info(f"__init__ t: {t}") # to debug that weirdo hole
        now = datetime.now()
        if (t['morn_twil']['time'] < now and now < t['post_sunl']['time']) or (t['aft_twil']['time'] < now and now < t['off_time']['time']):
            initial_state = Light.ON
        else:
            initial_state = Light.OFF

        Machine.__init__(self, states=states, initial=initial_state)
        SwitchScheduler.__init__(self, point=self.conf['home'])
        SwitchMate.__init__(self, self.conf)

        self.add_transition('on', Light.OFF, Light.ON, before='on_state', after='check_state')
        self.add_transition('off', Light.ON, Light.OFF, before='off_state', after='check_state')
예제 #38
0
    def __init__(self, name, high_limit_pin, low_limit_pin, level_limit_pin):
        self.name = name
        self.running = True

        #gui controlled
        self.isEnabled = False

        #tof distance sensor data
        self.distance = 0
        self.high_limit = 0
        self.ready_limit = 100
        self.low_limit = 600

        #hardware pin assignments
        self.high_level_pin = high_limit_pin  #65
        self.low_level_pin = low_limit_pin  #66
        self.level_limit_pin = level_limit_pin  #81

        self.stepper = stepper.Stepper("Bin-1", 0x60, 1, 65, 66,
                                       81)  # generic stepper object

        states = ['init', 'start', 'up', 'down']
        Machine.__init__(self, states=states, initial='init')

        self.add_transition('trigger',
                            'init',
                            'start',
                            conditions='is_enabled')
        self.add_transition('trigger', 'start', 'down')
        self.add_transition('trigger', 'down', 'down',
                            unless='is_low_limit')  #loop
        self.add_transition('trigger', 'down', 'up', conditions='is_low_limit')
        self.add_transition('trigger', 'up', 'up',
                            unless='is_high_level')  #loop is high_level
        self.add_transition(
            'trigger', 'up', 'down',
            conditions='is_high_level')  #same as loop condittion
        self.add_transition('trigger',
                            'up',
                            'down',
                            conditions='is_high_limit')
예제 #39
0
    def __init__(self):
        self.running = True
        self.isEnabled = False

        # define hardware objects at start

        #define FSM states with a state timeout, go to next state when timeout is reached
        states = ['dummy', 'init', 'ready', 'start', 'stop']

        Machine.__init__(self, states=states, initial='dummy')

        self.add_transition(
            'trigger', 'dummy', 'init'
        )  #dummy on-enter callback will not fire when a Machine is first initialized.
        self.add_transition('trigger', 'init', 'ready', conditions='always_on')
        self.add_transition('trigger',
                            'ready',
                            'start',
                            conditions='always_on')
        self.add_transition('trigger', 'start', 'stop', conditions='always_on')
        self.add_transition('trigger', 'stop', 'ready', conditions='alwyas_on')
예제 #40
0
    def __init__(self):
        self.running = True
        self.isEnabled = False
        self.isEjectEnabled = False
        self.isDispenseEnabled = False

        states = ['init', 'start', 'stop', 'dispense', 'eject']
        Machine.__init__(self, states=states, initial='init')

        self.add_transition('trigger',
                            'init',
                            'start',
                            conditions='is_enabled')
        self.add_transition('trigger',
                            'start',
                            'stop',
                            conditions='is_beam_broken')
        self.add_transition('trigger',
                            'stop',
                            'dispense',
                            conditions='is_ready')
        self.add_transition('trigger', 'dispense', 'eject')
        self.add_transition('trigger', 'eject', 'start')
예제 #41
0
    def __init__(self, parent, arenaMain):
        super(OMRController, self).__init__(parent, arenaMain)

        print type(parent)

        #calibration
        self.arenaCamCorners = None
        self.arenaMidLine = []
        self.arenaSide1Sign = 1
        self.arenaProjCorners = []
        self.fishImg = None #image of fish

        #tracking
        self.arenaCvMask = None   

        #state
        self.mutex = Lock()
        states = ['off', 'between_session', 'omr_to_s1', 'no_omr_post_s1', 'omr_to_s2', 'no_omr_post_s2'] # off between L-N-R-N-L-N-R between LNRNLNR between off
        Machine.__init__(self, states=states, initial='off', after_state_change='update_state_data')

        self.add_transition('begin', 'off', 'between_session', conditions='isReadyToStart')
        self.add_transition('start_session', 'between_session', 'omr_to_s1')
        self.add_transition('start_omr', 'no_omr_post_s1', 'omr_to_s2')
        self.add_transition('start_omr', 'no_omr_post_s2', 'omr_to_s1')
        self.add_transition('stop_omr', 'omr_to_s1', 'no_omr_post_s1')
        self.add_transition('stop_omr', 'omr_to_s2', 'no_omr_post_s2')
        self.add_transition('stop_session', ['omr_to_s1', 'omr_to_s2', 'no_omr_post_s1', 'no_omr_post_s2'], 'between_session')
        self.add_transition('quit', '*', 'off')

        self.fishPosUpdate = False
        self.fishPos = (0,0)
        self.fishPosBuffer = []
        self.fishPosBufferT = []
        self.currCvFrame = None
        #Note additional state variable will be created during state transitions (like nextStateTime)

        #data results
        self.arenaData = None
        self.fishSize = None

        #init UI
        #arena info group box
        self.arenaGroup = QtGui.QGroupBox(self)
        self.arenaGroup.setTitle('Arena Info')
        self.arenaLayout = QtGui.QGridLayout()
        self.arenaLayout.setHorizontalSpacing(3)
        self.arenaLayout.setVerticalSpacing(3)
        self.camCalibButton = QtGui.QPushButton('Set Cam Position')
        self.camCalibButton.setMaximumWidth(150)
        self.camCalibButton.clicked.connect(self.getArenaCameraPosition)
        self.resetCamCorners = None
        self.projGroup = QtGui.QGroupBox(self.arenaGroup)
        self.projGroup.setTitle('Projector Position')
        self.projLayout = QtGui.QGridLayout(self.projGroup)
        self.projLayout.setHorizontalSpacing(3)
        self.projLayout.setVerticalSpacing(3)
        self.projCalibButton = QtGui.QPushButton('Calibrate Projector Position')
        self.projCalibButton.setCheckable(True)
        self.projCalibButton.clicked.connect(self.projectorPositionChanged)
        self.projLayout.addWidget(self.projCalibButton,0,0,1,6)
        self.projPosL = QtGui.QLabel('Pos')
        self.projX = QtGui.QSpinBox()
        self.projX.setRange(0,1000)
        self.projX.setValue(250)
        self.projX.setMaximumWidth(50)
        self.projY = QtGui.QSpinBox()
        self.projY.setRange(0,1000)
        self.projY.setValue(250)
        self.projY.setMaximumWidth(50)
        self.projLayout.addWidget(self.projPosL,1,0)
        self.projLayout.addWidget(self.projX,1,1)
        self.projLayout.addWidget(self.projY,1,2)
        self.projX.valueChanged.connect(self.projectorPositionChanged)
        self.projY.valueChanged.connect(self.projectorPositionChanged)
        self.projSizeL = QtGui.QLabel('Size W,L')
        self.projWid = QtGui.QSpinBox()
        self.projWid.setRange(0,1000)
        self.projWid.setValue(115)
        self.projWid.setMaximumWidth(50)
        self.projLen = QtGui.QSpinBox()
        self.projLen.setRange(0,1000)
        self.projLen.setValue(220)
        self.projLen.setMaximumWidth(50)
        self.projLen.valueChanged.connect(self.projectorPositionChanged)
        self.projWid.valueChanged.connect(self.projectorPositionChanged)
        self.projLayout.addWidget(self.projSizeL,2,0)
        self.projLayout.addWidget(self.projWid,2,1)
        self.projLayout.addWidget(self.projLen,2,2)
        self.projRotL = QtGui.QLabel('Rotation')
        self.projRot = QtGui.QSpinBox()
        self.projRot.setRange(0,360)
        self.projRot.setValue(270)
        self.projRot.setMaximumWidth(50)
        self.projLayout.addWidget(self.projRotL,3,0)
        self.projLayout.addWidget(self.projRot,3,1)
        self.projRot.valueChanged.connect(self.projectorPositionChanged)
        
        self.tankLength = LabeledSpinBox(None, 'Tank Len (mm)', 0,100,46,60)
        self.projLayout.addWidget(self.tankLength, 4,0,1,2)
        self.tankWidth = LabeledSpinBox(None, 'Tank Wid (mm)', 0,100,21,60)
        self.projLayout.addWidget(self.tankWidth, 4,2,1,2)

        self.projLayout.setColumnStretch(6,1)
        self.projGroup.setLayout(self.projLayout)
        self.arenaLayout.addWidget(self.camCalibButton, 0,0)
        self.arenaLayout.addWidget(self.projGroup,1,0)
        self.arenaLayout.setColumnStretch(1,1)
        self.arenaGroup.setLayout(self.arenaLayout)

        #tracking group box
        self.trackWidget = FishTrackerWidget(self, self.arenaMain.ftDisp)

        #start button for individual tank
        self.startButton = QtGui.QPushButton('Start')
        self.startButton.setMaximumWidth(150)
        self.startButton.clicked.connect(self.startstop)
        
        #whether to save movie  
        self.paramSaveMovie = QtGui.QCheckBox('Save Movie')
            
        #experimental parameters groupbox
        self.paramGroup = QtGui.QGroupBox()
        self.paramGroup.setTitle('Exprimental Parameters')
        self.paramLayout = QtGui.QGridLayout()
        self.paramLayout.setHorizontalSpacing(2)
        self.paramLayout.setVerticalSpacing(2)

        #high level flow - Between - OMR Session ( OMRS1 - pause - OMRS2
        self.paramNumSession = LabeledSpinBox(None, 'Number of Sessions', 0, 200, 20, 60) #Number of Sessions (a cluster of OMR tests)
        self.paramLayout.addWidget(self.paramNumSession, 1,0,1,2) 
        self.paramBetween = LabeledSpinBox(None, 'Between Sessions (s)', 0, 1200, 300, 60)
        self.paramLayout.addWidget(self.paramBetween, 1,2,1,2)
        self.paramOMRPerSession = LabeledSpinBox(None,'#OMR Per Session', 0 ,10,4,60) # Number of OMR tests per session
        self.paramLayout.addWidget(self.paramOMRPerSession, 2,0,1,2)        
        self.paramOMRDuration = LabeledSpinBox(None,'OMR Duration (s)',0,60,12,60) #duration of each OMR tests
        self.paramLayout.addWidget(self.paramOMRDuration, 2,2,1,2)
        self.paramOMRInterval = LabeledSpinBox(None,'OMR Interval (s)',0,60 ,3 ,60) #time between OMR tests
        self.paramLayout.addWidget(self.paramOMRInterval,3,0,1,2)
 
        #Vision properities of OMR
        self.paramOMRPeriod = LabeledSpinBox(None,'OMR Grating Period (mm)',0,50,5,60) #spacing between grating bars
        self.paramLayout.addWidget(self.paramOMRPeriod,4,0,1,2)
        self.paramOMRDutyCycle = LabeledSpinBox(None, 'OMR DutyCycle %',0,100,50,60) #width of grating bars
        self.paramLayout.addWidget(self.paramOMRDutyCycle,4,2,1,2)
        self.paramOMRVelocity = LabeledSpinBox(None, 'OMR Speed (mm/s)',0,50,5,60) #velocity of moving gratings.
        self.paramLayout.addWidget(self.paramOMRVelocity,5,0,1,2)

        (self.paramColorNeutral,self.labelColorNeutral) = self.getColorComboBox('Neutral', 0)
        self.paramLayout.addWidget(self.paramColorNeutral,6,0)
        self.paramLayout.addWidget(self.labelColorNeutral,6,1)
        (self.paramColorOMR,self.labelColorOMR) = self.getColorComboBox('OMR', 5)
        self.paramLayout.addWidget(self.paramColorOMR,6,2)
        self.paramLayout.addWidget(self.labelColorOMR,6,3)
        self.paramGroup.setLayout(self.paramLayout)

        #Experimental info group
        self.infoGroup = QtGui.QGroupBox()
        self.infoGroup.setTitle('Experiment Info')
        self.infoLayout = QtGui.QGridLayout()
        self.infoLayout.setHorizontalSpacing(3)
        self.infoLayout.setVerticalSpacing(3)

        self.labelDir = QtGui.QLabel('Dir: ')
        self.infoDir = PathSelectorWidget(browseCaption='Experimental Data Directory', default=os.path.expanduser('~/data/test'))
        self.infoLayout.addWidget(self.labelDir,0,0)
        self.infoLayout.addWidget(self.infoDir,0,1)

        self.labelDOB = QtGui.QLabel('DOB: ')
        self.infoDOB = QtGui.QDateEdit(QtCore.QDate.currentDate())
        self.infoLayout.addWidget(self.labelDOB,1,0)
        self.infoLayout.addWidget(self.infoDOB,1,1)

        self.labelType = QtGui.QLabel('Line: ')
        self.infoType = QtGui.QLineEdit('Nacre')
        self.infoLayout.addWidget(self.labelType,2,0)
        self.infoLayout.addWidget(self.infoType,2,1)     

        self.infoFish = QtGui.QPushButton('Snap Fish Image')
        self.infoFish.clicked.connect(self.getFishSize)
        self.infoLayout.addWidget(self.infoFish,3,0,1,2)

        self.infoGroup.setLayout(self.infoLayout)

        self.settingsLayout = QtGui.QGridLayout()
        self.settingsLayout.addWidget(self.arenaGroup,0,0,1,2)
        self.settingsLayout.addWidget(self.trackWidget,1,0,1,2)
        self.settingsLayout.addWidget(self.infoGroup,2,0,1,2)
        self.settingsLayout.addWidget(self.startButton,3,0,1,1)
        self.settingsLayout.addWidget(self.paramSaveMovie,3,1,1,1)
        self.settingsLayout.addWidget(self.paramGroup,4,0,1,2)
        self.setLayout(self.settingsLayout)

        #HACK Couldn't quick initialize arena lcation until after frist image arrives, so stuck in onNewFrame

        #initialize projector
        self.projectorPositionChanged()
        self.t = 0
예제 #42
0
    def __init__(self, states, initial='A'):

        self.state = None

        Machine.__init__(self, states=states, initial=initial)
예제 #43
0
파일: wiper.py 프로젝트: alvarojarrin/wiper
    def __init__(self, opts):
        self.cimc = opts['cimc_ip']
        self.cimc_username = opts['cimc_username']
        self.cimc_password = opts['cimc_password']
        self.apic_password = opts['apic_admin_password']
        if opts['verbose'] == "True":
            self.verbose = True
        else:
            self.verbose = False
        if opts['quiet'] == 'True':
            self.quiet = True
        else:
            self.quiet = False
        if opts['simulator'] == True:
            self.simulator = True
        else:
            self.simulator = False
        self.fabric_name = opts['fabric_name']
        self.num_controllers = opts['number_of_controllers']
        self.controller_id = opts['controller_number']
        self.controller_name = opts['controller_name']
        self.tep_address_pool = opts['tep_address_pool']
        self.infra_vlan_id = opts['infra_vlan_id']
        self.bd_mc_address_pool = opts['bd_mc_addresses']
        self.oob_ip_addr = opts['oob_ip_address']
        self.oob_def_gw = opts['oob_default_gateway']
        self.int_speed = opts['int_speed']
        self.strong_passwd = opts['strong_passwords']
        # Used to execute commands in CIMC
        self.cimc_client = None
        # Used to do things on the APIC, has to go through CIMC first of course
        self.apic_client = None
        self.cimc_interact = None
        self.provided_fabric_name = False
        self.states = [
            # Start and initialization states
            {'name': 'start'},
            {'name': 'connect_cimc', 'on_enter': 'on_enter_connect_cimc'},
            # CIMC related states
            {'name': 'check_sol', 'on_enter': 'on_enter_check_sol'},
            {'name': 'configure_sol', 'on_enter': 'on_enter_configure_sol'},
            {'name': 'disconnect_cimc', 'on_enter': 'on_enter_disconnect_cimc'},
            {'name': 'cycle_host', 'on_enter': 'on_enter_cycle_host'},
            # APIC specific initialization states
            {'name': 'connect_apic', 'on_enter': 'on_enter_connect_apic'},
            {'name': 'logout_apic', 'on_enter': 'on_enter_logout_apic'},
            {'name': 'login_apic', 'on_enter': 'on_enter_login_apic'},
            {'name': 'password_login_apic', 'on_enter': 'on_enter_password_login_apic'},
            {'name': 'eraseconfig', 'on_enter': 'on_enter_eraseconfig'},
            # Setup script related states
            {'name': 'press_any_key', 'on_enter': 'on_enter_press_any_key'},
            {'name': 'provide_fabric_name', 'on_enter': 'on_enter_provide_fabric_name'},
            {'name': 'provide_number_ctrlrs', 'on_enter': 'on_enter_provide_number_ctrlrs'},
            {'name': 'provide_ctrlr_id', 'on_enter': 'on_enter_provide_ctrlr_id'},
            {'name': 'provide_ctrlr_name', 'on_enter': 'on_enter_provide_ctrlr_name'},
            {'name': 'provide_tep_addr_pool', 'on_enter': 'on_enter_provide_tep_addr_pool'},
            {'name': 'provide_infra_vlan_id', 'on_enter': 'on_enter_provide_infra_vlan_id'},
            {'name': 'provide_bd_mc_addr_pool', 'on_enter': 'on_enter_provide_bd_mc_addr_pool'},
            {'name': 'provide_oob_address', 'on_enter': 'on_enter_provide_oob_address'},
            {'name': 'provide_oob_def_gw', 'on_enter': 'on_enter_provide_oob_def_gw'},
            {'name': 'provide_int_speed', 'on_enter': 'on_enter_provide_int_speed'},
            {'name': 'provide_strong_passwd', 'on_enter': 'on_enter_provide_strong_passwd'},
            {'name': 'provide_admin_passwd', 'on_enter': 'on_enter_provide_admin_passwd'},
            {'name': 'provide_modify_config', 'on_enter': 'on_enter_provide_modify_config'},
        ]
        Machine.__init__(self, states=self.states, initial='start')

        self.add_transition(trigger='start', source='start', dest='connect_cimc')

        self.add_transition(trigger='cimc_prompt_detected',
                            source='connect_cimc',
                            dest='check_sol')

        self.add_transition(trigger='sol_not_configured',
                            source='check_sol',
                            dest='configure_sol')

        self.add_transition(trigger='sol_config_committed',
                            source='configure_sol',
                            dest='check_sol')

        self.add_transition(trigger='cycle_host',
                            source='connect_apic',
                            dest='cycle_host')

        # We can enter the connect_apic state from multiple sources, this states
        # entry callback will need to be smarter than the average bear.
        self.add_transition(trigger='connect_to_apic',
                            source=['check_sol', 'logout_apic'],
                            dest='connect_apic')

        self.add_transition(trigger='apic_prompt_detected',
                            source='connect_apic',
                            dest='logout_apic')

        self.add_transition(trigger='apic_login_detected',
                            source=['connect_apic', 'logout_apic', 'password_login_apic',
                                    'cycle_host'],
                            dest='login_apic')

        self.add_transition(trigger='apic_password_detected',
                            source=['connect_apic', 'cycle_host'],
                            dest='password_login_apic')

        self.add_transition(trigger='apic_prompt_detected',
                            source=['login_apic', 'cycle_host'],
                            dest='eraseconfig')

        self.add_transition(trigger='press_any_key',
                            source=['connect_apic', 'eraseconfig', 'cycle_host'],
                            dest='press_any_key')

        # This transition can happen from connect_apic or provide_modify_config
        self.add_transition(trigger='enter_fabric_name',
                            source=['connect_apic', 'provide_modify_config', 'press_any_key'],
                            dest='provide_fabric_name')

        self.add_transition(trigger='enter_num_ctrlrs',
                            source=['connect_apic', 'provide_fabric_name'],
                            dest='provide_number_ctrlrs')

        self.add_transition(trigger='enter_ctrlr_id',
                            source=['connect_apic', 'provide_number_ctrlrs'],
                            dest='provide_ctrlr_id')

        self.add_transition(trigger='enter_ctrlr_name',
                            source=['connect_apic', 'provide_ctrlr_id'],
                            dest='provide_ctrlr_name')

        self.add_transition(trigger='enter_tep_addr_pool',
                            source=['connect_apic', 'provide_ctrlr_name'],
                            dest='provide_tep_addr_pool')

        self.add_transition(trigger='enter_infra_vlan_id',
                            source=['connect_apic', 'provide_tep_addr_pool'],
                            dest='provide_infra_vlan_id')

        self.add_transition(trigger='enter_bd_mc_addr_pool',
                            source=['connect_apic', 'provide_infra_vlan_id'],
                            dest='provide_bd_mc_addr_pool')

        self.add_transition(trigger='enter_oob_ip_addr',
                            source=['connect_apic',
                                    'provide_bd_mc_addr_pool',
                                    'provide_infra_vlan_id'],
                            dest='provide_oob_address')

        self.add_transition(trigger='enter_oob_def_gw',
                            source=['connect_apic', 'provide_oob_address'],
                            dest='provide_oob_def_gw')

        self.add_transition(trigger='enter_int_speed',
                            source=['connect_apic', 'provide_oob_def_gw'],
                            dest='provide_int_speed')

        self.add_transition(trigger='enter_strong_passwd',
                            source=['connect_apic', 'provide_int_speed'],
                            dest='provide_strong_passwd')

        self.add_transition(trigger='enter_admin_passwd',
                            source=['connect_apic', 'provide_strong_passwd'],
                            dest='provide_admin_passwd')

        self.add_transition(trigger='reenter_admin_passwd',
                            source=['connect_apic', 'provide_admin_passwd'],
                            dest='provide_admin_passwd')

        self.add_transition(trigger='enter_edit_cfg',
                            source=['connect_apic', 'provide_admin_passwd', 'provide_int_speed'],
                            dest='provide_modify_config')

        self.add_transition(trigger='restart_setup',
                            source='provide_modify_config',
                            dest='provide_fabric_name')
예제 #44
0
 def __init__(self):
     self.states = [
         {'name': 'Begin'},             #
         {'name': 'Node1'},             # after VizirMessage before CaravanProfit
         {'name': 'Node2'},             # after CaravanProfit before Crisis/Exchange
         {'name': 'Node3'},             # after Crisis/Exchange before CaravanSupply
         {'name': 'Node4'},             # after CaravanSupply before CaravanRob
         {'name': 'Node5'},             # after CaravanRob before Metropolitan
         {'name': 'Node6'},             # after Metropolitan before War
         {'name': 'Node7'},             # after War before VizirCatch
         {'name': 'Node8'},             # after VizirCatch before Inheritance
         {'name': 'Node9'},             # after Inheritance before ...
         {'name': 'End'},               #
         {'name': 'Intro'},             #
         {'name': 'MainMenu'},          #
         {'name': 'Rules'},             #
         {'name': 'NewGame'},           #
         {'name': 'StartTurn'},         #
         {'name': 'PrintState'},        #
         {'name': 'VizirMessage'},      #
         {'name': 'CaravanProfit'},     #
         {'name': 'Crisis'},            #
         {'name': 'Exchange'},          #
         {'name': 'CaravanSupply'},     #
         {'name': 'CaravanRob'},        #
         {'name': 'Metropolitan'},      #
         {'name': 'War'},               #
         {'name': 'VizirCatch'},        #
         {'name': 'Inheritance'},       #
         {'name': 'ChildBirthDay'},     #
         {'name': 'Marriage'},          #
         {'name': 'WifeDead'},          #
         {'name': 'WifeIn'},            #
         {'name': 'Sickness'},          #
         {'name': 'GiveGrain'},         #
         {'name': 'MakeTurn'},          #
         {'name': 'NextYear'},          #
         {'name': 'NYParty'},           #
         {'name': 'EndTurn'},           #
         {'name': 'EndGame'}            #
     ]
     self.transitions = [
         {'trigger': 'step', 'source': 'Begin', 'dest': 'Intro'},
         {'trigger': 'step', 'source': 'Intro', 'dest': 'MainMenu'},
         {'trigger': 'step', 'source': 'MainMenu', 'dest': 'Rules', 'conditions': 'answerIsTwo'},
         {'trigger': 'step', 'source': 'Rules', 'dest': 'MainMenu'},
         {'trigger': 'step', 'source': 'MainMenu', 'dest': 'End', 'conditions': 'answerIsThree'},
         {'trigger': 'step', 'source': 'MainMenu', 'dest': 'NewGame', 'conditions': 'answerIsOne'},
         {'trigger': 'step', 'source': 'NewGame', 'dest': 'PrintState'},
         {'trigger': 'step', 'source': 'PrintState', 'dest': 'VizirMessage', 'unless': 'isFirstYear'},
         {'trigger': 'step', 'source': 'PrintState', 'dest': 'Node1'},
         {'trigger': 'step', 'source': 'VizirMessage', 'dest': 'Node1'},
         {'trigger': 'step', 'source': 'Node1', 'dest': 'CaravanProfit', 'conditions': 'is5YearCaravan'},
         {'trigger': 'step', 'source': 'Node1', 'dest': 'Node2'},
         {'trigger': 'step', 'source': 'CaravanProfit', 'dest': 'Node2', 'before': 'update_random'},
         {'trigger': 'step', 'source': 'Node2', 'dest': 'Crisis', 'conditions': 'isCrisis'},
         {'trigger': 'step', 'source': 'Crisis', 'dest': 'Node3'},
         {'trigger': 'step', 'source': 'Node2', 'dest': 'Exchange', 'unless': 'isCrisis'},
         {'trigger': 'step', 'source': 'Exchange', 'dest': 'Node3'},
         {'trigger': 'step', 'source': 'Node3', 'dest': 'CaravanSupply', 'conditions': 'is0YearCaravan'},
         {'trigger': 'step', 'source': 'Node3', 'dest': 'Node4'},
         {'trigger': 'step', 'source': 'CaravanSupply', 'dest': 'Node4'},
         {'trigger': 'step', 'source': 'Node4', 'dest': 'CaravanRob', 'unless': 'is0YearCaravan'},
         {'trigger': 'step', 'source': 'Node4', 'dest': 'Node5'},
         {'trigger': 'step', 'source': 'CaravanRob', 'dest': 'Node5'},
         {'trigger': 'step', 'source': 'Node5', 'dest': 'Metropolitan', 'conditions': 'isReceiveMetropolitan'},
         {'trigger': 'step', 'source': 'Node5', 'dest': 'Node6'},
         {'trigger': 'step', 'source': 'Metropolitan', 'dest': 'Node6'},
         {'trigger': 'step', 'source': 'Node6', 'dest': 'War', 'conditions': 'isReasonWar'},
         {'trigger': 'step', 'source': 'Node6', 'dest': 'Node7'},
         {'trigger': 'step', 'source': 'War', 'dest': 'Node7'},
         {'trigger': 'step', 'source': 'Node7', 'dest': 'VizirCatch'},
         {'trigger': 'step', 'source': 'Node7', 'dest': 'Node8'},
         {'trigger': 'step', 'source': 'VizirCatch', 'dest': 'Node8'},
         {'trigger': 'step', 'source': 'Node8', 'dest': 'Inheritance'},
         {'trigger': 'step', 'source': 'Node8', 'dest': 'Node9'},
         {'trigger': 'step', 'source': 'Inheritance', 'dest': 'Node9'},
         {'trigger': 'step', 'source': 'Node9', 'dest': 'End'}
     ]
     Machine.__init__(self, states=self.states, transitions=self.transitions,
                      initial='Begin', send_event=True, before_state_change='update_random')
     random.seed()
     self.random_number = None
     self.answer = 0
     self.current_year = 1
예제 #45
0
    def __init__(self, current_time=Time('2018-01-01', scale='utc',
                                         location=P48_loc),
                 current_ha=0. * u.deg, current_dec=0. * u.deg,
                 current_domeaz=0. * u.deg,
                 current_filter='r', filters=['r', 'g'],
                 current_seeing=2.0 * u.arcsec,
                 target_skycoord=None,
                 logfile='../sims/log_ztf_sim',
                 historical_observability_year=2015):

        # Define some states.
        states = ['ready', 'cant_observe',
                  'slewing', 'changing_filters', 'exposing']

        # define the transitions

        transitions = [
            {'trigger': 'start_slew', 'source': 'ready', 'dest': 'slewing',
                'after': ['process_slew', 'stop_slew'],
                'conditions': 'slew_allowed'},
            {'trigger': 'stop_slew', 'source': 'slewing', 'dest': 'ready'},
            # for now do not require filter changes to include a slew....
            {'trigger': 'start_filter_change', 'source': 'ready',
                'dest': 'changing_filters',
                'after': ['process_filter_change', 'stop_filter_change']},
            {'trigger': 'stop_filter_change', 'source': 'changing_filters',
                'dest': 'ready'},
            {'trigger': 'start_exposing', 'source': 'ready', 'dest': 'exposing',
                'after': ['process_exposure', 'stop_exposing']},
            {'trigger': 'stop_exposing', 'source': 'exposing', 'dest': 'ready'},
            # I would like to automatically set the cant_observe state from
            # start_exposing, but that doesn't seem to work.
            {'trigger': 'check_if_ready', 'source': ['ready', 'cant_observe'],
                'dest': 'ready', 'conditions': 'can_observe'},
            {'trigger': 'set_cant_observe', 'source': '*',
                'dest': 'cant_observe'}
        ]

        # Initialize the state machine.  syntax from
        # https://github.com/tyarkoni/transitions
        Machine.__init__(self, states=states,
                         transitions=transitions,
                         initial='ready')

        self.current_time = current_time
        self.current_ha = current_ha
        self.current_dec = current_dec
        self.current_domeaz = current_domeaz
        self.current_filter = current_filter
        self.filters = filters
        self.current_seeing = current_seeing
        self.target_skycoord = target_skycoord

        # historical observability
        self.historical_observability_year = historical_observability_year
        self.observability = PTFObservabilityDB()

        # logging.  wipe out existing log.
        fh = logging.FileHandler(logfile, mode='w')
        fh.setLevel(logging.INFO)
        self.logger = logger
        self.logger.setLevel(logging.INFO)
        self.logger.addHandler(fh)
예제 #46
0
    def __init__(self):
        self.FirstWAKE = True
        self.log = logging.getLogger('L.Machine')
        self.zoowrap = ZooWrap()
        self.novawrap = NovaWrap()
        self.mona = MonaWrap()
        states = [{
            'name': 'booting'
            }, {
            'name': 'normal',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'overload',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'overload_avoid',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'underload',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'underload_avoid',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'sleeping',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'wakeup',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }, {
            'name': 'confirmed',
            'on_enter': 'on_enter_state',
            'on_exit': 'on_exit_state'
            }
        ]
        self.states_aux = {
            'normal': {
                'res_mood': 'HIGH', 'thr': None},
            'overload': {
                'res_mood': 'NO', 'thr': None},
            'overload_avoid': {
                'res_mood': 'NO', 'thr': None},
            'underload': {
                'res_mood': 'NO', 'thr': None},
            'underload_avoid': {
                'res_mood': 'MID', 'thr': None},
            'sleeping': {
                'res_mood': 'SLEEP', 'thr': None},
            'wakeup': {
                'res_mood': 'NO', 'thr': None},
            'confirmed': {
                'res_mood': 'NO', 'thr': None}
        }
        transitions = [
            {'trigger': 'boot',
             'source': 'booting', 'dest': 'wakeup'},
            {'trigger': 'overload',
             'source': 'normal', 'dest': 'overload'},
            {'trigger': 'avoid',
             'source': 'overload', 'dest': 'overload_avoid'},
            {'trigger': 'retry',
             'source': 'overload_avoid', 'dest': 'overload'},
            {'trigger': 'underload',
             'source': 'normal', 'dest': 'underload'},
            {'trigger': 'avoid',
             'source': 'underload', 'dest': 'underload_avoid'},
            {'trigger': 'retry',
             'source': 'underload_avoid', 'dest': 'underload'},
            {'trigger': 'sleep',
             'source': 'underload', 'dest': 'sleeping'},
            {'trigger': 'wake',
             'source': 'sleeping', 'dest': 'wakeup'},
            {'trigger': 'chillout',
             'source': 'wakeup', 'dest': 'normal'},
            {'trigger': 'chillout',
             'source': 'sleeping', 'dest': 'normal'},
            {'trigger': 'confirm',
             'source': 'normal', 'dest': 'confirmed'},
            {'trigger': 'confirm',
             'source': 'underload_avoid', 'dest': 'confirmed'},
            {'trigger': 'chillout',
             'source': 'confirmed', 'dest': 'normal'},
            {'trigger': 'chillout',
             'source': 'overload_avoid', 'dest': 'normal'},
            {'trigger': 'chillout',
             'source': 'underload_avoid', 'dest': 'normal'},
            {'trigger': 'chillout',
             'source': 'overload', 'dest': 'normal'},
            {'trigger': 'chillout',
             'source': 'underload', 'dest': 'normal'}
        ]
        Machine.__init__(self,
                         states=states, transitions=transitions,
                         initial='booting')
        self.history = [{
            'state': 'normal',
            'action_id': None
        }]
        self.receiving_vms = []
        self.received_vms = []

        self.whoami_host = cc.conf['whoami-host']
        self.whoami_man = cc.conf['whoami-man']
        self.root_id = '%s-%03d' % (
            hashlib.md5(self.whoami_host).hexdigest()[1:4],
            random.randrange(1, 999, 1))
        self.action_count = 0
        self.action_current = None

        self.compute_hosts = cc.conf['compute']['managers']
        self.hostlist = json.loads(ipc.get("hostlist"))

        self.attempts = {
            'overload': 0,
            'underload': 0
        }
        self.last = {
            'overload': 'OK',
            'underload': 'OK'
        }
        self.quitting = False
        self.executor = Executor()
        self.executor.start()
        self.statser = Statser()
        self.statser.start()
        self.log.info('Machine started [%s]' % self.whoami_host)
예제 #47
0
 def __init__(self):
   dealerButton = random.randint(1, 4)
   self.transit = False
   Machine.__init__(self, states=self.states, transitions=self.transitions, initial=self.states[0])