Ejemplo n.º 1
0
def render_tree(args, tree):
    """Render tree in ASCII and graphviz"""
    with codecs.open("{0}/{1}.txt".format(args.output_dir, constants.TREE),
                     "w",
                     encoding="utf8") as txt_file:
        for pre, _, node in anytree.RenderTree(tree):
            txt_file.write("%s%s: %s (%s: %s)\n" %
                           (pre, node.name, node.description.title(),
                            args.effect_name, str(node.effect_size)))
    graph_options = [
    ]  # Example: graph_options = ["dpi=300.0;", "style=filled;", "bgcolor=yellow;"]
    DotExporter(tree,
                options=graph_options,
                nodeattrfunc=lambda node: nodeattrfunc(args, node)).to_dotfile(
                    "{0}/{1}.dot".format(args.output_dir, constants.TREE))
    try:
        DotExporter(
            tree,
            options=graph_options,
            nodeattrfunc=lambda node: nodeattrfunc(args, node)).to_picture(
                "{0}/{1}.png".format(args.output_dir, constants.TREE))
    except FileNotFoundError:
        raise FileNotFoundError(
            "Error during tree rendering - is Graphviz installed on your system?\n"
        )
Ejemplo n.º 2
0
def visualization_path(model,
                       path,
                       target_node,
                       type_analysis,
                       filename,
                       rankdir='TB'):
    """
    Visualize dominant path

    Parameters
    ----------
    model: pysb.Model
        pysb model used for analysis
    path: list
        list that have the tree structure of the path, generated by the discretization step.
    target_node: str
        Species target used to obtain the dominant paths
    type_analysis: str
        Type of analysis done to obtain the path. It can either be `production` or `consumption`
    filename: str
        File name including the extension of the image file

    Returns
    -------

    """

    generate_equations(model)

    def find_numbers(dom_r_str):
        n = map(int, re.findall('\d+', dom_r_str))
        return n

    def nodenamefunc(node):
        node_idx = list(find_numbers(node.name))[0]
        node_sp = model.species[node_idx]
        node_name = parse_name(node_sp)
        return node_name

    def edgeattrfunc(node, child):
        return 'dir="back"'

    root = _create_tree(target_node, path)

    if type_analysis == 'production':
        DotExporter(root,
                    graph='strict digraph',
                    options=["rankdir={};".format(rankdir)],
                    nodenamefunc=nodenamefunc,
                    edgeattrfunc=edgeattrfunc).to_picture(filename)
    elif type_analysis == 'consumption':
        DotExporter(root,
                    graph='strict digraph',
                    options=["rankdir={};".format(rankdir)],
                    nodenamefunc=nodenamefunc,
                    edgeattrfunc=None).to_picture(filename)
    else:
        raise ValueError('Type of visualization not implemented')
Ejemplo n.º 3
0
def home():
    # arr = randomize()
    global arr
    goal_state =np.array([1,2,3,4,12,13,14,5,11,0,15,6,10,9,8,7]).reshape((4,4))
    # goal_state = np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]).reshape((4,4))

    if 'random' in request.form:
        arr = random_state()
        return render_template('test.html',arr=arr)
    elif 'custom' in request.form:
        var  = request.form['textbox']
        ls = var.split(',')
        results = list(map(int, ls))
        arr = np.array(results).reshape((4,4))
        print("arr",arr)
        goal_state = goal_state.tolist()
        return render_template('test.html',arr=arr)


    #
    if request.form.get('bfs') == '1' and request.form['search'] == 'find':
        # arr = arr.tolist()
        goal_state = goal_state.tolist()
        print('Goal State :', goal_state)
        path , count = pz.best_first_search(arr,goal_state)
        print(path)
        DotExporter(path).to_picture("static/images/tree.png")
        # make_transparent()
        full_filename = os.path.join(app.config['UPLOAD_FOLDER'], 'tree.png')
        print(full_filename)
        return render_template('test.html', tree=full_filename , arr = goal_state, count = count)


    if request.form.get('bfs') == '2' and request.form['search'] == 'find':
        # arr =  np.array([1,3,4,5,12,2,14,6,11,0,8,15,10,13,9,7]).reshape((4,4))
        arr = np.array(arr)
        Puzzle1 = astar.Puzzle()
        path,counter = Puzzle1.process(arr,goal_state)
        print(path)
        DotExporter(path).to_picture("static/images/tree.png")
        # make_transparent()
        fname = os.path.join(app.config['UPLOAD_FOLDER'], 'tree.png')
        print(fname)
        # im = Image(path.create_png())
        # display(im)
        return render_template('test.html', tree= fname, arr= goal_state, count = counter)


        # pass # do something
    # elif 'watch' in request.form:
        # pass # do something else
    return render_template('test.html', arr= arr)
