3131)
3232from mathics .eval .makeboxes import _boxed_string
3333from mathics .eval .patterns import Matcher
34+ from pymathics .graph .graphsymbols import SymbolDirectedEdge , SymbolUndirectedEdge
35+
3436
3537WL_MARKER_TO_NETWORKX = {
3638 "Circle" : "o" ,
7274
7375import networkx as nx
7476
75- SymbolDirectedEdge = Symbol ("DirectedEdge" )
76- SymbolGraph = Symbol ("Graph" )
77- SymbolGraphBox = Symbol ("GraphBox" )
78- SymbolUndirectedEdge = Symbol ("UndirectedEdge" )
79-
8077
8178def has_directed_option (options : dict ) -> bool :
8279 return options .get ("System`DirectedEdges" , False ).to_python ()
@@ -627,7 +624,7 @@ def do_format(self, evaluation, form):
627624 return self
628625
629626 @property
630- def edges (self )-> tuple :
627+ def edges (self ) -> tuple :
631628 # TODO: check if this should not return expressions
632629 return self .G .edges
633630
@@ -674,7 +671,7 @@ def get_sort_key(self, pattern_sort=False) -> tuple:
674671
675672 def sort_vertices (self , vertices ):
676673 return sorted (vertices )
677-
674+
678675 def update_weights (self , evaluation ):
679676 weights = None
680677 G = self .G
@@ -733,6 +730,7 @@ def _create_graph(
733730 known_vertices = set ()
734731 vertices = []
735732 vertex_properties = []
733+
736734 def add_vertex (x , attr_dict = None ):
737735 if x .has_form ("Property" , 2 ):
738736 expr , prop = x .elements
@@ -754,7 +752,7 @@ def add_vertex(x, attr_dict=None):
754752 old_vertices = dict (from_graph .nodes .data ())
755753 vertices += old_vertices
756754 edges = list (from_graph .edges .data ())
757-
755+
758756 for edge , attr_dict in edges :
759757 u , v = edge .elements
760758 if edge .get_head_name () == "System`DirectedEdge" :
@@ -792,13 +790,17 @@ def track_edges(*edges):
792790
793791 def parse_edge (r , attr_dict ):
794792 if isinstance (r , Atom ):
795- raise _GraphParseError (msg = f"{ r } is an atom, and hence does not define an edge." )
793+ raise _GraphParseError (
794+ msg = f"{ r } is an atom, and hence does not define an edge."
795+ )
796796
797797 name = r .get_head_name ()
798798 elements = r .elements
799799
800800 if len (elements ) != 2 :
801- raise _GraphParseError (msg = f"{ r } does not have 2 elements, so it is not an edge." )
801+ raise _GraphParseError (
802+ msg = f"{ r } does not have 2 elements, so it is not an edge."
803+ )
802804
803805 u , v = elements
804806 assert isinstance (u , BaseElement ) and isinstance (v , BaseElement )
@@ -827,7 +829,7 @@ def parse_edge(r, attr_dict):
827829 pass
828830 pass
829831 else :
830- raise _GraphParseError (msg = f"{ name } is an unknown kind of edge." )
832+ raise _GraphParseError (msg = f"{ name } is an unknown kind of edge." )
831833
832834 if head .get_name () == name :
833835 edges .append (r )
@@ -1514,7 +1516,7 @@ def eval(self, graph, expression, evaluation, options):
15141516 tol = 1.0e-14
15151517 _ , a = nx .hits (G , normalized = True , tol = tol )
15161518 h , _ = nx .hits (G , normalized = False , tol = tol )
1517-
1519+
15181520 def _crop (x ):
15191521 return 0 if x < tol else x
15201522
@@ -1738,7 +1740,6 @@ def eval(self, graph, expression, evaluation, options):
17381740 return from_python (is_path )
17391741
17401742
1741-
17421743class Property (Builtin ):
17431744 pass
17441745
0 commit comments