Commit f3bfd376 authored by Savva Golubitsky's avatar Savva Golubitsky

if nesting

parent d19b237f
......@@ -278,29 +278,29 @@ class Parser():
toload = []
edgemap = {}
def _gen_branch(self,cur_state):
root = cur_state.name
edges = []
while cur_state is not None:
if len(cur_state.transfers)==0:
cur_state = None
elif len(cur_state.transfers)==1:
edges.append({"pred": str(cur_state.transfers[0].edge.pred_f),
"morph": str(cur_state.transfers[0].edge.morph_f)})
if str(cur_state.transfers[0].edge.pred_f) not in self.toload:
self.toload.append(str(cur_state.transfers[0].edge))
if str(cur_state.transfers[0].edge.morph_f) not in self.toload:
self.toload.append(str(cur_state.transfers[0].edge))
cur_state = cur_state.transfers[0].output_state
else:
pass
self.edgemap[root] = list(filter(lambda x: x["morph"] != '', edges))
return
# def _gen_branch(self,cur_state):
# root = cur_state.name
# edges = []
# while cur_state is not None:
# if len(cur_state.transfers)==0:
# cur_state = None
# elif len(cur_state.transfers)==1:
# edges.append({"pred": str(cur_state.transfers[0].edge.pred_f),
# "morph": str(cur_state.transfers[0].edge.morph_f)})
# if str(cur_state.transfers[0].edge.pred_f) not in self.toload:
# self.toload.append(str(cur_state.transfers[0].edge))
# if str(cur_state.transfers[0].edge.morph_f) not in self.toload:
# self.toload.append(str(cur_state.transfers[0].edge))
# cur_state = cur_state.transfers[0].output_state
# else:
# pass
# self.edgemap[root] = list(filter(lambda x: x["morph"] != '', edges))
# return
checked=[]
bushes = []
bushes = {}
selectorends = {}
def generate_cpp(self):
states_to_check = [self.fact.graph.init_state]
while len(states_to_check)!=0:
......@@ -310,7 +310,7 @@ class Parser():
bush = _Bush(st)
print("ins:", bush.state.name)
bush.grow_bush()
self.bushes.append(bush)
self.bushes[st] = bush
for i, br in enumerate(bush.branches):
for b in br:
print(i, b)
......@@ -319,17 +319,49 @@ class Parser():
print(outs.name)
if outs not in states_to_check and outs not in self.checked:
states_to_check.append(outs)
# for b in self.bushes:
# print(b.name, "::")
# for o in self.bushes[b].outstates:
# print(o.name, len(o.transfers), end=' ')
# print()
# cur_b = self.bushes[self.fact.graph.init_state]
# cur_b.selectorfin = None
# cur_b.token = 1
# tocheck = cur_b.outstates
# while len(tocheck)!=0:
# for st in cur_b.outstates:
# self.bushes[st].token = cur_b.level / len(cur_b.branches)
# self.bushes[self.fact.graph.init_state].token
send_token(self.fact.graph.init_state, 1,self.bushes, [])
for b in self.bushes:
print("-"*int(1/self.bushes[b].token), b.name, self.bushes[b].token)
def send_token(cur_state, token, bushes, checked):
cur_b = bushes[cur_state]
print("NAME:", cur_state.name, cur_b.token )
if cur_state in checked:
return
cur_b.token += token
cur_b.incomes +=1
if len(cur_b.outstates)==0:
return
if cur_b.incomes == cur_b.state.input_edges_number - cur_b.state.looped_edges_number:
checked.append(cur_state)
for st in cur_b.outstates:
send_token(st,token / len(cur_b.outstates), bushes, checked)
class _Tr():
slots=(
'pred',
'morph'
'morph',
'out'
)
def __init__(self, transf):
self.pred = transf.edge.pred_f
self.morph = transf.edge.morph_f
self.out = transf.output_state
def __str__(self):
return "{}\n{}\n".format(self.pred, self.morph)
......@@ -340,7 +372,10 @@ class _Bush():
'state',
'selector',
'branches',
'outstates'
'outstates',
'token',
'incomes',
'selectorfin'
)
def __init__(self, state):
......@@ -348,6 +383,8 @@ class _Bush():
self.selector = state.selector
self.branches = []
self.outstates = []
self.token = 0
self.incomes = 0
def grow_bush(self):
for t in self.state.transfers:
......@@ -363,3 +400,5 @@ class _Bush():
self.branches.append(branch)
if cur_state not in self.outstates:
self.outstates.append(cur_state)
......@@ -35,14 +35,32 @@ int main(int argc, char const *argv[])
entrFunc(data);
SELECTOR:
ST_selector_val = selector(data);
SELECTOR:
if (ST_selector_val[0]) {
ST_selector_val[0] = false;
branch1();
} else {
goto NODE;
}
if(ST_selector_val[1]) {
ST_selector_val[1] = false;
ST2_selector_val = selector2(data);
branch2();
}
else {
goto NODE;
}
NODE:
NODE_counter++;
if NODE_counter == NODE_capacity{
goto NEXT_NODE;
} else {
goto SELECTOR;
}
TERM:
std::cout<<"Termination!\n";
return 0;
......
......@@ -10,12 +10,12 @@ from comsdk.edge import Edge
prsr = pars.Parser(tocpp=True)
data = {"a":10}
gr = prsr.parse_file('./tests/adot/testsimple.adot')
gr = prsr.parse_file('./tests/adot/file.adot')
# gr.run(data)
# print (data)
print(prsr.generate_cpp())
for b in prsr.bushes:
# for b in prsr.bushes:
digraph gcdhom_inverted_model_pso
{
// Определение функций-обработчиков
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="Проверка о необходимости реинициализации всего роя частиц в рамках метода роя частиц."]
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="Инициализация отдельной частицы в рамках метода роя частиц."]
PSO_SWARM_INIT [module=libgcdfes, entry_func=pso_swarm_init, comment="Инициализация роя частиц."]
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]
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 [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 [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 = "Расчет завершён."]
}
......@@ -12,9 +12,11 @@ digraph SIMPLE {
MORPH2 [predicate=PRED2, function=FUNC2]
__BEGIN__ -> ST1 [morphism = MORPH]
ST1 -> ST2, ST21 [morphism = (MORPH, MORPH1)]
ST2 -> ST3[morphism = MORPH]
ST21 -> ST31, ST312[morphism =(MORPH1,MORPH2)]
ST3, ST31, ST312 -> ST4[morphism = (MORPH,MORPH1,MORPH2) ]
ST4 -> ST1, __END__
ST1 -> ST2, ST3, ST4 [morphism = (MORPH, MORPH1, MORPH2)]
ST2 -> ST3, ST5 [morphism = (MORPH1,MORPH2)]
ST4 -> ST3 [morphism = MORPH]
ST3 -> ST5 [morphism = MORPH]
//ST21 -> ST31, ST312[morphism =(MORPH1,MORPH2)]
//ST3, ST31, ST312 -> ST4[morphism = (MORPH,MORPH1,MORPH2) ]
ST5 -> __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