rbbt-util 5.14.35 → 5.14.36

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14a5356d56a5794296f8708a848957a4efd82264
4
- data.tar.gz: b4e41917f06c7d28736b6ed235c61271eb25ec47
3
+ metadata.gz: 795e7afaaeccea346ef27ef5a13ccc114072207e
4
+ data.tar.gz: e8cb3fd1d85d3c30d2970ec75f63d8ce408f471d
5
5
  SHA512:
6
- metadata.gz: 66d1db7e9f85049030c34a153f114c864b239bca644aade3f2f9803e7764b3c97a9ec342416045a1bb4ae4f40119749ae58c2d572c00e920eb9d91273366bb88
7
- data.tar.gz: e9432f28095748fd4d25e945d1a9cb4c2b100708e200216ee589a9f57eb19d999d55ac3556ae040a388775faba145212da99ff3ffbe0001cc218821ffbf53597
6
+ metadata.gz: 94cac0c82c60c0759be8bf32296b016666b2408751eab32d32b7b2e97e059374c3ff33ed427ac05b696169e8ce71c15839a4eedd7a7573ae7bc0add452a257e8
7
+ data.tar.gz: f7e41b218c3809e5048fbf94121e93192c28a1ab11e1c9c423d8bb0d585d3aea62e72d371e09f9421a58d4fe42f8c3f21a482a146ae198fb2edc84413fda567c
@@ -71,6 +71,7 @@ module Association
71
71
  info_fields = field_pos.collect{|f| f == :key ? :key : all_fields[f]}
72
72
  options = options.merge({:key_field => source_field, :fields => info_fields})
73
73
 
74
+
74
75
  tsv = tsv.reorder source_field, fields if true or source_field != tsv.key_field or (fields and tsv.fields != fields)
75
76
 
76
77
  tsv.key_field = source_header
@@ -136,16 +137,20 @@ module Association
136
137
  end
137
138
 
138
139
  def self.database(file, options = {})
139
- case file
140
- when TSV
141
- file = file.to_double unless file.type == :double
142
- reorder_tsv(file, options.dup)
143
- when IO
144
- open_stream(file, options.dup)
145
- else
146
- stream = TSV.get_stream(file)
147
- open_stream(stream, options.dup)
148
- end
140
+ database = case file
141
+ when TSV
142
+ file = file.to_double unless file.type == :double
143
+ reorder_tsv(file, options.dup)
144
+ when IO
145
+ open_stream(file, options.dup)
146
+ else
147
+ stream = TSV.get_stream(file)
148
+ open_stream(stream, options.dup)
149
+ end
150
+
151
+ database.entity_options = options[:entity_options] if options[:entity_options]
152
+
153
+ database
149
154
  end
150
155
 
151
156
  end
@@ -1,5 +1,6 @@
1
1
  require 'rbbt/tsv'
2
2
  require 'rbbt/association/open'
3
+ require 'rbbt/association/item'
3
4
 
4
5
  module Association
5
6
  def self.index(file, options = nil, persist_options = nil)
@@ -16,13 +17,16 @@ module Association
16
17
  undirected = options[:undirected]
17
18
 
18
19
  persist_options[:file] = persist_options[:file] + '.database' if persist_options[:file]
20
+
19
21
  database = open(file, options, persist_options.dup.merge(:engine => "HDB"))
20
22
 
21
- undirected = true if undirected.nil? and database.key_field == database.fields.first
23
+ source_field = database.key_field
22
24
 
23
25
  fields = database.fields
24
- source_field = database.key_field
25
26
  target_field = fields.first.split(":").last
27
+
28
+ undirected = true if undirected.nil? and source_field == target_field
29
+
26
30
  key_field = [source_field, target_field, undirected ? "undirected" : nil].compact * "~"
27
31
 
28
32
  TSV.setup(data, :key_field => key_field, :fields => fields[1..-1], :type => :list, :serializer => :list)
@@ -33,46 +37,48 @@ module Association
33
37
  data.serializer = :list
34
38
 
35
39
  database.with_unnamed do
36
- database.through do |source, values|
37
- case database.type
38
- when :single
39
- values = [[values]]
40
- when :list
41
- values = values.collect{|v| [v] }
42
- when :flat
43
- values = [values]
44
- end
45
- next if values.empty?
46
- next if source.nil? or source.empty?
47
- next if values.empty?
48
-
49
- targets, *rest = values
50
-
51
- size = targets ? targets.length : 0
52
-
53
- rest.each_with_index do |list,i|
54
- list.replace [list.first] * size if list.length == 1
55
- end if recycle and size > 1
56
-
57
- rest = Misc.zip_fields rest
58
-
59
- annotations = rest.length > 1 ?
60
- targets.zip(rest) :
61
- targets.zip(rest * targets.length)
62
-
63
- annotations.each do |target, info|
64
- next if target.nil? or target.empty?
65
- key = [source, target] * "~"
66
- if data[key].nil? or info.nil?
67
- data[key] = info
68
- else
69
- old_info = data[key]
70
- info = old_info.zip(info).collect{|p| p * ";;" }
71
- data[key] = info
40
+ database.with_monitor(options[:monitor]) do
41
+ database.through do |source, values|
42
+ case database.type
43
+ when :single
44
+ values = [[values]]
45
+ when :list
46
+ values = values.collect{|v| [v] }
47
+ when :flat
48
+ values = [values]
72
49
  end
