Beispiel #1
0
    def test(self):
        tick1 = EntryExitSelfLogic()
        t0 = {"source": "initial", "target": "s1"}
        t1 = {
            "trigger": "b",
            "source": "s1",
            "target": "s1",
            "effect": "add('b')"
        }
        t2 = {
            "trigger": "done",
            "source": "s1",
            "target": "final",
            "effect": "add('c')",
        }

        s1 = {"name": "s1", "do": "do_action('a')"}

        stm = Machine(name="stm",
                      transitions=[t0, t1, t2],
                      states=[s1],
                      obj=tick1)
        tick1.stm = stm

        _ = stmpy.get_graphviz_dot(stm)

        driver = Driver()
        driver.add_machine(stm)
        driver.start()

        driver.wait_until_finished()
Beispiel #2
0
    def test(self):
        terminate = Terminate()
        t0 = {"source": "initial", "target": "s_1"}
        t1 = {
            "trigger": "t",
            "source": "s_1",
            "target": "s_2",
            "effect": "action"
        }
        stm_terminate = Machine(name="stm_terminate",
                                transitions=[t0, t1],
                                obj=terminate)
        terminate.stm = stm_terminate

        scheduler = Driver()
        scheduler.add_machine(stm_terminate)
        scheduler.start(max_transitions=2, keep_active=False)
        scheduler.send("t", "stm_terminate")

        scheduler.wait_until_finished()

        _ = stmpy.get_graphviz_dot(stm_terminate)
        _ = scheduler.print_status()

        self.assertTrue(True)
Beispiel #3
0
    def test(self):

        cfc = CompoundFunctionContainer(13)

        t0 = {"source": "initial", "target": "s1"}
        t1 = {
            "trigger": "a",
            "source": "s1",
            "function": cfc.compound,
            "targets": "s2 s3",
        }
        t2 = {"trigger": "b", "source": "s2", "target": "final"}
        t3 = {"trigger": "b", "source": "s3", "target": "final"}

        stm = Machine(name="stm", transitions=[t0, t1, t2, t3], obj=None)

        _ = stmpy.get_graphviz_dot(stm)

        driver = Driver()
        driver.add_machine(stm)
        driver.start(keep_active=False)
        driver.send("a", "stm", args=["hi"], kwargs={"b1": "bbb"})
        driver.send("b", "stm")

        driver.wait_until_finished()
Beispiel #4
0
    def test(self):
        t0 = {
            "source": "initial",
            "target": "s1",
            "effect": "start_timer('t1', 1000)",
        }
        t1 = {
            "trigger": "a",
            "source": "s1",
            "target": "s1",
            "effect": "stop_timer('t1')",
        }
        t2 = {"trigger": "b", "source": "s1", "target": "final"}

        stm = Machine(name="stm", transitions=[t0, t1, t2], obj=None)

        _ = stmpy.get_graphviz_dot(stm)

        driver = Driver()
        driver.add_machine(stm)
        driver.start(keep_active=False)
        driver.send("a", "stm")
        driver.send("b", "stm")

        driver.wait_until_finished()
Beispiel #5
0
def test_blink():
    blink = Blink()
    t0 = {"source": "initial", "target": "blink_on", "effect": "on"}
    t1 = {
        "trigger": "t",
        "source": "blink_on",
        "target": "blink_off",
        "effect": "off"
    }
    t2 = {
        "trigger": "t",
        "source": "blink_off",
        "target": "blink_on",
        "effect": "on"
    }
    stm_blink = Machine(transitions=[t0, t1, t2], obj=blink, name="blink")
    blink.stm = stm_blink

    print(stm_blink.print_graph())

    scheduler = Driver()
    scheduler.add_stm(stm_blink)
    scheduler.start()
    print("scheduler started")

    scheduler.wait_until_finished()
Beispiel #6
0
def test_tick_2():

    logger = logging.getLogger("stmpy.Driver")
    logger.setLevel(logging.DEBUG)
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    ch.setFormatter(formatter)
    logger.addHandler(ch)

    scheduler = Driver()
    tick = Tick_2()

    t0 = {"source": "initial", "target": "s_tick", "effect": "on_init"}
    t1 = {"trigger": "tick", "source": "s_tick", "function": tick.t_1}
    t2 = {"trigger": "tock", "source": "s_tock", "function": tick.t_2}

    stm_tick = Machine(name="stm_tick", transitions=[t0, t1, t2], obj=tick)

    # the object may need the stm to add events and control timers
    tick.stm = stm_tick

    scheduler.add_stm(stm_tick)
    scheduler.start(max_transitions=10)
    scheduler.wait_until_finished()
