Coverage for src / graphable / views / networkx.py: 100%
16 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
1from logging import getLogger
3from ..graph import Graph
5logger = getLogger(__name__)
8def to_networkx(graph: Graph):
9 """
10 Convert a graphable.Graph to a networkx.DiGraph.
11 Requires 'networkx' to be installed.
13 Args:
14 graph (Graph): The graph to convert.
16 Returns:
17 networkx.DiGraph: The converted directed graph.
19 Raises:
20 ImportError: If networkx is not installed.
21 """
22 try:
23 import networkx as nx
24 except ImportError as e:
25 logger.error(
26 "NetworkX is not installed. Run 'pip install networkx' to use this feature."
27 )
28 raise ImportError(
29 "networkx is required for this feature. "
30 "Install it with 'pip install networkx' or 'uv add networkx'."
31 ) from e
33 logger.debug("Converting graph to NetworkX DiGraph.")
34 dg = nx.DiGraph()
36 for node in graph.topological_order():
37 # Add node with metadata
38 dg.add_node(str(node.reference), reference=node.reference, tags=list(node.tags))
40 # Add edges
41 for dependent, attrs in graph.internal_dependents(node):
42 dg.add_edge(str(node.reference), str(dependent.reference), **attrs)
44 return dg