rbbt-util 5.27.1 → 5.27.2

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
  SHA256:
3
- metadata.gz: f9a8f4d4bbf80d9f7ad26f1867efe048bad08e1f0bd42b32ac731744380ba571
4
- data.tar.gz: 9692dd68f20cec3b8688cc9d75e1bcd4d75a024924c56c191a87897162d34ef4
3
+ metadata.gz: 258aa01482866ef7b940790ad6f10d077a0cd721b972cbb939412c3691595acc
4
+ data.tar.gz: 9adb68a2c9ddfa77a3be419dd106e4083e11933dd6653b4d6e0bfa921edab187
5
5
  SHA512:
6
- metadata.gz: cb9672eec11a5184795c1e85283f0ed948f34c77f91d31fd6852c389820abdadb555dc99acd823adefd8b6afbb3c4589988599f3095e2ba10e7bdb633404db98
7
- data.tar.gz: e28718c7c60c25a4316997f477b2fca33b067865965bff51a423b1a84124e3abe20fdce50543e23e11852256376d4caaf6932a399d404e27823db2d577e543e8
6
+ metadata.gz: 4df9dcbc8280023faa1e6c2e6a9393a9ae66e4513a95cdeae94256f5fc61f0e6691e114cd1d40a900041e1769988b2a69751f282fc95c0c134acb44cac3ed40c
7
+ data.tar.gz: b72bd064835be7c5dcfcf180ff87d6e22fced3f8833d9479f607ab64760594c7d7d25d84cd828b33f0a7d72208983b8c89e26d8924e91afc81ba5e5943ef462d
@@ -145,10 +145,9 @@ module Annotated
145
145
 
146
146
  end
147
147
 
148
- fields = fields.collect{|f| f.to_s}
148
+ fields = fields.collect{|f| f.to_s}.uniq
149
149
 
150
150
  case
151
-
152
151
  when (Annotated === annotations and not (AnnotatedArray === annotations and annotations.double_array))
153
152
  tsv = TSV.setup({}, :key_field => "List", :fields => fields, :type => :list, :unnamed => true)
154
153
 
@@ -194,13 +194,16 @@ module Entity
194
194
  multi_name = "_multiple_" << name
195
195
 
196
196
  define_method multi_name do
197
- if self.instance_variable_get("@multiple_result")
198
- return self.instance_variable_get("@multiple_result")
197
+ if self.instance_variable_get("@multiple_result_" + name.to_s)
198
+ return self.instance_variable_get("@multiple_result_" + name.to_s)
199
199
  end
200
- raise MultipleEntity, "Entity #{name} runs with multiple entities: #{self}"
200
+ raise MultipleEntity, "Entity #{name} runs with multiple entities"
201
201
  end
202
202
 
203
203
  define_method name do |*args|
204
+ if self.instance_variable_get("@multiple_result_" + name.to_s)
205
+ return self.instance_variable_get("@multiple_result_" + name.to_s)
206
+ end
204
207
  obj = if Array === self
205
208
  self
206
209
  elsif self.respond_to?(:container) && Array === self.container
@@ -222,11 +225,11 @@ module Entity
222
225
  case res
223
226
  when Array
224
227
  missing.zip(res).each do |o,res|
225
- o.instance_variable_set("@multiple_result", res)
228
+ o.instance_variable_set("@multiple_result_" + name.to_s, res)
226
229
  end
227
230
  when Hash
228
231
  res.each do |o,res|
229
- o.instance_variable_set("@multiple_result", res)
232
+ o.instance_variable_set("@multiple_result_" + name.to_s, res)
230
233
  end
231
234
  end
232
235
 
@@ -5,14 +5,15 @@ class KnowledgeBase
5
5
 
6
6
  def select_entities(name, entities, options = {})
7
7
  index = get_index(name, options)
8
+
8
9
  source_field = index.source_field
9
10
  target_field = index.target_field
10
11
 
11
12
  source_type = Entity.formats[source_field]
12
13
  target_type = Entity.formats[target_field]
13
14
 
