Commit 194bdc23 authored by Savva Golubitsky's avatar Savva Golubitsky

edges now sorts, but smtms doubled 👥

parent 70c91ee9
...@@ -39,6 +39,7 @@ class Edge(object): ...@@ -39,6 +39,7 @@ class Edge(object):
] ]
def __init__(self, predicate, morphism, def __init__(self, predicate, morphism,
io_mapping=InOutMapping(), io_mapping=InOutMapping(),
order=0
): ):
self.pred_module = predicate.module self.pred_module = predicate.module
self.pred_name = predicate.name self.pred_name = predicate.name
...@@ -49,13 +50,14 @@ class Edge(object): ...@@ -49,13 +50,14 @@ class Edge(object):
self._io_mapping = io_mapping self._io_mapping = io_mapping
self.preprocess = lambda pd: None self.preprocess = lambda pd: None
self.postprocess = lambda pd: None self.postprocess = lambda pd: None
self.order = int(order)
def predicate(self, data, dynamic_keys_mapping={}): def predicate(self, data, dynamic_keys_mapping={}):
proxy_data = self._io_mapping.build_proxy_data(data, dynamic_keys_mapping) proxy_data = self._io_mapping.build_proxy_data(data, dynamic_keys_mapping)
return self._predicate(proxy_data) return self._predicate(proxy_data)
def morph(self, data, dynamic_keys_mapping={}): def morph(self, data, dynamic_keys_mapping={}):
#print(dynamic_keys_mapping) # print(self.pred_name, self.morph_name, self.order)
proxy_data = self._io_mapping.build_proxy_data(data, dynamic_keys_mapping) proxy_data = self._io_mapping.build_proxy_data(data, dynamic_keys_mapping)
#print(proxy_data) #print(proxy_data)
self.preprocess(data) self.preprocess(data)
......
...@@ -143,6 +143,13 @@ class State: ...@@ -143,6 +143,13 @@ class State:
self._proxy_state=None self._proxy_state=None
def idle_run(self, idle_run_type, branching_states_history): def idle_run(self, idle_run_type, branching_states_history):
def __sort_by_order(tr):
print(tr.edge.order)
return tr.edge.order
self.transfers.sort(key = __sort_by_order)
print(self.name)
for t in self.transfers:
print("\t", t.edge.morph_name)
if self._proxy_state is not None: if self._proxy_state is not None:
return self._proxy_state.idle_run(idle_run_type, branching_states_history) return self._proxy_state.idle_run(idle_run_type, branching_states_history)
if idle_run_type == IdleRunType.INIT: if idle_run_type == IdleRunType.INIT:
......
...@@ -58,6 +58,7 @@ class GraphFactory(): ...@@ -58,6 +58,7 @@ class GraphFactory():
return Func(), Func() return Func(), Func()
pred_f, func_f = Func(), Func() pred_f, func_f = Func(), Func()
morph = entities[morphname] morph = entities[morphname]
# print(morph)
for m in morph.__slots__: for m in morph.__slots__:
if getattr(morph,m) != None: if getattr(morph,m) != None:
if m!="predicate" and m!="function": if m!="predicate" and m!="function":
...@@ -84,9 +85,9 @@ class GraphFactory(): ...@@ -84,9 +85,9 @@ class GraphFactory():
return pred_f, func_f return pred_f, func_f
def add_connection(self, st1, st2, morphism=None): def add_connection(self, st1, st2, morphism=None, ordr=0):
pred, entr = self._create_morphism(morphism) pred, entr = self._create_morphism(morphism)
self.states[st1].connect_to(self.states[st2], edge=Edge(pred, entr)) self.states[st1].connect_to(self.states[st2], edge=Edge(pred, entr, order=ordr))
# print("{} --{}-{}--> {}".format(st1, pred, entr, st2)) # print("{} --{}-{}--> {}".format(st1, pred, entr, st2))
def build(self): def build(self):
...@@ -139,11 +140,12 @@ class Parser(): ...@@ -139,11 +140,12 @@ class Parser():
l=len(vals[sl]) l=len(vals[sl])
elif l!=len(vals[sl]): elif l!=len(vals[sl]):
print("\tERROR: Number of multiple params do not match", l) print("\tERROR: Number of multiple params do not match", l)
return -1 exit(-1)
res = [copy.copy(param) for i in range(l)] res = [copy.copy(param) for i in range(l)]
for sl in vals: for sl in vals:
for i, _ in enumerate(res): for i, _ in enumerate(res):
setattr(res[i], sl, vals[sl][i]) setattr(res[i], sl, vals[sl][i])
print("SPLIT:",res[0])
return res return res
#Props is line "[proFp=smth, ...]" #Props is line "[proFp=smth, ...]"
...@@ -164,7 +166,6 @@ class Parser(): ...@@ -164,7 +166,6 @@ class Parser():
else: else:
print("\tERROR:Unknown parameter: "+ r[0]) print("\tERROR:Unknown parameter: "+ r[0])
exit(-1) exit(-1)
print(parm)
return parm return parm
def _param_from_entln(self, raw): def _param_from_entln(self, raw):
...@@ -195,14 +196,13 @@ class Parser(): ...@@ -195,14 +196,13 @@ class Parser():
p = self._param_from_props(spl[3]) p = self._param_from_props(spl[3])
self.fact.add_state(left[0],selectorname=p.selector) self.fact.add_state(left[0],selectorname=p.selector)
morphs = self._split_multiple(p) morphs = self._split_multiple(p)
for m in morphs: print("MORPH", morphs[0])
print(m)
if len(morphs)!=len(right): if len(morphs)!=len(right):
print("\tERROR:Count of edges do not match to count of states in one to many connection!\n\t\t{}".format(raw)) print("\tERROR:Count of edges do not match to count of states in one to many connection!\n\t\t{}".format(raw))
exit() exit()
for i, st in enumerate(right): for i, st in enumerate(right):
self.fact.add_state(st) self.fact.add_state(st)
self.fact.add_connection(left[0], st, morphs[i].morphism) self.fact.add_connection(left[0], st, morphs[i].morphism, morphs[i].order)
# one to one connection # one to one connection
else: else:
self.fact.add_state(left[0]) self.fact.add_state(left[0])
......
import comsdk.parser as prs import comsdk.parser as prs
from comsdk.graph import Selector, Func from comsdk.graph import Selector, Func
p=5
res = lambda : [True for i in range(p)]
print(res())
# ff = Func(func=lambda x: [True for i in range(p)])
data = {}
sel1 = Selector(3)
sel2 = Selector(3, "selectors", "sel1")
sel3 = Selector(3, "selector", "sel2")
print(sel1)
print(sel2)
print(sel3)
\ No newline at end of file
...@@ -38,5 +38,5 @@ digraph CODEOBJECT_GENERATOR ...@@ -38,5 +38,5 @@ digraph CODEOBJECT_GENERATOR
// В зависимости от результата вычисления функции-SELECTOR осуществляется переход по // В зависимости от результата вычисления функции-SELECTOR осуществляется переход по
//первому или второму ребру //первому или второму ребру
RESULT_SAVED, DUMP_CREATED -> __END__ [morphism=(EDGE_8, EDGE_9)] RESULT_SAVED, DUMP_CREATED -> __END__ [morphism=(EDGE_8, EDGE_9)]
RESULT_SAVED -> INPUT_READY,FAKE,__END__ [selector=SELECTOR, morphism=(EDGE_6,EDGE_1,EDGE_7), order=(10,20,30)] RESULT_SAVED -> INPUT_READY,FAKE,__END__ [selector=SELECTOR, morphism=(EDGE_6,EDGE_1,EDGE_7), order=(30,20,10)]
} }
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