Commit 36839f25 authored by Savva Golubitsky's avatar Savva Golubitsky

testparal.adot not works

parent abf8c521
...@@ -34,13 +34,10 @@ class Func(): ...@@ -34,13 +34,10 @@ class Func():
return "{}.{}()".format(self.module, self.name) return "{}.{}()".format(self.module, self.name)
class Selector(Func): class Selector(Func):
__slots__=(
'ntransf'
)
def __init__(self, ntransf, module="", name="", dummy=False): def __init__(self, ntransf, module="", name="", dummy=False):
if module=="" and name =="": if module=="" and name =="":
dummy = True 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) super().__init__(module, name, func=(lambda x: [True for i in range(ntransf)]) if dummy else None)
...@@ -51,9 +48,7 @@ class Transfer: ...@@ -51,9 +48,7 @@ class Transfer:
self.order = order self.order = order
def transfer(self, data, dynamic_keys_mapping={}): def transfer(self, data, dynamic_keys_mapping={}):
#print(dynamic_keys_mapping)
self.edge.morph(data, dynamic_keys_mapping) self.edge.morph(data, dynamic_keys_mapping)
#return self.output_state, None
return self.output_state return self.output_state
class IdleRunType(Enum): class IdleRunType(Enum):
...@@ -120,6 +115,11 @@ class Graph: ...@@ -120,6 +115,11 @@ class Graph:
if not '__WORKING_DIR__' in data: if not '__WORKING_DIR__' in data:
data['__WORKING_DIR__'] = data['__CURRENT_WORKING_DIR__'] data['__WORKING_DIR__'] = data['__CURRENT_WORKING_DIR__']
def generate_cpp(self):
pass
class State: class State:
__slots__ = [ __slots__ = [
'name', 'name',
...@@ -133,6 +133,7 @@ class State: ...@@ -133,6 +133,7 @@ class State:
'array_keys_mapping', 'array_keys_mapping',
'_branching_states_history', '_branching_states_history',
'_proxy_state', '_proxy_state',
'possible_branches'
] ]
def __init__(self, name, def __init__(self, name,
parallelization_policy=None, parallelization_policy=None,
...@@ -147,6 +148,7 @@ class State: ...@@ -147,6 +148,7 @@ class State:
self.looped_edges_number = 0 self.looped_edges_number = 0
self.activated_input_edges_number = 0 self.activated_input_edges_number = 0
self.transfers = [] self.transfers = []
self.possible_branches=[]
self.is_term_state=False self.is_term_state=False
self._branching_states_history = None self._branching_states_history = None
self._proxy_state=None self._proxy_state=None
...@@ -168,6 +170,8 @@ class State: ...@@ -168,6 +170,8 @@ class State:
return # no need to go further if we already were there return # no need to go further if we already were there
if self._branching_states_history is None: if self._branching_states_history is None:
self._branching_states_history = branching_states_history 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: elif idle_run_type == IdleRunType.CLEANUP:
self.activated_input_edges_number = 0 self.activated_input_edges_number = 0
# print('\tCLEANUP STATE {}, active: {}, branches_story: {}'.format(self.name, self.activated_input_edges_number, self._branching_states_history)) # print('\tCLEANUP STATE {}, active: {}, branches_story: {}'.format(self.name, self.activated_input_edges_number, self._branching_states_history))
...@@ -179,8 +183,8 @@ class State: ...@@ -179,8 +183,8 @@ class State:
self._branching_states_history = branching_states_history self._branching_states_history = branching_states_history
else: else:
self.activated_input_edges_number += 1 # BUG: here we need to choose somehow whether we proceed or not self.activated_input_edges_number += 1 # BUG: here we need to choose somehow whether we proceed or not
# if len(self.output_edges) == 0: # if len(self.transfers) == 0:
# print('Terminate state found') # print('Terminate state found')
if len(self.transfers) == 1: if len(self.transfers) == 1:
self.transfers[0].output_state.idle_run(idle_run_type, branching_states_history) self.transfers[0].output_state.idle_run(idle_run_type, branching_states_history)
else: else:
...@@ -202,7 +206,7 @@ class State: ...@@ -202,7 +206,7 @@ class State:
def run(self, data, implicit_parallelization_info=None): def run(self, data, implicit_parallelization_info=None):
print('STATE {}\n\tjust entered, implicit_parallelization_info: {}'.format(self.name, implicit_parallelization_info)) 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: if self._proxy_state is not None:
return self._proxy_state.run(data, implicit_parallelization_info) return self._proxy_state.run(data, implicit_parallelization_info)
self._activate_input_edge(implicit_parallelization_info) self._activate_input_edge(implicit_parallelization_info)
...@@ -227,7 +231,7 @@ class State: ...@@ -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)) 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, return self.parallelization_policy.make_transfer_func(selected_transfers,
array_keys_mapping=self.array_keys_mapping, array_keys_mapping=self.array_keys_mapping,
implicit_parallelization_info=implicit_parallelization_info,), \ implicit_parallelization_info=implicit_parallelization_info, state=self), \
implicit_parallelization_info implicit_parallelization_info
...@@ -276,10 +280,12 @@ class State: ...@@ -276,10 +280,12 @@ class State:
def _has_loop(self): def _has_loop(self):
return self.looped_edges_number != 0 return self.looped_edges_number != 0
def cpp_print(self, parameter_list): def generate_cpp(self):
ststr = "{}:\n\t".format(self.name) ststr = "{}:\n\t".format(self.name)
for t in self.transfers: if len(self.transfers)==1:
print(t.edge) print("{}(data);\n{}(data);".format(t.edge.pred_name, t.edge.morph.name))
return
def transfer_to_termination(data): def transfer_to_termination(data):
return None return None
...@@ -290,8 +296,9 @@ class SerialParallelizationPolicy: ...@@ -290,8 +296,9 @@ class SerialParallelizationPolicy:
def __init__(self): def __init__(self):
pass 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): def _morph(data):
# print("MORPHING FROM {}".format(state.name))
if array_keys_mapping is None: if array_keys_mapping is None:
dynamic_keys_mapping = build_dynamic_keys_mapping(implicit_parallelization_info) 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] next_morphs = [partial(morphism.transfer, dynamic_keys_mapping=dynamic_keys_mapping) for morphism in morphisms]
...@@ -317,7 +324,7 @@ class SerialParallelizationPolicy: ...@@ -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 _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): while len(next_morphs) != 1 or _requires_joint_of_implicit_parallelization(array_keys_mapping, next_impl_para_infos):
if 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) # print(array_keys_mapping, next_impl_para_infos)
cur_morphs[:] = next_morphs[:] cur_morphs[:] = next_morphs[:]
cur_impl_para_infos[:] = next_impl_para_infos[:] cur_impl_para_infos[:] = next_impl_para_infos[:]
......
...@@ -23,7 +23,7 @@ graph = prsr.parse_file('./tests/adot/testparal.adot') ...@@ -23,7 +23,7 @@ graph = prsr.parse_file('./tests/adot/testparal.adot')
data = {"a":1, "b":1} data = {"a":1, "b":1}
# graph.generate_cpp()
graph.run(data) graph.run(data)
print(data) print(data)
......
...@@ -5,7 +5,12 @@ digraph SIMPLEST { ...@@ -5,7 +5,12 @@ digraph SIMPLEST {
INCR_A [predicate=PRED, function=FUNCA] INCR_A [predicate=PRED, function=FUNCA]
INCR_B [predicate=PRED, function=FUNCB] INCR_B [predicate=PRED, function=FUNCB]
__BEGIN__ -> ST2 __BEGIN__ -> ST2
ST2 -> ST3_1, ST3_2 [morphism=(INCR_A, INCR_B)] 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment