Ejemplo n.º 1
0
def build_flow(run_mode, run_id=None):
    ev = evr.Eventor(run_mode=run_mode, run_id=run_id)

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    s1 = ev.add_step('s1',
                     func=prog,
                     kwargs={'progname': 'prog1'},
                     triggers={evr.StepStatus.success: (ev2s, )})
    s2 = ev.add_step('s2',
                     func=prog,
                     kwargs={'progname': 'prog2'},
                     triggers={evr.StepStatus.success: (ev3s, )})
    s3 = ev.add_step(
        's3',
        func=prog,
        kwargs={'progname': 'prog3'},
    )

    ev.add_assoc(ev1s, s1, delay=0)
    ev.add_assoc(ev2s, s2, delay=5)
    ev.add_assoc(ev3s, s3, delay=5)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 2
0
def build_flow(run_mode=evr.RUN_RESTART, run_id=None, param=9):
    global logger
    appname = os.path.basename(__file__)
    logger = logging.getLogger(appname)
    ev = evr.Eventor(name=appname, run_mode=run_mode, run_id=run_id, config_tag='EVENTOR',
                     config={'EVENTOR': {'shared_db': False,
                                         'LOGGING': {'logging_level': logging.DEBUG}}})
    print('Building param: %s' % (param, ))

    ev1s = ev.add_event('run_step1')
    ev1d = ev.add_event('done_step1')
    ev2s = ev.add_event('run_step2')
    ev2d = ev.add_event('done_step2')
    ev3s = ev.add_event('run_step3', expr=(ev1d, ev2d))

    s1 = ev.add_step('s1', func=square, kwargs={'x': 3},
                     triggers={evr.STEP_SUCCESS: (ev1d, ev2s, )}, )
    s2 = ev.add_step('s2', square_root, args=[param, ],
                     triggers={evr.STEP_SUCCESS: (ev2d, ), },
                     recovery={evr.STEP_FAILURE: evr.STEP_RERUN,
                               evr.STEP_SUCCESS: evr.STEP_SKIP})
    s3 = ev.add_step('s3', divide, kwargs={'x': 9, 'y': 3},)

    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)
    ev.trigger_event(ev1s, 3)

    # logger = ev.get_logger()
    return ev
Ejemplo n.º 3
0
def build_flow(run_mode):
    ev = evr.Eventor(
        name=appname,
        run_mode=run_mode,
    )

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    s1 = ev.add_step('s1',
                     func=prog,
                     kwargs={'progname': 'prog1'},
                     triggers={evr.STEP_SUCCESS: (ev2s, )})
    s2 = ev.add_step('s2',
                     func=prog,
                     kwargs={'progname': 'prog2'},
                     triggers={evr.STEP_SUCCESS: (ev3s, )})
    s3 = ev.add_step(
        's3',
        func=prog,
        kwargs={'progname': 'prog3'},
    )

    ev.add_assoc(ev1s, s1, delay=0)
    ev.add_assoc(ev2s, s2, delay=10)
    ev.add_assoc(ev3s, s3, delay=10)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 4
0
def construct_and_run():
    # db = 'sqfile00'
    db = 'pgdb2'
    config = os.path.abspath('runly.conf')
    # because OSX adds /var -> /private/var
    if config.startswith('/private'):
        config = config[8:]
    # TODO: assume import_module is __file__ if not provided
    ev = evr.Eventor(name=os.path.basename(__file__), config=config, config_tag='EVENTOR', store=db)

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    host = 'ubuntud01_eventor'
    # host = 'ubuntud01'
    s1 = ev.add_step('s1', func=prog, kwargs={'progname': 'prog1'},
                     triggers={evr.STEP_SUCCESS: (ev2s,)})
    s2 = ev.add_step('s2', func=prog, kwargs={'progname': 'prog2'}, host=host,
                     triggers={evr.STEP_SUCCESS: (ev3s,)})
    s3 = ev.add_step('s3', func=prog, kwargs={'progname': 'prog3'})

    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)

    ev.trigger_event(ev1s, '1')
    ev.run()
