Spaces:
Running
Running
More flexible handling for NetworkX return values.
Browse files
lynxkite-graph-analytics/src/lynxkite_graph_analytics/networkx_ops.py
CHANGED
@@ -1,11 +1,14 @@
|
|
1 |
"""Automatically wraps all NetworkX functions as LynxKite operations."""
|
2 |
|
|
|
3 |
from lynxkite.core import ops
|
4 |
import functools
|
5 |
import inspect
|
6 |
import networkx as nx
|
7 |
import re
|
8 |
|
|
|
|
|
9 |
ENV = "LynxKite Graph Analytics"
|
10 |
|
11 |
|
@@ -156,10 +159,22 @@ def wrapped(name: str, func):
|
|
156 |
res = func(*args, **kwargs)
|
157 |
if isinstance(res, nx.Graph):
|
158 |
return res
|
159 |
-
#
|
160 |
-
|
161 |
-
|
162 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
|
164 |
return wrapper
|
165 |
|
@@ -193,7 +208,7 @@ def register_networkx(env: str):
|
|
193 |
for name, param in sig.parameters.items()
|
194 |
if name in types and types[name] not in [nx.Graph, nx.DiGraph]
|
195 |
}
|
196 |
-
nicename = name.replace("_", " ").title()
|
197 |
op = ops.Op(
|
198 |
func=wrapped(name, func),
|
199 |
name=nicename,
|
|
|
1 |
"""Automatically wraps all NetworkX functions as LynxKite operations."""
|
2 |
|
3 |
+
import collections
|
4 |
from lynxkite.core import ops
|
5 |
import functools
|
6 |
import inspect
|
7 |
import networkx as nx
|
8 |
import re
|
9 |
|
10 |
+
import pandas as pd
|
11 |
+
|
12 |
ENV = "LynxKite Graph Analytics"
|
13 |
|
14 |
|
|
|
159 |
res = func(*args, **kwargs)
|
160 |
if isinstance(res, nx.Graph):
|
161 |
return res
|
162 |
+
# Figure out what the returned value is.
|
163 |
+
if isinstance(res, nx.Graph):
|
164 |
+
return res
|
165 |
+
if isinstance(res, collections.abc.Sized):
|
166 |
+
for a in args:
|
167 |
+
if isinstance(a, nx.Graph):
|
168 |
+
if a.number_of_nodes() == len(res):
|
169 |
+
graph = a.copy()
|
170 |
+
nx.set_node_attributes(graph, values=res, name=name)
|
171 |
+
return graph
|
172 |
+
if a.number_of_edges() == len(res):
|
173 |
+
graph = a.copy()
|
174 |
+
nx.set_edge_attributes(graph, values=res, name=name)
|
175 |
+
return graph
|
176 |
+
return pd.DataFrame({name: res})
|
177 |
+
return pd.DataFrame({name: [res]})
|
178 |
|
179 |
return wrapper
|
180 |
|
|
|
208 |
for name, param in sig.parameters.items()
|
209 |
if name in types and types[name] not in [nx.Graph, nx.DiGraph]
|
210 |
}
|
211 |
+
nicename = "NX › " + name.replace("_", " ").title()
|
212 |
op = ops.Op(
|
213 |
func=wrapped(name, func),
|
214 |
name=nicename,
|