Source code for athena.graph_builder.radius_graph_builder

from sklearn.neighbors import radius_neighbors_graph
import networkx as nx
import pandas as pd

from ..utils.tools.graph import df2node_attr
from .base_graph_builder import BaseGraphBuilder
from .constants import EDGE_WEIGHT


# %%
[docs]class RadiusGraphBuilder(BaseGraphBuilder): '''\ Radius graph class for graph building. '''
[docs] def __init__(self, config: dict): """Build topology using a radius algorithm based on the distance between the centroid of the nodes. Args: config: dict specifying graph builder params Examples: config = {'builder_params': {'radius': 36, 'mode':'connectivity', 'metric':'minkowski', 'p':2, 'n_jobs':-1}} """ super().__init__(config)
def _build_topology(self, **kwargs): '''\ Build topology using a radius algorithm based on the distance between the centroid of the nodes. ''' # compute adjacency matrix adj = radius_neighbors_graph(self.ndata.to_numpy(), **self.config['builder_params']) df = pd.DataFrame(adj.A, index=self.ndata.index, columns=self.ndata.index) self.graph = nx.from_pandas_adjacency(df) # this does not add the nodes in the same sequence as the index, column attrs = df2node_attr(self.ndata) nx.set_node_attributes(self.graph, attrs) nx.set_edge_attributes(self.graph, 1, EDGE_WEIGHT)