Ejemplo n.º 5
0
def build_flow():
    '''
    db = 'pgdb2'
    config = os.path.abspath('runly.conf')
    ev = evr.Eventor(name=os.path.basename(__file__),
                     config_tag='EVENTOR',
                     config=config, store=db, import_module=__file__)
    '''

    ev = evr.Eventor(name=appname,
                     config={'LOGGING':
                             {'logging_level': logging.INFO}},)

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    kwargs1 = {'progname': 'prog1'}
    kwargs2 = {'progname': 'prog1'}
    kwargs3 = {'progname': 'prog1'}

    s1 = ev.add_step('s1', func=prog, kwargs=kwargs1, triggers={evr.STEP_SUCCESS: (ev2s,)})
    s2 = ev.add_step('s2', func=prog, kwargs=kwargs2, triggers={evr.STEP_SUCCESS: (ev3s,)})
    s3 = ev.add_step('s3', func=prog, kwargs=kwargs3,)

    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)

    ev.trigger_event(ev1s, '1')
    return ev
Ejemplo n.º 6
0
def build_flow(run_mode):
    config = os.path.abspath('runly.conf')
    ev = evr.Eventor(name=appname, config=config, config_tag='EVENTOR')

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    s1 = ev.add_step('s1',
                     func=prog,
                     kwargs={'progname': 'prog1'},
                     triggers={evr.STEP_SUCCESS: (ev2s, )})
    s2 = ev.add_step(
        's2',
        func=prog,
        kwargs={'progname': 'prog2'},
        triggers={evr.STEP_SUCCESS: (ev3s, )},
    )
    s3 = ev.add_step(
        's3',
        func=prog,
        kwargs={'progname': 'prog3'},
    )

    ev.add_assoc(ev1s, s1, delay=0)
    ev.add_assoc(ev2s, s2, delay=10)
    ev.add_assoc(ev3s, s3, delay=10)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 7
0
def construct_and_run():
    config = os.path.abspath('runly.conf')
    ev = evr.Eventor(name=appname,
                     config=config,
                     config_tag='EVENTOR',
                     store='')  # store=':memory:')

    ev1s = ev.add_event('run_step1')
    ev1d = ev.add_event('done_step1')
    ev2s = ev.add_event('run_step2')
    ev2d = ev.add_event('done_step2')
    ev3s = ev.add_event('run_step3', expr=(ev1d, ev2d))

    s1 = ev.add_step('s1',
                     func=prog.step1_create_data,
                     kwargs={'outfile': 'source.txt'},
                     triggers={evr.StepStatus.complete: (ev1d, ev2s)})
    s2 = ev.add_step('s2',
                     prog.step2_multiple_data,
                     kwargs={},
                     triggers={
                         evr.StepStatus.complete: (ev2d, ),
                     })
    s3 = ev.add_step('s3', prog.step3, kwargs={})

    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)

    ev.trigger_event(ev1s, 3)
    ev.run()
    ev.close()
Ejemplo n.º 8
0
 def program_repr(self):
     self.evr = eventor.Eventor(*self.args,
                                name=self.name,
                                store=self.store,
                                config=self.config,
                                **self.kwargs)
     self.root_step.create_flow(self.evr)
     return self.evr.program_repr()
Ejemplo n.º 9
0
    def run(self, max_loops=-1, **kwargs):
        # There is no need to pass config_tag=self.config_tag, since it was already stripped off.

        self.kwargs.update(kwargs)

        self.evr = evr = eventor.Eventor(name=self.name,
                                         store=self.store,
                                         config=self.config,
                                         **self.kwargs)
        self.run_id = evr.run_id
        self.root_step.create_flow(evr)
        result = evr.run(max_loops=max_loops)
        evr.close()
        return result
