bio-nexml 0.0.1

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 (57) hide show
  1. data/Gemfile +15 -0
  2. data/Gemfile.lock +24 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +47 -0
  5. data/Rakefile +55 -0
  6. data/TODO.txt +6 -0
  7. data/VERSION +1 -0
  8. data/bio-nexml.gemspec +126 -0
  9. data/extconf.rb +2 -0
  10. data/lib/bio-nexml.rb +0 -0
  11. data/lib/bio.rb +321 -0
  12. data/lib/bio/db/nexml.rb +109 -0
  13. data/lib/bio/db/nexml/mapper.rb +113 -0
  14. data/lib/bio/db/nexml/mapper/framework.rb +157 -0
  15. data/lib/bio/db/nexml/mapper/inflection.rb +99 -0
  16. data/lib/bio/db/nexml/mapper/repository.rb +59 -0
  17. data/lib/bio/db/nexml/matrix.rb +1046 -0
  18. data/lib/bio/db/nexml/parser.rb +622 -0
  19. data/lib/bio/db/nexml/schema/README.txt +21 -0
  20. data/lib/bio/db/nexml/schema/abstract.xsd +159 -0
  21. data/lib/bio/db/nexml/schema/characters/README.txt +1 -0
  22. data/lib/bio/db/nexml/schema/characters/abstractcharacters.xsd +361 -0
  23. data/lib/bio/db/nexml/schema/characters/characters.xsd +22 -0
  24. data/lib/bio/db/nexml/schema/characters/continuous.xsd +190 -0
  25. data/lib/bio/db/nexml/schema/characters/dna.xsd +282 -0
  26. data/lib/bio/db/nexml/schema/characters/protein.xsd +280 -0
  27. data/lib/bio/db/nexml/schema/characters/restriction.xsd +239 -0
  28. data/lib/bio/db/nexml/schema/characters/rna.xsd +283 -0
  29. data/lib/bio/db/nexml/schema/characters/standard.xsd +261 -0
  30. data/lib/bio/db/nexml/schema/external/sawsdl.xsd +21 -0
  31. data/lib/bio/db/nexml/schema/external/xhtml-datatypes-1.xsd +177 -0
  32. data/lib/bio/db/nexml/schema/external/xlink.xsd +75 -0
  33. data/lib/bio/db/nexml/schema/external/xml.xsd +145 -0
  34. data/lib/bio/db/nexml/schema/meta/README.txt +2 -0
  35. data/lib/bio/db/nexml/schema/meta/annotations.xsd +100 -0
  36. data/lib/bio/db/nexml/schema/meta/meta.xsd +294 -0
  37. data/lib/bio/db/nexml/schema/nexml.xsd +104 -0
  38. data/lib/bio/db/nexml/schema/taxa/README.txt +2 -0
  39. data/lib/bio/db/nexml/schema/taxa/taxa.xsd +39 -0
  40. data/lib/bio/db/nexml/schema/trees/README.txt +2 -0
  41. data/lib/bio/db/nexml/schema/trees/abstracttrees.xsd +135 -0
  42. data/lib/bio/db/nexml/schema/trees/network.xsd +113 -0
  43. data/lib/bio/db/nexml/schema/trees/tree.xsd +149 -0
  44. data/lib/bio/db/nexml/schema/trees/trees.xsd +36 -0
  45. data/lib/bio/db/nexml/taxa.rb +147 -0
  46. data/lib/bio/db/nexml/trees.rb +663 -0
  47. data/lib/bio/db/nexml/writer.rb +265 -0
  48. data/test/data/nexml/test.xml +69 -0
  49. data/test/test_bio-nexml.rb +17 -0
  50. data/test/unit/bio/db/nexml/tc_factory.rb +119 -0
  51. data/test/unit/bio/db/nexml/tc_mapper.rb +78 -0
  52. data/test/unit/bio/db/nexml/tc_matrix.rb +551 -0
  53. data/test/unit/bio/db/nexml/tc_parser.rb +21 -0
  54. data/test/unit/bio/db/nexml/tc_taxa.rb +118 -0
  55. data/test/unit/bio/db/nexml/tc_trees.rb +370 -0
  56. data/test/unit/bio/db/nexml/tc_writer.rb +633 -0
  57. metadata +253 -0
