File size: 1,408 Bytes
933c2fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
Graph Converter Module

Converts Pyan call graphs to NetworkX directed graphs for further processing.
"""

import networkx as nx
from pyan_insperation.analyzer import CallGraphVisitor


def pyan_to_networkx(pyan_graph: CallGraphVisitor) -> nx.DiGraph:
    """
    Convert a Pyan call graph to a NetworkX directed graph.
    
    This function processes both defines_edges (containment relationships like
    class-contains-method) and uses_edges (usage relationships like function-calls-function)
    from the Pyan analyzer and creates a unified NetworkX graph with labeled edges.
    
    Args:
        pyan_graph: CallGraphVisitor instance with defines_edges and uses_edges
        
    Returns:
        nx.DiGraph with nodes and labeled edges ("contains" or "use")
    """
    graph = nx.DiGraph()
    
    # Process defines_edges - containment relationships
    for node in pyan_graph.defines_edges.keys():
        graph.add_node(node)
        for defined_node in pyan_graph.defines_edges[node]:
            graph.add_node(defined_node)
            graph.add_edge(node, defined_node, label="contains")
    
    # Process uses_edges - usage relationships
    for node in pyan_graph.uses_edges.keys():
        graph.add_node(node)
        for used_node in pyan_graph.uses_edges[node]:
            graph.add_node(used_node)
            graph.add_edge(node, used_node, label="use")
    
    return graph