73
- if undirected
74
- reverse_key = [target,source] * "~"
75
- data[reverse_key] = info unless data.include? reverse_key
50
+ next if values.empty?
51
+ next if source.nil? or source.empty?
52
+ next if values.empty?
53
+
54
+ targets, *rest = values
55
+
56
+ size = targets ? targets.length : 0
57
+
58
+ rest.each_with_index do |list,i|
59
+ list.replace [list.first] * size if list.length == 1
60
+ end if recycle and size > 1
61
+
62
+ rest = Misc.zip_fields rest
63
+
64
+ annotations = rest.length > 1 ?
65
+ targets.zip(rest) :
66
+ targets.zip(rest * targets.length)
67
+
68
+ annotations.each do |target, info|
69
+ next if target.nil? or target.empty?
70
+ key = [source, target] * "~"
71
+ if data[key].nil? or info.nil?
72
+ data[key] = info
73
+ else
74
+ old_info = data[key]
75
+ info = old_info.zip(info).collect{|p| p * ";;" }
76
+ data[key] = info
77
+ end
78
+ if undirected
79
+ reverse_key = [target,source] * "~"
80
+ data[reverse_key] = info unless data.include? reverse_key
81
+ end
76
82
  end
77
83
  end
78
84
  end
@@ -83,9 +89,11 @@ module Association
83
89
  end.tap do |data|
84
90
  data.read if not Hash === data and data.respond_to? :read
85
91
  Association::Index.setup data
92
+ data.entity_options = options[:entity_options] if options[:entity_options]
86
93
  data
87
94
  end
88
95
  end
96
+
89
97
  module Index
90
98
 
91
99
  attr_accessor :source_field, :target_field, :undirected
@@ -156,6 +164,26 @@ module Association
156
164
  end
157
165
  end
158
166
 
167
+ def to_matrix(value_field = nil, &block)
168
+ value_field = fields.first if value_field.nil? and fields.length == 1
169
+ value_pos = identify_field value_field if value_field and String === value_field
170
+ key_field = source_field
171
+
172
+ tsv = if value_pos
173
+ AssociationItem.incidence self.keys, key_field do |key|
174
+ if block_given?
175
+ yield self[key][value_pos]
176
+ else
177
+ self[key][value_pos]
178
+ end
179
+ end
180
+ elsif block_given?
181
+ AssociationItem.incidence self.keys, key_field, &block
182
+ else
183
+ AssociationItem.incidence self.keys, key_field
184
+ end
185
+ end
186
+
159
187
  #{{{ Subset
160
188
 
161
189
  def subset(source, target)
@@ -54,23 +54,27 @@ module AssociationItem
54
54
  reverse ? knowledge_base.target(database) : knowledge_base.source(database)
55
55
  end
56
56
 
57
+ property :undirected => :both do
58
+ knowledge_base.undirected(database)
59
+ end
60
+
57
61
  property :target_entity => :array2single do
58
62
  type = reverse ? knowledge_base.source(database) : knowledge_base.target(database)
59
63
  knowledge_base.annotate self.target, type, database #if self.target.any?
60
64
  end
61
65
 
62
- property :undirected => :both do
63
- knowledge_base.undirected(database)
64
- end
65
-
66
66
  property :source_entity => :array2single do
67
67
  type = reverse ? knowledge_base.target(database) : knowledge_base.source(database)
68
- knowledge_base.annotate self.source, type #if self.source.any?
68
+ knowledge_base.annotate self.source, type, database #if self.source.any?
69
69
  end
70
70
 
71
+ property :index => :both do |database|
72
+ @index ||= knowledge_base.get_index(database)
73
+ end
71
74
  property :value => :array2single do
72
- value = (reverse ? knowledge_base.get_index(database).reverse : knowledge_base.get_index(database)).chunked_values_at self
73
- value.collect{|v| NamedArray.setup(v, knowledge_base.get_index(database).fields)}
75
+ index = index(database)
76
+ value = (reverse ? index.reverse : index).chunked_values_at self
77
+ value.collect{|v| NamedArray.setup(v, index.fields)}
74
78
  end
75
79
 
76
80
  property :info_fields => :both do
