diff options
Diffstat (limited to 'nixpkgs/pkgs/development/julia-modules/python/dag.py')
-rw-r--r-- | nixpkgs/pkgs/development/julia-modules/python/dag.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/julia-modules/python/dag.py b/nixpkgs/pkgs/development/julia-modules/python/dag.py new file mode 100644 index 000000000000..4cb775cd42cd --- /dev/null +++ b/nixpkgs/pkgs/development/julia-modules/python/dag.py @@ -0,0 +1,59 @@ + +# This file based on a ChatGPT reponse for the following prompt: +# "can you write code in python to build up a DAG representing +# a dependency tree, and then a function that can return all the +# dependencies of a given node?" + +class Node: + def __init__(self, name): + self.name = name + self.dependencies = set() + + +class DAG: + def __init__(self): + self.nodes = {} + + def add_node(self, node_name, dependencies=None): + if node_name in self.nodes: + raise ValueError(f"Node '{node_name}' already exists in the graph.") + + node = Node(node_name) + if dependencies: + node.dependencies.update(dependencies) + + self.nodes[node_name] = node + + def add_dependency(self, node_name, dependency_name): + if node_name not in self.nodes: + raise ValueError(f"Node '{node_name}' does not exist in the graph.") + + if dependency_name not in self.nodes: + raise ValueError(f"Dependency '{dependency_name}' does not exist in the graph.") + + self.nodes[node_name].dependencies.add(dependency_name) + + def get_dependencies(self, node_name): + if node_name not in self.nodes: + raise ValueError(f"Node '{node_name}' does not exist in the graph.") + + node = self.nodes[node_name] + dependencies = set() + + def traverse_dependencies(current_node): + for dependency in current_node.dependencies: + dependencies.add(dependency) + if dependency in self.nodes: + traverse_dependencies(self.nodes[dependency]) + + traverse_dependencies(node) + return dependencies + + def has_node(self, node_name): + return node_name in self.nodes + + def __str__(self): + graph_str = "" + for node_name, node in self.nodes.items(): + graph_str += f"{node_name} -> {', '.join(node.dependencies)}\n" + return graph_str |