rgraphum 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gitignore +26 -0
  2. data/GLOSSARIES.md +108 -0
  3. data/GREMLIN.md +1398 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +136 -0
  7. data/Rakefile +16 -0
  8. data/bin/.irbrc +41 -0
  9. data/bin/rgraphum_console +61 -0
  10. data/bin/rgraphum_runner +57 -0
  11. data/examples/ba_model/make.rb +19 -0
  12. data/examples/ba_model/make_dummy_twitter_rt_data.rb +0 -0
  13. data/examples/basic/check_modularity.rb +27 -0
  14. data/examples/basic/make_graph.rb +12 -0
  15. data/examples/parser/dot.rb +28 -0
  16. data/examples/sis_model/lifegame.rb +161 -0
  17. data/graph_struct.jpg +0 -0
  18. data/lib/rgraphum/analyzer/linear_regression.rb +31 -0
  19. data/lib/rgraphum/analyzer/meme_tracker.rb +296 -0
  20. data/lib/rgraphum/analyzer/twitter/rt_at_mark.rb +45 -0
  21. data/lib/rgraphum/analyzer.rb +8 -0
  22. data/lib/rgraphum/cluster.rb +67 -0
  23. data/lib/rgraphum/communities.rb +65 -0
  24. data/lib/rgraphum/community.rb +86 -0
  25. data/lib/rgraphum/cosine_similarity_matrix.rb +40 -0
  26. data/lib/rgraphum/edge.rb +194 -0
  27. data/lib/rgraphum/edges.rb +161 -0
  28. data/lib/rgraphum/ext/cosine_similarity_matrix.rb +79 -0
  29. data/lib/rgraphum/ext/linear_regression.rb +22 -0
  30. data/lib/rgraphum/ext/tf_idf.rb +52 -0
  31. data/lib/rgraphum/graph/gremlin.rb +193 -0
  32. data/lib/rgraphum/graph/math/clustering_coefficient.rb +53 -0
  33. data/lib/rgraphum/graph/math/community_detection.rb +141 -0
  34. data/lib/rgraphum/graph/math/degree_distribution.rb +50 -0
  35. data/lib/rgraphum/graph/math/dijkstra.rb +331 -0
  36. data/lib/rgraphum/graph/math.rb +45 -0
  37. data/lib/rgraphum/graph.rb +267 -0
  38. data/lib/rgraphum/importer.rb +97 -0
  39. data/lib/rgraphum/marshal.rb +26 -0
  40. data/lib/rgraphum/motifs.rb +8 -0
  41. data/lib/rgraphum/parsers/flare.rb +42 -0
  42. data/lib/rgraphum/parsers/gephi.rb +193 -0
  43. data/lib/rgraphum/parsers/graphviz.rb +78 -0
  44. data/lib/rgraphum/parsers/miserables.rb +54 -0
  45. data/lib/rgraphum/parsers.rb +32 -0
  46. data/lib/rgraphum/path.rb +37 -0
  47. data/lib/rgraphum/query.rb +130 -0
  48. data/lib/rgraphum/rgraphum_array.rb +159 -0
  49. data/lib/rgraphum/rgraphum_array_dividers.rb +43 -0
  50. data/lib/rgraphum/rgraphum_random.rb +5 -0
  51. data/lib/rgraphum/simulator/ba_model.rb +140 -0
  52. data/lib/rgraphum/simulator/sir_model.rb +178 -0
  53. data/lib/rgraphum/simulator/sis_model.rb +158 -0
  54. data/lib/rgraphum/simulator.rb +29 -0
  55. data/lib/rgraphum/statistic/power_law.rb +9 -0
  56. data/lib/rgraphum/t.rb +12 -0
  57. data/lib/rgraphum/tf_idf.rb +27 -0
  58. data/lib/rgraphum/version.rb +3 -0
  59. data/lib/rgraphum/vertex.rb +354 -0
  60. data/lib/rgraphum/vertices.rb +97 -0
  61. data/lib/rgraphum.rb +38 -0
  62. data/performance/add-vertices-edges.rb +20 -0
  63. data/performance/add-vertices.rb +12 -0
  64. data/performance/build-graph.rb +19 -0
  65. data/performance/delete-graph.rb +24 -0
  66. data/performance/delete-vertices.rb +25 -0
  67. data/performance/refer-graph.rb +23 -0
  68. data/rgraphum.gemspec +30 -0
  69. data/test/lib/rgraphum/analyzer/linear_regression_test.rb +20 -0
  70. data/test/lib/rgraphum/analyzer/meme_tracker_test.rb +383 -0
  71. data/test/lib/rgraphum/analyzer/twitter/rt_at_mark_test.rb +120 -0
  72. data/test/lib/rgraphum/array_test.rb +95 -0
  73. data/test/lib/rgraphum/bubble_test.rb +7 -0
  74. data/test/lib/rgraphum/communities_test.rb +53 -0
  75. data/test/lib/rgraphum/cosine_similarity_test.rb +18 -0
  76. data/test/lib/rgraphum/edge_test.rb +89 -0
  77. data/test/lib/rgraphum/edges_test.rb +178 -0
  78. data/test/lib/rgraphum/graph_builder_test.rb +64 -0
  79. data/test/lib/rgraphum/graph_dup_test.rb +199 -0
  80. data/test/lib/rgraphum/graph_plus_test.rb +80 -0
  81. data/test/lib/rgraphum/graph_test.rb +512 -0
  82. data/test/lib/rgraphum/gremlin_test.rb +145 -0
  83. data/test/lib/rgraphum/importers/idg_json_edges.json +20 -0
  84. data/test/lib/rgraphum/importers/idg_json_test.rb +207 -0
  85. data/test/lib/rgraphum/importers/idg_json_vertices.json +46 -0
  86. data/test/lib/rgraphum/math/average_distance_matrix_test.rb +142 -0
  87. data/test/lib/rgraphum/math/clustering_coefficient_test.rb +219 -0
  88. data/test/lib/rgraphum/math/community_test.rb +78 -0
  89. data/test/lib/rgraphum/math/degree_distribution_test.rb +40 -0
  90. data/test/lib/rgraphum/math/dijkstra_test.rb +146 -0
  91. data/test/lib/rgraphum/math/modularity_test.rb +154 -0
  92. data/test/lib/rgraphum/math/quick_average_distance_matrix_test.rb +84 -0
  93. data/test/lib/rgraphum/path_test.rb +44 -0
  94. data/test/lib/rgraphum/query/enumerable_test.rb +42 -0
  95. data/test/lib/rgraphum/query/where_operators_test.rb +75 -0
  96. data/test/lib/rgraphum/query/where_test.rb +59 -0
  97. data/test/lib/rgraphum/simulator/ba_model_test.rb +75 -0
  98. data/test/lib/rgraphum/simulator/sir_model_test.rb +513 -0
  99. data/test/lib/rgraphum/simulator/sis_model_test.rb +478 -0
  100. data/test/lib/rgraphum/simulator_test.rb +22 -0
  101. data/test/lib/rgraphum/tf_idf_test.rb +30 -0
  102. data/test/lib/rgraphum/vertex_test.rb +50 -0
  103. data/test/lib/rgraphum/vertices_test.rb +180 -0
  104. data/test/test_helper.rb +98 -0
  105. data/tmp/.gitkeep +0 -0
  106. metadata +254 -0
