rgraphum 0.0.1.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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