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

1from logging import getLogger 

2 

3from ..graph import Graph 

4 

5logger = getLogger(__name__) 

6 

7 

8def to_networkx(graph: Graph): 

9 """ 

10 Convert a graphable.Graph to a networkx.DiGraph. 

11 Requires 'networkx' to be installed. 

12 

13 Args: 

14 graph (Graph): The graph to convert. 

15 

16 Returns: 

17 networkx.DiGraph: The converted directed graph. 

18 

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 

32 

33 logger.debug("Converting graph to NetworkX DiGraph.") 

34 dg = nx.DiGraph() 

35 

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)) 

39 

40 # Add edges 

41 for dependent, attrs in graph.internal_dependents(node): 

42 dg.add_edge(str(node.reference), str(dependent.reference), **attrs) 

43 

44 return dg