From 20262a0f283dee34004811b00e7fba55b3817b69 Mon Sep 17 00:00:00 2001 From: Ajeet D'Souza <98ajeet@gmail.com> Date: Sun, 3 Dec 2017 11:19:53 +0530 Subject: [PATCH 1/3] Changed graph class to somewhat match the original approach. --- lib/networkx/graph.rb | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/lib/networkx/graph.rb b/lib/networkx/graph.rb index 84d5be9..6c7a8ba 100644 --- a/lib/networkx/graph.rb +++ b/lib/networkx/graph.rb @@ -1,40 +1,29 @@ module NetworkX class Graph def initialize - @nodes = Set.new - @edges = {} + @adj = Hash.new end - def add_edge(node_1, node_2, **attrs) - add_node(node_1) - add_node(node_2) - - edge_key = Set.new([node_1, node_2]) - @edges[edge_key] = attrs + def add_node(node) + unless @adj.has_key? node + @adj[node] = Hash.new + end end - def add_edges(edges) - case edges - when Array - edges.each { |node_1, node_2, **attrs| add_edge(node_1, node_2, **attrs) } - else - raise ArgumentError, 'Expected argument to be an Array of edges, '\ - "received #{edges.class.name} instead." - end + def add_nodes_from(nodes) + nodes.each {|node| add_node(node)} end - def add_node(node) - @nodes.add(node) + def add_edge(node1, node2, **attrs) + add_node(node1) + add_node(node2) + + @adj[node1][node2] = attrs end - def add_nodes(nodes) - case nodes - when Set, Array - nodes.each { |node| add_node(node) } - else - raise ArgumentError, 'Expected argument to be an Array or Set of nodes, '\ - "received #{nodes.class.name} instead." - end + def add_edges_from(edges) + edges.each {|edge| add_edge(*edge)} end + end -end +end \ No newline at end of file From 7965780b4e54c5f1d137c50493f1b30b6b5449d1 Mon Sep 17 00:00:00 2001 From: Ajeet D'Souza <98ajeet@gmail.com> Date: Sun, 3 Dec 2017 11:37:42 +0530 Subject: [PATCH 2/3] Added more features to graph. --- lib/networkx/graph.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/networkx/graph.rb b/lib/networkx/graph.rb index 6c7a8ba..fa94070 100644 --- a/lib/networkx/graph.rb +++ b/lib/networkx/graph.rb @@ -25,5 +25,27 @@ def add_edges_from(edges) edges.each {|edge| add_edge(*edge)} end + def remove_node(node) + @adj.delete(node) + @adj.each_key {|key| @adj[key].delete(node)} + end + + def remove_nodes_from(nodes) + nodes.each do |node| + @adj.delete(node) + end + nodes.each do |node| + @adj.each_key {|key| @adj[key].delete(node)} + end + end + + def remove_edge(node1, node2) + @adj[node1].delete(node2) if @adj.has_key?node1 + end + + def remove_edges_from(edges) + edges.each {|edge| remove_edge(*edge)} + end + end end \ No newline at end of file From 195cddec11d6a148bcd62f882e2b6bbd8aa6c9b2 Mon Sep 17 00:00:00 2001 From: Ajeet D'Souza <98ajeet@gmail.com> Date: Sun, 3 Dec 2017 14:04:01 +0530 Subject: [PATCH 3/3] Fixed graph to follow style guide. --- lib/networkx/graph.rb | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/lib/networkx/graph.rb b/lib/networkx/graph.rb index fa94070..25a632c 100644 --- a/lib/networkx/graph.rb +++ b/lib/networkx/graph.rb @@ -1,51 +1,44 @@ module NetworkX class Graph def initialize - @adj = Hash.new + @adj = {} end def add_node(node) - unless @adj.has_key? node - @adj[node] = Hash.new - end + @adj[node] = {} unless @adj.key? node end def add_nodes_from(nodes) - nodes.each {|node| add_node(node)} + nodes.each { |node| add_node(node) } end - def add_edge(node1, node2, **attrs) - add_node(node1) - add_node(node2) + def add_edge(node_1, node_2, **attrs) + add_node(node_1) + add_node(node_2) - @adj[node1][node2] = attrs + @adj[node_1][node_2] = attrs end def add_edges_from(edges) - edges.each {|edge| add_edge(*edge)} + edges.each { |edge| add_edge(*edge) } end def remove_node(node) @adj.delete(node) - @adj.each_key {|key| @adj[key].delete(node)} + @adj.each_key { |key| @adj[key].delete(node) } end def remove_nodes_from(nodes) - nodes.each do |node| - @adj.delete(node) - end - nodes.each do |node| - @adj.each_key {|key| @adj[key].delete(node)} - end + nodes.each { |node| @adj.delete(node) } + nodes.each { |node| @adj.each_key { |key| @adj[key].delete(node) } } end - def remove_edge(node1, node2) - @adj[node1].delete(node2) if @adj.has_key?node1 + def remove_edge(node_1, node_2) + @adj[node_1].delete(node_2) if @adj.key? node_1 end def remove_edges_from(edges) - edges.each {|edge| remove_edge(*edge)} + edges.each { |edge| remove_edge(*edge) } end - end -end \ No newline at end of file +end