14
- source_entities = entities[:source] || entities[source_field] || entities[Entity.formats[source_field].to_s]
15
- target_entities = entities[:target] || entities[target_field] || entities[Entity.formats[target_field].to_s]
15
+ source_entities = entities[:source] || entities[source_field] || entities[Entity.formats[source_field].to_s] || entities[:both]
16
+ target_entities = entities[:target] || entities[target_field] || entities[Entity.formats[target_field].to_s] || entities[:both]
16
17
 
17
18
  [source_entities, target_entities]
18
19
  end
@@ -10,6 +10,7 @@ class KnowledgeBase
10
10
 
11
11
  def subset(name, entities, options = {}, &block)
12
12
  entities, options = options, entities if entities.nil? and Hash === options
13
+
13
14
  entities = case entities
14
15
  when :all
15
16
  {:target => :all, :source => :all}
@@ -23,7 +24,15 @@ class KnowledgeBase
23
24
  raise "Entities are not a Hash or an AnnotatedArray: #{Misc.fingerprint entities}"
24
25
  end
25
26
 
27
+ identify, identify_source, identify_target = entities.merge(options || {}).values_at :identify, :identify_source, :identify_target
28
+
26
29
  source, target = select_entities(name, entities, options)
30
+
31
+ source = identify_source(name, source) if identify_source
32
+ target = identify_target(name, target) if identify_target
33
+
34
+ source = identify(name, source) if identify && !identify_source
35
+ target = identify(name, target) if identify && !identify_target
27
36
 
28
37
  return [] if source.nil? or target.nil?
29
38
  return [] if Array === target and target.empty?
@@ -407,7 +407,6 @@ module Persist
407
407
  repo.read_and_close do
408
408
  keys = repo.range subkey + 0.chr, true, subkey + 254.chr, true
409
409
  end
410
- repo.close
411
410
  else
412
411
  repo.read_and_close do
413
412
  keys = repo.range subkey + 0.chr, true, subkey + 254.chr, true
@@ -461,13 +460,13 @@ module Persist
461
460
  entities.each_with_index do |e,i|
462
461
  next if e.nil?
463
462
  tsv_values = e.tsv_values("literal", "annotation_types", "JSON")
464
- repo[subkey + e.id << ":ANNOTATED_DOUBLE_ARRAY:" << i.to_s] = tsv_values
463
+ repo[subkey + "ANNOTATED_DOUBLE_ARRAY:" << i.to_s] = tsv_values
465
464
  end
466
465
  else
467
466
  entities.each_with_index do |e,i|
468
467
  next if e.nil?
469
468
  tsv_values = e.tsv_values("literal", "annotation_types", "JSON")
470
- repo[subkey + e.id << ":" << i.to_s] = tsv_values
469
+ repo[subkey + i.to_s] = tsv_values
471
470
  end
472
471
  end
473
472
  end
@@ -33,7 +33,29 @@ module Persist
33
33
  end
34
34
 
35
35
  def read?
36
- ! write?
36
+ ! (write? || closed?)
37
+ end
38
+
39
+ def write(*args)
40
+ begin
41
+ super(*args)
42
+ @writable = true
43
+ rescue NoMethodError
44
+ end
45
+ end
46
+
47
+ def close(*args)
48
+ begin
49
+ super(*args)
50
+ rescue NoMethodError
51
+ end
52
+ end
53
+
54
+ def read(*args)
55
+ begin
56
+ super(*args)
57
+ rescue NoMethodError
58
+ end
37
59
  end
38
60
 
39
61
  def collect
@@ -53,16 +75,27 @@ module Persist
53
75
  end
54
76
 
55
77
  def lock
78
+ #return yield if @locked
56
79
  lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir})
57
80
  Misc.lock(lock_filename) do
58
- yield
81
+ begin
82
+ @locked = true
83
+ yield
84
+ ensure
85
+ @locked = false
86
+ end
59
87
  end
60
88
  end
61
89
 
62
90
  def write_and_read
