diff --git a/pages/application/DecisionTree/DecisionTreeComponent.py b/pages/application/DecisionTree/DecisionTreeComponent.py index 9f681bff56465035278eb70d42de08914a5a43f4..2612aef11c971b2cf4876134904064d2e97bafd1 100644 --- a/pages/application/DecisionTree/DecisionTreeComponent.py +++ b/pages/application/DecisionTree/DecisionTreeComponent.py @@ -25,9 +25,7 @@ class DecisionTreeComponent(): self.uploaded_dt = UploadedDecisionTree(tree, 'SKL', filename_tree, maxdepth=tree.get_depth(), feature_names=feature_names, nb_classes=tree.n_classes_) #need a function that takes as input UploadedDecisionTree and gives DecisionTree - #self.dt = DecisionTree(from_dt=) - dt = open("pages/application/DecisionTree/meteo.dt", "r").read() - self.dt = DecisionTree(from_dt=dt) + self.dt = DecisionTree(from_dt=self.uploaded_dt.dump()) dot_source = visualize(self.dt) self.network = [dbc.Row(dash_interactive_graphviz.DashInteractiveGraphviz(dot_source=dot_source, style = {"width": "60%", diff --git a/pages/application/DecisionTree/utils/dtree.py b/pages/application/DecisionTree/utils/dtree.py index d3bd0582ed1da896f96aaa8626d482cae0418343..5d52a233c4300ecb230b3e896b0c53893a2d8d1c 100644 --- a/pages/application/DecisionTree/utils/dtree.py +++ b/pages/application/DecisionTree/utils/dtree.py @@ -265,7 +265,6 @@ class DecisionTree(): # computing the sets to hit to_hit = self.prepare_sets(inst, term) - for type in xtype : if type == "AXp": explanation_dic.update(self.enumerate_abductive(to_hit, enum, solver, htype, term)) diff --git a/pages/application/DecisionTree/utils/upload_tree.py b/pages/application/DecisionTree/utils/upload_tree.py index 86c9430436ddd5a1fa96b2b9d45b32dd31dea34c..99ffa7a2fda20fd0460951c3233dbcb44861a5fa 100644 --- a/pages/application/DecisionTree/utils/upload_tree.py +++ b/pages/application/DecisionTree/utils/upload_tree.py @@ -221,86 +221,34 @@ class UploadedDecisionTree: domains = {f:[j for j in fvmap[f] if((fvmap[f][j][1]))] for f in fvmap} internal, terminal = walk_tree(self.tree, domains, [], []) - - if filename and maxdepth: - fname = os.path.splitext(os.path.basename(filename))[0] - dir_name = os.path.join(output, 'tree', fname) - dir_name = os.path.join(dir_name, f"{self.tool}{maxdepth}") - - if self.tool == 'ITI': - dir_name = os.path.join(dir_name, self.tool) - elif filename: - fname = os.path.splitext(os.path.basename(filename))[0] - dir_name = os.path.join(output, f'tree/{fname}/{self.tool}') - else: - fname = "tree" - dir_name = os.path.join(output) - - try: - os.stat(dir_name) - except: - os.makedirs(dir_name) + #.dt + dt="" + dt += f"{self.n_nodes}\n{self.tree.id}\n" + dt += f"I {' '.join(dict.fromkeys([str(i) for i,_,_,_ in internal]))}\n" + dt += f"T {' '.join([str(i) for i,_ in terminal ])}\n" + for i,c in terminal: + dt += f"{i} T {c}\n" + for i,f, j, n in internal: + dt += f"{i} {f} {j} {n}\n" - fname = os.path.join(dir_name, fname+'.dt') - print("saving dtree to ", fname) - - with open(fname, 'w') as fp: - fp.write(f"{self.n_nodes}\n{self.tree.id}\n") - fp.write(f"I {' '.join(dict.fromkeys([str(i) for i,_,_,_ in internal]))}\n") - fp.write(f"T {' '.join([str(i) for i,_ in terminal ])}\n") - for i,c in terminal: - fp.write(f"{i} T {c}\n") - for i,f, j, n in internal: - fp.write(f"{i} {f} {j} {n}\n") - - if filename and maxdepth: - fname = os.path.splitext(os.path.basename(filename))[0] - dir_name = os.path.join(output, 'map', fname) - if self.tool == "ITI": - dir_name = os.path.join(dir_name, self.tool) - else: - dir_name = os.path.join(dir_name, f'{self.tool}{maxdepth}') - elif filename: - fname = os.path.splitext(os.path.basename(filename))[0] - dir_name = os.path.join(output, f'map/{fname}/{self.tool}') - else: - fname = "tree" - dir_name = os.path.join(output) - - try: - os.stat(dir_name) - except: - os.makedirs(dir_name) - - fname = os.path.join(dir_name, fname+'.map') - print("saving dtree map to ", fname) - - with open(fname, 'w') as fp: - fp.write("Categorical\n") - fp.write(f"{len(fvmap)}\n") - for f in fvmap: - for v in fvmap[f]: - if (fvmap[f][v][1] == True): - fp.write(f"{f} {v} ={fvmap[f][v][2]}\n") - if (fvmap[f][v][1] == False) and self.tool == "ITI": - fp.write(f"{f} {v} !={fvmap[f][v][2]}\n") + #.map + map="" + map+="Categorical\n" + map+=f"{len(fvmap)}\n" + for f in fvmap: + for v in fvmap[f]: + if (fvmap[f][v][1] == True): + map+=f"{f} {v} ={fvmap[f][v][2]}\n" + if (fvmap[f][v][1] == False) and self.tool == "ITI": + map+=f"{f} {v} !={fvmap[f][v][2]}\n" - if feat_names is not None: - if filename: - fname = os.path.splitext(os.path.basename(filename))[0] - fname = os.path.join(dir_name, fname+'.txt') - else: - fname = os.path.join(dir_name, 'map.txt') - - print("saving feature map to ", fname) - - with open(fname, 'w') as fp: - for i,fid in enumerate(feat_names): - f=f'f{i}' - fp.write(f'{fid}:{f},'+",".join([f'{fvmap[f][v][2]}:{v}' for v in fvmap[f] if(fvmap[f][v][1])])+'\n') - # - print('Done') - # end dump fct + for i,fid in enumerate(feat_names): + f=f'f{i}' + map+f'{fid}:{f},'+",".join([f'{fvmap[f][v][2]}:{v}' for v in fvmap[f] if(fvmap[f][v][1])])+'\n' + # + print(dt) + print(map) + return dt, map def build_tree(self, json_tree=None, feature_names=None):