Ejemplo n.º 10
0
def construct_and_run():
    db = 'pgdb2'
    config = os.path.abspath('runly.conf')
    if config.startswith('/private'):
        config = config[8:]   
    ev = evr.Eventor(name=os.path.basename(__file__), logging_level=logging.DEBUG, config=config, config_tag='EVENTOR', store=db, shared_db=False, import_module=["examples.run_types", ],)
    
    ev0first = ev.add_event('s0_start')
    ev0next = ev.add_event('s0_next')
    ev00first = ev.add_event('s0_00_start')
    ev00next = ev.add_event('s0_s00_next')
    ev1s = ev.add_event('s0_s00_s1_start')
    ev1success = ev.add_event('s0_s00_s1_success')
    ev2s = ev.add_event('s0_s00_s2_start', expr=(ev1success,))
    ev2success = ev.add_event('s0_s00_s2_success')
    ev3s = ev.add_event('s0_s00_s3_start', expr=(ev2success,))
    
    # on invoke, Eventor will pass itself as kwargs.
    metaprog = Container(progname='S0', loop=[1,2,], iter_triggers=(ev00first,))
    s0first = ev.add_step('s0_start', func=metaprog, kwargs={'initial': True, }, config={'max_concurrent': -1, 'task_construct': 'invoke', 'pass_logger_to_task': True})
    s0next = ev.add_step('s0_next', func=metaprog, config={'task_construct': 'invoke', 'pass_logger_to_task': True})
    
    metaprog = Container(progname='S00', loop=[1,2,], iter_triggers=(ev1s,), end_triggers=(ev0next,))
    
    #s00first=ev.add_step('s0_s00_start', func=metaprog, kwargs={'initial': True}, config={'task_construct': threading.Thread})
    #s00next=ev.add_step('s0_s00_next', func=metaprog, config={'task_construct': threading.Thread})
    s00first = ev.add_step('s0_s00_start', func=metaprog, kwargs={'initial': True}, config={'max_concurrent': -1, 'task_construct': 'invoke', 'pass_logger_to_task': True})
    s00next = ev.add_step('s0_s00_next', func=metaprog, config={'task_construct': 'invoke', 'pass_logger_to_task': True})
    
    s1 = ev.add_step('s0.s00.s1', func=prog, kwargs={'progname': 'prog1'}, triggers={evr.StepStatus.success: (ev1success,),}, host='ubuntud01_eventor') 
    s2 = ev.add_step('s0.s00.s2', func=prog, kwargs={'progname': 'prog2'}, triggers={evr.StepStatus.success: (ev2success,), })
    
    s3 = ev.add_step('s0.s00.s3', func=prog, kwargs={'progname': 'prog3'}, triggers={evr.StepStatus.complete: (ev00next,), })
    
    ev.add_assoc(ev0first, s0first)
    ev.add_assoc(ev0next, s0next)
    ev.add_assoc(ev00first, s00first)
    ev.add_assoc(ev00next, s00next)
    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)
    
    ev.trigger_event(ev0first, '0')
    #print(ev.program_repr())
    ev.run()
    ev.close()
Ejemplo n.º 11
0
def build_flow(run_mode):
    ev = evr.Eventor(name=os.path.basename(__file__), run_mode=run_mode, logging_level=logging.DEBUG,)

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    s1 = ev.add_step('s1', func=prog, kwargs={'progname': 'prog1'}, triggers={evr.StepStatus.success: (ev2s,)}) 
    s2 = ev.add_step('s2', func=prog, kwargs={'progname': 'prog2'}, triggers={evr.StepStatus.success: (ev3s,)})
    s3 = ev.add_step('s3', func=prog, kwargs={'progname': 'prog3'},)

    ev.add_assoc(ev1s, s1, delay=0)
    ev.add_assoc(ev2s, s2, delay=10)
    ev.add_assoc(ev3s, s3, delay=10)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 12