@@ -126,7 +130,7 @@ module AssociationItem
126
130
  value = block.call p
127
131
  matches[s][t] = value unless value.nil? or (mv = matches[s][t] and value > mv)
128
132
  else
129
- matches[s] ||= Hash.new{true}
133
+ matches[s] ||= Hash.new{false}
130
134
  matches[s][t] ||= true
131
135
  end
132
136
  end
@@ -21,17 +21,20 @@ module Association
21
21
  data = Persist.persist_tsv(file, "Association Database", options, persist_options) do |data|
22
22
  tsv = Association.database(file, options.merge(:persist => persist))
23
23
  tsv = tsv.to_double unless tsv.type == :double
24
+
24
25
  tsv.annotate data
25
26
 
26
27
  data.serializer = :double if data.respond_to? :serializer
27
- tsv.each do |k,v|
28
- data[k] = v
28
+ tsv.with_monitor(options[:monitor]) do
29
+ tsv.through do |k,v|
30
+ data[k] = v
31
+ end
29
32
  end
30
33
 
31
-
32
34
  data
33
35
  end
34
- data
36
+ data.entity_options = options[:entity_options] if options[:entity_options]
37
+ data
35
38
  end
36
39
 
37
40
  end
@@ -116,7 +116,7 @@ module Association
116
116
  field_headers << header
117
117
  end
118
118
 
119
- field_pos = info_fields.collect{|f| raise "Field #{f} not found. Options: #{info_fields* ", "}" unless all_fields.include?(f); f == :key ? 0 : all_fields.index(f); }
119
+ field_pos = info_fields.collect{|f| raise "Field #{f} not found. Options: #{all_fields * ", "}" unless all_fields.include?(f); f == :key ? 0 : all_fields.index(f); }
120
120
 
121
121
  source_format = specs[:source][2]
122
122
  target_format = specs[:target][2]
data/lib/rbbt/entity.rb CHANGED
@@ -2,15 +2,19 @@ require 'rbbt/annotations'
2
2
  require 'rbbt/entity/identifiers'
3
3
 
4
4
  module Entity
5
+
6
+ UNPERSISTED_PREFIX = "entity_unpersisted_property_"
5
7
 
6
8
  class << self
7
9
  attr_accessor :formats, :entity_property_cache
8
10
  end
9
-
10
- self.entity_property_cache = "var/entity_property"
11
11
  self.formats = {}
12
-
13
- UNPERSISTED_PREFIX = "entity_unpersisted_property_"
12
+ dir = (defined?(Rbbt)? Rbbt.var.entity_property : 'var/entity_property')
13
+ self.entity_property_cache = dir
14
+
15
+ def self.entity_property_cache=(dir)
16
+ @entity_property_cache = dir
17
+ end
14
18
 
15
19
  attr_accessor :all_formats
16
20
  def self.extended(base)
@@ -22,19 +26,19 @@ module Entity
22
26
 
23
27
  attr_accessor :template, :list_template, :action_template, :list_action_template, :keep_id
24
28
 
25
- def _ary_property_cache
26
- @_ary_property_cache ||= {}
27
- end
28
-
29
29
  def self.format=(formats)
30
30
  formats = [formats] unless Array === formats
31
31
  self.all_formats ||= []
32
32
  self.all_formats = self.all_formats.concat(formats).uniq
33
33
  formats.each do |format|
34
- Entity.formats[format] = self
34
+ Entity.formats[format] ||= self
35
35
  end
36
36
  end
37
37
 
38
+ def _ary_property_cache
39
+ @_ary_property_cache ||= {}
40
+ end
41
+
38
42
  def base_entity
39
43
  self.annotation_types.select{|m| Entity === m}.last
40
44
  end
@@ -90,7 +94,7 @@ module Entity
90
94
  define_method single_name, &block
91
95
  define_method name do |*args|
92
96
  if Array === self
93
- self.collect{|e| e.send(name, *args)}
97
+ self.collect{|e| e.send(single_name, *args)}
94
98
  else
95
99
  self.send(single_name, *args)
96
100
  end
@@ -1,5 +1,4 @@
1
1
  module Entity
2
-
3
2
  def self.identifier_files(field)
4
3
  entity_type = Entity.formats[field]
5
4
  return [] unless entity_type and entity_type.include? Entity::Identified
@@ -12,6 +11,12 @@ module Entity
12
11
  base.annotation :format
13
12
  base.annotation :organism
14
13
 
14
+
15
+
16
+ class << base
17
+ attr_accessor :identifier_files, :formats, :default_format, :name_format, :description_format
18
+ end
19
+
15
20
  base.module_eval do
16
21
  def identity_type
17
22
  self.annotation_types.select{|m| m.include? Entity::Identified }.last
@@ -50,6 +55,7 @@ module Entity
50
55
  end
