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