Ejemplo n.º 4
0
def export(tree, filename, ext='json', **kwargs):
  parent = _get_printable_tree(tree)
  if ext == 'json':
    with io.open(f'{filename}.json', mode='w+', encoding='utf-8') as fp:
      JsonExporter(**kwargs).write(parent, fp)
  else:
    DotExporter(parent, **kwargs).to_picture(f'{filename}.{ext}')
Ejemplo n.º 5
0
 def generate_parse_tree(self, tokens):
     Global.token_stream[:] = tokens
     Global.cursor = 0
     tree_root = Node('program')
     print(Global.code_objs['decl_list'].check(tree_root))
     print(RenderTree(tree_root))
     DotExporter(tree_root).to_picture('../parse_tree.png')
Ejemplo n.º 6
0
def getRequisits(id):
    r = requests.get(url + '/assignatures/requisits' + pack).json()
    assig = Node(id)
    resultat = cerca(id, assig, r)
    print(assig)
    print(RenderTree(assig))
    DotExporter(assig).to_picture("tree.png")
def drawExpressionTree(postfix):
    """Draw expression tree in console and output to file"""
    stack = []
    index = 0
    for i in postfix:
        if type(i) is float or i == 'x':
            stack.append(Node(index, parent=None, val=i))
            index += 1
        else:
            if i == 'sqrt':
                child = stack.pop()
                parent = Node(index, parent=None, val=i)
                index += 1
                child.parent = parent
                stack.append(parent)
            elif i == '-' and len(stack) == 1:
                child = stack.pop
                parent = Node(index, parent=None,
                              val=i) index += 1 child.parent = parent
                stack.append(parent)
            else:
                right = stack.pop()
                left = stack.pop()
                parent = Node(index, parent=None, val=i)
                index += 1
                left.parent = parent
                right.parent = parent
                stack.append(parent)
    root = stack.pop()
    DotExporter(root, graph="graph", nodeattrfunc=nodeattrfunc,
                edgetypefunc=edgetypefunc).to_dotfile("tree.dot")
    print("\nExpression Tree:")
    print(RenderTree(root, style=DoubleStyle).by_attr(attrname='val'))
Ejemplo n.º 8
0
    def takeTempPolicy(self):
        li = [[0, 0, 1, 0], [0, 2, 1, 0], [1, 2, 1, 0], [1, 3, 1, 0],
              [0, 3, 0, 0], [1, 4, 1, 0], [0, 4, 0, 1]]
        if (len(li) == 0):
            return
        nodes = [
            AnyNode(name="temp", parent=self.root, dim=0, part=0, inheritedN=0)
            for i in range(len(li))
        ]
        parentNode = self.root
        TreeTravDirec = li[0][0]
        #print(TreeTravDirec)
        for i in range(len(li)):
            if (li[i][0] != TreeTravDirec):
                TreeTravDirec = li[i][0]
                parentNode = nodes[i - 1]
            inheritedN = self.g.childNodeN(parentNode.inheritedN)
            nodes[i].name = str(i)
            nodes[i].dim = str(li[i][0])
            nodes[i].val = str(li[i][1])
            nodes[i].parent = parentNode
            nodes[i].inheritedN = inheritedN

            self.takeAction(li[i][0], li[i][1], li[i][3], inheritedN)

        self.g.renderEnv()
        #print(nameNode,"yo")
        #AnyNode(name="sub0B", parent=s0, index=1, partition=9)
        DotExporter(self.root).to_picture("TreeDiag/root.png")
