gratr 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/Grater.xcf +0 -0
  2. data/README +328 -0
  3. data/Rakefile +220 -0
  4. data/examples/graph_self.rb +54 -0
  5. data/examples/module_graph.jpg +0 -0
  6. data/examples/module_graph.rb +12 -0
  7. data/examples/self_graph.jpg +0 -0
  8. data/examples/visualize.jpg +0 -0
  9. data/examples/visualize.rb +8 -0
  10. data/install.rb +49 -0
  11. data/lib/gratr.rb +33 -0
  12. data/lib/gratr/adjacency_graph.rb +230 -0
  13. data/lib/gratr/base.rb +34 -0
  14. data/lib/gratr/biconnected.rb +116 -0
  15. data/lib/gratr/chinese_postman.rb +123 -0
  16. data/lib/gratr/common.rb +73 -0
  17. data/lib/gratr/comparability.rb +92 -0
  18. data/lib/gratr/digraph.rb +113 -0
  19. data/lib/gratr/digraph_distance.rb +185 -0
  20. data/lib/gratr/dot.rb +90 -0
  21. data/lib/gratr/edge.rb +145 -0
  22. data/lib/gratr/graph.rb +315 -0
  23. data/lib/gratr/graph_api.rb +82 -0
  24. data/lib/gratr/import.rb +44 -0
  25. data/lib/gratr/labels.rb +103 -0
  26. data/lib/gratr/maximum_flow.rb +107 -0
  27. data/lib/gratr/rdot.rb +326 -0
  28. data/lib/gratr/search.rb +409 -0
  29. data/lib/gratr/strong_components.rb +127 -0
  30. data/lib/gratr/undirected_graph.rb +153 -0
  31. data/tests/TestBiconnected.rb +53 -0
  32. data/tests/TestChinesePostman.rb +53 -0
  33. data/tests/TestComplement.rb +54 -0
  34. data/tests/TestDigraph.rb +333 -0
  35. data/tests/TestDigraphDistance.rb +138 -0
  36. data/tests/TestEdge.rb +171 -0
  37. data/tests/TestInspection.rb +57 -0
  38. data/tests/TestMultiEdge.rb +57 -0
  39. data/tests/TestNeighborhood.rb +64 -0
  40. data/tests/TestProperties.rb +160 -0
  41. data/tests/TestSearch.rb +257 -0
  42. data/tests/TestStrongComponents.rb +85 -0
  43. data/tests/TestTriagulated.rb +137 -0
  44. data/tests/TestUndirectedGraph.rb +219 -0
  45. metadata +92 -0
