rbbt-util 5.28.9 → 5.28.10

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/entity.rb +1 -1
  3. data/lib/rbbt/fix_width_table.rb +5 -4
  4. data/lib/rbbt/persist.rb +1 -1
  5. data/lib/rbbt/persist/tsv/adapter.rb +0 -1
  6. data/lib/rbbt/persist/tsv/fix_width_table.rb +5 -3
  7. data/lib/rbbt/tsv/dumper.rb +6 -2
  8. data/lib/rbbt/util/cmd.rb +1 -0
  9. data/lib/rbbt/util/misc/bgzf.rb +1 -1
  10. data/lib/rbbt/util/named_array.rb +1 -1
  11. data/lib/rbbt/util/open.rb +17 -16
  12. data/lib/rbbt/workflow/definition.rb +2 -1
  13. data/lib/rbbt/workflow/integration/ansible.rb +53 -0
  14. data/lib/rbbt/workflow/integration/ansible/workflow.rb +60 -0
  15. data/lib/rbbt/workflow/step.rb +5 -0
  16. data/lib/rbbt/workflow/step/accessor.rb +1 -1
  17. data/lib/rbbt/workflow/util/archive.rb +2 -0
  18. data/lib/rbbt/workflow/util/orchestrator.rb +22 -9
  19. data/share/rbbt_commands/ansible +55 -0
  20. data/share/rbbt_commands/purge_job +0 -1
  21. data/share/rbbt_commands/workflow/forget_deps +9 -0
  22. data/test/rbbt/association/test_index.rb +6 -6
  23. data/test/rbbt/knowledge_base/test_query.rb +3 -3
  24. data/test/rbbt/knowledge_base/test_registry.rb +1 -1
  25. data/test/rbbt/persist/tsv/test_cdb.rb +0 -7
  26. data/test/rbbt/persist/tsv/test_kyotocabinet.rb +2 -8
  27. data/test/rbbt/persist/tsv/test_leveldb.rb +0 -6
  28. data/test/rbbt/persist/tsv/test_lmdb.rb +0 -6
  29. data/test/rbbt/persist/tsv/test_tokyocabinet.rb +15 -14
  30. data/test/rbbt/test_entity.rb +0 -1
  31. data/test/rbbt/test_knowledge_base.rb +3 -4
  32. data/test/rbbt/test_persist.rb +10 -6
  33. data/test/rbbt/test_workflow.rb +17 -16
  34. data/test/rbbt/tsv/test_accessor.rb +11 -0
  35. data/test/rbbt/tsv/test_attach.rb +0 -2
  36. data/test/rbbt/tsv/test_index.rb +6 -7
  37. data/test/rbbt/tsv/test_manipulate.rb +2 -3
  38. data/test/rbbt/util/R/test_model.rb +2 -1
  39. data/test/rbbt/util/R/test_plot.rb +0 -2
  40. data/test/rbbt/util/concurrency/test_processes.rb +1 -1
  41. data/test/rbbt/util/misc/test_bgzf.rb +11 -7
  42. data/test/rbbt/util/misc/test_lock.rb +0 -1
  43. data/test/rbbt/util/misc/test_multipart_payload.rb +1 -1
  44. data/test/rbbt/util/misc/test_pipes.rb +0 -5
  45. data/test/rbbt/util/test_R.rb +1 -0
  46. data/test/rbbt/util/test_log.rb +4 -6
  47. data/test/rbbt/util/test_misc.rb +0 -2
  48. data/test/rbbt/util/test_open.rb +0 -1
  49. data/test/rbbt/util/test_python.rb +17 -1
  50. data/test/rbbt/workflow/test_remote_workflow.rb +1 -1
  51. data/test/rbbt/workflow/test_step.rb +8 -3
  52. data/test/rbbt/workflow/util/test_orchestrator.rb +50 -0
  53. metadata +5 -4
  54. data/test/rbbt/workflow/remote/test_client.rb +0 -56
@@ -630,10 +630,8 @@ E B
630
630
  tsv1 = Rbbt.tmp.test.test1.data.tsv :double, :sep => /\s+/