51
56
 
52
57
  return self if target_format == format
58
+
53
59
  if Array === self
54
60
  self.annotate(identifier_index(target_format, self.format).values_at(*self))
55
61
  else
@@ -73,8 +79,6 @@ module Entity
73
79
 
74
80
  end
75
81
 
76
- attr_accessor :identifier_files, :formats, :default_format, :name_format, :description_format
77
-
78
82
  def add_identifiers(file, default = nil, name = nil, description = nil)
79
83
  if TSV === file
80
84
  all_fields = file.all_fields
@@ -88,6 +92,8 @@ module Entity
88
92
  end
89
93
  end
90
94
 
95
+ self.include Entity::Identified unless Entity::Identified === self
96
+
91
97
  self.format = all_fields
92
98
  @formats ||= []
93
99
  @formats.concat all_fields
@@ -100,9 +106,6 @@ module Entity
100
106
  @identifier_files ||= []
101
107
  @identifier_files << file
102
108
  @identifier_files.uniq!
103
-
104
-
105
- self.include Entity::Identified unless Entity::Identified === self
106
109
  end
107
110
 
108
111
  end
@@ -19,17 +19,26 @@ class KnowledgeBase
19
19
 
20
20
 
21
21
  def entity_options_for(type, database_name = nil)
22
- options = entity_options[Entity.formats[type]] || {}
22
+ entity_options = self.entity_options
23
+ IndiferentHash.setup entity_options if entity_options and not IndiferentHash === entity_options
24
+ options = entity_options[type.to_s] || entity_options[Entity.formats[type.to_s].to_s] || {}
23
25
  options[:format] = @format[type] if @format.include? :type
24
26
  options = {:organism => namespace}.merge(options)
25
- if database_name and
26
- (database = get_database(database_name)).entity_options and
27
- (database = get_database(database_name)).entity_options[type]
28
- options = options.merge database.entity_options[type]
27
+ if database_name
28
+ database = get_database(database_name)
29
+ if database.entity_options and (database.entity_options[type] or database.entity_options[Entity.formats[type.to_s].to_s])
30
+ options = options.merge(database.entity_options[type] || database.entity_options[Entity.formats[type.to_s].to_s])
31
+ end
29
32
  end
30
33
  options
31
34
  end
32
35
 
36
+ def annotate(entities, type, database = nil)
37
+ format = @format[type] || type
38
+ entity_options = entity_options_for(type, database)
39
+ Misc.prepare_entity(entities, format, entity_options)
40
+ end
41
+
33
42
  def translate(entities, type)
34
43
  if format = @format[type] and (entities.respond_to? :format and format != entities.format)
35
44
  entities.to format
@@ -38,11 +47,6 @@ class KnowledgeBase
38
47
  end
39
48
  end
40
49
 
41
- def annotate(entities, type, database = nil)
42
- format = @format[type] || type
43
- Misc.prepare_entity(entities, format, entity_options_for(type, database))
44
- end
45
-
46
50
  def source_type(name)
47
51
  Entity.formats[source(name)]
48
52
  end
@@ -36,9 +36,11 @@ class KnowledgeBase
36
36
 
37
37
  def get_index(name, options = {})
38
38
  name = name.to_s
39
- key = name.to_s + "_" + Misc.digest(Misc.fingerprint([name,options]))
40
- @indices[key] ||=
39
+ @indices[[name, options]] ||=
41
40
  begin
41
+ fp = Misc.fingerprint([name,options])
42
+ key = name.to_s + "_" + Misc.digest(fp)
43
+
42
44
  Persist.memory("Index:" << [key, dir] * "@") do
43
45
  options = options.dup
44
46
  persist_dir = dir
@@ -48,6 +50,14 @@ class KnowledgeBase
48
50
  options = Misc.add_defaults options, registered_options if registered_options and registered_options.any?
49
51
  options = Misc.add_defaults options, :persist_file => persist_file, :persist_dir => persist_dir, :namespace => namespace, :format => format, :persist => true
50
52
 
53
+ if entity_options
54
+ options[:entity_options] ||= {}
55
+ entity_options.each do |type, info|
56
+ options[:entity_options][type] ||= {}
57
+ options[:entity_options][type] = Misc.add_defaults options[:entity_options][type], info
58
+ end
59
+ end
60
+
51
61
  persist_options = Misc.pull_keys options, :persist
52
62
 
53
63
  index = if persist_file.exists? and persist_options[:persist] and not persist_options[:update]
@@ -81,6 +91,14 @@ class KnowledgeBase
81
91
  options = Misc.add_defaults options, registered_options if registered_options and registered_options.any?
82
92
  options = Misc.add_defaults options, :persist_file => persist_file, :namespace => namespace, :format => format, :persist => true
83
93
 
