@@ -280,6 +280,27 @@ def accumulate(img, point, accuracy):
280280 img [int (point [0 ] * accuracy ), int (point [1 ] * accuracy )] += point [2 ]
281281
282282
283+ @ngjit
284+ def _edge_val_to_segments (vals ):
285+ edge_vals = np .full (vals .size * 3 , np .nan , np .dtype ("float" ))
286+ for i in nb .prange (len (vals )):
287+ pos = int (i * 3 )
288+ edge_vals [pos :pos + 2 ] = vals [i ]
289+ return edge_vals
290+
291+ @ngjit
292+ def _format_graph_segments (nodes , edges ):
293+ edge_table = np .full ((edges .shape [0 ] * 3 , 2 ), np .nan )
294+ for i in nb .prange (edges .shape [0 ]):
295+ pos = int (i * 3 )
296+ s , t = edges [i ]
297+ edge_table [pos , 0 ] = nodes [s , 0 ]
298+ edge_table [pos , 1 ] = nodes [s , 1 ]
299+ edge_table [pos + 1 , 0 ] = nodes [t , 0 ]
300+ edge_table [pos + 1 , 1 ] = nodes [t , 1 ]
301+ return edge_table
302+
303+
283304def _convert_graph_to_edge_segments (nodes , edges , params ):
284305 """
285306 Merge graph dataframes into a list of edge segments.
@@ -388,8 +409,17 @@ def __call__(self, nodes, edges, **params):
388409 a point with NaN as the x or y value.
389410 """
390411 p = param .ParamOverrides (self , params )
391- edges , segment_class = _convert_graph_to_edge_segments (nodes , edges , p )
392- return _convert_edge_segments_to_dataframe (edges , segment_class , p )
412+ e = pd .DataFrame (
413+ _format_graph_segments (
414+ nodes [[p .x , p .y ]].values ,
415+ edges [[p .source , p .target ]].values ),
416+ columns = [p .x , p .y ]
417+ )
418+ if p .weight is not None :
419+ e [p .weight ] = _edge_val_to_segments (edges [p .weight ].values )
420+ if p .include_edge_id :
421+ e ["edge_id" ] = _edge_val_to_segments (edges ["id" ].values )
422+ return e
393423
394424directly_connect_edges = connect_edges # For bockwards compatibility; deprecated
395425
0 commit comments