rubyvis 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ === 0.3.5 / 2010-12-20
2
+
3
+ * Horizon and Arc layouts implemented
4
+ * Bug fix: Error on Layout::Stack spec
5
+ * Bug fix: Inconsistent behaviour of Rubyvis.color and Rubyvis::Hsl
6
+ * Bug fix: Rubyvis::Color.color fails on ruby 1.8.7
7
+ * Bug fix: Raise error with negative number on Format.format
8
+
1
9
  === 0.3.4 / 2010-12-11
2
10
 
3
11
  * Implemented Layout::Grid and Layout::Tree
data/Manifest.txt CHANGED
@@ -17,6 +17,7 @@ examples/2_medium/censo_agropecuario/censo_agropecuario_chile_data.rb
17
17
  examples/2_medium/censo_agropecuario/census_treemap.rb
18
18
  examples/2_medium/censo_agropecuario/create_data.rb
19
19
  examples/2_medium/censo_agropecuario/resultset.csv
20
+ examples/2_medium/horizon.rb
20
21
  examples/2_medium/nested_grid.rb
21
22
  examples/3_pv_conventional/area.rb
22
23
  examples/3_pv_conventional/bar_column_chart.rb
@@ -44,6 +45,8 @@ examples/5_pv_hierarchies/indent.rb
44
45
  examples/5_pv_hierarchies/node_link_tree.rb
45
46
  examples/5_pv_hierarchies/sunburst.rb
46
47
  examples/5_pv_hierarchies/treemap.rb
48
+ examples/6_pv_networks/arc.rb
49
+ examples/6_pv_networks/miserables_data.rb
47
50
  lib/rubyvis.rb
48
51
  lib/rubyvis/color/color.rb
49
52
  lib/rubyvis/color/colors.rb
@@ -56,9 +59,11 @@ lib/rubyvis/histogram.rb
56
59
  lib/rubyvis/internals.rb
57
60
  lib/rubyvis/javascript_behaviour.rb
58
61
  lib/rubyvis/layout.rb
62
+ lib/rubyvis/layout/arc.rb
59
63
  lib/rubyvis/layout/cluster.rb
60
64
  lib/rubyvis/layout/grid.rb
61
65
  lib/rubyvis/layout/hierarchy.rb
66
+ lib/rubyvis/layout/horizon.rb
62
67
  lib/rubyvis/layout/indent.rb
63
68
  lib/rubyvis/layout/network.rb
64
69
  lib/rubyvis/layout/pack.rb
@@ -101,11 +106,13 @@ lib/rubyvis/transform.rb
101
106
  spec/anchor_spec.rb
102
107
  spec/area_spec.rb
103
108
  spec/bar_spec.rb
109
+ spec/color_spec.rb
104
110
  spec/dom_spec.rb
105
111
  spec/histogram_spec.rb
106
112
  spec/internal_spec.rb
107
113
  spec/javascript_behaviour_spec.rb
108
114
  spec/label_spec.rb
115
+ spec/layout_horizon_spec.rb
109
116
  spec/layout_stack_spec.rb
110
117
  spec/line_spec.rb
111
118
  spec/mark_spec.rb
