MCPcopy Create free account
hub / github.com/easy-graph/Easy-Graph / add_graph_element

Method add_graph_element

easygraph/readwrite/graphml.py:752–820  ·  view source on GitHub ↗

Serialize graph G in GraphML to the stream.

(self, G)

Source from the content-addressed store, hash-verified

750 self.add_graph_element(graph)
751
752 def add_graph_element(self, G):
753 """
754 Serialize graph G in GraphML to the stream.
755 """
756 if G.is_directed():
757 default_edge_type = "directed"
758 else:
759 default_edge_type = "undirected"
760
761 graphid = G.graph.pop("id", None)
762 if graphid is None:
763 graph_element = self._xml.element("graph", edgedefault=default_edge_type)
764 else:
765 graph_element = self._xml.element(
766 "graph", edgedefault=default_edge_type, id=graphid
767 )
768
769 # gather attributes types for the whole graph
770 # to find the most general numeric format needed.
771 # Then pass through attributes to create key_id for each.
772 graphdata = {
773 k: v
774 for k, v in G.graph.items()
775 if k not in ("node_default", "edge_default")
776 }
777 node_default = G.graph.get("node_default", {})
778 edge_default = G.graph.get("edge_default", {})
779 # Graph attributes
780 for k, v in graphdata.items():
781 self.attribute_types[(str(k), "graph")].add(type(v))
782 for k, v in graphdata.items():
783 element_type = self.get_xml_type(self.attr_type(k, "graph", v))
784 self.get_key(str(k), element_type, "graph", None)
785 # Nodes and data
786 for node, d in G.nodes.items():
787 for k, v in d.items():
788 self.attribute_types[(str(k), "node")].add(type(v))
789 for node, d in G.nodes.items():
790 for k, v in d.items():
791 T = self.get_xml_type(self.attr_type(k, "node", v))
792 self.get_key(str(k), T, "node", node_default.get(k))
793 # Edges and data
794 if G.is_multigraph():
795 for u, v, ekey, d in G.edges:
796 for k, v in d.items():
797 self.attribute_types[(str(k), "edge")].add(type(v))
798 for u, v, ekey, d in G.edges:
799 for k, v in d.items():
800 T = self.get_xml_type(self.attr_type(k, "edge", v))
801 self.get_key(str(k), T, "edge", edge_default.get(k))
802 else:
803 for u, v, d in G.edges:
804 for k, v in d.items():
805 self.attribute_types[(str(k), "edge")].add(type(v))
806 for u, v, d in G.edges:
807 for k, v in d.items():
808 T = self.get_xml_type(self.attr_type(k, "edge", v))
809 self.get_key(str(k), T, "edge", edge_default.get(k))

Callers 1

__init__Method · 0.95

Calls 12

add_attributesMethod · 0.95
IncrementalElementClass · 0.85
popMethod · 0.80
addMethod · 0.80
get_xml_typeMethod · 0.80
attr_typeMethod · 0.80
get_keyMethod · 0.80
writeMethod · 0.80
is_directedMethod · 0.45
is_multigraphMethod · 0.45
add_nodesMethod · 0.45
add_edgesMethod · 0.45

Tested by

no test coverage detected