63
- #lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir})
64
- #mutex.synchronize do
65
- #Misc.lock(lock_filename) do
91
+ if write?
92
+ begin
93
+ return yield
94
+ ensure
95
+ read
96
+ end
97
+ end
98
+
66
99
  lock do
67
100
  write true if closed? or not write?
68
101
  begin
@@ -71,14 +104,17 @@ module Persist
71
104
  read
72
105
  end
73
106
  end
74
- #end
75
- #end
76
107
  end
77
108
 
78
109
  def write_and_close
79
- #lock_filename = Persist.persistence_path(persistence_path + '.write', {:dir => TSV.lock_dir})
80
- #mutex.synchronize do
81
- #Misc.lock(lock_filename, true) do
110
+ if write?
111
+ begin
112
+ return yield
113
+ ensure
114
+ close
115
+ end
116
+ end
117
+
82
118
  lock do
83
119
  write true if closed? || ! write?
84
120
  res = begin
@@ -91,11 +127,17 @@ module Persist
91
127
  end
92
128
  res
93
129
  end
94
- #end
95
- #end
96
130
  end
97
131
 
98
132
  def read_and_close
133
+ if read?
134
+ begin
135
+ return yield
136
+ ensure
137
+ close
138
+ end
139
+ end
140
+
99
141
  lock do
100
142
  read true if closed? || ! read?
101
143
  begin
@@ -374,7 +374,7 @@ module TSV
374
374
  when (defined? Step and Step)
375
375
 
376
376
  obj.clean if obj.aborted? or obj.recoverable_error?
377
- obj.run(true) unless obj.done? or obj.started?
377
+ obj.run(true) unless obj.done? || obj.started? || obj.result
378
378
 
379
379
  stream = obj.get_stream
380
380
 
@@ -122,6 +122,7 @@ module TSV
122
122
  end
123
123
  else
124
124
  file.grace
125
+
125
126
  stream = file.get_stream
126
127
  if stream && ! stream.closed?
127
128
  stream
@@ -108,7 +108,7 @@ class Step
108
108
  @result = self._exec
109
109
  @result = @result.stream if TSV::Dumper === @result
110
110
  end
111
- (no_load or ENV["RBBT_NO_STREAM"]) ? @result : prepare_result(@result, @task.result_description)
111
+ (no_load || ENV["RBBT_NO_STREAM"]) ? @result : prepare_result(@result, @task.result_description)
112
112
  end
113
113
 
114
114
  def updatable?
@@ -71,7 +71,7 @@ module Workflow
71
71
  @dep_tree ||= {}
72
72
  @dep_tree[name] ||= begin
73
73
  dep_tree = {}
74
- self.task_dependencies[name].reverse.each do |dep|
74
+ self.task_dependencies[name.to_sym].reverse.each do |dep|
75
75
  dep = dep.first if Array === dep && dep.length == 1
76
76
  dep = dep.dependency if DependencyBlock === dep
77
77
 
@@ -88,23 +88,38 @@ module Workflow
88
88
  key = [workflow, task]
89
89
 
90
90
  dep_tree[key] = workflow.dep_tree(task)
91
- end
91
+ end if self.task_dependencies[name.to_sym]
92
92
  dep_tree
93
93
  end
94
94
  end
95
95
 
96
+ def _prov_tasks(tree)
97
+ tasks = []
98
+ heap = [tree]
99
+ while heap.any?
100
+ t = heap.pop
101
+ t.each do |k,v|
102
+ tasks << k
103
+ heap << v
104
+ end
105
+ end
106
+ tasks
107
+ end
108
+
96
109
  def prov_string(tree)
97
110
  description = ""
98
111
 
99
112
  last = nil
100
113
  seen = Set.new
101
- tree.collect.to_a.flatten.select{|e| Symbol === e }.each do |task_name|
102
114
 
103
- child = last && last.include?(task_name)
104
- first = last.nil?
105
- last = dep_tree(task_name).collect.to_a.flatten.select{|e| Symbol === e}
115
+ tasks = _prov_tasks(tree)
116
+ tasks.each do |workflow,task_name|
117
+
118
+ next if seen.include?([workflow,task_name])
106
119
 