@@ -0,0 +1,21 @@
1
+ module Bio
2
+ module NeXML
3
+ class TestParser < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @doc = Parser.new( TEST_FILE, true )
7
+ end
8
+
9
+ def teardown
10
+ @doc.close
11
+ end
12
+
13
+ def test_parse
14
+ nexml = @doc.parse
15
+ assert_instance_of Bio::NeXML::Nexml, nexml, "Should return an object of Bio::NeXML::Nexml"
16
+ end
17
+
18
+ end #end class TestParser
19
+ end #end module NeXML
20
+
21
+ end #end module Bio
@@ -0,0 +1,118 @@
1
+ module Bio
2
+ module NeXML
3
+ class TestOtu < Test::Unit::TestCase
4
+ def setup
5
+ @otu = Bio::NeXML::Otu.new( 'taxon1', :label => 'A label for taxon1' )
6
+ end
7
+
8
+ def test_id
9
+ assert_equal( 'taxon1', @otu.id )
10
+ end
11
+
12
+ def test_label
13
+ assert_equal( 'A label for taxon1', @otu.label )
14
+ end
15
+
16
+ def test_id=
17
+ @otu.id = 'taxon2'
18
+ assert_equal( 'taxon2', @otu.id )
19
+ end
20
+
21
+ def test_label=
22
+ @otu.label = 'New label for taxon1'
23
+ assert_equal( 'New label for taxon1', @otu.label )
24
+ end
25
+ end
26
+
27
+ class TestOtus < Test::Unit::TestCase
28
+ def setup
29
+ @otu1 = Bio::NeXML::Otu.new( 'taxon1', :label => 'A label for taxon1' )
30
+ @otu2 = Bio::NeXML::Otu.new( 'taxon2', :label => 'A label for taxon2' )
31
+ @otu3 = Bio::NeXML::Otu.new( 'taxon3', :label => 'A label for taxon3' )
32
+ @otus = Bio::NeXML::Otus.new( 'taxa1', :label => 'A label for taxa1' )
33
+ @otus << @otu1 << @otu2
34
+ end
35
+
36
+ def test_id
37
+ assert_equal( 'taxa1', @otus.id )
38
+ end
39
+
40
+ def test_label
41
+ assert_equal( 'A label for taxa1', @otus.label )
42
+ end
43
+
44
+ def test_id=
45
+ @otus.id = 'taxa2'
46
+ assert_equal( 'taxa2', @otus.id )
47
+ end
48
+
49
+ def test_label=
50
+ @otus.label = 'New label for taxa1'
51
+ assert_equal( 'New label for taxa1', @otus.label )
52
+ end
53
+
54
+ def test_hash_notation
55
+ assert_equal( @otu1, @otus[ 'taxon1' ] )
56
+ end
57
+
58
+ def test_append_operator
59
+ assert !@otus.include?( @otu3 )
60
+ rvalue = @otus << @otu3
61
+
62
+ # it should append otu to self
63
+ assert @otus.include?( @otu3 )
64
+
65
+ # it should return self, so that appends can be chained
66
+ assert_instance_of Otus, rvalue
67
+ end
68
+
69
+ def test_delete
70
+ rvalue = @otus.delete( @otu2 )
71
+
72
+ # it should delete @otu2
73
+ assert !@otus.include?( @otu2 )
74
+
75
+ # it should return the deleted object
76
+ assert_equal @otu2, rvalue
77
+ end
78
+
79
+ def test_otus
80
+ [ @otu1, @otu2 ].each do |otu|
81
+ @otus.otus.include?( otu )
82
+ end
83
+ end
84
+
85
+ def test_otus=
86
+ assert !@otus.include?( @otu3 )
87
+ @otus.otus = [ @otu3 ]
88
+ assert @otus.include?( @otu3 )
89
+ end
90
+
91
+ def test_each
92
+ otus = [ @otu1, @otu2 ]
93
+ @otus.each do |otu|
94
+ assert otus.include?( otu )
95
+ end
96
+ end
97
+
98
+ def test_each_with_id
99
+ otus = [ @otu1, @otu2 ]
100
+ @otus.each_with_id do |id, otu|
101
+ assert otus.include?( otu )
102
+ assert otus.include?( @otus[ id ] )
103
+ end
104
+ end
105
+
106
+ def test_length
107
+ assert_equal 2, @otus.length
108
+ end
109
+
110
+ def test_include
111
+ # it should respond for an otu object
112
+ assert @otus.include?( @otu1 )
113
+
114
+ assert !@otus.include?( @otu3 )
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,370 @@
1
+ class TestNode < Test::Unit::TestCase
2
+ def setup
3
+ @otu = Bio::NeXML::Otu.new( 'o1' )
4
+ @node = Bio::NeXML::Node.new( 'n1' )
5
+ @node.otu = @otu
6
+ end
7
+
8
+ def test_id
9
+ @node.id = 'foo'
10
+ assert_equal( 'foo', @node.id )
11
+ end
12
+
13
+ def test_label
14
+ @node.label = 'a node'
15
+ assert_equal( 'a node', @node.label )
16
+ end
17
+
18
+ def test_root?
19
+ assert( !@node.root? )
20
+ end
21
+
22
+ def test_root=
23
+ @node.root = true
24
+ assert( @node.root )
25
+ end
26
+
27
+ def test_otu
28
+ otu = Bio::NeXML::Otu.new( 'o2' )
29
+ @node.otu = otu
30
+
31
+ assert_equal( otu, @node.otu )
32
+ assert_equal( otu.nodes, [ @node ] )
33
+ end
34
+
35
+ end
36
+
37
+ class TestEdge < Test::Unit::TestCase
38
+ def setup
39
+ @n1 = Bio::NeXML::Node.new( 'n1' )
40
+ @n2 = Bio::NeXML::Node.new( 'n2' )
41
+ @edge = Bio::NeXML::Edge.new( 'e1', :source => @n1, :target => @n2 )
42
+ end
43
+
44
+ def test_id
45
+ @edge.id = 'e2'
46
+ assert_equal( 'e2', @edge.id )
47
+ end
48
+
49
+ def test_label
50
+ @edge.label = 'an edge'
51
+ assert_equal( 'an edge', @edge.label )
52
+ end
53
+
54
+ def test_source
55
+ n3 = Bio::NeXML::Node.new( 'n3' )
56
+ @edge.source = n3
57
+ assert_equal( n3, @edge.source )
58
+ end
59
+
60
+ def test_target
61
+ n3 = Bio::NeXML::Node.new( 'n3' )
62
+ @edge.target = n3
63
+ assert_equal( n3, @edge.target )
64
+ end
65
+
66
+ def test_length
67
+ @edge.length = 1
68
+ assert_equal( 1, @edge.length )
69
+ end
70
+ end
71
+
72
+ class TestRootEdge < TestEdge
73
+ def setup
74
+ @edge = Bio::NeXML::RootEdge.new( 're1', :target => @n1 )
75
+ end
76
+
77
+ def test_source
78
+ assert !@re.respond_to?( :source= )
79
+ end
80
+ end
81
+
82
+ class TestTree < Test::Unit::TestCase
83
+
84
+ def setup
85
+ @roots = %w|n1 n9|.map { |n| Bio::NeXML::Node.new( n, :root => true ) }
86
+ @nodes = %w|n2 n3 n4 n5 n6 n7 n8|.map { |n| Bio::NeXML::Node.new( n ) }
87
+ @nodes = @nodes + @roots
88
+
89
+ @edges = %w|e12 e13 e34 e37 e45 e46 e78 e79|.map do |e|
90
+ source = @nodes.find { |n| n.id == "n#{e[1,1]}" }
91
+ target = @nodes.find { |n| n.id == "n#{e[2,1]}" }
92
+ Bio::NeXML::Edge.new( e, :source => source, :target => target )
93
+ end
94
+
95
+ @re = Bio::NeXML::RootEdge.new( 're1', :target => @n1 )
96
+
97
+ @tree = Bio::NeXML::Tree.new( 'tree1', :nodes => @nodes, :edges => @edges, :rootedge => @re )
98
+ end
99
+
100
+ def test_id
101
+ assert_equal( 'tree1', @tree.id )
102
+ @tree.id = 'tree2'
103
+ assert_equal( 'tree2', @tree.id )
104
+ end
105
+
106
+ def test_label
107
+ assert_nil( @tree.label )
108
+ @tree.label = 'a tree'
109
+ assert_equal( 'a tree', @tree.label )
110
+ end
111
+
112
+ def test_rootedge
113
+ assert_equal( @re, @tree.rootedge )
114
+ re = Bio::NeXML::RootEdge.new( 're2', :target => @n9 )
115
+ @tree.rootedge = re
116
+ assert_equal( re, @tree.rootedge )
117
+ end
118
+
119
+ def test_roots
120
+ @roots.each do |r|
121
+ assert @tree.roots.include?( r )
122
+ end
123
+ end
124
+
125
+ def test_add_node
126
+ node = Bio::NeXML::Node.new( 'node' )
127
+ @tree.add_node( node )
128
+ assert @tree.include?( node )
129
+ assert_equal( @tree, node.tree )
130
+ end
131
+
132
+ def test_add_edge
133
+ node1 = Bio::NeXML::Node.new( 'node1' )
134
+ node2 = Bio::NeXML::Node.new( 'node2' )
135
+ edge = Bio::NeXML::Edge.new( 'edge', :source => node1, :target => node2 )
136
+ @tree << node1 << node2 << edge
137
+
138
+ assert @tree.include?( edge )
139
+ assert_equal( @tree, edge.tree )
140
+ end
141
+
142
+ def test_delete_node
143
+ n = @nodes[ 2 ]
144
+ @tree.delete_node( n )
145
+ assert !@tree.include?( n )
146
+ end
147
+
148
+ def test_delete_edge
149
+ @tree.delete_edge( @edges[ 1 ] )
150
+ assert !@tree.include?( @edges[ 1 ] )
151
+ end
152
+
153
+ def test_append_operator
154
+ n10 = Bio::NeXML::Node.new( 'n10' )
155
+ e9 = Bio::NeXML::Edge.new( 'e9', :source => @n9, :target => n10 )
156
+
157
+ @tree << n10
158
+ @tree << e9
159
+
160
+ @tree.include?( n10 )
161
+ @tree.include?( e9 )
162
+ end
163
+
164
+ def test_get_node_by_id
165
+ assert_equal( @nodes[ 0 ], @tree.get_node_by_id( 'n2' ) )
166
+ end
167
+
168
+ def test_get_edge_by_id
169
+ assert_equal( @edges[ 0 ], @tree.get_edge_by_id( 'e12' ) )
170
+ end
171
+
172
+ def test_hash_notation
173
+ assert_equal( @nodes[ 0 ], @tree[ 'n2' ] )
174
+ assert_equal( @edges[ 0 ], @tree[ 'e12' ] )
175
+ end
176
+
177
+ def test_has_node
178
+ assert @tree.has_node?( @nodes[ 0 ] )
179
+ assert !@tree.has_node?( Bio::NeXML::Node.new( 'foo' ) )
180
+ end
181
+
182
+ def test_has_edge
183
+ assert @tree.has_edge?( @edges[ 0 ] )
184
+ assert !@tree.has_edge?( Bio::NeXML::Edge.new( 'foo' ) )
185
+ end
186
+
187
+ def test_include
188
+ assert @tree.include?( @nodes[ 0 ] )
189
+ assert @tree.include?( @edges[ 0 ] )
190
+ end
191
+
192
+ def test_each_node
193
+ c = 0
194
+ @tree.each_node do |n|
195
+ assert @tree.include?( n )
196
+ c +=1
197
+ end
198
+ assert @tree.number_of_nodes, c
199
+ end
200
+
201
+ def test_each_node_with_id
202
+ c = 0
203
+ @tree.each_node_with_id do |i, n|
204
+ assert @tree.include?( n )
205
+ assert_equal( n.id, i )
206
+ c +=1
207
+ end
208
+ assert @tree.number_of_nodes, c
209
+ end
210
+
211
+ def test_each_edge
212
+ c = 0
213
+ @tree.each_edge do |e|
214
+ assert @tree.include?( e )
215
+ c +=1
216
+ end
217
+ assert @tree.number_of_edges, c
218
+ end
219
+
220
+ def test_each_edge_with_id
221
+ c = 0
222
+ @tree.each_edge_with_id do |i, e|
223
+ assert @tree.include?( e )
224
+ assert_equal( e.id, i )
225
+ c +=1
226
+ end
227
+ assert @tree.number_of_edges, c
228
+ end
229
+ end #end class TestTree
230
+
231
+ class TestTrees < Test::Unit::TestCase
232
+
233
+ def setup
234
+ @otus = Bio::NeXML::Otus.new( 'o1' )
235
+ @tree = Bio::NeXML::Tree.new( 't1' )
236
+ @network = Bio::NeXML::Network.new( 'n1' )
237
+ @trees = Bio::NeXML::Trees.new( 'trees1', :label => 'Tree container' )
238
+ @trees.add_tree( @tree )
239
+ @trees.add_network( @network )
240
+ end
241
+
242
+ def test_id
243
+ @trees.id = 'trees2'
244
+ assert_equal( 'trees2', @trees.id )
245
+ end
246
+
247
+ def test_label
248
+ @trees.label = 'Label changed'
249
+ assert_equal( 'Label changed', @trees.label )
250
+ end
251
+
252
+ def test_hash_notation
253
+ assert_equal( @trees[ 't1' ], @tree )
254
+ assert_equal( @trees[ 'n1' ], @network )
255
+ assert_nil( @trees[ 'foo' ] )
256
+ end
257
+
258
+ def test_append_operator
259
+ tree = Bio::NeXML::Tree.new( 't2' )
260
+ network = Bio::NeXML::Tree.new( 'n2' )
261
+
262
+ @trees << tree << network
263
+
264
+ assert( @trees.include?( tree ) )
265
+ assert( @trees.include?( network ) )
266
+
267
+ assert_equal( @trees, tree.trees )
268
+ assert_equal( @trees, network.trees )
269
+ end
270
+
271
+ def test_trees
272
+ assert_equal( [ @tree ], @trees.trees )
273
+ end
274
+
275
+ def test_network
276
+ assert_equal( [ @network ], @trees.networks )
277
+ end
278
+
279
+ def test_add_tree
280
+ tree = Bio::NeXML::Tree.new( 't2' )
281
+ @trees << tree
282
+ assert( @trees.include?( tree ) )
283
+ assert_equal( @trees, tree.trees )
284
+ end
285
+
286
+ def test_add_network
287
+ network = Bio::NeXML::Tree.new( 'n2' )
288
+ @trees << network
289
+ assert( @trees.include?( network ) )
290
+ assert_equal( @trees, network.trees )
291
+ end
292
+
293
+ def test_has_tree?
294
+ assert( @trees.has_tree?( @tree ) )
295
+ end
296
+
297
+ def test_has_network?
298
+ assert( @trees.has_network?( @network ) )
299
+ end
300
+
301
+ def test_include?
302
+ assert( @trees.include?( @tree ) )
303
+ assert( @trees.include?( @network ) )
304
+ assert( !@trees.include?( Bio::NeXML::Tree.new( 'foo' ) ) )
305
+ end
306
+
307
+ def test_number_of_trees
308
+ assert_equal( 1, @trees.number_of_trees )
309
+ end
310
+
311
+ def test_number_of_networks
312
+ assert_equal( 1, @trees.number_of_networks )
313
+ end
314
+
315
+ def test_count
316
+ assert_equal 2, @trees.count
317
+ end
318
+
319
+ def test_get_tree_by_id
320
+ assert_not_nil @trees.get_tree_by_id 't1'
321
+ assert_nil @trees.get_tree_by_id 'foo'
322
+ end
323
+
324
+ def test_get_network_by_id
325
+ assert_not_nil @trees.get_network_by_id 'n1'
326
+ assert_nil @trees.get_network_by_id 'foo'
327
+ end
328
+
329
+ def test_each_tree
330
+ c = 0
331
+ @trees.each_tree {|t| c+=1 }
332
+ assert_equal 1, c
333
+ end
334
+
335
+ def test_each_network
336
+ c = 0
337
+ @trees.each_network {|t| c+=1 }
338
+ assert_equal 1, c
339
+ end
340
+
341
+ def test_each
342
+ c = 0
343
+ @trees.each {|t| c+=1 }
344
+ assert_equal 2, c
345
+ end
346
+
347
+ end #end class TestTrees
348
+
349
+ #class TestTree < Test::Unit::TestCase
350
+
351
+ #def setup
352
+ #@tree = Bio::NeXML::Tree.new 'tree'
353
+ #end
354
+
355
+ #def teardown
356
+ #@tree = nil
357
+ #end
358
+
359
+ #def test_add_rootedge
360
+ #target = Bio::NeXML::Node.new 'node1'
361
+ #re = Bio::NeXML::RootEdge.new 're1', target, 2
362
+ #@tree.add_rootedge re
363
+ #assert @tree.rootedge
364
+ #end
365
+
366
+ #def test_target_cache
367
+ #assert_instance_of Array, @tree.target_cache
368
+ #end
369
+
370
+ #end