0
def build_flow(run_mode):
    db = 'pgdb2'
    config = os.path.abspath('runly.conf')
    # because OSX adds /var -> /private/var
    if config.startswith('/private'):
        config = config[8:]
    ev = evr.Eventor(
        name=os.path.basename(__file__),
        run_mode=run_mode,
        logging_level=logging.DEBUG,
        config=config,
        config_tag='EVENTOR',
        store=db,
    )  #import_module=["examples.example_00_prog",])

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    s1 = ev.add_step('s1',
                     func=prog,
                     kwargs={'progname': 'prog1'},
                     triggers={evr.StepStatus.success: (ev2s, )})
    s2 = ev.add_step('s2',
                     func=prog,
                     kwargs={'progname': 'prog2'},
                     triggers={evr.StepStatus.success: (ev3s, )},
                     host='ubuntud01_eventor')
    s3 = ev.add_step(
        's3',
        func=prog,
        kwargs={'progname': 'prog3'},
    )

    ev.add_assoc(ev1s, s1, delay=0)
    ev.add_assoc(ev2s, s2, delay=10)
    ev.add_assoc(ev3s, s3, delay=10)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 13
0
def build_flow(run_mode, run_id=None, success=True):
    ev = evr.Eventor(name=appname,
                     run_mode=run_mode,
                     run_id=run_id,
                     config={'LOGGING': {
                         'logging_level': logging.INFO
                     }})

    ev1s = ev.add_event('run_step1')
    ev2s = ev.add_event('run_step2')
    ev3s = ev.add_event('run_step3')

    kwprog1 = {'progname': 'prog1'}
    kwprog2 = {'progname': 'prog2', 'success': success}
    kwprog3 = {'progname': 'prog3'}

    s1 = ev.add_step('s1',
                     func=prog,
                     kwargs=kwprog1,
                     triggers={evr.STEP_SUCCESS: (ev2s, )})
    s2 = ev.add_step('s2',
                     func=prog,
                     kwargs=kwprog2,
                     triggers={evr.STEP_SUCCESS: (ev3s, )})
    s3 = ev.add_step(
        's3',
        func=prog,
        kwargs=kwprog3,
    )

    ev.add_assoc(ev1s, s1, delay=1)
    ev.add_assoc(ev2s, s2, delay=1)
    ev.add_assoc(ev3s, s3, delay=1)

    ev.trigger_event(ev1s, 1)
    return ev
Ejemplo n.º 14
0
            item = None
        if item:
            self.loop_index += 1
            for trigger in self.triggers:
                ev.remote_trigger_event(
                    trigger,
                    self.loop_index,
                )
        return True


ev = evr.Eventor(name=appname,
                 config_tag='EVENTOR',
                 config={
                     'EVENTOR': {
                         'shared_db': True,
                         'LOGGING': {
                             'logging_level': logging.DEBUG
                         }
                     }
                 })

ev0first = ev.add_event('run_s0first')
ev0next = ev.add_event('run_s0next')
ev1s = ev.add_event('run_s1')
ev2s = ev.add_event('run_s2')
ev3s = ev.add_event('run_s3')