107
- next if seen.include?(task_name)
120
+ child = last && last.include?([workflow, task_name])
121
+ first = last.nil?
122
+ last = _prov_tasks(workflow.dep_tree(task_name))
108
123
 
109
124
  if child
110
125
  description << "->" << task_name.to_s
@@ -113,6 +128,8 @@ module Workflow
113
128
  else
114
129
  description << ";" << task_name.to_s
115
130
  end
131
+
132
+ seen << [workflow, task_name]
116
133
  end
117
134
  description
118
135
  end
@@ -177,7 +194,7 @@ module Workflow
177
194
  description = task.description || ""
178
195
  description = description.split("\n\n").first
179
196
 
180
- next if abridge and ! final.include?(name)
197
+ next if abridge && ! final.include?(name)
181
198
  puts Misc.format_definition_list_item(name.to_s, description, Log.terminal_width, 20, :yellow)
182
199
 
183
200
  prov_string = prov_string(dep_tree(name))
@@ -203,6 +203,8 @@ prepare_make(){
203
203
  local old_pwd="`expand_path $(pwd)`"
204
204
  cd "`build_dir`"
205
205
 
206
+ [ -f bootstrap ] && (./bootstrap || exit -1)
207
+
206
208
  [ -d src -a ! -e CMakeLists.txt -a ! -e Makefile -a ! -e configure ] && cd src
207
209
 
208
210
  if [ -f config/m4 ]; then
@@ -47,6 +47,28 @@ fields = options[:fields]
47
47
  key_field = options[:key_field]
48
48
  fields = fields.split(/[,|]/, -1) unless fields.nil?
49
49
 
50
+ if TSV === tsv
51
+ v = tsv[key]
52
+ fields ||= tsv.fields
53
+ puts Log.color(:blue, "Key: #{ key }")
54
+ if fields
55
+ if fields.length == 1
56
+ if options[:lines]
57
+ puts (Array === v ? v.flatten*"\n" : v.to_s )
58
+ else
59
+ puts (Array === v ? v.flatten*"\t" : v.to_s )
60
+ end
61
+ else
62
+ fields.zip(v).each do |field,v|
63
+ puts "#{Log.color :magenta, field+":"} #{v}"
64
+ end
65
+ end
66
+ else
67
+ puts "#{Log.color :magenta, "value:"} #{v}"
68
+ end
69
+ exit
70
+ end
71
+
50
72
  parser = TSV::Parser.new tsv, :key_field => key_field, :fields => fields, :type => options[:type], :header_hash => options[:header_hash], :sep => options[:sep]
51
73
  fields ||= parser.fields
52
74
 
@@ -54,15 +76,19 @@ TSV.traverse(parser) do |k,v|
54
76
  next unless k.include? key
55
77
  k = k.first if Array === k
56
78
  puts Log.color(:blue, "Key: #{ k }")
57
- if fields.length == 1
58
- if options[:lines]
59
- puts (Array === v ? v.flatten*"\n" : v.to_s )
79
+ if fields
80
+ if fields.length == 1
81
+ if options[:lines]
82
+ puts (Array === v ? v.flatten*"\n" : v.to_s )
83
+ else
84
+ puts (Array === v ? v.flatten*"\t" : v.to_s )
85
+ end
60
86
  else
61
- puts (Array === v ? v.flatten*"\t" : v.to_s )
87
+ fields.zip(v).each do |field,v|
88
+ puts "#{Log.color :magenta, field+":"} #{v}"
89
+ end
62
90
  end
63
91
  else
64
- fields.zip(v).each do |field,v|
65
- puts "#{Log.color :magenta, field+":"} #{v}"
66
- end
92
+ puts "#{Log.color :magenta, "value:"} #{Misc.fingerprint v}"
67
93
  end
68
94
  end
@@ -416,7 +416,7 @@ begin
416
416
 
417
417
  job.fork
418
418
  else
419
- job.produce
419
+ job.run(:stream)
420
420
  res = job
421
421
  end
422
422
 
@@ -24,7 +24,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
24
24
 
25
25
  EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
26
26
 
27
- KNOWLEDGE_BASE = KnowledgeBase.new '/tmp/kb.foo2', "Hsa"
27
+ KNOWLEDGE_BASE = KnowledgeBase.new Rbbt.tmp.test.kb_foo2, "Hsa"
28
28
  KNOWLEDGE_BASE.format = {"Gene" => "Ensembl Gene ID"}
29
29
 
30
30
  KNOWLEDGE_BASE.register :effects, EFFECT_TSV, EFFECT_OPTIONS.dup
@@ -71,7 +71,9 @@ module ReversableString
71
71
  }
