From 36839f25aad7ff6b3893bf4e623b6239b022d644 Mon Sep 17 00:00:00 2001 From: lbstr <golubitskiy_savv@mail.ru> Date: Tue, 3 Dec 2019 17:41:10 +0300 Subject: [PATCH] testparal.adot not works --- comsdk/__pycache__/graph.cpython-37.pyc | Bin 12635 -> 12885 bytes comsdk/graph.py | 37 ++++++++++++++---------- test_parser.py | 2 +- tests/adot/testparal.adot | 7 ++++- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/comsdk/__pycache__/graph.cpython-37.pyc b/comsdk/__pycache__/graph.cpython-37.pyc index 897961c1e96762f61fc8b9d65edb5d78dd6d9cec..03877b0678b87e637ef1c969ff2fb57e7b8cffec 100644 GIT binary patch delta 3065 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 Rc~cGT3#(z(G)=$H`+tBik@^4t delta 2895 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 diff --git a/comsdk/graph.py b/comsdk/graph.py index bd9fc18..b63e087 100644 --- a/comsdk/graph.py +++ b/comsdk/graph.py @@ -34,13 +34,10 @@ class Func(): return "{}.{}()".format(self.module, self.name) class Selector(Func): - __slots__=( - 'ntransf' - ) def __init__(self, ntransf, module="", name="", dummy=False): if module=="" and name =="": dummy = True - self.ntransf = ntransf + self.dummy = dummy super().__init__(module, name, func=(lambda x: [True for i in range(ntransf)]) if dummy else None) @@ -51,9 +48,7 @@ class Transfer: self.order = order def transfer(self, data, dynamic_keys_mapping={}): - #print(dynamic_keys_mapping) self.edge.morph(data, dynamic_keys_mapping) - #return self.output_state, None return self.output_state class IdleRunType(Enum): @@ -119,6 +114,11 @@ class Graph: data['__CURRENT_WORKING_DIR__'] = os.getcwd() if not '__WORKING_DIR__' in data: data['__WORKING_DIR__'] = data['__CURRENT_WORKING_DIR__'] + + def generate_cpp(self): + pass + + class State: __slots__ = [ @@ -133,6 +133,7 @@ class State: 'array_keys_mapping', '_branching_states_history', '_proxy_state', + 'possible_branches' ] def __init__(self, name, parallelization_policy=None, @@ -147,6 +148,7 @@ class State: self.looped_edges_number = 0 self.activated_input_edges_number = 0 self.transfers = [] + self.possible_branches=[] self.is_term_state=False self._branching_states_history = None self._proxy_state=None @@ -168,6 +170,8 @@ class State: return # no need to go further if we already were there if self._branching_states_history is None: self._branching_states_history = branching_states_history + print(self.name,": \t", self.input_edges_number, len(self.transfers)) + print(self._branching_states_history) elif idle_run_type == IdleRunType.CLEANUP: self.activated_input_edges_number = 0 # print('\tCLEANUP STATE {}, active: {}, branches_story: {}'.format(self.name, self.activated_input_edges_number, self._branching_states_history)) @@ -179,8 +183,8 @@ class State: self._branching_states_history = branching_states_history else: self.activated_input_edges_number += 1 # BUG: here we need to choose somehow whether we proceed or not -# if len(self.output_edges) == 0: -# print('Terminate state found') + # if len(self.transfers) == 0: + # print('Terminate state found') if len(self.transfers) == 1: self.transfers[0].output_state.idle_run(idle_run_type, branching_states_history) else: @@ -202,7 +206,7 @@ class State: def run(self, data, implicit_parallelization_info=None): print('STATE {}\n\tjust entered, implicit_parallelization_info: {}'.format(self.name, implicit_parallelization_info)) - print('\t{}'.format(data)) + # print('\t{}'.format(data)) if self._proxy_state is not None: return self._proxy_state.run(data, implicit_parallelization_info) self._activate_input_edge(implicit_parallelization_info) @@ -227,7 +231,7 @@ class State: raise Exception("\tERROR: predicate {} returns {} running from STATE {}".format(transf.edge.pred_name,transf.edge.predicate(data, dynamic_keys_mapping), self.name)) return self.parallelization_policy.make_transfer_func(selected_transfers, array_keys_mapping=self.array_keys_mapping, - implicit_parallelization_info=implicit_parallelization_info,), \ + implicit_parallelization_info=implicit_parallelization_info, state=self), \ implicit_parallelization_info @@ -276,10 +280,12 @@ class State: def _has_loop(self): return self.looped_edges_number != 0 - def cpp_print(self, parameter_list): + def generate_cpp(self): ststr = "{}:\n\t".format(self.name) - for t in self.transfers: - print(t.edge) + if len(self.transfers)==1: + print("{}(data);\n{}(data);".format(t.edge.pred_name, t.edge.morph.name)) + return + def transfer_to_termination(data): return None @@ -290,8 +296,9 @@ class SerialParallelizationPolicy: def __init__(self): pass - def make_transfer_func(self, morphisms, array_keys_mapping=None, implicit_parallelization_info=None): + def make_transfer_func(self, morphisms, array_keys_mapping=None, implicit_parallelization_info=None, state=None): def _morph(data): + # print("MORPHING FROM {}".format(state.name)) if array_keys_mapping is None: dynamic_keys_mapping = build_dynamic_keys_mapping(implicit_parallelization_info) next_morphs = [partial(morphism.transfer, dynamic_keys_mapping=dynamic_keys_mapping) for morphism in morphisms] @@ -317,7 +324,7 @@ class SerialParallelizationPolicy: #while len(next_morphs) != 1 or _is_implicitly_parallelized(next_impl_para_infos): while len(next_morphs) != 1 or _requires_joint_of_implicit_parallelization(array_keys_mapping, next_impl_para_infos): if next_impl_para_infos == []: - raise Exception("Morpsh count on state is {}".format(str(len(next_morphs)))) + raise Exception("Morphs count on state {} is {}".format(state.name, str(len(next_morphs)))) # print(array_keys_mapping, next_impl_para_infos) cur_morphs[:] = next_morphs[:] cur_impl_para_infos[:] = next_impl_para_infos[:] diff --git a/test_parser.py b/test_parser.py index 96c30d3..a2c9d13 100644 --- a/test_parser.py +++ b/test_parser.py @@ -23,7 +23,7 @@ graph = prsr.parse_file('./tests/adot/testparal.adot') data = {"a":1, "b":1} - +# graph.generate_cpp() graph.run(data) print(data) diff --git a/tests/adot/testparal.adot b/tests/adot/testparal.adot index 4f797d6..d5637f9 100644 --- a/tests/adot/testparal.adot +++ b/tests/adot/testparal.adot @@ -5,7 +5,12 @@ digraph SIMPLEST { INCR_A [predicate=PRED, function=FUNCA] INCR_B [predicate=PRED, function=FUNCB] + __BEGIN__ -> ST2 ST2 -> ST3_1, ST3_2 [morphism=(INCR_A, INCR_B)] - ST3_1, ST3_2 -> __END__ + ST3_1 -> ST3_1_1, ST3_1_2 [morphism=(INCR_A, INCR_B)] + ST3_2 -> ST3_2_1, ST3_2_2 [morphism=(INCR_A, INCR_B)] + //ST3_1_1 -> ST3_1_1_1, ST3_1_1_2 + ST3_1_1, ST3_1_2, ST3_2_1, ST3_2_2 -> ST_TERM [morphism=(INCR_A, INCR_B, INCR_A, INCR_B)] + ST_TERM -> __END__ } \ No newline at end of file -- 2.17.1