metaprog = MetaProg(ev=ev, progname='', loop=[1, 2], triggers=(ev1s, ))
s0first = ev.add_step('s0first',
                      func=metaprog,
                      kwargs={'initial': True},
Ejemplo n.º 15
0
                for trigger in self.iter_triggers:
                    logger.info("Container trigger next %s" % (trigger, ))
                    self.ev.trigger_event(trigger, self.loop_index)
                    # self.ev.remote_trigger_event(trigger, self.loop_index,)
            else:
                for trigger in self.end_triggers:
                    logger.info("Container trigger end %s" % (trigger, ))
                    self.ev.trigger_event(trigger, self.loop_index)
                    # self.ev.remote_trigger_event(trigger, self.loop_index,)

        return True


config = os.path.abspath('runly.conf')
ev = evr.Eventor(name=appname,
                 config=config,
                 config_tag='EVENTOR',
                 store='sqfile00')

ev0first = ev.add_event('s0_start')
ev0next = ev.add_event('s0_next')
ev0end = ev.add_event('s0_end')
ev00first = ev.add_event('s0_00_start')
ev00next = ev.add_event('s0_s00_next')
ev00end = ev.add_event('s0_s00_end')
ev1s = ev.add_event('s0_s00_s1_start')
ev1success = ev.add_event('s0_s00_s1_success')
ev2s = ev.add_event('s0_s00_s2_start', expr=(ev1success, ))
ev2success = ev.add_event('s0_s00_s2_success')
ev3s = ev.add_event('s0_s00_s3_start', expr=(ev2success, ))
ev00endComplete = ev.add_event('s0_s00_end_complete')
Ejemplo n.º 16
0
import eventor as evr
import logging
import os
from acris import virtual_resource_pool as rp
from examples.run_types import Container

appname = os.path.basename(__file__)


def prog(progname):
    logger = logging.getLogger(os.getenv("EVENTOR_LOGGER_NAME"))
    logger.info("doing what %s is doing" % progname)
    return progname


ev = evr.Eventor(
    name=appname)  # config={'sleep_between_loops': 1}) # store=':memory:',

ev0first = ev.add_event('s0_start')
ev0next = ev.add_event('s0_next')
ev0end = ev.add_event('s0_end')
ev00first = ev.add_event('s0_00_start')
ev00next = ev.add_event('s0_s00_next')
ev00end = ev.add_event('s0_s00_end')
ev1s = ev.add_event('s0_s00_s1_start')
ev1success = ev.add_event('s0_s00_s1_success')
ev2s = ev.add_event('s0_s00_s2_start', expr=(ev1success, ))
ev2success = ev.add_event('s0_s00_s2_success')
ev3s = ev.add_event('s0_s00_s3_start', expr=(ev2success, ))


class StepResource(rp.Resource):
Ejemplo n.º 17
0
##############################################################################

import eventor as evr
import logging
import os
from acris import virtual_resource_pool as rp
from examples.run_types import prog, Container, StepResource

# logger=logging.getLogger(__name__)

db = 'pgdb2'
config=os.path.abspath('runly.conf')
# because OSX adds /var -> /private/var
if config.startswith('/private'):
    config = config[8:]
ev = evr.Eventor(name=os.path.basename(__file__), config=config, config_tag='EVENTOR', store=db, ) #config={'sleep_between_loops': 1}) # store=':memory:',

ev0first = ev.add_event('s0_start')
ev0next = ev.add_event('s0_next')
ev0end = ev.add_event('s0_end')
ev00first = ev.add_event('s0_00_start')
ev00next = ev.add_event('s0_s00_next')
ev00end = ev.add_event('s0_s00_end')
ev1s = ev.add_event('s0_s00_s1_start')
ev1success = ev.add_event('s0_s00_s1_success')
ev2s = ev.add_event('s0_s00_s2_start', expr=(ev1success,))
ev2success = ev.add_event('s0_s00_s2_success')
ev3s = ev.add_event('s0_s00_s3_start', expr=(ev2success,))

rp1 = rp.ResourcePool('RP1', resource_cls=StepResource, policy={'resource_limit': 2, }).load()                   
rp2 = rp.ResourcePool('RP2', resource_cls=StepResource, policy={'resource_limit': 2, }).load()                   
Ejemplo n.º 18
0
appname = os.path.basename(__file__)
logger = logging.getLogger(appname)


def prog(progname):
    logger = logging.getLogger(os.getenv("EVENTOR_LOGGER_NAME"))
    logger.info("doing what %s is doing" % progname)
    logger.info("EVENTOR_STEP_SEQUENCE: %s" %
                os.getenv("EVENTOR_STEP_SEQUENCE"))
    time.sleep(5)
    return progname


config = os.path.abspath('runly.conf')
ev = evr.Eventor(name=appname, config=config, config_tag='EVENTOR')

ev1s = ev.add_event('run_step1')
ev2s = ev.add_event('run_step2')
ev3s = ev.add_event('run_step3')

s1 = ev.add_step('s1',
                 func=prog,
                 kwargs={'progname': 'prog1'},
                 triggers={evr.STEP_SUCCESS: (ev2s, )})
s2 = ev.add_step('s2',
                 func=prog,
                 kwargs={'progname': 'prog2'},
                 triggers={evr.STEP_SUCCESS: (ev3s, )})
s3 = ev.add_step(
    's3',
Ejemplo n.º 19
0
##############################################################################

import os
import sys

import eventor as evr
import logging
from examples.program import step1_create_data, step2_multiple_data, step3

appname = os.path.basename(__file__)
ev = evr.Eventor(
    name=appname,
    run_mode=evr.RUN_RECOVER,
    config_tag='EVENTOR',
    config={
        'EVENTOR': {
            'shared_db': False,  # will be override to True by Eventor.
            'LOGGING': {
                'logging_level': logging.INFO
            }
        }
    })

ev1s = ev.add_event('run_step1')
ev1d = ev.add_event('done_step1')
ev2s = ev.add_event('run_step2')
ev2d = ev.add_event('done_step2')
ev3s = ev.add_event('run_step3', expr=(ev1d, ev2d))

s1 = ev.add_step('s1',
                 func=step1_create_data,
                 kwargs={'outfile': 'source.txt'},
Ejemplo n.º 20
0
def construct_and_run():
    db = 'sqfile00'
    # db = 'pgdb2'
    config = os.path.abspath('runly.conf')
    ev = evr.Eventor(name=appname,
                     config=config,
                     config_tag='EVENTOR',
                     store=db)

    ev0first = ev.add_event('s0_start')
    ev0next = ev.add_event('s0_next')
    ev00first = ev.add_event('s0_00_start')
    ev00next = ev.add_event('s0_s00_next')
    ev1s = ev.add_event('s0_s00_s1_start')
    ev1success = ev.add_event('s0_s00_s1_success')
    ev2s = ev.add_event('s0_s00_s2_start', expr=(ev1success, ))
    ev2success = ev.add_event('s0_s00_s2_success')
    ev3s = ev.add_event('s0_s00_s3_start', expr=(ev2success, ))

    metaprog = Container(progname='S0',
                         loop=[1, 2],
                         iter_triggers=(ev00first, ))

    s0first = ev.add_step('s0_start',
                          func=metaprog,
                          kwargs={'initial': True},
                          config={
                              'max_concurrent': -1,
                              'task_construct': 'invoke',
                              'pass_logger_to_task': True
                          })
    s0next = ev.add_step('s0_next',
                         func=metaprog,
                         config={
                             'task_construct': 'invoke',
                             'pass_logger_to_task': True
                         })

    metaprog = Container(progname='S00',
                         loop=[1, 2],
                         iter_triggers=(ev1s, ),
                         end_triggers=(ev0next, ))

    s00first = ev.add_step('s0_s00_start',
                           func=metaprog,
                           kwargs={'initial': True},
                           config={
                               'max_concurrent': -1,
                               'task_construct': 'invoke',
                               'pass_logger_to_task': True
                           })
    s00next = ev.add_step('s0_s00_next',
                          func=metaprog,
                          config={
                              'task_construct': 'invoke',
                              'pass_logger_to_task': True
                          })

    s1 = ev.add_step('s0.s00.s1',
                     func=prog,
                     kwargs={'progname': 'prog1'},
                     triggers={
                         evr.STEP_SUCCESS: (ev1success, ),
                     })
    s2 = ev.add_step('s0.s00.s2',
                     func=prog,
                     kwargs={'progname': 'prog2'},
                     triggers={
                         evr.STEP_SUCCESS: (ev2success, ),
                     })
    s3 = ev.add_step('s0.s00.s3',
                     func=prog,
                     kwargs={'progname': 'prog3'},
                     triggers={
                         evr.STEP_COMPLETE: (ev00next, ),
                     })

    ev.add_assoc(ev0first, s0first)
    ev.add_assoc(ev0next, s0next)
    ev.add_assoc(ev00first, s00first)
    ev.add_assoc(ev00next, s00next)
    ev.add_assoc(ev1s, s1)
    ev.add_assoc(ev2s, s2)
    ev.add_assoc(ev3s, s3)

    ev.trigger_event(ev0first, '0')
    # print(ev.program_repr())
    ev.run()