@@ -0,0 +1,137 @@
1
+ #--
2
+ # Copyright (c) 2006 Shawn Patrick Garbett
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification,
5
+ # are permitted provided that the following conditions are met:
6
+ #
7
+ # * Redistributions of source code must retain the above copyright notice(s),
8
+ # this list of conditions and the following disclaimer.
9
+ # * Redistributions in binary form must reproduce the above copyright notice,
10
+ # this list of conditions and the following disclaimer in the documentation
11
+ # and/or other materials provided with the distribution.
12
+ # * Neither the name of the Shawn Garbett nor the names of its contributors
13
+ # may be used to endorse or promote products derived from this software
14
+ # without specific prior written permission.
15
+ #
16
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+ #++
27
+
28
+
29
+ require 'test/unit'
30
+ require 'gratr/import'
31
+
32
+ class TestTriagulated < Test::Unit::TestCase #:nodoc:
33
+
34
+ def test_berge_mystery
35
+ berge_mystery = UndirectedGraph[
36
+ :abe, :eddie,
37
+ :abe, :burt,
38
+ :abe, :desmond,
39
+ :eddie, :burt,
40
+ :eddie, :ida,
41
+ :eddie, :charlotte,
42
+ :charlotte, :ida,
43
+ :charlotte, :desmond,
44
+ :burt, :ida,
45
+ :ida, :desmond]
46
+
47
+ assert !berge_mystery.triangulated?
48
+ berge_mystery.remove_vertex!(:desmond)
49
+ assert berge_mystery.triangulated?
50
+
51
+ assert 3, berge_mystery.chromatic_number
52
+ end
53
+
54
+ def test_house
55
+ house = UndirectedGraph[
56
+ :roof, :left_gutter,
57
+ :roof, :right_gutter,
58
+ :left_gutter, :left_foundation,
59
+ :right_gutter, :right_foundation,
60
+ :left_foundation, :right_foundation
61
+ ]
62
+ assert !house.triangulated?
63
+ house.remove_vertex!(:left_foundation) # Becomes a bulls head graph
64
+ assert house.triangulated?
65
+ assert 3, house.chromatic_number
66
+ end
67
+
68
+ # A triangulated, but not interval graph test
69
+ def test_non_interval
70
+ non_interval = UndirectedGraph[
71
+ :ao, :ai,
72
+ :ai, :bi,
73
+ :ai, :ci,
74
+ :bo, :bi,
75
+ :bi, :ci,
76
+ :co, :ci
77
+ ]
78
+ assert non_interval.triangulated?
79
+ assert 3, non_interval.chromatic_number
80
+ end
81
+
82
+ def test_simple
83
+ simple = UndirectedGraph[
84
+ :a, :b,
85
+ :b, :c,
86
+ :c, :d,
87
+ :d, :e,
88
+ :e, :f,
89
+ :f, :g,
90
+ :g, :a,
91
+ :g, :b,
92
+ :b, :f,
93
+ :f, :c,
94
+ ]
95
+ assert !simple.triangulated?
96
+ simple.add_edge!(:c, :e)
97
+ assert simple.triangulated?
98
+ assert 3, simple.chromatic_number
99
+ assert 2, UndirectedGraph[:a, :b].chromatic_number
100
+ end
101
+
102
+ def test_simple2
103
+ simple2 = UndirectedGraph[
104
+ :x, :p,
105
+ :p, :z,
106
+ :z, :r,
107
+ :r, :x,
108
+ :p, :y,
109
+ :y, :r,
110
+ :y, :q,
111
+ :q, :z]
112
+ assert !simple2.triangulated?
113
+ end
114
+
115
+ def test_lexicographic_queue
116
+ q = UndirectedGraph::LexicographicQueue.new([1,2,3,4,5,6,7,8,9])
117
+ assert_equal 9, q.pop
118
+ q.add_lexeme([3,4,5,6,7,8])
119
+ assert_equal 8, q.pop
120
+ q.add_lexeme([2,6,7,9])
121
+ assert_equal 7, q.pop
122
+ q.add_lexeme([8,9])
123
+ assert_equal 6, q.pop
124
+ q.add_lexeme([1,5,8,9])
125
+ assert_equal 5, q.pop
126
+ q.add_lexeme([6,9])
127
+ assert_equal 4, q.pop
128
+ q.add_lexeme([3,9])
129
+ assert_equal 3, q.pop
130
+ q.add_lexeme([4,9])
131
+ assert_equal 2, q.pop
132
+ q.add_lexeme([8])
133
+ assert_equal 1, q.pop
134
+ assert_equal nil, q.pop
135
+ end
136
+
137
+ end
@@ -0,0 +1,219 @@
1
+ #--
2
+ # Copyright (c) 2006 Shawn Patrick Garbett
3
+ # Copyright (c) 2002,2004,2005 by Horst Duchene
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without modification,
6
+ # are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice(s),
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Shawn Garbett nor the names of its contributors
14
+ # may be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #++
28
+
29
+
30
+ require 'test/unit'
31
+ require 'gratr/import'
32
+
33
+ class TestUndirectedGraph < Test::Unit::TestCase # :nodoc:
34
+
35
+ def setup
36
+ @single = UndirectedGraph[1,2, 2,3, 3,4, 4,4, 1,2, 2,3]
37
+ @dups = UndirectedPseudoGraph[1,2, 2,3, 3,4, 4,4, 1,2, 2,3]
38
+ @loops = UndirectedMultiGraph[1,2, 2,3, 3,4, 4,4, 1,2, 2,3]
39
+ end
40
+
41
+ def test_new
42
+ assert_equal UndirectedGraph[1,2, 2,3, 3,4, 4,4], @single
43
+ assert_equal UndirectedPseudoGraph[1,2, 2,3, 3,4, 4,4, 1,2, 2,3], @dups
44
+ assert_equal UndirectedMultiGraph[1,2, 2,3, 3,4, 4,4, 1,2, 2,3], @loops
45
+ assert_raise(ArgumentError) {UndirectedGraph.new(:bomb)}
46
+ assert_raise(ArgumentError) {UndirectedGraph.new(1)}
47
+ assert_equal @single, UndirectedGraph.new(@single)
48
+ end
49
+
50
+ def test_edges
51
+ assert @single.edges.include?(Edge[1,2])
52
+ assert @single.edges.include?(Edge[2,3])
53
+ assert @single.edges.include?(Edge[3,4])
54
+ assert !@single.edges.include?(Edge[4,4])
55
+ assert @loops.edges.include?(MultiEdge[4,4])
56
+ assert @single.edges.include?(Edge[1,2])
57
+ assert @single.edges.include?(Edge[2,3])
58
+ assert !@single.edges.include?(Edge[1,3])
59
+ assert @single.edge?(2,3)
60
+ assert !@single.edge?(1,4)
61
+ assert @single.edge?(Edge[1,2])
62
+ assert !@single.add_edge!(5,5).edge?(5,5)
63
+ assert !@dups.add_edge!(5,5).edge?(5,5)
64
+ assert @loops.add_edge!(5,5).edge?(5,5)
65
+ assert !@single.remove_edge!(5,5).edge?(5,5)
66
+ end
67
+
68
+ def test_vertices
69
+ assert_equal [1,2,3,4], @single.vertices.sort
70
+ assert_equal [1,2,3,4,5], @single.add_vertex!(5).sort
71
+ assert_equal [1,2,4,5], @single.remove_vertex!(3).sort
72
+ assert !@single.vertex?(3)
73
+ assert !@single.edge?(2,3)
74
+ assert !@single.edge?(3,4)
75
+ end
76
+
77
+ def test_properties
78
+ assert !@single.directed?
79
+ assert @single.empty? == false
80
+ assert UndirectedGraph.new.empty? == true
81
+ assert_equal 4, @single.size
82
+ assert_equal 4, @dups.size
83
+ assert_equal 4, @single.num_vertices
84
+ assert_equal 4, @dups.num_vertices
85
+ assert_equal 3, @single.num_edges
86
+ assert_equal 6, @loops.num_edges
87
+ assert_equal 5, @dups.num_edges
88
+ end
89
+
90
+ def test_merge
91
+ @dups.merge(@single)
92
+ assert_equal 8, @dups.num_edges
93
+ assert_equal [1,2,3,4], @dups.vertices.sort
94
+ end
95
+
96
+ def test_operators
97
+ result = @single + Edge[3,2]
98
+ assert_equal 4, @single.size
99
+ assert_equal 3, @single.num_edges
100
+ assert_equal 4, result.size
101
+ assert_equal 3, result.num_edges
102
+
103
+ result = @single + 5
104
+ assert_equal 4, @single.size
105
+ assert_equal 3, @single.num_edges
106
+ assert_equal 5, result.size
107
+ assert_equal 3, result.num_edges
108
+
109
+ result = @single - Edge[4,4]
110
+ assert_equal 4, @single.size
111
+ assert_equal 3, @single.num_edges
112
+ assert_equal 4, result.size
113
+ assert_equal 3, result.num_edges
114
+
115
+ result = @single - 4
116
+ assert_equal 4, @single.size
117
+ assert_equal 3, @single.num_edges
118
+ assert_equal 3, result.size
119
+ assert_equal 2, result.num_edges
120
+
121
+ @single << Edge[6,1]
122
+ assert_equal 5, @single.size
123
+ assert_equal 4, @single.num_edges
124
+ assert @single.edge?(6,1)
125
+ end
126
+
127
+ def test_complement
128
+ complement = @single.complement
129
+ assert [1,2,3,4], complement.vertices.sort
130
+ assert !complement.edge?(1,1)
131
+ assert complement.edge?(1,3)
132
+ assert complement.edge?(1,4)
133
+ assert !complement.edge?(2,2)
134
+ assert complement.edge?(2,4)
135
+ assert complement.edge?(3,1)
136
+ assert !complement.edge?(3,3)
137
+ assert complement.edge?(4,1)
138
+ assert complement.edge?(4,2)
139
+ assert 7, complement.num_edges
140
+ end
141
+
142
+ def test_induced_subgraph
143
+ induced = @single.induced_subgraph([1,2])
144
+ assert [1,2], induced.vertices.sort
145
+ assert induced.edge?(1,2)
146
+ assert 1, induced.num_edges
147
+ end
148
+
149
+ def test_include
150
+ assert @single.include?(4)
151
+ assert @dups.include?(4)
152
+ assert !@dups.include?(5)
153
+ assert !@single.include?(5)
154
+ assert @single.include?(Edge[1,2])
155
+ assert @dups.include?(Edge[1,2])
156
+ end
157
+
158
+ def test_adjacent
159
+
160
+ assert @single.adjacent?(2, Edge[1,2])
161
+ assert_equal [2], @single.adjacent(1)
162
+
163
+ assert_equal [Edge[1,2]], @single.adjacent(1, :type=>:edges)
164
+ assert_equal [Edge[1,2]], @single.adjacent(1, :type=>:edges, :direction=> :out)
165
+ assert_equal [Edge[1,2],Edge[2,3]], @single.adjacent(2, :type=>:edges, :direction=> :in).sort
166
+ assert_equal [Edge[1,2],Edge[2,3]], @single.adjacent(2, :type=>:edges, :direction=> :all).sort
167
+
168
+ assert_equal [MultiEdge[1,2]]*2, @dups.adjacent(1, :type=>:edges)
169
+ assert_equal [MultiEdge[1,2]]*2, @dups.adjacent(1, :type=>:edges, :direction=> :out)
170
+ assert_equal ([MultiEdge[1,2]]*2 + [MultiEdge[2,3]]*2), @dups.adjacent(2, :type=>:edges, :direction=> :in).sort
171
+ assert_equal ([MultiEdge[1,2]]*2 + [MultiEdge[2,3]]*2), @dups.adjacent(2, :type=>:edges, :direction=> :all).sort
172
+
173
+ assert_equal [2], @single.adjacent(1, :type=>:vertices)
174
+ assert_equal [2], @single.adjacent(1, :type=>:vertices, :direction=> :out)
175
+ assert_equal [1,3], @single.adjacent(2, :type=>:vertices, :direction=> :in)
176
+ assert_equal [1,3], @single.adjacent(2, :type=>:vertices, :direction=> :all)
177
+
178
+ assert_equal [2,3], @single.adjacent(Edge[2,3], :type=>:vertices)
179
+ assert_equal [2,3], @single.adjacent(Edge[2,3], :type=>:vertices, :direction=> :out)
180
+ assert_equal [2,3], @single.adjacent(Edge[2,3], :type=>:vertices, :direction=> :in)
181
+ assert_equal [2,3], @single.adjacent(Edge[2,3], :type=>:vertices, :direction=> :all)
182
+
183
+ assert_equal [Edge[1,2],Edge[3,4]], @single.adjacent(Edge[2,3], :type=>:edges).sort
184
+ assert_equal [Edge[1,2],Edge[3,4]], @single.adjacent(Edge[2,3], :type=>:edges, :direction=> :out).sort
185
+ assert_equal [Edge[1,2],Edge[3,4]], @single.adjacent(Edge[2,3], :type=>:edges, :direction=> :in).sort
186
+ assert_equal [Edge[1,2],Edge[3,4]], @single.adjacent(Edge[2,3], :type=>:edges, :direction=> :all).sort
187
+ assert_equal ([MultiEdge[1,2]]*2 + [MultiEdge[3,4]]), @dups.adjacent(MultiEdge[2,3], :type=>:edges).sort
188
+ assert_equal ([MultiEdge[1,2]]*2 + [MultiEdge[3,4]]), @dups.adjacent(MultiEdge[2,3], :type=>:edges, :direction=>:out).sort
189
+ assert_equal ([MultiEdge[1,2]]*2 + [MultiEdge[3,4]]), @dups.adjacent(MultiEdge[2,3], :type=>:edges, :direction=>:in).sort
190
+ assert_equal ([MultiEdge[1,2]]*2+[MultiEdge[3,4]]), @dups.adjacent(MultiEdge[2,3], :type=>:edges, :direction=> :all).sort
191
+ end
192
+
193
+ def test_neighborhood
194
+ assert_equal [2], @single.neighborhood(1).sort
195
+ assert_equal [1,3], @single.neighborhood(2).sort
196
+ assert_equal [Edge[1,2], Edge[3,4]], @single.neighborhood(Edge[2,3]).sort
197
+ end
198
+
199
+ def test_degree
200
+ assert_equal 1, @single.in_degree(1)
201
+ assert_equal 2, @single.in_degree(2)
202
+ assert_equal 1, @single.in_degree(4)
203
+ assert_equal 1, @single.out_degree(1)
204
+ assert_equal 2, @single.out_degree(2)
205
+ assert_equal 1, @single.out_degree(4)
206
+ assert_equal 0, @single.add_vertex!(6).out_degree(6)
207
+ assert_equal 0, @single.add_vertex!(7).in_degree(7)
208
+ assert_equal 2, @single.add_edge!(4,2).out_degree(4)
209
+ assert_equal 3, @single.in_degree(2)
210
+ end
211
+
212
+ def test_include
213
+ assert @single.include?(2)
214
+ assert !@single.include?(23)
215
+ assert @single.include?(Edge[1,2])
216
+ assert !@single.include?(Edge[1,4])
217
+ end
218
+
219
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: gratr
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.4.2
7
+ date: 2007-01-01 00:00:00 -06:00
8
+ summary: Graph Theory Ruby library
9
+ require_paths:
10
+ - lib
11
+ email: shawn@garbett.org
12
+ homepage: http://gratr.rubyforge.org
13
+ rubyforge_project: gratr
14
+ description: "GRATR is a framework for graph data structures and algorithms. This library is a fork of RGL. This version utilizes Ruby blocks and duck typing to greatly simplfy the code. It also supports export to DOT format for display as graphics. GRATR currently contains a core set of algorithm patterns: * Breadth First Search * Depth First Search * A* Search * Floyd-Warshall * Best First Search * Djikstra's Algorithm * Lexicographic Search The algorithm patterns by themselves do not compute any meaningful quantities over graphs, they are merely building blocks for constructing graph algorithms. The graph algorithms in GRATR currently include: * Topological Sort * Strongly Connected Components * Transitive Closure * Rural Chinese Postman * Biconnected"
15
+ autorequire: gratr
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ authors:
29
+ - Shawn Garbett
30
+ files:
31
+ - install.rb
32
+ - Grater.xcf
33
+ - Rakefile
34
+ - README
35
+ - tests/TestBiconnected.rb
36
+ - tests/TestChinesePostman.rb
37
+ - tests/TestComplement.rb
38
+ - tests/TestDigraph.rb
39
+ - tests/TestDigraphDistance.rb
40
+ - tests/TestEdge.rb
41
+ - tests/TestInspection.rb
42
+ - tests/TestMultiEdge.rb
43
+ - tests/TestNeighborhood.rb
44
+ - tests/TestProperties.rb
45
+ - tests/TestSearch.rb
46
+ - tests/TestStrongComponents.rb
47
+ - tests/TestTriagulated.rb
48
+ - tests/TestUndirectedGraph.rb
49
+ - examples/graph_self.rb
50
+ - examples/module_graph.jpg
51
+ - examples/module_graph.rb
52
+ - examples/self_graph.jpg
53
+ - examples/visualize.jpg
54
+ - examples/visualize.rb
55
+ - lib/gratr.rb
56
+ - lib/gratr/adjacency_graph.rb
57
+ - lib/gratr/base.rb
58
+ - lib/gratr/biconnected.rb
59
+ - lib/gratr/chinese_postman.rb
60
+ - lib/gratr/common.rb
61
+ - lib/gratr/comparability.rb
62
+ - lib/gratr/digraph.rb
63
+ - lib/gratr/digraph_distance.rb
64
+ - lib/gratr/dot.rb
65
+ - lib/gratr/edge.rb
66
+ - lib/gratr/graph.rb
67
+ - lib/gratr/graph_api.rb
68
+ - lib/gratr/import.rb
69
+ - lib/gratr/labels.rb
70
+ - lib/gratr/maximum_flow.rb
71
+ - lib/gratr/rdot.rb
72
+ - lib/gratr/search.rb
73
+ - lib/gratr/strong_components.rb
74
+ - lib/gratr/undirected_graph.rb
75
+ test_files: []
76
+
77
+ rdoc_options:
78
+ - --title
79
+ - GRATR - Ruby Graph Library
80
+ - --main
81
+ - README
82
+ - --line-numbers
83
+ extra_rdoc_files:
84
+ - README
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ requirements: []
90
+
91
+ dependencies: []
92
+