@@ -280,6 +280,27 @@ def accumulate(img, point, accuracy):
280
280
img [int (point [0 ] * accuracy ), int (point [1 ] * accuracy )] += point [2 ]
281
281
282
282
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
+
283
304
def _convert_graph_to_edge_segments (nodes , edges , params ):
284
305
"""
285
306
Merge graph dataframes into a list of edge segments.
@@ -388,8 +409,17 @@ def __call__(self, nodes, edges, **params):
388
409
a point with NaN as the x or y value.
389
410
"""
390
411
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" ])
422
+ return e
393
423
394
424
directly_connect_edges = connect_edges # For bockwards compatibility; deprecated
395
425
0 commit comments