Beispiel #7
0
    def test(self):
        print(__name__)
        debug_level = logging.DEBUG
        logger = logging.getLogger(__name__)
        logger.setLevel(debug_level)
        ch = logging.StreamHandler()
        ch.setLevel(debug_level)
        formatter = logging.Formatter(
            "%(asctime)s - %(name)-12s - %(levelname)-8s - %(message)s")
        ch.setFormatter(formatter)
        logger.addHandler(ch)

        # terminate = Terminate()
        t0 = {"source": "initial", "target": "s1"}
        t1 = {"trigger": "b", "source": "s1", "target": "s2"}
        t2 = {"trigger": "a", "source": "s2", "target": "final"}
        s1 = {"name": "s1", "a": "defer", "a2": "defer", "a3": "defer"}
        s2 = {"name": "s2", "a2": "defer", "a3": "defer"}

        stm_terminate = Machine(name="stm",
                                transitions=[t0, t1, t2],
                                states=[s1, s2],
                                obj=None)
        # terminate.stm = stm_terminate

        _ = stmpy.get_graphviz_dot(stm_terminate)
        print(_)

        def unwrap(queue):
            s = []
            if queue is None:
                return s
            for event in queue:
                if event is not None:
                    s.append(event["id"])
            return s

        driver = Driver()
        driver.add_machine(stm_terminate)
        driver.start(max_transitions=30, keep_active=False)
        driver.send("a", "stm")
        driver.send("a2", "stm")
        driver.send("a3", "stm")

        print("Events {}".format(unwrap(driver._event_queue.queue)))
        print(stm_terminate.state)
        print("Defers {}".format(unwrap(stm_terminate._defer_queue)))
        print(driver._max_transitions)

        driver.send("b", "stm")

        print("Events {}".format(unwrap(driver._event_queue.queue)))
        print(stm_terminate.state)
        print("Defers {}".format(unwrap(stm_terminate._defer_queue)))
        print(driver._max_transitions)

        driver.wait_until_finished()
        print(stm_terminate.state)
        self.assertTrue(True)
Beispiel #8
0
    def test(self):
        busy = Busy()
        t0 = {"source": "initial", "target": "s_busy", "effect": "on_busy"}
        t1 = {
            "trigger": "busy",
            "source": "s_busy",
            "target": "s_busy",
            "effect": "on_busy",
        }
        stm_busy = Machine(name="busy", transitions=[t0, t1], obj=busy)
        busy.stm = stm_busy

        scheduler = Driver()
        scheduler.add_machine(stm_busy)
        scheduler.start(max_transitions=5)
        scheduler.wait_until_finished()

        self.assertTrue(True)
Beispiel #9
0
def test_busy():
    busy = Busy()
    t0 = {"source": "initial", "target": "s_busy", "effect": "on_busy"}
    t1 = {
        "trigger": "busy",
        "source": "s_busy",
        "target": "s_busy",
        "effect": "on_busy",
    }
    stm_busy = Machine(transitions=[t0, t1], obj=busy, name="stm_busy")
    busy.stm = stm_busy

    scheduler = Driver()
    scheduler.add_stm(stm_busy)
    scheduler.start(max_transitions=100)
    print("scheduler started")

    scheduler.wait_until_finished()
Beispiel #10
0
    def test(self):
        t0 = {"source": "initial", "target": "s1"}
        t1 = {
            "trigger": "a",
            "source": "s1",
            "function": self.compound,
            "targets": "final",
        }

        stm = Machine(name="stm", transitions=[t0, t1], obj=None)

        _ = stmpy.get_graphviz_dot(stm)

        driver = Driver()
        driver.add_machine(stm)
        driver.start(keep_active=False)
        driver.send("a", "stm", args=["hi"], kwargs={"b1": "bbb"})

        driver.wait_until_finished()
Beispiel #11
0
    def test(self):
        two = TwoMethods()
        t0 = {"source": "initial", "target": "s_1"}
        t1 = {
            "trigger": "t",
            "source": "s_1",
            "target": "s_2",
            "effect": "m1;m2"
        }
        stm_two = Machine(name="stm_two", transitions=[t0, t1], obj=two)
        two.stm = stm_two

        scheduler = Driver()
        scheduler.add_machine(stm_two)
        scheduler.start(max_transitions=2)
        print("scheduler started")
        scheduler.send("t", "stm_two")

        scheduler.wait_until_finished()

        self.assertTrue(True)