631
631
  tsv2 = Rbbt.tmp.test.test2.data.tsv :double, :sep => /\s+/
632
632
 
633
- Log.severity = 0
634
633
  tsv1.attach tsv2, :fields => ["ValueE"] #, :persist_input => true
635
634
  Log.tsv tsv1
636
- ppp tsv1
637
635
 
638
636
  end
639
637
  end
@@ -29,7 +29,7 @@ row2 A B Id3
29
29
 
30
30
  TmpFile.with_file(content) do |filename|
31
31
  tsv = TSV.open(File.open(filename), :sep => /\s+/, :key_field => "OtherID", :persistence => false)
32
- index = tsv.index(:case_insensitive => true, :persistence => true)
32
+ index = tsv.index(:persistence => true)
33
33
  assert index["row1"].include? "Id1"
34
34
  assert_equal "OtherID", index.fields.first
35
35
  end
@@ -45,9 +45,8 @@ row2 A B Id3
45
45
 
46
46
  TmpFile.with_file(content) do |filename|
47
47
  tsv = TSV.open(File.open(filename), :sep => /\s+/, :key_field => "OtherID", :persistence => false)
48
- Log.tsv tsv
49
- index = tsv.index(:case_insensitive => true, :persistence => false, :fields => ["Id"], :target => "ValueA")
50
- Log.tsv index
48
+ index = tsv.index(:persistence => false, :fields => ["Id"], :target => "ValueA")
49
+ assert_equal "A", index["row2"]
51
50
  end
52
51
 
53
52
  end
@@ -243,7 +242,7 @@ g: ____
243
242
  EOF
244
243
  TmpFile.with_file(data) do |datafile|
245
244
  load_segment_data(datafile)
246
- TmpFile.with_file(load_segment_data(datafile)) do |tsvfile|
245
+ TmpFile.with_file(load_segment_data(datafile).to_s) do |tsvfile|
247
246
  f = TSV.range_index(tsvfile, "Start", "End", :persistence => true)
248
247
 
249
248
  #assert_equal %w(), f[0].sort
@@ -286,8 +285,8 @@ f: ___
286
285
  g: ____
287
286
  EOF
288
287
  TmpFile.with_file(data) do |datafile|
289
- TmpFile.with_file(load_segment_data(datafile)) do |tsvfile|
290
- f = TSV.range_index(tsvfile, "Start", "End", :filters => [["field:Start", "3"]])
288
+ TmpFile.with_file(load_segment_data(datafile).to_s) do |tsvfile|
289
+ f = TSV.range_index(tsvfile, "Start", "End", :filters => [["field:Start", "3"]], :persist_update => true)
291
290
 
292
291
  assert_equal %w(), f[0].sort
293
292
  assert_equal %w(), f[1].sort
@@ -284,7 +284,7 @@ row3 a C Id4
284
284
 
285
285
  def test_reorder_flat
286
286
  content =<<-EOF
287
- #Id ValueA
287
+ #Id ValueA
288
288
  row1 a aa aaa
289
289
  row2 A
290
290
  row3 a
@@ -292,9 +292,8 @@ row3 a
292
292
 
293
293
  TmpFile.with_file(content) do |filename|
294
294
  tsv = TSV.open(File.open(filename), :sep => /\s+/, :type => :flat)
295
-
296
- assert_equal ["row1", "row3"].sort, tsv.reorder("ValueA")["a"]
297
295
 
296
+ assert_equal ["row1", "row3"].sort, tsv.reorder("ValueA")["a"]
298
297
  end
299
298
  end
300
299
 
@@ -1,4 +1,5 @@
1
1
  require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
2
+ require 'rbbt/util/R'
2
3
  require 'rbbt/util/R/model'
3
4
 
4
5
  class TestRModel < Test::Unit::TestCase