@@ -0,0 +1,354 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ def Rgraphum::Vertex(hash_or_vertex)
4
+ if hash_or_vertex.instance_of?(Rgraphum::Vertex)
5
+ hash_or_vertex
6
+ else
7
+ Rgraphum::Vertex.new(hash_or_vertex)
8
+ end
9
+ end
10
+
11
+ class Rgraphum::Vertex #< Hash
12
+ attr_accessor :graph
13
+
14
+ def initialize(fields={})
15
+ unless fields.empty?
16
+ unknown_fields = fields.keys - @@field_names
17
+ unless unknown_fields.empty?
18
+ raise ArgumentError, "No such field(s) in Vertex: #{unknown_fields.join(', ')}"
19
+ end
20
+ fields.each do |name, value|
21
+ self.send("#{name}=", value)
22
+ end
23
+ end
24
+ @edges = Rgraphum::Edges.new
25
+ @edges.vertex = self
26
+ end
27
+
28
+ # Gremlin: inE
29
+ #
30
+ # Gets the incoming edges of the vertex.
31
+ #
32
+ # gremlin> v = g.v(4)
33
+ # ==>v[4]
34
+ # gremlin> v.inE.outV
35
+ # ==>v[1]
36
+ # gremlin> v.in
37
+ # ==>v[1]
38
+ # gremlin> v = g.v(3)
39
+ # ==>v[3]
40
+ # gremlin> v.in("created")
41
+ # ==>v[1]
42
+ # ==>v[4]
43
+ # ==>v[6]
44
+ # gremlin> v.inE("created").outV
45
+ # ==>v[1]
46
+ # ==>v[4]
47
+ # ==>v[6]
48
+ #
49
+ def inE(*key)
50
+ find_edges(key, :in)
51
+ end
52
+ alias :in_e :inE
53
+
54
+ # Gremlin: outE
55
+ #
56
+ # Gets the outgoing edges to the vertex.
57
+ #
58
+ # gremlin> v = g.v(1)
59
+ # ==>v[1]
60
+ # gremlin> v.outE.inV
61
+ # ==>v[2]
62
+ # ==>v[4]
63
+ # ==>v[3]
64
+ # gremlin> v.out
65
+ # ==>v[2]
66
+ # ==>v[4]
67
+ # ==>v[3]
68
+ # gremlin> v.outE('knows').inV
69
+ # ==>v[2]
70
+ # ==>v[4]
71
+ # gremlin> v.out('knows')
72
+ # ==>v[2]
73
+ # ==>v[4]
74
+ #
75
+ def outE(*key)
76
+ find_edges(key, :out)
77
+ end
78
+ alias :out_e :outE
79
+
80
+ # Gremlin: bothE
81
+ #
82
+ # Get both incoming and outgoing edges of the vertex.
83
+ #
84
+ # gremlin> v = g.v(4)
85
+ # ==>v[4]
86
+ # gremlin> v.bothE
87
+ # ==>e[8][1-knows->4]
88
+ # ==>e[10][4-created->5]
89
+ # ==>e[11][4-created->3]
90
+ # gremlin> v.bothE('knows')
91
+ # ==>e[8][1-knows->4]
92
+ # gremlin> v.bothE('knows', 'created')
93
+ # ==>e[8][1-knows->4]
94
+ # ==>e[10][4-created->5]
95
+ # ==>e[11][4-created->3]
96
+ #
97
+ def bothE(*key)
98
+ find_edges(key, :both)
99
+ end
100
+ alias :both_e :bothE
101
+
102
+ # Gremlin: in
103
+ #
104
+ # Gets the adjacent vertices to the vertex.
105
+ #
106
+ # gremlin> v = g.v(4)
107
+ # ==>v[4]
108
+ # gremlin> v.inE.outV
109
+ # ==>v[1]
110
+ # gremlin> v.in
111
+ # ==>v[1]
112
+ # gremlin> v = g.v(3)
113
+ # ==>v[3]
114
+ # gremlin> v.in("created")
115
+ # ==>v[1]
116
+ # ==>v[4]
117
+ # ==>v[6]
118
+ # gremlin> v.inE("created").outV
119
+ # ==>v[1]
120
+ # ==>v[4]
121
+ # ==>v[6]
122
+ #
123
+ def in(*key)
124
+ find_vertices(key, :in)
125
+ end
126
+
127
+ # Gremlin: out
128
+ #
129
+ # Gets the out adjacent vertices to the vertex.
130
+ #
131
+ # gremlin> v = g.v(1)
132
+ # ==>v[1]
133
+ # gremlin> v.outE.inV
134
+ # ==>v[2]
135
+ # ==>v[4]
136
+ # ==>v[3]
137
+ # gremlin> v.out
138
+ # ==>v[2]
139
+ # ==>v[4]
140
+ # ==>v[3]
141
+ # gremlin> v.outE('knows').inV
142
+ # ==>v[2]
143
+ # ==>v[4]
144
+ # gremlin> v.out('knows')
145
+ # ==>v[2]
146
+ # ==>v[4]
147
+ #
148
+ def out(*key)
149
+ find_vertices(key, :out)
150
+ end
151
+
152
+ # Gremlin: both
153
+ #
154
+ # Get both adjacent vertices of the vertex, the in and the out.
155
+ #
156
+ # gremlin> v = g.v(4)
157
+ # ==>v[4]
158
+ # gremlin> v.both
159
+ # ==>v[1]
160
+ # ==>v[5]
161
+ # ==>v[3]
162
+ # gremlin> v.both('knows')
163
+ # ==>v[1]
164
+ # gremlin> v.both('knows', 'created')
165
+ # ==>v[1]
166
+ # ==>v[5]
167
+ # ==>v[3]
168
+ #
169
+ def both(*key)
170
+ find_vertices(key, :both)
171
+ end
172
+
173
+
174
+ # Non-Gremlin methods
175
+
176
+
177
+ def dup
178
+ super.tap { |vertex|
179
+ vertex.graph = nil
180
+ vertex.edges = @edges.dup
181
+ vertex.edges.vertex = vertex
182
+
183
+ vertex.edges.each do |edge|
184
+ if edge.source.equal?(self)
185
+ edge.source = vertex
186
+ end
187
+ if edge.target.equal?(self)
188
+ edge.target = vertex
189
+ end
190
+ end
191
+ }
192
+ end
193
+
194
+ def edges
195
+ @edges
196
+ end
197
+
198
+ def find_edges(labels=[], direction=:both)
199
+ case direction
200
+ when :in
201
+ results = @edges.where(target: self).all
202
+ when :out
203
+ results = @edges.where(source: self).all
204
+ else # :both
205
+ results = @edges
206
+ end
207
+
208
+ if labels.empty?
209
+ Rgraphum::Edges(results)
210
+ else
211
+ found_edges = results.find_all { |edge| labels.include?(edge.label) }
212
+ Rgraphum::Edges(found_edges)
213
+ end
214
+ end
215
+
216
+ def find_vertices(labels=[], direction=:both)
217
+ case direction
218
+ when :in
219
+ vertices = find_edges(labels, :in).map(&:source)
220
+ when :out
221
+ vertices = find_edges(labels, :out).map(&:target)
222
+ else # :both
223
+ vertices = find_edges(labels, :in).map(&:source)
224
+ vertices += find_edges(labels, :out).map(&:target)
225
+ end
226
+ Rgraphum::Vertices(vertices)
227
+ end
228
+
229
+ def neighborhoods
230
+ raise NotImplementedError
231
+ end
232
+
233
+ def edges=(array)
234
+ return unless array.is_a?(Array)
235
+ @edges = Rgraphum::Edges(array)
236
+ @edges.vertex = self
237
+ @edges
238
+ end
239
+
240
+ def inter_edges
241
+ []
242
+ end
243
+
244
+ def clear_cache
245
+ @degree = nil
246
+ @degree_weight = nil
247
+ end
248
+
249
+ def degree
250
+ @degree ||= @edges.size
251
+ end
252
+
253
+ def degree_weight
254
+ @degree_weight ||= @edges.inject(0) { |sum, edge| sum + (edge.weight || 1.0) }
255
+ end
256
+
257
+ def sigma_tot
258
+ self.degree_weight
259
+ end
260
+
261
+ def sigma_in
262
+ 0
263
+ end
264
+
265
+ def within_term(another)
266
+ return false unless self.start < another.start
267
+ return false unless another.start < self.end
268
+ true
269
+ end
270
+
271
+ # accessors
272
+
273
+ # attr_accessor :id
274
+ # attr_accessor :source, :target
275
+ # attr_accessor :start, :end
276
+ # attr_accessor :label
277
+ # attr_accessor :count
278
+ # attr_accessor :attvalues
279
+ # attr_accessor :community
280
+ # attr_accessor :edges
281
+ # attr_accessor :words
282
+
283
+ def [](key)
284
+ send(key)
285
+ end
286
+
287
+ def []=(key, value)
288
+ send("#{key}=")
289
+ end
290
+
291
+ def ==(other)
292
+ if other.is_a?(Rgraphum::Vertex)
293
+ return false unless id == other.id
294
+ else
295
+ return id == other
296
+ end
297
+ return false unless edges == other.edges
298
+ true
299
+ end
300
+
301
+ def to_hash
302
+ hash = {}
303
+ @@field_names.each do |name|
304
+ value = instance_variable_get("@#{name}")
305
+ if value
306
+ if value.respond_to?(:to_hash)
307
+ hash[name] = value.to_hash
308
+ else
309
+ hash[name] = value
310
+ end
311
+ end
312
+ end
313
+ hash
314
+ end
315
+
316
+ def to_s
317
+ to_hash.to_s
318
+ end
319
+
320
+ # FIXME
321
+ def self.field(*field_names)
322
+ @@field_names ||= []
323
+ field_names = [field_names] unless field_names.is_a?(Array)
324
+ field_names.each do |field_name|
325
+ @@field_names << field_name.to_sym
326
+ class_eval <<-EOT, __FILE__, __LINE__ + 1
327
+ def #{field_name}
328
+ # self[:#{field_name}]
329
+ @#{field_name}
330
+ end
331
+ def #{field_name}=(rhs)
332
+ # self[:#{field_name}] = rhs if respond_to?(:[]=) # FIXME
333
+ @#{field_name} = rhs
334
+ end
335
+ EOT
336
+ end
337
+ end
338
+
339
+ def self.has_field?(field_name)
340
+ @@field_names.include?(field_name.to_sym)
341
+ end
342
+
343
+ field :id
344
+ field :source, :target
345
+ field :start, :end
346
+ field :label
347
+ field :weight
348
+ field :count
349
+ field :attvalues
350
+ # field :community
351
+ field :community_id
352
+ # field :edges
353
+ field :words
354
+ end
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ def Rgraphum::Vertices(array)
4
+ if array.instance_of?(Rgraphum::Vertices)
5
+ array
6
+ else
7
+ Rgraphum::Vertices.new(array)
8
+ end
9
+ end
10
+
11
+ class Rgraphum::Vertices < Rgraphum::RgraphumArray
12
+ include Rgraphum::RgraphumArrayDividers
13
+
14
+ # Non-Gremlin methods
15
+
16
+ def initialize(vertex_hashes=[])
17
+ super()
18
+ @id_vertex_map = {}
19
+ vertex_hashes.each do |vertex_hash|
20
+ self << vertex_hash
21
+ end
22
+ end
23
+
24
+ def find_by_id(vertex_id)
25
+ if vertex_id.is_a?(Rgraphum::Vertex)
26
+ id = vertex_id.id
27
+ else
28
+ id = vertex_id
29
+ end
30
+ @id_vertex_map[id]
31
+ end
32
+
33
+ # FIXME use initialize_copy instead
34
+ def dup
35
+ edges = map{ |vertex| vertex.edges }.flatten.uniq
36
+ vertices = super
37
+ vertices.each {|vertex| vertex.edges = Rgraphum::Edges.new }
38
+
39
+ edges.each do |edge_source|
40
+ edge = edge_source.dup
41
+ edge.source = vertices.find_by_id(edge.source.id)
42
+ edge.target = vertices.find_by_id(edge.target.id)
43
+
44
+ edge.source.edges << edge
45
+ edge.target.edges << edge
46
+ end
47
+
48
+ vertices
49
+ end
50
+
51
+ def build(vertex_hash)
52
+ vertex = Rgraphum::Vertex(vertex_hash)
53
+ vertex.graph = @graph
54
+ vertex.id = new_id(vertex.id)
55
+ original_push_1(vertex)
56
+ @id_vertex_map[vertex.id] = vertex
57
+ vertex
58
+ end
59
+
60
+ alias :original_push_1 :<<
61
+ def <<(vertex_hash)
62
+ build(vertex_hash)
63
+ self
64
+ end
65
+
66
+ alias :original_push_m :push
67
+ def push(*vertex_hashs)
68
+ vertex_hashs.each do |vertex_hash|
69
+ build(vertex_hash)
70
+ end
71
+ self
72
+ end
73
+
74
+ # Called from delete_if, reject! and reject
75
+ def delete(vertex_or_id)
76
+ id = vertex_or_id.id rescue vertex_or_id
77
+ target_vertex = find_by_id(id)
78
+ unless target_vertex.edges.empty?
79
+ target_vertex.edges.reverse_each do |edge|
80
+ target_vertex.edges.delete(edge)
81
+ end
82
+ end
83
+ @id_vertex_map.delete id
84
+ super(target_vertex)
85
+ end
86
+
87
+ def to_community
88
+ Rgraphum::Community.new(vertices: self)
89
+ end
90
+
91
+ def to_graph
92
+ to_community.to_graph
93
+ end
94
+
95
+ protected :original_push_1
96
+ protected :original_push_m
97
+ end
data/lib/rgraphum.rb ADDED
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ require 'time'
4
+
5
+ module Rgraphum
6
+ def self.verbose?
7
+ !!ENV['VERBOSE']
8
+ end
9
+ end
10
+
11
+ require_relative 'rgraphum/parsers'
12
+ require_relative 'rgraphum/marshal'
13
+ require_relative 'rgraphum/simulator'
14
+
15
+ require_relative 'rgraphum/tf_idf'
16
+ require_relative 'rgraphum/cosine_similarity_matrix'
17
+
18
+ require_relative 'rgraphum/rgraphum_random'
19
+
20
+ require_relative 'rgraphum/rgraphum_array'
21
+ require_relative 'rgraphum/rgraphum_array_dividers'
22
+ require_relative 'rgraphum/vertex'
23
+ require_relative 'rgraphum/vertices'
24
+ require_relative 'rgraphum/edge'
25
+ require_relative 'rgraphum/edges'
26
+ require_relative 'rgraphum/community'
27
+ require_relative 'rgraphum/communities'
28
+ require_relative 'rgraphum/graph/math'
29
+ require_relative 'rgraphum/graph/gremlin'
30
+ require_relative 'rgraphum/importer'
31
+ require_relative 'rgraphum/graph'
32
+
33
+ require_relative 'rgraphum/path'
34
+ require_relative 'rgraphum/cluster'
35
+
36
+ require_relative 'rgraphum/analyzer'
37
+
38
+ require_relative 'rgraphum/t'
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = (ARGV.shift || 1000).to_i
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
13
+
14
+ size.times do |n1|
15
+ n2 = n1 + 1
16
+ n2 = 0 if n2 == size
17
+ v1 = graph.vertices[n1]
18
+ v2 = graph.vertices[n2]
19
+ graph.edges.build(source: v1, target: v2, weight: 1)
20
+ end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = (ARGV.shift || 1000).to_i
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = 30000
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
13
+
14
+ (0...size).step(10).each do |n|
15
+ v = graph.vertices[n]
16
+ ((n+1)...(n+10)).each do |i|
17
+ graph.edges.build(source: v, target: graph.vertices[i])
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = 20000
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
13
+
14
+ (0...size).step(10).each do |n|
15
+ v = graph.vertices[n]
16
+ ((n+1)...(n+10)).each do |i|
17
+ graph.edges.build(source: v, target: graph.vertices[i])
18
+ end
19
+ end
20
+
21
+ until graph.edges.empty?
22
+ e = graph.edges.last
23
+ graph.edges.delete(e)
24
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = (ARGV.shift || 1000).to_i
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
13
+
14
+ size.times do |n1|
15
+ n2 = n1 + 1
16
+ n2 = 0 if n2 == size
17
+ v1 = graph.vertices[n1]
18
+ v2 = graph.vertices[n2]
19
+ graph.edges.build(source: v1, target: v2, weight: 1)
20
+ end
21
+
22
+ size.times do |n|
23
+ vertex = graph.vertices[rand(graph.vertices.size)]
24
+ graph.vertices.delete vertex
25
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/rgraphum'
5
+
6
+ graph = Rgraphum::Graph.new
7
+
8
+ size = 20000
9
+
10
+ size.times do |n|
11
+ graph.vertices.build(label: "v#{n+1}")
12
+ end
13
+
14
+ (0...size).step(10).each do |n|
15
+ v = graph.vertices[n]
16
+ ((n+1)...(n+10)).each do |i|
17
+ graph.edges.build(source: v, target: graph.vertices[i])
18
+ end
19
+ end
20
+
21
+ size.times do |n|
22
+ graph.vertices.find_by_id(n)
23
+ end
data/rgraphum.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ # require 'rgraphum/version'
5
+ require 'rgraphum/version' # FIXME
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "rgraphum"
9
+ spec.version = Rgraphum::VERSION
10
+ spec.authors = ["omi", "ice"]
11
+ spec.email = ["rgraphum@rgraphum.com"]
12
+ spec.description = %q{Rgraphum: Graphum ruby implementation}
13
+ spec.summary = %q{Graphum is graph, vertex and edge manipulation library.}
14
+ spec.homepage = "http://rgraphum.com"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ # spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.executables = ['rgraphum_console','rgraphum_runner']
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+ spec.has_rdoc = 'yard'
23
+
24
+ spec.add_dependency "builder"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "minitest"
28
+
29
+ spec.add_development_dependency 'yard'
30
+ end
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'rgraphum'
5
+
6
+ class LinearRegressionTest < MiniTest::Test
7
+ def test_analyze
8
+ lr = Rgraphum::Analyzer::LinearRegression.new
9
+
10
+ # 1 degree
11
+ assert_equal ([2,3]), lr.analyze([1,2,3],[5,7,9])
12
+ assert_equal ([3,4]), lr.analyze([1,2,3],[7,10,13])
13
+ assert_equal ([4,5]), lr.analyze([1,2,3],[9,13,17])
14
+
15
+ # 2 degree
16
+ # assert_equal ([2,3,4]),lr.analyze([1,2,3],[9,18,31],2)
17
+ # assert_equal ([3,4,5]),lr.analyze([1,2,3],[12,25,44],2)
18
+ # assert_equal ([4,5,6]),lr.analyze([1,2,3],[15,32,57],2)
19
+ end
20
+ end