@@ -502,9 +502,11 @@ def ng_draw(self, line, cell=None, local_ns={}):
502502 neighborhood_highlight = True ,
503503 )
504504 g_nx = nx .MultiDiGraph ()
505+
506+ edge_filter = set ()
505507 for _ , row in result_df .iterrows ():
506508 for item in row :
507- self .render_pd_item (g , g_nx , item )
509+ self .render_pd_item (g , g_nx , item , edge_filter )
508510
509511 try :
510512 # Calculate PageRank
@@ -737,7 +739,7 @@ def ng_draw_schema(self, line, cell=None, local_ns={}):
737739
738740 return g
739741
740- def render_pd_item (self , g , g_nx , item ):
742+ def render_pd_item (self , g , g_nx , item , edges_filter : set ):
741743 # g is pyvis graph
742744 # g_nx is networkx graph
743745
@@ -836,26 +838,31 @@ def render_pd_item(self, g, g_nx, item):
836838 )
837839 else :
838840 title = edge_name
839- g .add_edge (
840- src_id ,
841- dst_id ,
842- label = label ,
843- title = title ,
844- weight = props .get ("rank" , 0 ),
845- )
846- # networkx
847- props ["edge_type" ] = edge_name
848- g_nx .add_edge (src_id , dst_id , ** props )
841+ edge_key = f"{ src_id } ->{ dst_id } @{ rank } :{ edge_name } "
842+ if edge_key not in edges_filter :
843+ # We don't have to ensure same policies for identical edges when adding to graph
844+ # for PyVis and NetworkX, thus we maintain a set to filter out identical edges
845+ g .add_edge (
846+ src_id ,
847+ dst_id ,
848+ label = label ,
849+ title = title ,
850+ weight = props .get ("rank" , 0 ),
851+ )
852+ # networkx
853+ props ["edge_type" ] = edge_name
854+ g_nx .add_edge (src_id , dst_id , ** props )
855+ edges_filter .add (edge_key )
849856
850857 elif isinstance (item , PathWrapper ):
851858 for node in item .nodes ():
852- self .render_pd_item (g , g_nx , node )
859+ self .render_pd_item (g , g_nx , node , edges_filter )
853860 for edge in item .relationships ():
854- self .render_pd_item (g , g_nx , edge )
861+ self .render_pd_item (g , g_nx , edge , edges_filter )
855862
856863 elif isinstance (item , list ):
857864 for it in item :
858- self .render_pd_item (g , g_nx , it )
865+ self .render_pd_item (g , g_nx , it , edges_filter )
859866
860867 @line_cell_magic
861868 @magic_arguments ()
0 commit comments