Ejemplo n.º 9
0
    def print_population_tree(self,
                              image: bool = False,
                              path: str or None = None):
        """
        Print population tree to stdout or save as an image if 'image' is True.

        Parameters
        ----------
        image: bool (default=False)
            Save tree as a png image
        path: str (optional)
            File path for image, ignored if 'image' is False.
            Defaults to working directory.

        Returns
        -------
        None
        """
        root = self.tree['root']
        if image:
            from anytree.exporter import DotExporter
            path = path or f'{os.getcwd()}/{self.id}_population_tree.png'
            DotExporter(root).to_picture(path)
        for pre, fill, node in anytree.RenderTree(root):
            print('%s%s' % (pre, node.name))
Ejemplo n.º 10
0
def render(tree, tree_size, filename=decision_tree_picture_path):
    tree_to_render = build_tree(tree.root, tree_size)
    DotExporter(
        tree_to_render,
        nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name),
        edgeattrfunc=lambda p, c: 'label="{}"'.format(c.edge)).to_picture(
            filename)
Ejemplo n.º 11
0
    def visualise(self, filename):
        """
        Produces a .png file of the tree (this node and its children) with the
        name filename

        Parameters
        ----------

        filename : str
            filename to output, must end in ".png"

        """

        # check that filename ends in .png.
        if filename[-4:] != ".png":
            raise ValueError("filename should end in .png")

        new_node, counter = self.relabel_tree(self, 0)

        try:
            DotExporter(new_node,
                        nodeattrfunc=lambda node: 'label="{}"'.format(
                            node.label)).to_picture(filename)
        except FileNotFoundError:
            # raise error but only through logger so that test passes
            pybamm.logger.error(
                "Please install graphviz>=2.42.2 to use dot exporter")
Ejemplo n.º 12
0
def Imprimir_solucao(solucao,filename,mapa):
    
    node_list = []
    parent = solucao
    while (parent):
        node_list.append(parent)
        parent = parent.parent
        
    list_solucao = []
    custo_total = 0
    list_id = []
    for node in reversed(node_list):
        name = [x.strip() for x in node.name.split(',')][0]
        list_id.append(node.city_id)
        if(node.parent):
            list_solucao.append(Node(name,parent = list_solucao[-1]))
            custo_total += calc_dist_haversine(mapa.change_id2pos(node.city_id),mapa.change_id2pos(node.parent.city_id))
        else:
           list_solucao.append(Node(name))

    
    DotExporter(list_solucao[0]).to_dotfile(filename)
    render('dot', 'pdf', filename)
    print("Altura da Arvore de busca: ",node_list[-1].height)
    print("Numero de nós da Arvore de busca",len(node_list[-1].descendants) +1)
    print("Custo Total: ",custo_total)
    print("IDS: ",list_id)
    def program(self):
        result = self.combined_calculation()

        #Visualization
        root = Node("Data")
        for i in range(0, len(result[0])):
            label_bayes = "Bayes {}".format(result[0][i])
            label_ctr = "CTR {}".format(result[1][i])
            label_chance = "Chance {}".format(result[2][i])
            label_suff = "Sufficiency {}".format(result[3][i])
            label_glob = "Glob {}".format(result[4])
            label_prob = "Probability {}".format(result[5])

            bayes = Node(label_bayes, parent=root)
            ctr = Node(label_ctr, parent=bayes)
            prob = Node(label_chance, parent=ctr)
            logsuff = Node(label_suff, parent=prob)
            glob = Node(label_glob, parent=logsuff)
            prob = Node(label_prob, parent=glob)

        #for line in DotExporter(root):
        #    print(line)

        DotExporter(root).to_dotfile("tree.dot")
        (graph, ) = pydot.graph_from_dot_file('tree.dot')
        graph.write_png('tree.png')