Beispiel #12
0
    def test(self):
        tick1 = EntryExitSelfLogic()
        t0 = {"source": "initial", "target": "s1"}
        t1 = {
            "trigger": "b",
            "source": "s1",
            "target": "s1",
            "effect": "add('b')"
        }
        t2 = {
            "trigger": "c",
            "source": "s1",
            "target": "final",
            "effect": "add('c')"
        }

        s1 = {
            "name": "s1",
            "a": "add('a')",
            "entry": "add('entry')",
            "exit": "add('exit')",
        }

        stm = Machine(name="stm",
                      transitions=[t0, t1, t2],
                      states=[s1],
                      obj=tick1)
        tick1.stm = stm

        _ = stmpy.get_graphviz_dot(stm)

        driver = Driver()
        driver.add_machine(stm)
        driver.start(max_transitions=30, keep_active=False)
        driver.send("a", "stm")
        driver.send("b", "stm")
        driver.send("c", "stm")

        driver.wait_until_finished()
Beispiel #13
0
logger.setLevel(debug_level)
ch = logging.StreamHandler()
ch.setLevel(debug_level)
formatter = logging.Formatter(
    "%(asctime)s - %(name)-12s - %(levelname)-8s - %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)

print(stmpy.__version__)
speaker = Speaker()

t0 = {"source": "initial", "target": "ready"}
t1 = {"trigger": "speak", "source": "ready", "target": "speaking"}
t2 = {"trigger": "done", "source": "speaking", "target": "ready"}

s1 = {"name": "speaking", "do": "speak(*)", "speak": "defer"}

stm = Machine(name="stm", transitions=[t0, t1, t2], states=[s1], obj=speaker)
speaker.stm = stm

driver = Driver()
driver.add_machine(stm)
driver.start()

driver.send("speak", "stm", args=["My first sentence."])
driver.send("speak", "stm", args=["My second sentence."])
driver.send("speak", "stm", args=["My third sentence."])
driver.send("speak", "stm", args=["My fourth sentence."])

driver.wait_until_finished()
Beispiel #14
0
    def test(self):

        # print(stmpy.__version__)

        logger = logging.getLogger("stmpy")
        logger.setLevel(logging.DEBUG)
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        ch.setFormatter(formatter)
        logger.addHandler(ch)

        tick1 = Tick()
        t0 = {
            "source": "initial",
            "target": "active",
            "effect": "start_timer('tick', 1000); print('initial1')",
        }
        #'effect': 'print("initial1")'}
        t1 = {
            "trigger": "tick",
            "source": "active",
            "target": "active",
            "effect": "start_timer('tick', 1000); print('timeout1')",
        }
        #'effect': 'print("timeout1")'}
        stm_tick_1 = Machine(name="stm_tick_1",
                             transitions=[t0, t1],
                             obj=tick1)
        tick1.stm = stm_tick_1

        tick2 = Tick()
        t0 = {
            "source": "initial",
            "target": "active",
            "effect": "start_timer('tick', 2000); print('initial2')",
        }
        #'effect': 'print("initial2")'}
        t1 = {
            "trigger": "tick",
            "source": "active",
            "target": "active",
            "effect": "start_timer('tick', 1000); print('timeout2')",
        }
        stm_tick_2 = Machine(name="stm_tick_2",
                             transitions=[t0, t1],
                             obj=tick2)
        tick2.stm = stm_tick_2

        driver1 = Driver()

        driver1.start(max_transitions=6, keep_active=True)

        print("driver state: active {} and thread alive {} ".format(
            driver1._active, driver1.thread.is_alive()))

        driver1.add_machine(stm_tick_1)
        print(driver1.print_status())
        driver1.add_machine(stm_tick_2)
        print(driver1.print_status())
        driver1._wake_queue()
        print("driver state: active {} and thread alive {} ".format(
            driver1._active, driver1.thread.is_alive()))
        # driver1.start(max_transitions=6, keep_active=True)
        print(driver1.print_status())

        # driver2 = Driver()
        # driver1.add_machine(stm_tick_2)
        # driver2.start(max_transitions=10)

        driver1.wait_until_finished()