94
+ if entity_options
95
+ options[:entity_options] ||= {}
96
+ entity_options.each do |type, info|
97
+ options[:entity_options][type] ||= {}
98
+ options[:entity_options][type] = Misc.add_defaults options[:entity_options][type], info
99
+ end
100
+ end
101
+
84
102
  persist_options = Misc.pull_keys options, :persist
85
103
 
86
104
  database = if persist_file.exists? and persist_options[:persist] and not persist_options[:update]
@@ -5,6 +5,7 @@ module Path
5
5
  attr_accessor :resource, :pkgdir, :search_paths
6
6
 
7
7
  def self.setup(string, pkgdir = nil, resource = nil, search_paths = nil)
8
+ string = string.dup if string.frozen?
8
9
  string.extend Path
9
10
  string.pkgdir = pkgdir || 'rbbt'
10
11
  string.resource = resource
@@ -52,6 +52,7 @@ module Rake
52
52
  Log.exception $!
53
53
  Kernel.exit! -1
54
54
  end
55
+ Kernel.exit! 0
55
56
  }
56
57
  Process.waitpid(pid)
57
58
  raise "Rake failed" unless $?.success?
@@ -84,7 +84,7 @@ module TSV
84
84
 
85
85
  def with_monitor(value = true)
86
86
  saved_monitor = @monitor
87
- @monitor = value
87
+ @monitor = value.nil? ? false : value
88
88
  res = yield
89
89
  @monitor = saved_monitor
90
90
  res
@@ -471,10 +471,8 @@ module TSV
471
471
  end
472
472
 
473
473
  def namespace=(value)
474
- #self.send(:[]=, "__tsv_hash_namespace", value.nil? ? SERIALIZED_NIL : TSV::TSV_SERIALIZER.dump(value), true)
475
474
  self.send(:[]=, "__tsv_hash_namespace", dump_entry_value(value), true)
476
475
  @namespace = value
477
- @entity_options = nil
478
476
  end
479
477
 
480
478
  def fields=(value)
@@ -89,7 +89,7 @@ module TSV
89
89
  def self.translation_index(files, target = nil, source = nil, options = {})
90
90
  return nil if source == target
91
91
  options = Misc.add_defaults options.dup, :persist => true
92
- fields = source ? [source] : nil
92
+ fields = (source and not source.empty?) ? [source] : nil
93
93
  files.each do |file|
94
94
  if TSV === file
95
95
  all_fields = file.all_fields
@@ -117,7 +117,7 @@ module TSV
117
117
 
118
118
  common_field = (all_fields & other_all_fields).first
119
119
 
120
- if common_field and (source.nil? or all_fields.include? source) and other_all_fields.include? target
120
+ if common_field and (source.nil? or source.empty? or all_fields.include? source) and other_all_fields.include? target
121
121
 
122
122
  index = Persist.persist_tsv(nil, Misc.fingerprint(files), {:files => files, :source => source, :target => target}, :prefix => "Translation index", :persist => options[:persist]) do |data|
123
123
 
@@ -253,15 +253,16 @@ module TSV
253
253
  case type
254
254
  when :double
255
255
  new_key_field_name, new_field_names = through new_key_field, new_fields, uniq, zipped do |key, value|
256
- if current = data[key]
256
+ if data[key]
257
+ current = data[key].dup
257
258
  value.each_with_index do |v, i|
258
- if _c = current[i]
259
- _c.concat v if v
259
+ if current[i]
260
+ current[i] += v if v
260
261
  else
261
262
  current[i] = v || []
262
263
  end
263
264
  end
264
- data[key] = current if data.respond_to? :tokyocabinet_class
265
+ data[key] = current
265
266
  else
266
267
  data[key] = value.collect{|v| v.nil? ? nil : v.dup}
267
268
  end
@@ -269,7 +270,7 @@ module TSV
269
270
  when :flat
270
271
  new_key_field_name, new_field_names = through new_key_field, new_fields, uniq, zipped do |key, value|
271
272
  data[key] ||= []
272
- data[key].concat value
273
+ data[key] += value
273
274
  end
274
275
  end
275
276
  end
@@ -523,6 +523,7 @@ module TSV
523
523
  else
524
524
  stream.stat.size
525
525
  end
526
+ size = nil if size.to_i == 0
526
527
  desc = "Parsing Stream"
527
528
  step = 100
528
529
  if Hash === monitor
@@ -31,7 +31,6 @@ class RbbtProcessQueue
31
31
  rescue ClosedStream
32
32
  rescue Aborted, Interrupt
33
33
  Log.warn "Worker #{Process.pid} aborted"
34
- Kernel.exit! 0
35
34
  rescue Exception
36
35
  Log.exception $!
37
36
  @callback_queue.push($!) if @callback_queue
@@ -39,6 +38,7 @@ class RbbtProcessQueue
39
38
  ensure
