65def build_tree(all_logic: Mapping[str, DefectLogic]) -> dict[str, Node]:
66
67 all_nodes: dict[str, Node] = {}
68
69 def make_primary(current_logic: str) -> Node:
70 if current_logic in all_nodes:
71 return all_nodes[current_logic]
72 all_nodes[current_logic] = node = Node(current_logic)
73 return node
74
75 def explore_virtual(current_logic: str) -> Node:
76 if current_logic in all_nodes:
77 return all_nodes[current_logic]
78
79 this_logic = all_logic[current_logic]
80 all_nodes[current_logic] = node = Node(current_logic)
81
82 for name in this_logic.clauses:
83 if name in all_logic:
84 child = explore_virtual(name)
85 else:
86 child = make_primary(name)
87
88 child.parents.add(node)
89 node.children.add(child)
90
91 return node
92
93 for name in all_logic:
94 explore_virtual(name)
95
96 return all_nodes
97