Commit fddbce4c authored by Savva Golubitsky's avatar Savva Golubitsky

comments ready, but code is ugly. needs to be refactored

parent 7188aaf9
......@@ -32,11 +32,13 @@ class Edge(object):
'_io_mapping',
'preprocess',
'postprocess',
'order'
'order',
'comment'
]
def __init__(self, predicate, morphism,
io_mapping=InOutMapping(),
order=0
order=0,
comment=""
):
self.pred_f = predicate
self.morph_f = morphism
......@@ -44,6 +46,8 @@ class Edge(object):
self.preprocess = lambda pd: None
self.postprocess = lambda pd: None
self.order = int(0 if order is None else order)
print("Edge:", comment)
self.comment = comment
def predicate(self, data, dynamic_keys_mapping={}):
proxy_data = self._io_mapping.build_proxy_data(data, dynamic_keys_mapping)
......
......@@ -12,12 +12,14 @@ ImplicitParallelizationInfo = collections.namedtuple('ImplicitParallelizationInf
class Func():
__slots__ = (
'module',
'func',
'func',
'comment',
'name'
)
def __init__(self, module="", name="", dummy=False,func=None):
def __init__(self, module="", name="", dummy=False,func=None, comment=''):
self.module = module
self.name = name
self.comment=comment.replace("\0", " ")
if module =="" or name =="" or module is None or name is None:
dummy = True
if func is not None:
......@@ -157,6 +159,7 @@ class State:
self.is_term_state=False
self._branching_states_history = None
self._proxy_state=None
self.comment = ""
def idle_run(self, idle_run_type, branching_states_history):
def __sort_by_order(tr):
......
......@@ -54,37 +54,41 @@ class GraphFactory():
self.states[statename].comment = self.entities[statename].comment
def _create_morphism(self, morphname=None):
comment = ""
if morphname is None:
return Func(), Func()
return Func(), Func(), comment
pred_f, func_f = Func(), Func()
morph = self.entities[morphname]
# print(morph)
print("MORPH:", morph)
for m in morph.__slots__:
if getattr(morph,m) != None:
if m!="predicate" and m!="function":
raise Exception("ERROR: Morphisms could not have any params exept predicate and function!\n{}".format(morphname))
print(m, getattr(morph,m))
if getattr(morph,m) is not None:
if m!="predicate" and m!="function" and m!="comment":
raise Exception("ERROR: Morphisms could not have any params exept comment, predicate and function!\n{}".format(morphname))
if m=="comment":
comment=getattr(morph, m).replace("\0", " ")
if m=="predicate":
if getattr(morph,m) not in self.entities:
raise Exception("\tERROR: Predicate {} is not defined!".format(getattr(morph, m)))
pred = self.entities[getattr(morph, m)]
if self.tocpp:
pred_f = Func(pred.module, pred.entry_func, dummy=True)
pred_f = Func(pred.module, pred.entry_func, dummy=True, comment=pred.comment)
else:
pred_f = Func(pred.module, pred.entry_func)
pred_f = Func(pred.module, pred.entry_func, comment=pred.comment)
if m=="function":
if getattr(morph,m) not in self.entities:
raise Exception("\tERROR: Function: {} is not defined!".format(getattr(morph, m)))
fu = self.entities[getattr(morph, m)]
if self.tocpp:
func_f = Func(fu.module, fu.entry_func, dummy=True)
func_f = Func(fu.module, fu.entry_func, dummy=True, comment=fu.comment)
else:
func_f = Func(fu.module, fu.entry_func)
return pred_f, func_f
func_f = Func(fu.module, fu.entry_func,comment=fu.comment)
return pred_f, func_f, comment
def add_connection(self, st1, st2, morphism=None, ordr=0):
pred, entr = self._create_morphism(morphism)
self.states[st1].connect_to(self.states[st2], edge=Edge(pred, entr, order=ordr))
pred, entr, comm = self._create_morphism(morphism)
self.states[st1].connect_to(self.states[st2], edge=Edge(pred, entr, order=ordr, comment=comm))
print("{} -> {}".format(st1, st2))
def build(self, nsub):
......@@ -107,10 +111,15 @@ class GraphFactory():
self.states[s].selector = Selector(len(self.states[s].transfers))
if s in self.entities and self.entities[s].subgraph is not None:
print("Replacing state {} with subgraph {}".format(s,self.entities[s].subgraph))
parsr = Parser(subgraph=True)
parsr = Parser(subgraph=True, tocpp= self.tocpp)
subgr = parsr.parse_file(self.entities[s].subgraph)
self.entities = {**self.entities, **parsr.fact.entities}
# self.entities = {**self.entities, **parsr.fact.entities}
self.states[s].replace_with_graph(subgr)
self.graph = Graph(self.graph.init_state, self.graph.term_state)
for e in self.entities:
if self.entities[e].comment != "":
print("ECOMM:", self.entities[e])
return self.graph
......@@ -170,6 +179,7 @@ class Parser():
#Props is line "[proFp=smth, ...]"
def _param_from_props(self,props):
parm = Params()
comment = ""
if props =="":
return parm
props = props.replace("]", '')
......@@ -178,9 +188,10 @@ class Parser():
for m in mchs:
props=props[:m.span()[0]]+(props[m.span()[0]:m.span()[1]]).replace(',','\0')+props[m.span()[1]:]
if '\"' in props:
mchs = [m for m in re.finditer(r'\".*\"', props)]
for m in mchs:
props=props[:m.span()[0]]+(props[m.span()[0]+1:m.span()[1]-1]).replace('\0',' ')+props[m.span()[1]:]
m = [m for m in re.finditer(r'\".*\"', props)][0]
comment = props[m.span()[0]+1:m.span()[1]-1]
props=props[:m.span()[0]]+props[m.span()[1]:]
print(props)
props = props.replace("(","")
props = props.replace(")","")
rs =props.split(r",") #.split(r", ")
......@@ -190,6 +201,7 @@ class Parser():
setattr(parm, r[0], r[1])
else:
raise Exception("\tERROR:Unknown parameter: "+ r[0])
setattr(parm, "comment", comment)
return parm
def _param_from_entln(self, raw):
......@@ -292,7 +304,7 @@ class Parser():
for outs in bush.outstates:
if outs not in states_to_check and outs not in self.checked:
states_to_check.append(outs)
send_token(self.fact.graph.init_state, 1, self.bushes, [])
send_token(self.fact.graph.init_state, self.bushes, [])
preds, morphs, sels, st, body = print_graph(self.fact.graph.init_state, self.fact.entities, self.bushes)
from mako.template import Template
f = open("result.cpp", "w")
......@@ -308,29 +320,33 @@ def print_graph(cur_state, entities, bushes):
while len(tocheck) !=0:
cur_state=tocheck[0]
cur_b = bushes[cur_state]
# #print("Name:", cur_state.name)
if len(cur_b.branches)>1:
#print("{}:".format(cur_state.name))
cur_b.token+=1
if cur_b.token < cur_b.state.input_edges_number - cur_b.state.looped_edges_number:
tocheck.remove(cur_state)
tocheck.append(cur_state)
continue
if cur_state in checked:
tocheck.remove(cur_state)
continue
if len(cur_b.branches)>1 or len(cur_b.incomes)>1:
body+="{}:\n".format(cur_state.name)
if len(cur_b.incomes)!=0:
print("//"+cur_b.state.comment.replace('\0', ' ')+"\n")
if cur_b.state.comment!="":
body+="//"+cur_b.state.comment.replace('\0', ' ')+"\n"
stri = "false "
for inc in cur_b.incomes:
stri += "|| SEL_{}[{}] ".format(inc["st"].name, inc["i"])
#print("if (!({}))".format(stri))
body+="if (!({}))".format(stri)
#print("{\n\tfor (int seli = 0;", " seli < {};".format(len(cur_state.transfers)), " seli++)\n", "\t\tSEL_{}[seli]=false;".format(cur_state.name),"\n}")
body+="{\n\tfor (int seli = 0;"+" seli < {};".format(len(cur_state.transfers))+" seli++)\n"+ "\t\tSEL_{}[seli]=false;".format(cur_state.name)+"\n}"
if cur_state.name in entities and entities[cur_state.name].selector is not None:
if cur_state.selector.name != "":
# print(cur_state.name, cur_state.selector)
if cur_state.selector not in toloadsel:
toloadsel.append(cur_state.selector)
#print("else \n{\n", "\tSEL_{} = {}();\n".format(cur_state.name, cur_state.selector), "\n}")
body+="else {\n"+ "\tSEL_{} = {}();\n".format(cur_state.name, cur_state.selector)+"}\n"
body+="else {\n"+ "\tSEL_{} = {}();//{}\n".format(cur_state.name, cur_state.selector, cur_state.selector.comment )+"}\n"
else:
#print("else \n{\n\tfor (int seli = 0;", " seli < {};".format(len(cur_state.transfers)), " seli++)\n", "\t\tSEL_{}[seli]=true;".format(cur_state.name),"\n}")
body+="else {\n\tfor (int seli = 0;"+" seli < {};".format(len(cur_state.transfers))+" seli++)\n"+"\t\tSEL_{}[seli]=true;".format(cur_state.name)+"\n}\n"
for i, br in enumerate(cur_b.branches):
#print("if (SEL_{}[{}])".format(cur_state.name, i))
#print("{")
body+="if (SEL_{}[{}])".format(cur_state.name, i)+"{\n"
if br[len(br)-1].out not in tocheck:
tocheck.append(br[len(br)-1].out)
......@@ -341,22 +357,23 @@ def print_graph(cur_state, entities, bushes):
toloadpred.append(b.pred)
if b.morph not in toloadmorph:
toloadmorph.append(b.morph)
#print("\tcheck_pred({}(data), \"{}\");\{}(data);".format(b.pred,b.pred, b.morph))
body+= "\tcheck_pred({}(data), \"{}\");\n\t{}(data);\n".format(b.pred,b.pred, b.morph)
#print("\tgoto {};".format(br[len(br)-1].out.name))
print("//"+b.comment)
if b.comment!="":
body+="//{}\n".format(b.comment)
body+="\tcheck_pred({}(data), \"{}\");//{}\n\t{}(data);//{}\n".format(b.pred,b.pred, b.pred.comment, b.morph, b.morph.comment)
body+="\tgoto {};\n".format(br[len(br)-1].out.name)+"}\n"
#print("}")
continue
for b in br:
if b.morph.name != "":
if b.pred not in toloadpred:
toloadpred.append(b.pred)
if b.morph not in toloadmorph:
toloadmorph.append(b.morph)
#print("\tcheck_pred({}(data), \"{}\"); {}(data);".format(b.pred,b.pred, b.morph))
body+="\tcheck_pred({}(data), \"{}\");\n\t{}(data);\n".format(b.pred,b.pred, b.morph)
#print("}")
body+="}\n"
else:
for b in br:
if b.morph.name != "":
if b.pred not in toloadpred:
toloadpred.append(b.pred)
if b.morph not in toloadmorph:
toloadmorph.append(b.morph)
print("//"+b.comment)
if b.comment!="":
body+="//{}\n".format(b.comment)
body+="\tcheck_pred({}(data), \"{}\");//{}\n\t{}(data);//{}\n".format(b.pred,b.pred, b.pred.comment, b.morph, b.morph.comment)
body+="}\n"
tocheck.remove(cur_state)
checked.append(cur_state)
return unique(toloadpred), unique(toloadmorph), unique(toloadsel), checked, body
......@@ -368,58 +385,33 @@ def unique(lst):
lst.remove(el2)
return lst
# if cur_state in checked:
# return
# else:
# checked.append(cur_state)
# if len(cur_b.outstates)==0:
# return
# checked.append(cur_state)
# print(cur_b.state.name)
# for i, br in enumerate(cur_b.branches):
# if len(cur_b.branches)>1:
# print("\t"*level,"if SEL_{}[{}]: {}".format(cur_state.name, i, len(cur_b.branches)))
# for b in br:
# print("\t"*(level+1), b.pred)
# print("\t"*(level+1), b.morph)
# out = cur_b.branches[i][len(cur_b.branches[i])-1].out
# if out in checked:
# print("\t"*level,"goto {}".format(out.name))
# elif cur_b.token - bushes[cur_b.outstates[i]].token>0:
# print("{} -> {} : {}".format(cur_state.name, out.name, cur_b.token - bushes[out].token))
# level +=1
# print_bush(out, level, bushes, checked)
# if cur_b.token - bushes[out].token<0:
# print("{} -> {} : {}".format(cur_state.name, out.name, cur_b.token - bushes[out].token))
# level -=1
def send_token(cur_state, token, bushes, checked):
def send_token(cur_state, bushes, checked):
cur_b = bushes[cur_state]
if cur_state in checked:
return
cur_b.token += token
# print(cur_b.state.name,len(cur_b.incomes), len(cur_b.outstates), cur_b.state.input_edges_number, cur_b.state.looped_edges_number)
if len(cur_b.outstates)==0:
return
if len(cur_b.incomes) == cur_b.state.input_edges_number - cur_b.state.looped_edges_number:
checked.append(cur_state)
print("Sending:", cur_state.name)
for i,br in enumerate(cur_b.branches):
bushes[br[len(br)-1].out].incomes.append({"st":cur_state, "i":i})
# print(bushes[br[len(br)-1].out].incomes)
send_token(br[len(br)-1].out, cur_b.token / len(cur_b.branches), bushes, checked)
send_token(br[len(br)-1].out,bushes, checked)
class _Tr():
slots=(
'pred',
'morph',
'comment',
'out'
)
def __init__(self, transf):
self.pred = transf.edge.pred_f
self.morph = transf.edge.morph_f
self.comment = transf.edge.comment
print("TR:", transf.edge.comment)
self.out = transf.output_state
def __str__(self):
......@@ -453,8 +445,11 @@ class _Bush():
def _gen_branch(self, cur_state, branch):
# print("generating", cur_state.name)
while len(cur_state.transfers)==1 and cur_state.input_edges_number==1:
if cur_state._proxy_state is not None:
cur_state=cur_state._proxy_state
tr = cur_state.transfers[0]
branch.append(_Tr(tr))
# print("BR:", cur_state.name)
cur_state = tr.output_state
self.branches.append(branch)
if cur_state not in self.outstates:
......
......@@ -32,22 +32,90 @@ int main(int argc, char const *argv[])
auto data = com::Anymap();
//Predicates
auto test_funcs.simplest_positiveness_predicate = LoadPred("test_funcs.simplest", "positiveness_predicate");
auto libcomsdk_pass_predicate = LoadPred("libcomsdk", "pass_predicate");
//Entry functions
auto test_funcs.simplest_increment_a_edge = LoadEntry("test_funcs.simplest", "increment_a_edge");
auto libgcdfes_pso_swarm_init = LoadEntry("libgcdfes", "pso_swarm_init");
auto libgcdfes_pso_agent_init = LoadEntry("libgcdfes", "pso_agent_init");
auto libgcdfes_pso_task_data_reinit = LoadEntry("libgcdfes", "pso_task_data_reinit");
auto libgcdfes_pso_hom_agent_postproc = LoadEntry("libgcdfes", "pso_hom_agent_postproc");
auto libgcdfes_pso_agent_reinit = LoadEntry("libgcdfes", "pso_agent_reinit");
auto libgcdfes_pso_swarm_analysing = LoadEntry("libgcdfes", "pso_swarm_analysing");
auto libgcdfes_pso_swarm_reinit = LoadEntry("libgcdfes", "pso_swarm_reinit");
auto libcomsdk_pass_processor = LoadEntry("libcomsdk", "pass_processor");
//Selectors
//Branch tokens
bool* SEL___BEGIN__ = new bool[1];
std::fill_n(SEL___BEGIN__, 1, true);
bool* SEL_gcdhom_inverted_model_pso1_S_4 = new bool[1];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_4, 1, false);
bool* SEL_gcdhom_inverted_model_pso1_S_6 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_6, 2, false);
bool* SEL_gcdhom_inverted_model_pso1_S_7 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_7, 2, false);
bool* SEL___END__ = new bool[0];
std::fill_n(SEL___END__, 0, false);
if (SEL___BEGIN__[0]){
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");
test_funcs.simplest_increment_a_edge(data);
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");
test_funcs.simplest_increment_a_edge(data);
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");//
test_funcs.simplest_increment_a_edge(data);//
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_swarm_init(data);//Инициализация метода роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_swarm_init(data);//Инициализация роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_agent_init(data);//Инициализация отдельной частицы в рамках метода роя частиц.
}
if (!(false || SEL___BEGIN__[0] )){
gcdhom_inverted_model_pso1_S_4:
if (!(false || SEL___BEGIN__[0] || SEL_gcdhom_inverted_model_pso1_S_6[0] || SEL_gcdhom_inverted_model_pso1_S_7[0] )){
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=false;
}else {
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_4[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_task_data_reinit(data);//Реинициализация постановки задачи анализа эффективных характеристик КМ методом асимптотического осреднения.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_hom_agent_postproc(data);//Постпроцессинг после решения отдельной задачи методом асимптотического осреднения.
}
gcdhom_inverted_model_pso1_S_6:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_4[0] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_6[seli]=false;
}else {
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_6[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_6[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_agent_reinit(data);//Реинициализация отдельной частицы (смещение частицы) в рое в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_6[1]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_swarm_analysing(data);//Анализ всего роя частиц в рамках метода роя частиц.
}
gcdhom_inverted_model_pso1_S_7:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_6[1] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_7[seli]=false;
}else {
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_7[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_7[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libgcdfes_pso_swarm_reinit(data);//Реинициализация всего роя частиц в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_7[1]){
//ПАСС, морфизм.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");//
libcomsdk_pass_processor(data);//
}
if (!(false || SEL_gcdhom_inverted_model_pso1_S_7[1] )){
for (int seli = 0; seli < 0; seli++)
SEL___END__[seli]=false;
}else {
......
......@@ -27,7 +27,7 @@ def copy_to_c(data):
data['c'] = data['a']
def selector_a_nonpositive(data):
res = data['a'] > 0
res = data['a'] < 0
return [res, not res]
def true_predicate(data):
......
......@@ -9,13 +9,6 @@ from comsdk.graph import *
from comsdk.edge import Edge
prsr = pars.Parser(tocpp=True)
data = {"a":10}
data = {"a":10, "b":0}
gr = prsr.parse_file('./tests/adot/testsub.adot')
# gr.run(data)
# print (data)
print(prsr.generate_cpp())
# for b in prsr.bushes:
prsr.generate_cpp()
\ No newline at end of file
digraph ADD {
FUNC [module=test_funcs.simplest, entry_func=increment_a_edge]
FUNC [module=test_funcs.simplest, entry_func=increment_b_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
MORPH [predicate=PRED, function=FUNC]
MORPH [predicate=PRED, function=FUNC, comment="ADD"]
__BEGIN__ -> ST [morphism = MORPH]
ST -> __END__
ST -> __END__
}
\ No newline at end of file
digraph gcdfem_preprocessor
digraph gcdhom_inverted_model_pso
{
// Определение функций-обработчиков
PASS_PROCESSOR [module=libcomsdk, entry_func=pass_processor, comment=""]
FEM_TASK_LOAD [module=libgcdfes, entry_func=fem_task_loader, comment=""]
SLD_DATA_LOAD [module=libgcdfes, entry_func=sld_data_loader, comment=""]
BC_LOAD [module=libgcdfes, entry_func=bc_loader, comment=""]
CMP_PREPARE [module=libgcdfes, entry_func=computation_prepare, comment=""]
MESH_LOAD [module=libgcdfes, entry_func=fe_mesh_loader, comment=""]
FE_TYPE_LOAD [module=libgcdfes, entry_func=fe_type_loader, comment=""]
PASS_PROCESSOR [module=libcomsdk, entry_func=pass_processor]
CHECK_PSO_AGENT_REINIT [module=libgcdfes, entry_func=check_pso_agent_reinit, comment="Проверка о необходимости реинициализации отдельной частицы (смещение частицы) в рое в рамках метода роя частиц."]
CHECK_PSO_SWARM_REINIT [module=libgcdfes, entry_func=check_pso_swarm_reinit, comment="Проверка о необходимости реинициализации всего роя частиц в рамках метода роя частиц."]
// Определение функций-предикатов
PASS_PREDICATE [module=libcomsdk, entry_func=pass_predicate, comment=""]
PSO_AGENT_REINIT [module=libgcdfes, entry_func=pso_agent_reinit, comment="Реинициализация отдельной частицы (смещение частицы) в рое в рамках метода роя частиц."]
PSO_SWARM_REINIT [module=libgcdfes, entry_func=pso_swarm_reinit, comment="Реинициализация всего роя частиц в рамках метода роя частиц."]
PSO_SWARM_ANALYSING [module=libgcdfes, entry_func=pso_swarm_analysing, comment="Анализ всего роя частиц в рамках метода роя частиц."]
PSO_HOM_AGENT_POSTPROC [module=libgcdfes, entry_func=pso_hom_agent_postproc, comment="Постпроцессинг после решения отдельной задачи методом асимптотического осреднения."]
PSO_TASK_DATA_REINIT [module=libgcdfes, entry_func=pso_task_data_reinit, comment="Реинициализация постановки задачи анализа эффективных характеристик КМ методом асимптотического осреднения."]
PSO_AGENT_INIT [module=libgcdfes, entry_func=pso_agent_init, comment="Инициализация отдельной частицы в рамках метода роя частиц."]
// Определение морфизмов
FEM_TASK_MORPHISM [predicate=PASS_PREDICATE, function=FEM_TASK_LOAD]
SLD_DATA_MORPHISM [predicate=PASS_PREDICATE, function=SLD_DATA_LOAD]
BC_LOADER_MORPHISM [predicate=PASS_PREDICATE, function=BC_LOAD]
CMP_PREPARE_MORPHISM [predicate=PASS_PREDICATE, function=CMP_PREPARE]
MESH_CREATOR_MORPHISM [predicate=PASS_PREDICATE, function=MESH_LOAD]
FE_TYPE_LOADER_MORPHISM [predicate=PASS_PREDICATE, function=FE_TYPE_LOAD]
PSO_SWARM_INIT [module=libgcdfes, entry_func=pso_swarm_init, comment="Инициализация роя частиц."]
// Определение морфизмов
PASS_MORPHISM [predicate=PASS_PREDICATE, function=PASS_PROCESSOR]
PSO_INIT [module=libgcdfes, entry_func=pso_swarm_init, comment="Инициализация метода роя частиц."]
// Определение функций-предикатов
PASS_PREDICATE [module=libcomsdk, entry_func=pass_predicate]
// Определение морфизмов
PASS_MORPHISM [predicate=PASS_PREDICATE, function=PASS_PROCESSOR, comment="ПАСС, морфизм."]
PSO_AGENT_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_AGENT_REINIT]
PSO_SWARM_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_REINIT]
PSO_SWARM_ANALYSING_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_ANALYSING]
PSO_HOM_AGENT_POSTPROC_MORPHISM [predicate=PASS_PREDICATE, function=PSO_HOM_AGENT_POSTPROC]
PSO_TASK_DATA_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_TASK_DATA_REINIT]
PSO_AGENT_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_AGENT_INIT]
PSO_SWARM_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_INIT]
PSO_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_INIT]
// Определение атрибутов узлов
S_1 [parallelism=threading]
S_1 [subgraph=gcdhom_preprocessor.adot]
S_5 [subgraph=gcdhom_processor.adot]
S_6 [selector=CHECK_PSO_AGENT_REINIT]
S_7 [selector=CHECK_PSO_SWARM_REINIT]
// Определение топологии графовой модели метода конечных элементов
__BEGIN__ -> S_1
S_1 -> S_2, S_3, S_4, S_5 [morphism=(FEM_TASK_MORPHISM, SLD_DATA_MORPHISM, BC_LOADER_MORPHISM, CMP_PREPARE_MORPHISM)]
S_2, S_3 -> S_6 [morphism=(MESH_CREATOR_MORPHISM, PASS_MORPHISM)]
S_6 -> S_7 [morphism=FE_TYPE_LOADER_MORPHISM]
S_7, S_4, S_5 -> S_8 [morphism=(PASS_MORPHISM, PASS_MORPHISM, PASS_MORPHISM)]
S_8 -> __END__
S_1 -> S_2 [morphism=PSO_INIT_MORPHISM]
S_2 -> S_3 [morphism=PSO_SWARM_INIT_MORPHISM]
S_3 -> S_4 [morphism=PSO_AGENT_INIT_MORPHISM]
S_4 -> S_5 [morphism=PSO_TASK_DATA_REINIT_MORPHISM]
S_5 -> S_6 [morphism=PSO_HOM_AGENT_POSTPROC_MORPHISM]
S_6 -> S_4, S_7 [morphism=(PSO_AGENT_REINIT_MORPHISM, PSO_SWARM_ANALYSING_MORPHISM), order=(10,20)]
S_7 -> S_4, S_8 [morphism=(PSO_SWARM_REINIT_MORPHISM, PASS_MORPHISM), order=(30,40)]
S_8 -> __END__ [comment = "Расчет завершён."]
}
......@@ -2,10 +2,13 @@ digraph TEST_SUB {
FUNC [module=test_funcs.simplest, entry_func=increment_a_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
MORPH [predicate=PRED, function=FUNC]
ST2 [subgraph = tests/adot/add.adot]
SEL [module=test_funcs.simplest, entry_func=selector_a_nonpositive]
__BEGIN__ -> ST1
ST1 -> ST2 [morphism=MORPH]
ST2 -> __END__
ST2 [subgraph = tests/adot/file.adot]
ST3 [selector = SEL]
__BEGIN__ -> ST1 [morphism = MORPH]
ST1 -> ST2
ST2 -> ST3
ST3 -> __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