40
39
  @callback_queue.close_write if @callback_queue
41
40
  end
41
+ Kernel.exit! 0
42
42
  end
43
43
 
44
44
  def run_with_respawn(multiplier = nil)
@@ -64,6 +64,7 @@ module Misc
64
64
  Process.kill :INT, parent_pid
65
65
  Kernel.exit! -1
66
66
  end
67
+ Kernel.exit! 0
67
68
  }
68
69
  sin.close
69
70
  ConcurrentStream.setup sout, :pids => [pid]
@@ -409,7 +409,9 @@ class Step
409
409
  if stream
410
410
  begin
411
411
  Misc.consume_stream stream
412
+ stream.join if stream.respond_to? :join
412
413
  rescue Exception
414
+ stream.abort
413
415
  self._abort
414
416
  raise $!
415
417
  end
@@ -427,7 +429,7 @@ class Step
427
429
 
428
430
  grace
429
431
 
430
- join_stream if status == :streaming
432
+ join_stream if status.to_s == "streaming"
431
433
 
432
434
  return self if not Open.exists? info_file
433
435
 
@@ -42,7 +42,7 @@ when options[:tokyocabinet_bd]
42
42
  tsv = Persist.open_tokyocabinet(file, false, nil, TokyoCabinet::BDB)
43
43
  puts tsv.summary
44
44
  else
45
- header = TSV.parse_header(Open.open(file), options)
45
+ header = TSV.parse_header(Open.open(file, :nocache => true), options)
46
46
 
47
47
  puts "File: #{ file }"
48
48
  puts "Type: #{header.type}"
@@ -78,5 +78,12 @@ TP53 NFKB1|GLI1 activation|activation true|true
78
78
  assert tsv.match("TP53").length > 10
79
79
  end
80
80
 
81
+ def test_index_flat_to_matrix
82
+ require 'rbbt/sources/tfacts'
83
+ file = TFacts.regulators
84
+ tsv = Association.index(file, :type => :flat, :source => "Transcription Factor Associated Gene Name=~Associated Gene Name", :merge => true)
85
+ assert(tsv.to_matrix(false))
86
+ end
87
+
81
88
 
82
89
  end
@@ -55,7 +55,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
55
55
  end
56
56
 
57
57
  def test_index_persist_reverse
58
- tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge(:source => "TG", :target => "SG=~Associated Gene Name"), :persist => true).reverse
58
+ tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge( :source => "TG", :target => "SG=~Associated Gene Name"), :persist => true).reverse
59
59
  tsv.unnamed = false
60
60
  assert_equal "inhibition", tsv["MDM2~TP53"]["Effect"]
61
61
  assert_equal %w(MDM2~TP53), tsv.match("MDM2")
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../test_helper')
2
+ require 'rbbt/util/tmpfile'
3
+ require 'test/unit'
4
+ require 'rbbt/knowledge_base'
5
+ require 'rbbt/knowledge_base/entity'
6
+
7
+ module Gene
8
+ extend Entity
9
+ end
10
+
11
+ class TestKnowledgeEnity < Test::Unit::TestCase
12
+
13
+ EFFECT =StringIO.new <<-END
14
+ #: :sep=" "#:type=:double
15
+ #SG TG Effect
16
+ MDM2 TP53 inhibition
17
+ TP53 NFKB1|GLI1 activation|activation true|true
18
+ END
19
+
20
+ EFFECT_OPTIONS = {
21
+ :source => "SG=~Associated Gene Name",
22
+ :target => "TG=~Associated Gene Name=>Ensembl Gene ID",
23
+ :undirected => true,
24
+ :persist => true,
25
+ :namespace => "Hsa"
26
+ }
27
+ Gene.add_identifiers datafile_test('identifiers')
28
+
29
+ EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
30
+
31
+ KNOWLEDGE_BASE = KnowledgeBase.new '/tmp/kb.foo2', "Hsa"
32
+ KNOWLEDGE_BASE.format = {"Gene" => "Associated Gene Name"}
33
+
34
+ KNOWLEDGE_BASE.register :effects, EFFECT_TSV, EFFECT_OPTIONS.dup
35
+
36
+ def test_entity_options
37
+ KNOWLEDGE_BASE.entity_options = {"Gene" => {:organism => "Mmu"}}
38
+ assert_equal "Mmu", KNOWLEDGE_BASE.children(:effects, "TP53").target_entity.organism
39
+ end
40
+ end
41
+
@@ -73,9 +73,10 @@ TP53 NFKB1|GLI1 activation|activation true|true
73
73
  assert_equal count, count2
74
74
  end
75
75
 
76
-
77
76
  def test_pina2