Ejemplo n.º 14
0
    def export(self, full=False):
        """
        Export tree into graphviz format in both *.dot file and image *.png file

        Parameters
        ----------
        full: boolean value, if True also the regex mappings are printed in the resulting file
        """
        def nodeattr_fn(node):
            return f'style=filled color={COLOR_SCHEME[node.depth]}'

        def nodename_fn(node):
            nl = "\n"
            name = node.name
            if hasattr(node, "regex"):
                name = f"""
{node.name}
-----------
{nl.join(node.regex)}
"""
            return name

        root = self.nodes[self.root_key]
        dot = DotExporter(
            root,
            nodenamefunc=nodename_fn if full else None,
            nodeattrfunc=nodeattr_fn,
            options=[
                'graph [layout = dot, ranksep="1.5", nodesep="0.7"]',
                'rankdir ="LR"',
                'node [fontname="Arial"]'
            ]
        )
        dot.to_dotfile(f"./{self.root_key}.dot")
        dot.to_picture(f"./{self.root_key}.png")
Ejemplo n.º 15
0
def render_fm_tree(root_node, filename='tree.png'):

    # Function to format nodes in FM tree
    def format_box(node):
        # https://graphviz.org/doc/info/shapes.html
        if node.level_id == 0:
            # Item Level Node
            return "fixedsize=false, shape=rect, fillcolor=lightgrey, style=filled"
        else:
            if not node.policy_tc:
                # Error? missing policy_tc entry for this Node
                return "fixedsize=false, shape=ellipse, fillcolor=pink, style=filled"

            elif len(node.policy_tc) > 1:
                # Node with multiple layers
                return "fixedsize=false, shape=rect, fillcolor=orange, style=filled"
            else:
                # Cov or loc nodes
                return "fixedsize=false, shape=ellipse, fillcolor=lightblue, style=filled"

    # Function to add weighted 'by layer number' edges
    def layered_edge(node, child):
        # https://anytree.readthedocs.io/en/latest/tricks/weightededges.html
        if hasattr(child, 'layer_max'):
            if child.layer_max > 1:
                return 'dir=back, style=bold, label=" {} Layers"'.format(child.layer_max)
        return "dir=back"

    # Render tree to png
    dot_data = DotExporter(
        root_node,
        edgeattrfunc=layered_edge,
        nodeattrfunc=format_box)
    dot_data.to_picture(filename)
Ejemplo n.º 16
0
def test_tree2():
    """Tree2."""
    root = Node("root")
    s0 = Node("sub0", parent=root, edge=2)
    Node("sub0B", parent=s0, foo=4, edge=109)
    Node("sub0A", parent=s0, edge="")
    s1 = Node("sub1", parent=root, edge="")
    Node("sub1A", parent=s1, edge=7)
    Node("sub1B", parent=s1, edge=8)
    s1c = Node("sub1C", parent=s1, edge=22)
    Node("sub1Ca", parent=s1c, edge=42)

    def nodenamefunc(node):
        return '%s:%s' % (node.name, node.depth)

    def edgeattrfunc(node, child):
        return 'label="%s:%s"' % (node.name, child.name)

    r = DotExporter(root,
                    options=["rankdir=LR;"],
                    nodenamefunc=nodenamefunc,
                    nodeattrfunc=lambda node: "shape=box",
                    edgeattrfunc=edgeattrfunc)

    r.to_dotfile(join(GENPATH, "tree2.dot"))
    assert cmp(join(GENPATH, "tree2.dot"), join(REFPATH, "tree2.dot"))
Ejemplo n.º 17
0
def visualize_tree_dot(tree, mode, node_to_class, node_to_classes, filename):

    tree = deepcopy(tree)
    if mode == 'ids':
        pass
    elif isinstance(mode, dict):
        for node in PreOrderIter(tree):
            if not node.is_leaf:
                node.name = mode.get(node_to_class[node.name], 'root') + '_' + \
                    str(node.name)
            else:
                node.name = mode.get(node_to_classes[node.name][0], 'root') + '_' + \
                    str(node.name)

    elif mode == 'classes':
        for node in PreOrderIter(tree):
            node.name = ''.join([
                str(node_to_class.get(node.name, 'root')),
                ':',
                str(node_to_classes[node.name]).replace(' ', ''),
                '\n',
            ])
    else:
        raise ValueError(f'No mode named {mode}')

    DotExporter(tree).to_picture(filename)
    return filename
