def create_graph(
output=[],
directed=False,
attributes=False,
derived_attr=False,
sheet=None,
actual_pos=False,
cd=False
):
if not output:
output = get_graph(sheet=sheet)
if directed:
G = nx.OrderedDiGraph()
else:
G = nx.OrderedGraph()
G.add_edges_from(output['ed_ls'])
if 'xyz' in output:
nodes = list(sorted(G.nodes()))
assert(nodes == output['nodes'])
if actual_pos:
pos = OrderedDict(zip(nodes, output['xyz_actual']))
else:
pos = OrderedDict(zip(nodes, output['xyz']))
nx.set_node_attributes(G, pos, 'pos')
else: # pseudo positions
logging.warning("Coordinate positions assigned from networkx's layout ...")
pos = nx.random_layout(G, dim=3, seed=1)
nx.set_node_attributes(G, pos, 'pos')
if attributes:
# edges = sorted(G.edges)
# assert(edges == list(zip(list(output['tail']), list(output['head']))))
edges = list(zip(list(output['tail']), list(output['head'])))
d = OrderedDict(zip(edges, output['d']))
nx.set_edge_attributes(G, d, 'd')
if cd:
l = OrderedDict(zip(edges, output['cd']))
else:
l = OrderedDict(zip(edges, output['l']))
nx.set_edge_attributes(G, l, 'l')
if derived_attr:
node_r = OrderedDict(zip(nodes, output['node_r']))
nx.set_node_attributes(G, node_r, 'node_r')
node_l = OrderedDict(zip(nodes, output['node_l']))
nx.set_node_attributes(G, node_l, 'node_l')
return G