data/README.txt CHANGED
@@ -8,20 +8,31 @@ Ruby port of Protovis[http://vis.stanford.edu/protovis/], a great visualization
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
+ This library implements almost completely the core API of protovis, including all static marks, SVG builder class and data classes.
12
+
11
13
  Implemented:
14
+
12
15
  * Marks: All, except transient and transitions.
13
- * Layout: Partition, Stack and Treemap.
16
+ * Layout: Cluster, Grid, Horizon, Indent, Pack, Partition, Stack, Tree and Treemap. To implement: Bullet, Arc, Force, Matrix, Rollup.
14
17
 
15
18
  Using protovis examples[http://vis.stanford.edu/protovis/ex/] as reference
16
19
 
17
20
  * Conventional: All working
18
21
  * Custom:
19
22
  * Backer's Barley
20
- * Burtin's Antibiotics
23
+ * Burtin's Antibiotics: Scatterplot matrix
24
+ * Cars: Parallel Coordinates
25
+ * Crimea war: Grouped bar chart and line chart
21
26
  * Hierarchies:
22
- * Sunbursts
23
- * Icicles
24
- * Treemaps
27
+ * Treemap
28
+ * Bubble Charts
29
+ * Circle Packing
30
+ * Dendogram
31
+ * Icicle
32
+ * Indent
33
+ * Node-Link Tree
34
+ * Sunburst
35
+ * Treemap
25
36
 
26
37
 
27
38
  I try to maintain, when posible, complete compatibility with Javascript API, including camel case naming of functions. Johnson [http://github.com/jbarnette/johnson] - the lovely Javascript wrapper inside Ruby embrace - is our friend to test implementation of basic object.
@@ -43,12 +54,18 @@ User could use +pv+ freely, cause is defined as a global method which call Rubyv
43
54
  * data/QuantitativeScale.js
44
55
  * data/OrdinalScale.js
45
56
  * data/Scale.js
46
- * layout/Hierarchy.js
47
57
  * layout/Layout.js
58
+ * layout/Cluster.js
59
+ * layout/Grid.js
48
60
  * layout/Hierarchy.js
61
+ * layout/Horizon.js
62
+ * layout/Indent.js
49
63
  * layout/Network.js
64
+ * layout/Pack.js
50
65
  * layout/Partition.js
51
66
  * layout/Stack.js
67
+ * layout/Tree.js
68
+ * layout/Treemap.js
52
69
  * mark/Anchor.js
53
70
  * mark/Area.js
54
71
  * mark/Bar.js
@@ -0,0 +1,58 @@
1
+ # = Horizon
2
+ # Horizon graphs increase data density while preserving resolution.
3
+ # While horizon graphs may require learning, they have been found to be more effective than standard line and area plots when chart sizes are small. For more, see "Sizing the Horizon: The Effects of Chart Size and Layering on the Graphical Perception of Time Series Visualizations" by Heer et al., CHI 2009.
4
+ # This example shows +offset+ and +mirror+ modes for the quadratic equation x^2-10
5
+ $:.unshift(File.dirname(__FILE__)+"/../../lib")
6
+ require 'rubyvis'
7
+
8
+ data = Rubyvis.range(-5, 5, 0.1).map {|x|
9
+ OpenStruct.new({:x=> x, :y=> x**2-10})
10
+ }
11
+
12
+
13
+
14
+ #p data
15
+ w = 400
16
+ h = 100
17
+ x = pv.Scale.linear(data, lambda {|d| d.x}).range(0, w)
18
+ y = pv.Scale.linear(data, lambda {|d| d.y}).range(-50, h*2);
19
+
20
+ #/* The root panel. */
21
+ vis = pv.Panel.new()
22
+ .width(w)
23
+ .height(h*2+20)
24
+ .bottom(20)
25
+ .left(20)
26
+ .right(10)
27
+ .top(5)
28
+
29
+ types=["offset","mirror"]
30
+
31
+
32
+ pan=vis.add(Rubyvis::Panel).
33
+ data(types).
34
+ height(80).
35
+ top(lambda { index*110+30})
36
+ pan.add(Rubyvis::Rule).
37
+ data(x.ticks).
38
+ left(x).
39
+ anchor("bottom").
40
+ add(Rubyvis::Label).
41
+ text(x.tick_format)
42
+
43
+
44
+ pan.add(Rubyvis::Layout::Horizon)
45
+ .bands(3)
46
+ .mode(lambda {|d| d})
47
+ .band.add(Rubyvis::Area)
48
+ .data(data)
49
+ .left(lambda {|d| x[d.x]})
50
+ .height(lambda {|d| y[d.y]})
51
+
52
+ pan.anchor("top").add(Rubyvis::Label)
53
+ .top(-15)
54
+
55
+ vis.render();
56
+
57
+
58
+ puts vis.to_svg
@@ -19,7 +19,7 @@ def get_files(path)
19
19
  h
20
20
  end
21
21
 
22
- files=get_files(File.dirname(__FILE__)+"/../../")
22
+ files=get_files(File.dirname(__FILE__)+"/../../lib/")
23
23
 
24
24
 
25
25
  vis = Rubyvis::Panel.new do
@@ -31,7 +31,7 @@ vis = Rubyvis::Panel.new do
31
31
  bottom 10
32
32
  layout_cluster do
33
33
  nodes pv.dom(files).root("rubyvis").sort(lambda {|a,b| a.node_name<=>b.node_name}).nodes
34
- group 1
34
+ group 0.2
35
35
  orient "left"
36
36
 
37
37
  link.line do
@@ -0,0 +1,32 @@
1
+ # = Arc Diagrams
2
+ # An arc diagram uses a one-dimensional layout of nodes, with circular arcs to represent links. Though an arc diagram may not convey the overall structure of the graph as effectively as a two-dimensional layout, with a good ordering of nodes it is easy to identify cliques and bridges. Further, as with the indented tree, multivariate data can easily be displayed alongside nodes.
3
+ # This network represents character co-occurrence in the chapters of Victor Hugo's classic novel, Les Misérables. Node colors depict cluster memberships computed by a community-detection algorithm. Source: Knuth, D. E. 1993. The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley.
4
+
5
+ $:.unshift(File.dirname(__FILE__)+"/../../lib")
6
+ require 'rubyvis'
7
+ load(File.dirname(__FILE__)+"/miserables_data.rb")
8
+ c=Rubyvis::Colors.category19()
9
+
10
+ vis = Rubyvis::Panel.new() do
11
+ width 880
12
+ height 310
13
+ bottom 90
14
+ layout_arc do
15
+ nodes $miserables.nodes
16
+ links $miserables.links
17
+ sort {|a,b|
18
+ a.group==b.group ? b.link_degree<=>a.link_degree : b.group <=>a.group}
19
+
20
+ link.line
21
+
22
+ node.dot do
23
+ shape_size {|d| d.link_degree + 4}
24
+ fill_style {|d| c[d.group]}
25
+ stroke_style {|d| c[d.group].darker()}
26
+ end
27
+
28
+ node_label.label
29
+ end
30
+ end
31
+ vis.render();
32
+ puts vis.to_svg
@@ -0,0 +1,348 @@
1
+ # This file contains the weighted network of coappearances of characters in
2
+ # Victor Hugo's novel "Les Miserables". Nodes represent characters as indicated
3
+ # by the labels, and edges connect any pair of characters that appear in the
4
+ # same chapter of the book. The values on the edges are the number of such
5
+ # coappearances. The data on coappearances were taken from D. E. Knuth, The
6
+ # Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley,
7
+ # Reading, MA (1993).
8
+ #
9
+ # The group labels were transcribed from "Finding and evaluating community
10
+ # structure in networks" by M. E. J. Newman and M. Girvan.
11
+
12
+ $miserables = OpenStruct.new({
13
+ :nodes=>[
14
+ OpenStruct.new({:node_value=>"Myriel", :group=>1}),
15
+ OpenStruct.new({:node_value=>"Napoleon", :group=>1}),
16
+ OpenStruct.new({:node_value=>"Mlle. Baptistine", :group=>1}),
17
+ OpenStruct.new({:node_value=>"Mme. Magloire", :group=>1}),
18
+ OpenStruct.new({:node_value=>"Countess de Lo", :group=>1}),
19
+ OpenStruct.new({:node_value=>"Geborand", :group=>1}),
20
+ OpenStruct.new({:node_value=>"Champtercier", :group=>1}),
21
+ OpenStruct.new({:node_value=>"Cravatte", :group=>1}),
22
+ OpenStruct.new({:node_value=>"Count", :group=>1}),
23
+ OpenStruct.new({:node_value=>"Old Man", :group=>1}),
24
+ OpenStruct.new({:node_value=>"Labarre", :group=>2}),
25
+ OpenStruct.new({:node_value=>"Valjean", :group=>2}),
26
+ OpenStruct.new({:node_value=>"Marguerite", :group=>3}),
27
+ OpenStruct.new({:node_value=>"Mme. de R", :group=>2}),
28
+ OpenStruct.new({:node_value=>"Isabeau", :group=>2}),
29
+ OpenStruct.new({:node_value=>"Gervais", :group=>2}),
30
+ OpenStruct.new({:node_value=>"Tholomyes", :group=>3}),
31
+ OpenStruct.new({:node_value=>"Listolier", :group=>3}),
32
+ OpenStruct.new({:node_value=>"Fameuil", :group=>3}),
33
+ OpenStruct.new({:node_value=>"Blacheville", :group=>3}),
34
+ OpenStruct.new({:node_value=>"Favourite", :group=>3}),
35
+ OpenStruct.new({:node_value=>"Dahlia", :group=>3}),
36
+ OpenStruct.new({:node_value=>"Zephine", :group=>3}),
37
+ OpenStruct.new({:node_value=>"Fantine", :group=>3}),
38
+ OpenStruct.new({:node_value=>"Mme. Thenardier", :group=>4}),
39
+ OpenStruct.new({:node_value=>"Thenardier", :group=>4}),
40
+ OpenStruct.new({:node_value=>"Cosette", :group=>5}),
41
+ OpenStruct.new({:node_value=>"Javert", :group=>4}),
42
+ OpenStruct.new({:node_value=>"Fauchelevent", :group=>0}),
43
+ OpenStruct.new({:node_value=>"Bamatabois", :group=>2}),
44
+ OpenStruct.new({:node_value=>"Perpetue", :group=>3}),
45
+ OpenStruct.new({:node_value=>"Simplice", :group=>2}),
46
+ OpenStruct.new({:node_value=>"Scaufflaire", :group=>2}),
47
+ OpenStruct.new({:node_value=>"Woman 1", :group=>2}),
48
+ OpenStruct.new({:node_value=>"Judge", :group=>2}),
49
+ OpenStruct.new({:node_value=>"Champmathieu", :group=>2}),
50
+ OpenStruct.new({:node_value=>"Brevet", :group=>2}),
51
+ OpenStruct.new({:node_value=>"Chenildieu", :group=>2}),
52
+ OpenStruct.new({:node_value=>"Cochepaille", :group=>2}),
53
+ OpenStruct.new({:node_value=>"Pontmercy", :group=>4}),
54
+ OpenStruct.new({:node_value=>"Boulatruelle", :group=>6}),
55
+ OpenStruct.new({:node_value=>"Eponine", :group=>4}),
56
+ OpenStruct.new({:node_value=>"Anzelma", :group=>4}),
57
+ OpenStruct.new({:node_value=>"Woman 2", :group=>5}),
58
+ OpenStruct.new({:node_value=>"Mother Innocent", :group=>0}),
59
+ OpenStruct.new({:node_value=>"Gribier", :group=>0}),
60
+ OpenStruct.new({:node_value=>"Jondrette", :group=>7}),
61
+ OpenStruct.new({:node_value=>"Mme. Burgon", :group=>7}),
62
+ OpenStruct.new({:node_value=>"Gavroche", :group=>8}),
63
+ OpenStruct.new({:node_value=>"Gillenormand", :group=>5}),
64
+ OpenStruct.new({:node_value=>"Magnon", :group=>5}),
65
+ OpenStruct.new({:node_value=>"Mlle. Gillenormand", :group=>5}),
66
+ OpenStruct.new({:node_value=>"Mme. Pontmercy", :group=>5}),
67
+ OpenStruct.new({:node_value=>"Mlle. Vaubois", :group=>5}),
68
+ OpenStruct.new({:node_value=>"Lt. Gillenormand", :group=>5}),
69
+ OpenStruct.new({:node_value=>"Marius", :group=>8}),
70
+ OpenStruct.new({:node_value=>"Baroness T", :group=>5}),
71
+ OpenStruct.new({:node_value=>"Mabeuf", :group=>8}),
72
+ OpenStruct.new({:node_value=>"Enjolras", :group=>8}),
73
+ OpenStruct.new({:node_value=>"Combeferre", :group=>8}),
74
+ OpenStruct.new({:node_value=>"Prouvaire", :group=>8}),
75
+ OpenStruct.new({:node_value=>"Feuilly", :group=>8}),
76
+ OpenStruct.new({:node_value=>"Courfeyrac", :group=>8}),
77
+ OpenStruct.new({:node_value=>"Bahorel", :group=>8}),
78
+ OpenStruct.new({:node_value=>"Bossuet", :group=>8}),
79
+ OpenStruct.new({:node_value=>"Joly", :group=>8}),
80
+ OpenStruct.new({:node_value=>"Grantaire", :group=>8}),
81
+ OpenStruct.new({:node_value=>"Mother Plutarch", :group=>9}),
82
+ OpenStruct.new({:node_value=>"Gueulemer", :group=>4}),
83
+ OpenStruct.new({:node_value=>"Babet", :group=>4}),
84
+ OpenStruct.new({:node_value=>"Claquesous", :group=>4}),
85
+ OpenStruct.new({:node_value=>"Montparnasse", :group=>4}),
86
+ OpenStruct.new({:node_value=>"Toussaint", :group=>5}),
87
+ OpenStruct.new({:node_value=>"Child 1", :group=>10}),
88
+ OpenStruct.new({:node_value=>"Child 2", :group=>10}),
89
+ OpenStruct.new({:node_value=>"Brujon", :group=>4}),
90
+ OpenStruct.new({:node_value=>"Mme. Hucheloup", :group=>8})
91
+ ],
92
+ :links=>[
93
+ OpenStruct.new({:source=>1, :target=>0, :value=>1}),
94
+ OpenStruct.new({:source=>2, :target=>0, :value=>8}),
95
+ OpenStruct.new({:source=>3, :target=>0, :value=>10}),
96
+ OpenStruct.new({:source=>3, :target=>2, :value=>6}),
97
+ OpenStruct.new({:source=>4, :target=>0, :value=>1}),
98
+ OpenStruct.new({:source=>5, :target=>0, :value=>1}),
99
+ OpenStruct.new({:source=>6, :target=>0, :value=>1}),
100
+ OpenStruct.new({:source=>7, :target=>0, :value=>1}),
101
+ OpenStruct.new({:source=>8, :target=>0, :value=>2}),
102
+ OpenStruct.new({:source=>9, :target=>0, :value=>1}),
103
+ OpenStruct.new({:source=>11, :target=>10, :value=>1}),
104
+ OpenStruct.new({:source=>11, :target=>3, :value=>3}),
105
+ OpenStruct.new({:source=>11, :target=>2, :value=>3}),
106
+ OpenStruct.new({:source=>11, :target=>0, :value=>5}),
107
+ OpenStruct.new({:source=>12, :target=>11, :value=>1}),
108
+ OpenStruct.new({:source=>13, :target=>11, :value=>1}),
109
+ OpenStruct.new({:source=>14, :target=>11, :value=>1}),
110
+ OpenStruct.new({:source=>15, :target=>11, :value=>1}),
111
+ OpenStruct.new({:source=>17, :target=>16, :value=>4}),
112
+ OpenStruct.new({:source=>18, :target=>16, :value=>4}),
113
+ OpenStruct.new({:source=>18, :target=>17, :value=>4}),
114
+ OpenStruct.new({:source=>19, :target=>16, :value=>4}),
115
+ OpenStruct.new({:source=>19, :target=>17, :value=>4}),
116
+ OpenStruct.new({:source=>19, :target=>18, :value=>4}),
117
+ OpenStruct.new({:source=>20, :target=>16, :value=>3}),
118
+ OpenStruct.new({:source=>20, :target=>17, :value=>3}),
119
+ OpenStruct.new({:source=>20, :target=>18, :value=>3}),
120
+ OpenStruct.new({:source=>20, :target=>19, :value=>4}),
121
+ OpenStruct.new({:source=>21, :target=>16, :value=>3}),
122
+ OpenStruct.new({:source=>21, :target=>17, :value=>3}),
123
+ OpenStruct.new({:source=>21, :target=>18, :value=>3}),
124
+ OpenStruct.new({:source=>21, :target=>19, :value=>3}),
125
+ OpenStruct.new({:source=>21, :target=>20, :value=>5}),
126
+ OpenStruct.new({:source=>22, :target=>16, :value=>3}),
127
+ OpenStruct.new({:source=>22, :target=>17, :value=>3}),
128
+ OpenStruct.new({:source=>22, :target=>18, :value=>3}),
129
+ OpenStruct.new({:source=>22, :target=>19, :value=>3}),
130
+ OpenStruct.new({:source=>22, :target=>20, :value=>4}),
131
+ OpenStruct.new({:source=>22, :target=>21, :value=>4}),
132
+ OpenStruct.new({:source=>23, :target=>16, :value=>3}),
133
+ OpenStruct.new({:source=>23, :target=>17, :value=>3}),
134
+ OpenStruct.new({:source=>23, :target=>18, :value=>3}),
135
+ OpenStruct.new({:source=>23, :target=>19, :value=>3}),
136
+ OpenStruct.new({:source=>23, :target=>20, :value=>4}),
137
+ OpenStruct.new({:source=>23, :target=>21, :value=>4}),
138
+ OpenStruct.new({:source=>23, :target=>22, :value=>4}),
139
+ OpenStruct.new({:source=>23, :target=>12, :value=>2}),
140
+ OpenStruct.new({:source=>23, :target=>11, :value=>9}),
141
+ OpenStruct.new({:source=>24, :target=>23, :value=>2}),
142
+ OpenStruct.new({:source=>24, :target=>11, :value=>7}),
143
+ OpenStruct.new({:source=>25, :target=>24, :value=>13}),
144
+ OpenStruct.new({:source=>25, :target=>23, :value=>1}),
145
+ OpenStruct.new({:source=>25, :target=>11, :value=>12}),
146
+ OpenStruct.new({:source=>26, :target=>24, :value=>4}),
147
+ OpenStruct.new({:source=>26, :target=>11, :value=>31}),
148
+ OpenStruct.new({:source=>26, :target=>16, :value=>1}),
149
+ OpenStruct.new({:source=>26, :target=>25, :value=>1}),
150
+ OpenStruct.new({:source=>27, :target=>11, :value=>17}),
151
+ OpenStruct.new({:source=>27, :target=>23, :value=>5}),
152
+ OpenStruct.new({:source=>27, :target=>25, :value=>5}),
153
+ OpenStruct.new({:source=>27, :target=>24, :value=>1}),
154
+ OpenStruct.new({:source=>27, :target=>26, :value=>1}),
155
+ OpenStruct.new({:source=>28, :target=>11, :value=>8}),
156
+ OpenStruct.new({:source=>28, :target=>27, :value=>1}),
157
+ OpenStruct.new({:source=>29, :target=>23, :value=>1}),
158
+ OpenStruct.new({:source=>29, :target=>27, :value=>1}),
159
+ OpenStruct.new({:source=>29, :target=>11, :value=>2}),
160
+ OpenStruct.new({:source=>30, :target=>23, :value=>1}),
161
+ OpenStruct.new({:source=>31, :target=>30, :value=>2}),
162
+ OpenStruct.new({:source=>31, :target=>11, :value=>3}),
163
+ OpenStruct.new({:source=>31, :target=>23, :value=>2}),
164
+ OpenStruct.new({:source=>31, :target=>27, :value=>1}),
165
+ OpenStruct.new({:source=>32, :target=>11, :value=>1}),
166
+ OpenStruct.new({:source=>33, :target=>11, :value=>2}),
167
+ OpenStruct.new({:source=>33, :target=>27, :value=>1}),
168
+ OpenStruct.new({:source=>34, :target=>11, :value=>3}),
169
+ OpenStruct.new({:source=>34, :target=>29, :value=>2}),
170
+ OpenStruct.new({:source=>35, :target=>11, :value=>3}),
171
+ OpenStruct.new({:source=>35, :target=>34, :value=>3}),
172
+ OpenStruct.new({:source=>35, :target=>29, :value=>2}),
173
+ OpenStruct.new({:source=>36, :target=>34, :value=>2}),
174
+ OpenStruct.new({:source=>36, :target=>35, :value=>2}),
175
+ OpenStruct.new({:source=>36, :target=>11, :value=>2}),
176
+ OpenStruct.new({:source=>36, :target=>29, :value=>1}),
177
+ OpenStruct.new({:source=>37, :target=>34, :value=>2}),
178
+ OpenStruct.new({:source=>37, :target=>35, :value=>2}),
179
+ OpenStruct.new({:source=>37, :target=>36, :value=>2}),
180
+ OpenStruct.new({:source=>37, :target=>11, :value=>2}),
181
+ OpenStruct.new({:source=>37, :target=>29, :value=>1}),
182
+ OpenStruct.new({:source=>38, :target=>34, :value=>2}),
183
+ OpenStruct.new({:source=>38, :target=>35, :value=>2}),
184
+ OpenStruct.new({:source=>38, :target=>36, :value=>2}),
185
+ OpenStruct.new({:source=>38, :target=>37, :value=>2}),
186
+ OpenStruct.new({:source=>38, :target=>11, :value=>2}),
187
+ OpenStruct.new({:source=>38, :target=>29, :value=>1}),
188
+ OpenStruct.new({:source=>39, :target=>25, :value=>1}),
189
+ OpenStruct.new({:source=>40, :target=>25, :value=>1}),
190
+ OpenStruct.new({:source=>41, :target=>24, :value=>2}),
191
+ OpenStruct.new({:source=>41, :target=>25, :value=>3}),
192
+ OpenStruct.new({:source=>42, :target=>41, :value=>2}),
193
+ OpenStruct.new({:source=>42, :target=>25, :value=>2}),
194
+ OpenStruct.new({:source=>42, :target=>24, :value=>1}),
195
+ OpenStruct.new({:source=>43, :target=>11, :value=>3}),
196
+ OpenStruct.new({:source=>43, :target=>26, :value=>1}),
197
+ OpenStruct.new({:source=>43, :target=>27, :value=>1}),
198
+ OpenStruct.new({:source=>44, :target=>28, :value=>3}),
199
+ OpenStruct.new({:source=>44, :target=>11, :value=>1}),
200
+ OpenStruct.new({:source=>45, :target=>28, :value=>2}),
201
+ OpenStruct.new({:source=>47, :target=>46, :value=>1}),
202
+ OpenStruct.new({:source=>48, :target=>47, :value=>2}),
203
+ OpenStruct.new({:source=>48, :target=>25, :value=>1}),
204
+ OpenStruct.new({:source=>48, :target=>27, :value=>1}),
205
+ OpenStruct.new({:source=>48, :target=>11, :value=>1}),
206
+ OpenStruct.new({:source=>49, :target=>26, :value=>3}),
207
+ OpenStruct.new({:source=>49, :target=>11, :value=>2}),
208
+ OpenStruct.new({:source=>50, :target=>49, :value=>1}),
209
+ OpenStruct.new({:source=>50, :target=>24, :value=>1}),
210
+ OpenStruct.new({:source=>51, :target=>49, :value=>9}),
211
+ OpenStruct.new({:source=>51, :target=>26, :value=>2}),
212
+ OpenStruct.new({:source=>51, :target=>11, :value=>2}),
213
+ OpenStruct.new({:source=>52, :target=>51, :value=>1}),
214
+ OpenStruct.new({:source=>52, :target=>39, :value=>1}),
215
+ OpenStruct.new({:source=>53, :target=>51, :value=>1}),
216
+ OpenStruct.new({:source=>54, :target=>51, :value=>2}),
217
+ OpenStruct.new({:source=>54, :target=>49, :value=>1}),
218
+ OpenStruct.new({:source=>54, :target=>26, :value=>1}),
219
+ OpenStruct.new({:source=>55, :target=>51, :value=>6}),
220
+ OpenStruct.new({:source=>55, :target=>49, :value=>12}),
221
+ OpenStruct.new({:source=>55, :target=>39, :value=>1}),
222
+ OpenStruct.new({:source=>55, :target=>54, :value=>1}),
223
+ OpenStruct.new({:source=>55, :target=>26, :value=>21}),
224
+ OpenStruct.new({:source=>55, :target=>11, :value=>19}),
225
+ OpenStruct.new({:source=>55, :target=>16, :value=>1}),
226
+ OpenStruct.new({:source=>55, :target=>25, :value=>2}),
227
+ OpenStruct.new({:source=>55, :target=>41, :value=>5}),
228
+ OpenStruct.new({:source=>55, :target=>48, :value=>4}),
229
+ OpenStruct.new({:source=>56, :target=>49, :value=>1}),
230
+ OpenStruct.new({:source=>56, :target=>55, :value=>1}),
231
+ OpenStruct.new({:source=>57, :target=>55, :value=>1}),
232
+ OpenStruct.new({:source=>57, :target=>41, :value=>1}),
233
+ OpenStruct.new({:source=>57, :target=>48, :value=>1}),
234
+ OpenStruct.new({:source=>58, :target=>55, :value=>7}),
235
+ OpenStruct.new({:source=>58, :target=>48, :value=>7}),
236
+ OpenStruct.new({:source=>58, :target=>27, :value=>6}),
237
+ OpenStruct.new({:source=>58, :target=>57, :value=>1}),
238
+ OpenStruct.new({:source=>58, :target=>11, :value=>4}),
239
+ OpenStruct.new({:source=>59, :target=>58, :value=>15}),
240
+ OpenStruct.new({:source=>59, :target=>55, :value=>5}),
241
+ OpenStruct.new({:source=>59, :target=>48, :value=>6}),
242
+ OpenStruct.new({:source=>59, :target=>57, :value=>2}),
243
+ OpenStruct.new({:source=>60, :target=>48, :value=>1}),
244
+ OpenStruct.new({:source=>60, :target=>58, :value=>4}),
245
+ OpenStruct.new({:source=>60, :target=>59, :value=>2}),
246
+ OpenStruct.new({:source=>61, :target=>48, :value=>2}),
247
+ OpenStruct.new({:source=>61, :target=>58, :value=>6}),
248
+ OpenStruct.new({:source=>61, :target=>60, :value=>2}),
249
+ OpenStruct.new({:source=>61, :target=>59, :value=>5}),
250
+ OpenStruct.new({:source=>61, :target=>57, :value=>1}),
251
+ OpenStruct.new({:source=>61, :target=>55, :value=>1}),
252
+ OpenStruct.new({:source=>62, :target=>55, :value=>9}),
253
+ OpenStruct.new({:source=>62, :target=>58, :value=>17}),
254
+ OpenStruct.new({:source=>62, :target=>59, :value=>13}),
255
+ OpenStruct.new({:source=>62, :target=>48, :value=>7}),
256
+ OpenStruct.new({:source=>62, :target=>57, :value=>2}),
257
+ OpenStruct.new({:source=>62, :target=>41, :value=>1}),
258
+ OpenStruct.new({:source=>62, :target=>61, :value=>6}),
259
+ OpenStruct.new({:source=>62, :target=>60, :value=>3}),
260
+ OpenStruct.new({:source=>63, :target=>59, :value=>5}),
261
+ OpenStruct.new({:source=>63, :target=>48, :value=>5}),
262
+ OpenStruct.new({:source=>63, :target=>62, :value=>6}),
263
+ OpenStruct.new({:source=>63, :target=>57, :value=>2}),
264
+ OpenStruct.new({:source=>63, :target=>58, :value=>4}),
265
+ OpenStruct.new({:source=>63, :target=>61, :value=>3}),
266
+ OpenStruct.new({:source=>63, :target=>60, :value=>2}),
267
+ OpenStruct.new({:source=>63, :target=>55, :value=>1}),
268
+ OpenStruct.new({:source=>64, :target=>55, :value=>5}),
269
+ OpenStruct.new({:source=>64, :target=>62, :value=>12}),
270
+ OpenStruct.new({:source=>64, :target=>48, :value=>5}),
271
+ OpenStruct.new({:source=>64, :target=>63, :value=>4}),
272
+ OpenStruct.new({:source=>64, :target=>58, :value=>10}),
273
+ OpenStruct.new({:source=>64, :target=>61, :value=>6}),
274
+ OpenStruct.new({:source=>64, :target=>60, :value=>2}),
275
+ OpenStruct.new({:source=>64, :target=>59, :value=>9}),
276
+ OpenStruct.new({:source=>64, :target=>57, :value=>1}),
277
+ OpenStruct.new({:source=>64, :target=>11, :value=>1}),
278
+ OpenStruct.new({:source=>65, :target=>63, :value=>5}),
279
+ OpenStruct.new({:source=>65, :target=>64, :value=>7}),
280
+ OpenStruct.new({:source=>65, :target=>48, :value=>3}),
281
+ OpenStruct.new({:source=>65, :target=>62, :value=>5}),
282
+ OpenStruct.new({:source=>65, :target=>58, :value=>5}),
283
+ OpenStruct.new({:source=>65, :target=>61, :value=>5}),
284
+ OpenStruct.new({:source=>65, :target=>60, :value=>2}),
285
+ OpenStruct.new({:source=>65, :target=>59, :value=>5}),
286
+ OpenStruct.new({:source=>65, :target=>57, :value=>1}),
287
+ OpenStruct.new({:source=>65, :target=>55, :value=>2}),
288
+ OpenStruct.new({:source=>66, :target=>64, :value=>3}),
289
+ OpenStruct.new({:source=>66, :target=>58, :value=>3}),
290
+ OpenStruct.new({:source=>66, :target=>59, :value=>1}),
291
+ OpenStruct.new({:source=>66, :target=>62, :value=>2}),
292
+ OpenStruct.new({:source=>66, :target=>65, :value=>2}),
293
+ OpenStruct.new({:source=>66, :target=>48, :value=>1}),
294
+ OpenStruct.new({:source=>66, :target=>63, :value=>1}),
295
+ OpenStruct.new({:source=>66, :target=>61, :value=>1}),
296
+ OpenStruct.new({:source=>66, :target=>60, :value=>1}),
297
+ OpenStruct.new({:source=>67, :target=>57, :value=>3}),
298
+ OpenStruct.new({:source=>68, :target=>25, :value=>5}),
299
+ OpenStruct.new({:source=>68, :target=>11, :value=>1}),
300
+ OpenStruct.new({:source=>68, :target=>24, :value=>1}),
301
+ OpenStruct.new({:source=>68, :target=>27, :value=>1}),
302
+ OpenStruct.new({:source=>68, :target=>48, :value=>1}),
303
+ OpenStruct.new({:source=>68, :target=>41, :value=>1}),
304
+ OpenStruct.new({:source=>69, :target=>25, :value=>6}),
305
+ OpenStruct.new({:source=>69, :target=>68, :value=>6}),
306
+ OpenStruct.new({:source=>69, :target=>11, :value=>1}),
307
+ OpenStruct.new({:source=>69, :target=>24, :value=>1}),
308
+ OpenStruct.new({:source=>69, :target=>27, :value=>2}),
309
+ OpenStruct.new({:source=>69, :target=>48, :value=>1}),
310
+ OpenStruct.new({:source=>69, :target=>41, :value=>1}),
311
+ OpenStruct.new({:source=>70, :target=>25, :value=>4}),
312
+ OpenStruct.new({:source=>70, :target=>69, :value=>4}),
313
+ OpenStruct.new({:source=>70, :target=>68, :value=>4}),
314
+ OpenStruct.new({:source=>70, :target=>11, :value=>1}),
315
+ OpenStruct.new({:source=>70, :target=>24, :value=>1}),
316
+ OpenStruct.new({:source=>70, :target=>27, :value=>1}),
317
+ OpenStruct.new({:source=>70, :target=>41, :value=>1}),
318
+ OpenStruct.new({:source=>70, :target=>58, :value=>1}),
319
+ OpenStruct.new({:source=>71, :target=>27, :value=>1}),
320
+ OpenStruct.new({:source=>71, :target=>69, :value=>2}),
321
+ OpenStruct.new({:source=>71, :target=>68, :value=>2}),
322
+ OpenStruct.new({:source=>71, :target=>70, :value=>2}),
323
+ OpenStruct.new({:source=>71, :target=>11, :value=>1}),
324
+ OpenStruct.new({:source=>71, :target=>48, :value=>1}),
325
+ OpenStruct.new({:source=>71, :target=>41, :value=>1}),
326
+ OpenStruct.new({:source=>71, :target=>25, :value=>1}),
327
+ OpenStruct.new({:source=>72, :target=>26, :value=>2}),
328
+ OpenStruct.new({:source=>72, :target=>27, :value=>1}),
329
+ OpenStruct.new({:source=>72, :target=>11, :value=>1}),
330
+ OpenStruct.new({:source=>73, :target=>48, :value=>2}),
331
+ OpenStruct.new({:source=>74, :target=>48, :value=>2}),
332
+ OpenStruct.new({:source=>74, :target=>73, :value=>3}),
333
+ OpenStruct.new({:source=>75, :target=>69, :value=>3}),
334
+ OpenStruct.new({:source=>75, :target=>68, :value=>3}),
335
+ OpenStruct.new({:source=>75, :target=>25, :value=>3}),
336
+ OpenStruct.new({:source=>75, :target=>48, :value=>1}),
337
+ OpenStruct.new({:source=>75, :target=>41, :value=>1}),
338
+ OpenStruct.new({:source=>75, :target=>70, :value=>1}),
339
+ OpenStruct.new({:source=>75, :target=>71, :value=>1}),
340
+ OpenStruct.new({:source=>76, :target=>64, :value=>1}),
341
+ OpenStruct.new({:source=>76, :target=>65, :value=>1}),
342
+ OpenStruct.new({:source=>76, :target=>66, :value=>1}),
343
+ OpenStruct.new({:source=>76, :target=>63, :value=>1}),
344
+ OpenStruct.new({:source=>76, :target=>62, :value=>1}),
345
+ OpenStruct.new({:source=>76, :target=>48, :value=>1}),
346
+ OpenStruct.new({:source=>76, :target=>58, :value=>1})
347
+ ]
348
+ })