72
72
  end
73
73
  end
74
+
74
75
  persist :multiple_annotation_list, :annotations, :dir => TmpFile.tmp_file
76
+ #persist :multiple_annotation_list, :annotations, :dir => Rbbt.tmp.test.annots
75
77
  end
76
78
 
77
79
  class TestEntity < Test::Unit::TestCase
@@ -195,33 +197,40 @@ class TestEntity < Test::Unit::TestCase
195
197
  string3 = 'AAABBBCCC_3'
196
198
  string4 = 'AAABBBCCC_4'
197
199
 
200
+
201
+ $processed_multiple = []
202
+ Log.severity = 0
203
+
198
204
  array = ReversableString.setup([string1, string2])
199
205
  assert_equal [string1, string2].collect{|s| s.chars}, array.multiple_annotation_list
200
-
201
206
  assert_equal string1.length, array[0].multiple_annotation_list.length
202
207
  assert_equal $processed_multiple, [string1, string2]
203
208
 
204
209
  array = ReversableString.setup([string2, string3])
205
- assert_equal string2.length, array[0].multiple_annotation_list.length
210
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
211
+ assert_equal string3, array.multiple_annotation_list.last * ""
206
212
  assert_equal $processed_multiple, [string1, string2, string3]
207
213
 
214
+ $processed_multiple = []
208
215
  array = ReversableString.setup([string2, string3])
216
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
209
217
  assert_equal string2.length, array[0].multiple_annotation_list.length
210
- assert_equal $processed_multiple, [string1, string2, string3]
218
+ assert_equal $processed_multiple, []
211
219
 
212
220
  $processed_multiple = []
213
221
  array = ReversableString.setup([string2, string3, string4])
214
- assert_equal string2.length, array[0].multiple_annotation_list.length
222
+ assert_equal string2.length, array.multiple_annotation_list[0].length
215
223
  assert_equal $processed_multiple, [string4]
216
224
 
217
225
  string1 = 'aaabbbccc'
218
226
  string2 = 'AAABBBCCC'
219
227
  string3 = 'AAABBBCCC_3'
220
228
  string4 = 'AAABBBCCC_4'
229
+
221
230
  $processed_multiple = []
222
231
  array = ReversableString.setup([string2, string3, string4])
223
232
  assert_equal string2.length, array[0].multiple_annotation_list.length
224
- assert_equal $processed_multiple, [string4]
233
+ assert_equal $processed_multiple, []
225
234
 
226
235
  end
227
236
 
@@ -92,9 +92,9 @@ class TestKnowledgeBase < Test::Unit::TestCase
92
92
  assert downstream.length < downstream.follow(kb, :tfacts,false).flatten.length
93
93
 
94
94
  Misc.benchmark(50) do
95
- downstream.follow(kb, :tfacts,false)
96
- downstream.backtrack(kb, :tfacts,false)
97
- downstream.expand(kb, :tfacts,false)
95
+ downstream.follow(kb, :tfacts, false)
96
+ downstream.backtrack(kb, :tfacts, false)
97
+ downstream.expand(kb, :tfacts, false)
98
98
  end
99
99
 
100
100
  Misc.benchmark(50) do
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.27.1
4
+ version: 5.27.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-19 00:00:00.000000000 Z
11
+ date: 2020-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake