rbbt-util 5.27.1 → 5.27.2

Sign up to get free protection for your applications and to get access to all the features.
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