77
+ KNOWLEDGE_BASE.entity_options["Gene"] = {:organism => "Mmu"}
78
78
  index = KNOWLEDGE_BASE.get_index(:pina, :persist => true, :source_format => "Ensembl Gene ID", :target_format => "Ensembl Gene ID", :undirected => true)
79
+ assert_equal "Mmu", index.entity_options["Gene"][:organism]
79
80
  end
80
81
  end
81
82
 
@@ -0,0 +1,48 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../test_helper')
2
+ require 'rbbt/util/tmpfile'
3
+ require 'test/unit'
4
+ require 'rbbt/knowledge_base'
5
+ require 'rbbt/knowledge_base/query'
6
+
7
+ module Gene
8
+ extend Entity
9
+ end
10
+ class TestKnowledgeBaseSyndicate < Test::Unit::TestCase
11
+
12
+ EFFECT =StringIO.new <<-END
13
+ #: :sep=" "#:type=:double
14
+ #SG TG Effect
15
+ MDM2 TP53 inhibition
16
+ TP53 NFKB1|GLI1 activation|activation true|true
17
+ END
18
+
19
+ EFFECT_OPTIONS = {
20
+ :source => "SG=~Associated Gene Name",
21
+ :target => "TG=~Associated Gene Name=>Ensembl Gene ID",
22
+ :persist => false,
23
+ :identifiers => datafile_test('identifiers'),
24
+ :undirected => true,
25
+ :namespace => "Hsa"
26
+ }
27
+
28
+ EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
29
+
30
+ KNOWLEDGE_BASE = KnowledgeBase.new '/tmp/kb.foo2', "Hsa"
31
+ KNOWLEDGE_BASE.format = {"Gene" => "Ensembl Gene ID"}
32
+ KNOWLEDGE_BASE.entity_options["Gene"] = {:organism => "Mmu", :test_option => "TEST"}
33
+
34
+ KNOWLEDGE_BASE.register :effects, EFFECT_TSV, EFFECT_OPTIONS.dup
35
+
36
+ def test_syndicate_entity_options
37
+ Gene.add_identifiers datafile_test('identifiers')
38
+ kb = KnowledgeBase.new "/tmp/kb.foo3", "Hsa"
39
+ kb.format = {"Gene" => "Associated Gene Name"}
40
+ kb.syndicate :orig, KNOWLEDGE_BASE
41
+ assert_equal "Mmu", KNOWLEDGE_BASE.entity_options_for("Gene", "effects")[:organism]
42
+ assert_equal "Mmu", kb.get_index("effects@orig").entity_options["Gene"][:organism]
43
+ assert_equal "Mmu", kb.get_database("effects@orig").entity_options["Gene"][:organism]
44
+ assert_equal "Mmu", kb.entity_options_for("Gene", "effects@orig")[:organism]
45
+ assert_equal "Mmu", kb.children("effects@orig", "TP53").source_entity.organism
46
+ end
47
+ end
48
+
@@ -12,6 +12,7 @@ class TestA
12
12
  end
13
13
  end
14
14
 
15
+ Entity.entity_property_cache = Rbbt.tmp.test.entity_property.find
15
16
  module ReversableString
16
17
  extend Entity
17
18
 
@@ -21,7 +22,7 @@ module ReversableString
21
22
  $count += 1
22
23
  self.collect{|s| s.reverse}
23
24
  end
24
-
25
+
25
26
  property :reverse_text_single => :single do
26
27
  $count += 1
27
28
  self.reverse
@@ -31,7 +32,7 @@ module ReversableString
31
32
  $count += 1
32
33
  self.collect{|s| s.reverse}
33
34
  end
34
-
35
+
35
36
  property :reverse_text_single_p => :single do
36
37
  $count += 1
37
38
  self.reverse
@@ -51,11 +52,10 @@ module ReversableString
51
52
  ReversableString.setup(c)
52
53
  }
53
54
  end
54
-
55
- persist :reverse_text_ary_p
56
- persist :reverse_text_ary_p
57
- persist :reverse_text_ary_p
58
- persist :reverse_text_single_p
55
+
56
+ persist :reverse_text_ary_p, :string
57
+ persist :reverse_text_single_p, :memory
58
+ #persist :_single_reverse_text_single_p, :string
59
59
 
60
60
  persist :reverse_text_ary_p_array, :array, :dir => TmpFile.tmp_file
61
61
 
@@ -64,7 +64,7 @@ end
64
64
 
65
65
  class TestEntity < Test::Unit::TestCase
66
66
 
67
- def test_property_ary
67
+ def _test_property_ary
68
68
  a = ["String1", "String2"]
69
69
  ReversableString.setup(a)
70
70
 
@@ -84,7 +84,7 @@ class TestEntity < Test::Unit::TestCase
84
84
  end
85
85
  end
86
86
 
87
- def test_property_single
87
+ def _test_property_single
88
88
  a = ["String1", "String2"]
