I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			884 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			884 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from graphviz import Digraph
 | 
						|
from collections import deque
 | 
						|
from fixtures import weighted_graph
 | 
						|
 | 
						|
# There are three ways to model a graph:
 | 
						|
# 1. Edge list: [(Vertex, Vertex)]
 | 
						|
# 2. Neighbors table: Map(Vertex, [Vertex])
 | 
						|
# 3. Adjacency matrix: [[Boolean]]
 | 
						|
#
 | 
						|
# The following graph is a neighbors table.
 | 
						|
 | 
						|
 | 
						|
# to_graphviz :: Vertex -> Map(Vertex, [(Vertex, Weight)]) -> String
 | 
						|
def to_graphviz(start, g):
 | 
						|
    """Compiles the graph into GraphViz."""
 | 
						|
    d = Digraph()
 | 
						|
    q = deque()
 | 
						|
    seen = set()
 | 
						|
 | 
						|
    q.append(start)
 | 
						|
 | 
						|
    while q:
 | 
						|
        v = q.popleft()
 | 
						|
        if v in seen:
 | 
						|
            continue
 | 
						|
        d.node(v, label=v)
 | 
						|
 | 
						|
        for w, x in g[v]:
 | 
						|
            d.edge(v, x, label=str(w))
 | 
						|
            q.append(x)
 | 
						|
        seen.add(v)
 | 
						|
 | 
						|
    return d.source
 | 
						|
 | 
						|
 | 
						|
with open('/tmp/test.gv', 'w') as f:
 | 
						|
    src = to_graphviz('a', weighted_graph)
 | 
						|
    f.write(src)
 | 
						|
    print('/tmp/test.gv created!')
 |