From 7fa33cb41894fed48c7951d9ab4bf808b1dfd960 Mon Sep 17 00:00:00 2001 From: Isaac Virshup Date: Tue, 12 Mar 2019 12:40:53 +1100 Subject: [PATCH 1/3] Speed up connect_edges --- datashader/bundling.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/datashader/bundling.py b/datashader/bundling.py index a6e9dfe72..3154150df 100644 --- a/datashader/bundling.py +++ b/datashader/bundling.py @@ -280,6 +280,27 @@ def accumulate(img, point, accuracy): img[int(point[0] * accuracy), int(point[1] * accuracy)] += point[2] +@ngjit +def _edge_val_to_segments(vals): + edge_vals = np.full(vals.size * 3, np.nan, np.dtype("float")) + for i in nb.prange(len(vals)): + pos = int(i * 3) + edge_vals[pos:pos+2] = vals[i] + return edge_vals + +@ngjit +def _format_graph_segments(nodes, edges): + edge_table = np.full((edges.shape[0] * 3, 2), np.nan) + for i in nb.prange(edges.shape[0]): + pos = int(i * 3) + s, t = edges[i] + edge_table[pos , 0] = nodes[s, 0] + edge_table[pos , 1] = nodes[s, 1] + edge_table[pos+1, 0] = nodes[t, 0] + edge_table[pos+1, 1] = nodes[t, 1] + return edge_table + + def _convert_graph_to_edge_segments(nodes, edges, params): """ Merge graph dataframes into a list of edge segments. @@ -388,8 +409,17 @@ def __call__(self, nodes, edges, **params): a point with NaN as the x or y value. """ p = param.ParamOverrides(self, params) - edges, segment_class = _convert_graph_to_edge_segments(nodes, edges, p) - return _convert_edge_segments_to_dataframe(edges, segment_class, p) + e = pd.DataFrame( + _format_graph_segments( + nodes[[p.x, p.y]].values, + edges[[p.source, p.target]].values), + columns=[p.x, p.y] + ) + if p.weight is not None: + e[p.weight] = _edge_val_to_segments(edges[p.weight].values) + if p.include_edge_id: + e["edge_id"] = _edge_val_to_segments(edges["id"].values) + return e directly_connect_edges = connect_edges # For bockwards compatibility; deprecated From 68386f366f3546767f6e37951aed2e1ab03892b9 Mon Sep 17 00:00:00 2001 From: maximlt Date: Mon, 29 Nov 2021 22:57:43 +0100 Subject: [PATCH 2/3] Empty commit to trigger CI From 8bac6221c89529d96d98c891d255aa856006d462 Mon Sep 17 00:00:00 2001 From: Isaac Virshup Date: Wed, 6 Sep 2023 16:28:36 +0200 Subject: [PATCH 3/3] flake stuff --- datashader/bundling.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/datashader/bundling.py b/datashader/bundling.py index 70015ccd7..6ed5d2292 100644 --- a/datashader/bundling.py +++ b/datashader/bundling.py @@ -27,6 +27,7 @@ import numpy as np import pandas as pd import param +from numba import prange from .utils import ngjit @@ -286,7 +287,7 @@ def accumulate(img, point, accuracy): @ngjit def _edge_val_to_segments(vals): edge_vals = np.full(vals.size * 3, np.nan, np.dtype("float")) - for i in nb.prange(len(vals)): + for i in prange(len(vals)): pos = int(i * 3) edge_vals[pos:pos+2] = vals[i] return edge_vals @@ -294,7 +295,7 @@ def _edge_val_to_segments(vals): @ngjit def _format_graph_segments(nodes, edges): edge_table = np.full((edges.shape[0] * 3, 2), np.nan) - for i in nb.prange(edges.shape[0]): + for i in prange(edges.shape[0]): pos = int(i * 3) s, t = edges[i] edge_table[pos , 0] = nodes[s, 0]