Ejemplo n.º 18
0
def render_tree(opts, tree):
    """Render tree in ASCII and graphviz"""
    with codecs.open(
            f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.txt",
            "w",
            encoding="utf8") as txt_file:
        for pre, _, node in anytree.RenderTree(tree):
            txt_file.write("%s%s: %s (%s: %s)\n" %
                           (pre, node.name, node.description.title(),
                            opts.effect_name, str(node.effect_size)))
    graph_options = [
    ]  # Example: graph_options = ["dpi=300.0;", "style=filled;", "bgcolor=yellow;"]
    exporter = DotExporter(tree,
                           options=graph_options,
                           nodeattrfunc=lambda node: nodeattrfunc(opts, node))
    exporter.to_dotfile(
        f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.dot")
    try:
        output_filename = f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.png"
        exporter.to_picture(output_filename)
        print(f"Feature importance visualization: {output_filename}")
    except FileNotFoundError:
        print(
            "Feature importance visualization: error during tree rendering. Is Graphviz installed on your system?"
        )
Ejemplo n.º 19
0
 def tree_to_png(self, generation):
     if not os.path.exists('./outputs/GEN-{}'.format(generation)):
         os.mkdir('./outputs//GEN-{}'.format(generation))
     DotExporter(self.phenotype, 
         nodeattrfunc=lambda node: 'label="{}", style=filled, color="{}", fillcolor="{}"'.format(node.label, node.border, node.color),
         edgeattrfunc=lambda node,child: 'color="{}"'.format(node.border)
         ).to_picture("./outputs/GEN-{}/{}-{}.png".format(generation, self.cid, str(self).rsplit('<Chromosome.Chromosome object at ')[1][:-1]))
Ejemplo n.º 20
0
def main():

    if '-h' in sys.argv or '--help' in sys.argv:
        help_msg()
    elif len(sys.argv) <= 2:
        help_msg()
    else:

        url = sys.argv[1]
        url = url_fixer(url)

        data = []

        for link in collect_links(url):
            data.append(link)

        data = clean_data(data, url)

        if len(data):
            sitetree = list_to_anytree(data)

            if '-o' in sys.argv:
                filename = slugify(url)
                DotExporter(sitetree,
                            nodeattrfunc=lambda node: "shape=box").to_picture(
                                f'{filename}.png')

            for pre, fill, node in RenderTree(sitetree):
                print(f"{pre}{node.name}")
Ejemplo n.º 21
0
def dbgPrintTreeToImage(inputNode, rootFolder=None, subFolder=None):
    """Debug: print tree relation to image
        for single (root) node: print to single relation image file
        for top node list: print each single top node to single relation image file

    Args:
        inputNode (Node/list): if Node, is single (noramlly root) tree node; if list, is tree top node list
        rootFolder (str): output root folder. Default None. If None, use current folder from os.getcwd()
        subFolder (str): output sub folder
    Returns:
    Raises:
    """
    if not rootFolder:
        rootFolder = os.getcwd()

    isTopNodeList = False
    if isinstance(inputNode, list):
        isTopNodeList = True
        topNodeList = inputNode
    else:
        currentNode = inputNode

    if subFolder:
        outputFolder = os.path.join(rootFolder, subFolder)
    else:
        outputFolder = rootFolder

    if isTopNodeList:
        topNodeSubFolder = "topNode"
        outputFolder = os.path.join(outputFolder, topNodeSubFolder)

    createFolder(outputFolder)

    if isTopNodeList:
        for curTopNode in topNodeList:
            curNodeRealtionFile = "TopNode_Relation_%s.png" % (curTopNode.name)
            curNodeRealtionImg = os.path.join(outputFolder,
                                              curNodeRealtionFile)
            # 'output/20210622/current/topNode/RelationTopNode_aaaaaaaa5522.png'
            print("Generating %s" % curNodeRealtionImg)
            DotExporter(curTopNode).to_picture(curNodeRealtionImg)
    else:
        allNodeOutputFilename = "AllNode_Relation.png"
        allNodeOutputFullPath = os.path.join(outputFolder,
                                             allNodeOutputFilename)
        print("Generating %s" % allNodeOutputFullPath)
        DotExporter(currentNode).to_picture(allNodeOutputFullPath)
Ejemplo n.º 22
0
def createTree(root):
    DotExporter(
        root,
        graph="graph",
        nodenamefunc=nodenamefunc,
        # nodeattrfunc= lambda node: "shape=box",
        # edgeattrfunc=edgeattrfunc,
        edgetypefunc=edgetypefunc).to_picture("tree.pdf")
Ejemplo n.º 23
0
def show_tree(tree, path=None):
    if (path):
        DotExporter(tree,
                    nodeattrfunc=lambda node: 'label="{}"'.format(node.value)
                    ).to_dotfile(path)
    else:
        for pre, fill, node in RenderTree(tree):
            print("%s%s" % (pre, node.value))
Ejemplo n.º 24
0
def ipaddress():
    path = os.path.dirname(__file__)
    with open('{}/test_files/ipaddress.py'.format(path), 'r') as f:
        code = f.read()
        parse_tree = Parser().parse(code)
        root = SimplifiedParsedTreeTransformer().visit(parse_tree)
        from anytree.exporter import DotExporter
        DotExporter(root).to_picture("{}/test_files/ipaddress.png".format(path))
Ejemplo n.º 25
0
 def plot_tree(self, file_path):
     # for pre, fill, node in self:
     #    print("%s%s" % (pre, node.name))
     DotExporter(
         self.node,
         edgeattrfunc=lambda p, c: "label=<" + c.label + ">").to_picture(
             "t2.pdf")
     return
Ejemplo n.º 26
0
    def dot(self):
        '''
        Return the BOM tree structure from :py:attr:`BOM.BOM.tree` in DOT graph
        format (Graphiz)

        :rtype: str
        '''
        return '\n'.join([line for line in DotExporter(self)])
Ejemplo n.º 27
0
def test_esc():
    """Test proper escape of quotes."""
    n = Node(r'6"-6\"')
    eq_(tuple(DotExporter(n)), (
        r'digraph tree {',
        r'    "6\"-6\\\"";',
        r'}'
    ))
Ejemplo n.º 28
0
def export_trie(
    trie, img_filename='trie.png', graphviz_filename=None
):
    if not trie.empty():
        words = trie.list_words()
        for i in range(len(words)):
            words[i] = '*' + words[i]

        nodes = {}
        root = None
        count = 0
        for word in words:
            parent_node = None
            parent_node_label = ""
            for i, val in enumerate(word):
                if i not in nodes:
                    nodes[i] = {}
                key = parent_node_label + val
                count += 1
                if key not in nodes[i]:
                    nodes[i][key] = Node(
                        key, parent=parent_node, display_name=val
                    )

                if root is None:
                    root = nodes[i][key]

                parent_node = nodes[i][key]
                parent_node_label += val

        DotExporter(
            nodes[0]["*"],
            nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)
        ).to_dotfile(
            'trie.graphviz.txt' if graphviz_filename is None
            else graphviz_filename
        )

        DotExporter(
            nodes[0]["*"],
            nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)
        ).to_picture(img_filename)

        if graphviz_filename is None:
            os.remove('trie.graphviz.txt')
Ejemplo n.º 29
0
def draw_activity_tree(root: Node, rules) -> DotExporter:
    fig = DotExporter(
        root,
        options=["rankdir = LR;"],
        nodenamefunc=lambda n: f"{n.name}\ncount={n.count}",
        nodeattrfunc=lambda node: f'penwidth={5 if node.is_activity else 1}')

    st.graphviz_chart(''.join(fig))
    return fig
Ejemplo n.º 30
0
Archivo: Thread.py Proyecto: iamMHZ/AI
 def run(self):
     # checking if we have * in names
     if self.algorithm_name[-1] == '*':
         path = "./treeImages/" + str(
             self.algorithm_name[0:-1]) + " tree.png"
     else:
         path = "./treeImages/" + str(self.algorithm_name) + " tree.png"
     DotExporter(self.tree).to_picture(path)
     self.signal.emit(path)