@@ -49,7 +50,7 @@ data = rbbt.model.inpute(data, CI ~ Dose, method=drm, classes='numeric', fct=LL.
49
50
  assert_equal result.size, result.column("CI").values.flatten.reject{|p| p.nil? or p.empty? or p == "NA"}.length
50
51
  end
51
52
 
52
- def test_ab_surv_corr
53
+ def __test_ab_surv_corr
53
54
  require 'rbbt/workflow'
54
55
  Workflow.require_workflow "Miller"
55
56
 
@@ -5,7 +5,6 @@ require 'rbbt/util/R/plot'
5
5
  class TestRPlot < Test::Unit::TestCase
6
6
  def __test_ggplotgif
7
7
 
8
- Log.severity = 0
9
8
  x = R.eval_a 'rnorm(100, 0, 1)'
10
9
  data = TSV.setup(x, "Num~#:type=:single#:cast=:to_f")
11
10
 
@@ -22,7 +21,6 @@ ggplot(data) + geom_density(bw=frame.value, aes(x=Val))
22
21
 
23
22
  def test_gif
24
23
 
25
- Log.severity = 0
26
24
  x = R.eval_a 'rnorm(100, 0, 1)'
27
25
  data = TSV.setup(x, "Num~#:type=:single#:cast=:to_f")
28
26
 
@@ -7,7 +7,7 @@ require 'rbbt/util/concurrency/processes'
7
7
  class TestConcurrencyProcess < Test::Unit::TestCase
8
8
 
9
9
  def setup
10
- Log.severity = 0
10
+ #Log.severity = 0
11
11
  end
12
12
 
13
13
  def test_process_throttle
@@ -2,12 +2,14 @@ require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_he
2
2
  require 'rbbt/util/misc/bgzf'
3
3
 
4
4
  class TestBgzf < Test::Unit::TestCase
5
- def test_Bgzf
5
+ def _test_Bgzf
6
6
  content = "1234567890" * 1000000
7
7
  TmpFile.with_file(content) do |file|
8
8
  compressed = file + '.gz'
9
9
  `bgzip #{file} -c > #{compressed}`
10
10
  stream = Bgzf.setup File.open(compressed)
11
+ assert_equal "1234", stream.read(4)
12
+ assert_equal "56", stream.read(2)
11
13
  stream.seek 500003
12
14
  assert_equal "4567", stream.read(4)
13
15
  assert_equal "89", stream.read(2)
@@ -20,23 +22,25 @@ class TestBgzf < Test::Unit::TestCase
20
22
  Misc.benchmark do
21
23
  tsv = TSV.open(Open.open(file))
22
24
  end
23
- compressed = file + '.bgz'
24
25
 
25
- `bgzip #{file} -c > #{compressed}`
26
- stream = Bgzf.setup File.open(compressed)
26
+ `gzip #{file}`
27
+ stream = Open.open(file + '.gz')
27
28
  Misc.benchmark do
28
29
  tsv = TSV.open(stream)
29
30
  end
30
31
 
31
- `gzip #{file}`
32
- stream = Open.open(file + '.gz')
32
+ `gunzip #{file}.gz`
33
+ compressed = file + '.bgz'
34
+ `bgzip #{file} -c > #{compressed}`
35
+ stream = Bgzf.setup File.open(compressed)
33
36
  Misc.benchmark do
34
37
  tsv = TSV.open(stream)
35
38
  end
39
+
36
40
  end
37
41
  end
38
42
 
39
- def test_bgzip
43
+ def _test_bgzip
40
44
  assert File.exist?(Bgzf.bgzip_cmd)
41
45
  assert 'bgzip', File.basename(Bgzf.bgzip_cmd)
42
46
  end
@@ -48,7 +48,6 @@ if __FILE__ == $0
48
48
  TmpFile.with_file do |dir|
49
49
  Structure.workdir = dir
50
50
  Path.setup dir
51
- Log.severity = 4
52
51
  TSV.traverse (0..size).to_a, :cpus => cpus, :type => :array, :bar => true do |i|
53
52
  begin
54
53
  v = rand(num).to_s
@@ -185,7 +185,7 @@ END
185
185
  inputs[:input2] = "Input2"
186
186
  num = 50
187
187
  cpus = 1
188
- Log.severity = 0
188
+
189
189
  Misc.bootstrap((0..num-1).to_a, cpus) do |n|
190
190
  puts mutipart
191
191
  TmpFile.with_file(mutipart, false) do |tmpfile|
@@ -131,7 +131,6 @@ row2 AA BB CC
131
131
  row3 AAA BBB CCC
132
132
  row1 A B C
133
133
  EOF
134
- Log.severity = 0
135
134
 
136
135
  text = text * 10000
137
136
  TmpFile.with_file(text) do |tmp|
@@ -159,7 +158,6 @@ row2 AA BB CC
159
158
  row3 AAA BBB CCC
160
159
  row1 A B C
161
160
  EOF
162
- Log.severity = 0
163
161
 
164
162
  text = text * 10000
165
163
  num = 5
@@ -200,7 +198,6 @@ line3
200
198
  line1
201
199
  EOF
202
200
 
203
- Log.severity = 0
204
201
  TmpFile.with_file(text1) do |file1|
205
202
  TmpFile.with_file(text2) do |file2|
206
203
  assert ! Misc.remove_lines(file1, file2, true).read.split("\n").include?("line1")
@@ -224,7 +221,6 @@ line1
224
221
  line5
225
222
  EOF
226
223
 
227
- Log.severity = 0
228
224
  TmpFile.with_file(text1) do |file1|
229
225
  TmpFile.with_file(text2) do |file2|
230
226
  assert Misc.select_lines(file1, file2, true).read.split("\n").include?("line1")
@@ -258,7 +254,6 @@ line3
258
254
  line4
259
255
  EOF
260
256
 
261
- Log.severity = 0
262
257
  TmpFile.with_file(text) do |file|
263
258
  io = Open.open(file)
264
259
  lines = Set.new
@@ -9,6 +9,7 @@ class TestR < Test::Unit::TestCase
9
9
  def test_tsv_R
10
10
  tsv = TSV.setup({:a => 1, :b => 2})
11
11
  tsv2 = tsv.R <<-EOF
12
+ str(data)
12
13
  data = data + 1
13
14
  EOF
14
15
  assert_equal "2", tsv2["a"].first
@@ -2,7 +2,7 @@ require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helpe
2
2
  require 'rbbt/util/log'
3
3
 
4
4
  class TestLog < Test::Unit::TestCase
5
- def _test_get_level
5
+ def test_get_level
6
6
  assert_equal 0, Log.get_level(:debug)
7
7
  assert_equal 1, Log.get_level(:low)
8
8
  assert_equal 1, Log.get_level("LOW")
@@ -10,18 +10,17 @@ class TestLog < Test::Unit::TestCase
10
10
  assert_equal 0, Log.get_level(nil)
11
11
  end
12
12
 
13
- def _test_color
13
+ def test_color
14
14
  assert Log.color(:green, "green")
15
15
  end
16
16
 
17
- def _test_no_stderr
17
+ def test_no_stderr
18
18
  Log.ignore_stderr do
19
19
  STDERR.puts "NOPRINT"
20
20
  end
21
21
  end
22
22
 
23
- def _test_trap_stderr
24
- Log.severity = 0
23
+ def test_trap_stderr
25
24
  Log.trap_stderr do
26
25
  STDERR.puts "NOPRINT"
27
26
  STDERR.puts "NOPRINT"
@@ -40,7 +39,6 @@ class TestLog < Test::Unit::TestCase
40
39
  end
41
40
 
42
41
  def test_trap_std
43
- Log.severity = 0
44
42
  Log.trap_std do
45
43
  STDERR.puts "NOPRINT STDERR"
46
44
  STDOUT.puts "NOPRINT STDOUT"
@@ -475,7 +475,6 @@ eum fugiat quo voluptas nulla pariatur?"
475
475
  end
476
476
 
477
477
  def test_bootstrap
478
- Log.severity = 0
479
478
  res = Misc.bootstrap((1..10).to_a, 2, :bar => "Test bootstrap ticks", :respawn => :always, :into => []) do |num|
480
479
  sleep 1 + rand(2)
481
480
  num
@@ -550,7 +549,6 @@ eum fugiat quo voluptas nulla pariatur?"
550
549
  end
551
550
 
552
551
  def __test_bench_log
553
- Log.severity = 1
554
552
  Misc.benchmark(1000) do
555
553
  Log.info { "Hola" }
556
554
  end
@@ -169,7 +169,6 @@ class TestOpen < Test::Unit::TestCase
169
169
  end
170
170
 
171
171
  def test_write_stream_repo
172
- Log.severity = 0
173
172
  TmpFile.with_file do |tmpdir|
174
173
  tmpdir = Rbbt.tmp.repo_dir.find
175
174
  repo = File.join(tmpdir, 'repo')
@@ -42,7 +42,6 @@ def python_test(a, b):
42
42
  end
43
43
 
44
44
  def test_run_log
45
- Log.severity = 0
46
45
  TmpFile.with_file do |tmpdir|
47
46
  code =<<-EOF
48
47
  import sys
@@ -66,3 +65,20 @@ def python_print():
66
65
  end
67
66
  end
68
67
 
68
+ def test_keras
69
+ defined = RbbtPython.run do
70
+ pyimport "keras.models", as: :km
71
+ defined?(km.Sequential)
72
+ end
73
+ assert defined
74
+ end
75
+
76
+ def test_keras_import
77
+ defined = RbbtPython.run do
78
+ pyfrom "keras.models", import: :Sequential
79
+ defined?(self::Sequential)
80
+ end
81
+ assert defined
82
+ end
83
+ end
84
+
@@ -88,7 +88,7 @@ class TestRemoteWorkflow < Test::Unit::TestCase
88
88
  end
89
89
 
90
90
 
91
- def _test_ssh
91
+ def test_ssh
92
92
  Log.severity = 0
93
93
  client = RemoteWorkflow.new "ssh://#{ENV["HOSTNAME"]}:Translation", "Translation"
94
94
  job = client.job("translate", "SSH-TEST-1", :genes => ["TP53","KRAS"])
@@ -1,8 +1,10 @@
1
1
  require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
2
+ require 'rbbt/workflow'
2
3
  require 'rbbt/workflow/task'
3
4
  require 'rbbt/workflow/step'
4
5
  require 'rbbt/tsv'
5
6
  require 'rbbt'
7
+ require 'rbbt-util'
6
8
 
7
9
  class TestStep < Test::Unit::TestCase
8
10
 
@@ -23,8 +25,9 @@ class TestStep < Test::Unit::TestCase
23
25
  str2 = "TEST2"
24
26
  TmpFile.with_file do |tmpfile|
25
27
 
26
- task1 = Task.setup :result_type => nil do
28
+ task1 = Task.setup :result_type => :string do
27
29
  Open.write(tmpfile, str);
30
+ "done"
28
31
  end
29
32
  step1 = Step.new tmpfile + 'step1', task1
30
33
 
@@ -50,9 +53,10 @@ class TestStep < Test::Unit::TestCase
50
53
  def __test_dependency_log_relay
51
54
  str = "TEST"
52
55
  TmpFile.with_file do |tmpfile|
53
- task1 = Task.setup :result_type => nil, :name => :task1 do
56
+ task1 = Task.setup :result_type => :string, :name => :task1 do
54
57
  log(:starting_task1, "Starting Task1")
55
58
  Open.write(tmpfile, str);
59
+ "done"
56
60
  end
57
61
  step1 = Step.new tmpfile + 'step1', task1
58
62
 
@@ -69,9 +73,10 @@ class TestStep < Test::Unit::TestCase
69
73
  def test_log_relay_step
70
74
  str = "TEST"
71
75
  TmpFile.with_file do |tmpfile|
72
- task1 = Task.setup :result_type => nil, :name => :task1 do
76
+ task1 = Task.setup :result_type => :string, :name => :task1 do
73
77
  log(:starting_task1, "Starting Task1")
74
78
  Open.write(tmpfile, str);
79
+ "done"
75
80
  end
76
81
  step1 = Step.new tmpfile + 'step1', task1
77
82
 
@@ -27,6 +27,11 @@ module TestWF
27
27
  task :d => :text do
28
28
  sleep(TestWF::MULT * (rand(10) + 2))
29
29
  end
30
+
31
+ dep :c
32
+ task :e => :text do
33
+ sleep(TestWF::MULT * (rand(10) + 2))
34
+ end
30
35
  end
31
36
 
32
37
  class TestClass < Test::Unit::TestCase
@@ -219,5 +224,50 @@ TestWF:
219
224
  end
220
225
 
221
226
  end
227
+
228
+ def test_orchestrate_top_level_double_dep
229
+
230
+ jobs =[]
231
+
232
+ num = 10
233
+ num.times do |i|
234
+ jobs.concat %w(TEST1 TEST2).collect{|name| TestWF.job(:e, name + " #{i}") }
235
+ jobs.concat %w(TEST1 TEST2).collect{|name| TestWF.job(:d, name + " #{i}") }
236
+ end
237
+ jobs.each do |j| j.recursive_clean end
238
+
239
+ rules = YAML.load <<-EOF
240
+ defaults:
241
+ erase: true
242
+ log: 4
243
+ default_resources:
244
+ IO: 1
245
+ TestWF:
246
+ a:
247
+ resources:
248
+ cpus: 7
249
+ b:
250
+ resources:
251
+ cpus: 2
252
+ c:
253
+ resources:
254
+ cpus: 10
255
+ d:
256
+ resources:
257
+ cpus: 15
258
+ EOF
259
+
260
+ orchestrator = Workflow::Orchestrator.new(TestWF::MULT, "cpus" => 30, "IO" => 4, "size" => 10 )
261
+ Log.with_severity 3 do
262
+ orchestrator.process(rules, jobs)
263
+ end
264
+
265
+ jobs.each do |job|
266
+ next unless job.task_name.to_s == 'd' || job.task_name.to_s == 'e'
267
+ assert job.info[:archived_info].keys.select{|k| k.include?("TestWF/c/")}.any?
268
+ assert job.info[:archived_info].keys.select{|k| k.include?("TestWF/c/")}.any?
269
+ end
270
+
271
+ end
222
272
  end
223
273
 
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.28.9
4
+ version: 5.28.10
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-11-04 00:00:00.000000000 Z
11
+ date: 2020-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -318,6 +318,8 @@ files:
318
318
  - lib/rbbt/workflow/definition.rb
319
319
  - lib/rbbt/workflow/doc.rb
320
320
  - lib/rbbt/workflow/examples.rb
321
+ - lib/rbbt/workflow/integration/ansible.rb
322
+ - lib/rbbt/workflow/integration/ansible/workflow.rb
321
323
  - lib/rbbt/workflow/integration/cromwell.rb
322
324
  - lib/rbbt/workflow/integration/nextflow.rb
323
325
  - lib/rbbt/workflow/remote_workflow.rb
@@ -347,6 +349,7 @@ files:
347
349
  - share/config.ru
348
350
  - share/install/software/lib/install_helpers
349
351
  - share/rbbt_commands/alias
352
+ - share/rbbt_commands/ansible
350
353
  - share/rbbt_commands/app/install
351
354
  - share/rbbt_commands/app/start
352
355
  - share/rbbt_commands/app/template
@@ -513,7 +516,6 @@ files:
513
516
  - test/rbbt/util/test_simpleDSL.rb
514
517
  - test/rbbt/util/test_simpleopt.rb
515
518
  - test/rbbt/util/test_tmpfile.rb
516
- - test/rbbt/workflow/remote/test_client.rb
517
519
  - test/rbbt/workflow/step/test_dependencies.rb
518
520
  - test/rbbt/workflow/test_doc.rb
519
521
  - test/rbbt/workflow/test_remote_workflow.rb
@@ -552,7 +554,6 @@ test_files:
552
554
  - test/rbbt/workflow/test_doc.rb
553
555
  - test/rbbt/workflow/test_schedule.rb
554
556
  - test/rbbt/workflow/test_step.rb
555
- - test/rbbt/workflow/remote/test_client.rb
556
557
  - test/rbbt/workflow/step/test_dependencies.rb
557
558
  - test/rbbt/workflow/test_task.rb
558
559
  - test/rbbt/resource/test_path.rb