89
89
  ReversableString.setup a
90
90
 
@@ -96,7 +96,7 @@ class TestEntity < Test::Unit::TestCase
96
96
  assert_equal 3, $count
97
97
  end
98
98
 
99
- def test_property_ary_p
99
+ def _test_property_ary_p
100
100
  a = ["String1", "String2"]
101
101
  ReversableString.setup a
102
102
 
@@ -114,15 +114,23 @@ class TestEntity < Test::Unit::TestCase
114
114
  $count = 0
115
115
 
116
116
  assert_equal "2gnirtS", a.reverse_text_single_p.last
117
+
117
118
  assert_equal 2, $count
119
+
120
+ $count = 0
121
+
122
+ assert_equal "2gnirtS", a.reverse_text_single_p.last
123
+ assert_equal 0, $count
118
124
  assert_equal "2gnirtS", a[1].reverse_text_single_p
119
- assert_equal 2, $count
125
+ assert_equal 0, $count
120
126
  end
121
127
 
122
- def test_property_ary_p_array
128
+ def _test_property_ary_p_array
123
129
  a = ["String1", "String2"]
124
130
  ReversableString.setup a
125
131
 
132
+ assert_equal "2gnirtS", a.reverse_text_ary_p_array.last
133
+
126
134
  $count = 0
127
135
 
128
136
  assert_equal "2gnirtS", a.reverse_text_ary_p_array.last
@@ -131,7 +139,7 @@ class TestEntity < Test::Unit::TestCase
131
139
  assert_equal 1, $count
132
140
  end
133
141
 
134
- def test_unpersist
142
+ def _test_unpersist
135
143
  a = ["String1", "String2"]
136
144
  ReversableString.setup a
137
145
 
@@ -160,14 +168,14 @@ class TestEntity < Test::Unit::TestCase
160
168
 
161
169
  end
162
170
 
163
- def test_persist_annotations
171
+ def _test_persist_annotations
164
172
  string = 'aaabbbccc'
165
173
  ReversableString.setup(string)
166
174
  assert_equal string.length, string.annotation_list.length
167
175
  assert_equal string.length, string.annotation_list.length
168
176
  end
169
177
 
170
- def test_clean_annotations
178
+ def _test_clean_annotations
171
179
 
172
180
  string = "test_string"
173
181
  ReversableString.setup string
data/test/test_helper.rb CHANGED
@@ -14,9 +14,10 @@ class Test::Unit::TestCase
14
14
 
15
15
  def setup
16
16
  Random.new
17
- if defined? Persist
18
- Persist.cachedir = Rbbt.tmp.test.persistence.find :user
19
- end
17
+
18
+ Persist.cachedir = Rbbt.tmp.test.persistence.find :user if defined? Persist
19
+
20
+ Entity.entity_property_cache = Rbbt.tmp.test.entity_property.find(:user) if defined? Entity
20
21
  end
21
22
 
22
23
  def teardown
@@ -25,11 +26,16 @@ class Test::Unit::TestCase
25
26
  # Persist::CONNECTIONS.values.each do |c| c.close end
26
27
  # Persist::CONNECTIONS.clear
27
28
  #end
29
+
30
+ #if defined? Entity
31
+ # FileUtils.rm_rf Entity.entity_property_cache.find(:user) if Entity.entity_property_cache =~ /tmp\/test/
32
+ #end
28
33
  end
29
34
 
30
35
  def self.datafile_test(file)
31
36
  Path.setup(File.join(File.dirname(__FILE__), 'data', file.to_s))
32
37
  end
38
+
33
39
  def datafile_test(file)
34
40
  Test::Unit::TestCase.datafile_test(file)
35
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.35
4
+ version: 5.14.36
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2014-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -326,6 +326,7 @@ files:
326
326
  - test/rbbt/knowledge_base/test_entity.rb
327
327
  - test/rbbt/knowledge_base/test_query.rb
328
328
  - test/rbbt/knowledge_base/test_registry.rb
329
+ - test/rbbt/knowledge_base/test_syndicate.rb
329
330
  - test/rbbt/persist/test_tsv.rb
330
331
  - test/rbbt/persist/tsv/test_cdb.rb
331
332
  - test/rbbt/persist/tsv/test_kyotocabinet.rb
@@ -448,6 +449,7 @@ test_files:
448
449
  - test/rbbt/knowledge_base/test_registry.rb
449
450
  - test/rbbt/knowledge_base/test_entity.rb
450
451
  - test/rbbt/knowledge_base/test_enrichment.rb
452
+ - test/rbbt/knowledge_base/test_syndicate.rb
451
453
  - test/rbbt/knowledge_base/test_query.rb
452
454
  - test/rbbt/test_resource.rb
453
455
  - test/rbbt/test_entity.rb