1
2# This file based on a ChatGPT reponse for the following prompt:
3# "can you write code in python to build up a DAG representing
4# a dependency tree, and then a function that can return all the
5# dependencies of a given node?"
6
7class Node:
8 def __init__(self, name):
9 self.name = name
10 self.dependencies = set()
11
12
13class DAG:
14 def __init__(self):
15 self.nodes = {}
16
17 def add_node(self, node_name, dependencies=None):
18 if node_name in self.nodes:
19 raise ValueError(f"Node '{node_name}' already exists in the graph.")
20
21 node = Node(node_name)
22 if dependencies:
23 node.dependencies.update(dependencies)
24
25 self.nodes[node_name] = node
26
27 def add_dependency(self, node_name, dependency_name):
28 if node_name not in self.nodes:
29 raise ValueError(f"Node '{node_name}' does not exist in the graph.")
30
31 if dependency_name not in self.nodes:
32 raise ValueError(f"Dependency '{dependency_name}' does not exist in the graph.")
33
34 self.nodes[node_name].dependencies.add(dependency_name)
35
36 def get_dependencies(self, node_name):
37 if node_name not in self.nodes:
38 raise ValueError(f"Node '{node_name}' does not exist in the graph.")
39
40 node = self.nodes[node_name]
41 dependencies = set()
42
43 def traverse_dependencies(current_node):
44 for dependency in current_node.dependencies:
45 dependencies.add(dependency)
46 if dependency in self.nodes:
47 traverse_dependencies(self.nodes[dependency])
48
49 traverse_dependencies(node)
50 return dependencies
51
52 def has_node(self, node_name):
53 return node_name in self.nodes
54
55 def __str__(self):
56 graph_str = ""
57 for node_name, node in self.nodes.items():
58 graph_str += f"{node_name} -> {', '.join(node.dependencies)}\n"
59 return graph_str