rbbt-util 5.38.1 → 5.39.0

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: 1121593dec25c29d7986047727d555ed0e75df6b158f9f1332764ad4886462c5
4
- data.tar.gz: c8e39ef65e23445cf5d0c8817af961a9206016c5e3665d87e042f0fadec2b8df
3
+ metadata.gz: 12c5401cf3ecb8495ba5c21d0f3d3f35c741c1c335ffa0d3a7d3ee498f6daae8
4
+ data.tar.gz: 344f30b6651a272f5e9665d3ec6383b4a1d62ba7c64c7889af5cfc573b2285ac
5
5
  SHA512:
6
- metadata.gz: 22c87766544a52c9c6f0d6da369422a452f553d1a61b82a54674f676a3867a6c1d29028c2efd031563f982cdadbce56d36950c8e100bd34ac2a7e95b39af8a58
7
- data.tar.gz: 0a79edc89dad388bca9b94dfeccba1df64c4294e84c4f19743608038e55f8800181911d787980adae3ec1c715a993430ccbf2bc07d6212485b89843ada93de74
6
+ metadata.gz: 6e8305e1f3e74eeff9e5892592bc66bfc9aac3baa505503942b266c3de996408a9210fcfaa2f6073800fc763bf3cdf5b8f39a50a920696402657d2928a9add8f
7
+ data.tar.gz: 511c72833b4a8ef747e574376d44a3b4799f96f6a922301d3f405df1cd7aac79a2d2de388075aaab4fc3ef6962ee66ded3de8684227912399f41f7ad00006148
data/lib/rbbt/resource.rb CHANGED
@@ -354,7 +354,7 @@ url='#{url}'
354
354
  path = File.expand_path(path)
355
355
  path += "/" if File.directory?(path)
356
356
  resource ||= Rbbt
357
- locations = (Path::STANDARD_SEARCH + resource.search_order + resource.search_paths.keys)
357
+ locations = (Path::STANDARD_SEARCH + resource.search_order + resource.search_paths.keys).uniq
358
358
  locations -= [:current, "current"]
359
359
  locations << :current
360
360
  search_paths = IndiferentHash.setup(resource.search_paths)
@@ -374,7 +374,11 @@ url='#{url}'
374
374
  if ! m.named_captures.include?("PKGDIR") || m["PKGDIR"] == resource.pkgdir
375
375
  unlocated = ([m["TOPLEVEL"],m["SUBPATH"],m["REST"]] * "/")
376
376
  unlocated.gsub!(/\/+/,'/')
377
- unlocated[self.subdir] = "" if self.subdir
377
+ if self.subdir && ! self.subdir.empty?
378
+ subdir = self.subdir
379
+ subdir += "/" unless subdir.end_with?("/")
380
+ unlocated[subdir] = ""
381
+ end
378
382
  choices << self.annotate(unlocated)
379
383
  end
380
384
  end
data/lib/rbbt/tsv/util.rb CHANGED
@@ -400,5 +400,9 @@ module TSV
400
400
  end
401
401
  index
402
402
  end
403
+
404
+ def merge(other)
405
+ self.annotate(super(other))
406
+ end
403
407
  end
404
408
 
data/lib/rbbt/util/cmd.rb CHANGED
@@ -22,13 +22,17 @@ module CMD
22
22
  return tool.to_s unless TOOLS[tool]
23
23
 
24
24
  @@init_cmd_tool ||= IndiferentHash.setup({})
25
+
26
+ claim, test, block, cmd = TOOLS[tool]
27
+ cmd = tool.to_s if cmd.nil?
28
+
25
29
  if !@@init_cmd_tool[tool]
26
- claim, test, block, cmd = TOOLS[tool]
30
+
27
31
  begin
28
32
  if test
29
33
  CMD.cmd(test + " ")
30
34
  else
31
- CMD.cmd("#{tool} --help")
35
+ CMD.cmd("#{cmd} --help")
32
36
  end
33
37
  rescue
34
38
  if claim
@@ -41,7 +45,7 @@ module CMD
41
45
  version = nil
42
46
  ["--version", "-version", "--help", ""].each do |f|
43
47
  begin
44
- version_txt += CMD.cmd("#{tool} #{f} 2>&1", :nofail => true).read
48
+ version_txt += CMD.cmd("#{cmd} #{f} 2>&1", :nofail => true).read
45
49
  version = Misc.scan_version_text(version_txt, tool)
46
50
  break if version
47
51
  rescue
@@ -54,7 +58,7 @@ module CMD
54
58
  return cmd if cmd
55
59
  end
56
60
 
57
- tool.to_s
61
+ cmd
58
62
  end
59
63
 
60
64
  def self.versions
@@ -245,7 +245,7 @@ class RbbtProcessQueue
245
245
  end
246
246
  end if @callback_queue
247
247
 
248
- @callback_thread.report_on_exception = false
248
+ @callback_thread.report_on_exception = false if @callback_thread
249
249
 
250
250
  end
251
251
 
@@ -1,6 +1,5 @@
1
1
  module Rbbt
2
2
 
3
- prepare_for_execution(job)
4
3
  def self.migrate_source_paths(path, resource = Rbbt, source = nil)
5
4
  if source
6
5
  lpath, *paths = Misc.ssh_run(source, <<-EOF).split("\n")
@@ -60,7 +59,7 @@ puts resource[path].find(search_path)
60
59
  test_str = options[:test] ? '-nv' : ''
61
60
 
62
61
  real_paths.each do |source_path|
63
- Log.medium "Migrating #{source_path} #{options[:files].length} files to #{target} - #{Misc.fingerprint(options[:files])}}" if options[:files]
62
+ Log.low "Migrating #{source_path} #{options[:files].length} files to #{target} - #{Misc.fingerprint(options[:files])}}" if options[:files]
64
63
  if File.directory?(source_path) || source_path.end_with?("/")
65
64
  source_path += "/" unless source_path.end_with? '/'
66
65
  target += "/" unless target.end_with? '/'
@@ -455,6 +455,7 @@ module Misc
455
455
  end
456
456
 
457
457
  def self.scan_version_text(text, cmd = nil)
458
+ text = Misc.fixutf8 text
458
459
  cmd = "NOCMDGIVE" if cmd.nil? || cmd.empty?
459
460
  text.split("\n").each do |line|
460
461
  next unless line =~ /\W#{cmd}\W/i
@@ -530,16 +530,22 @@ module Open
530
530
 
531
531
  def self.gzip?(file)
532
532
  file = file.find if Path === file
533
+ file = file.filename if File === file
534
+ return false unless String === file
533
535
  !! (file =~ /\.gz$/)
534
536
  end
535
537
 
536
538
  def self.bgzip?(file)
537
539
  file = file.find if Path === file
540
+ file = file.filename if File === file
541
+ return false unless String === file
538
542
  !! (file =~ /\.bgz$/)
539
543
  end
540
544
 
541
545
  def self.zip?(file)
542
546
  file = file.find if Path === file
547
+ file = file.filename if File === file
548
+ return false unless String === file
543
549
  !! (file =~ /\.zip$/)
544
550
  end
545
551
 
data/lib/rbbt/util/ssh.rb CHANGED
@@ -9,7 +9,7 @@ class SSHLine
9
9
  @ssh = Net::SSH.start(@host, @user)
10
10
 
11
11
  @ch = @ssh.open_channel do |ch|
12
- ch.exec 'bash'
12
+ ch.exec 'bash -l'
13
13
  end
14
14
 
15
15
  @ch.on_data do |_,data|
@@ -253,7 +253,7 @@ job.clean
253
253
  Step.wait_for_jobs missing_deps
254
254
 
255
255
  migrate_dependencies = all_deps.keys.collect{|d| [d] + d.rec_dependencies + d.input_dependencies }.flatten.select{|d| d.done? }.collect{|d| d.path }
256
- Log.medium "Migrating #{migrate_dependencies.length} dependencies from #{Misc.fingerprint job_list} to #{ server }"
256
+ Log.low "Migrating #{migrate_dependencies.length} dependencies from #{Misc.fingerprint job_list} to #{ server }"
257
257
  Step.migrate(migrate_dependencies, search_path, :target => server) if migrate_dependencies.any?
258
258
  end
259
259
 
@@ -145,9 +145,9 @@ class Step
145
145
  end
146
146
 
147
147
  def input_dependencies
148
- @input_dependencies ||= recursive_inputs.flatten.
148
+ @input_dependencies ||= recursive_inputs(true).flatten.
149
149
  select{|i| Step === i || (defined?(RemoteStep) && RemoteStep === i) } +
150
- recursive_inputs.flatten.
150
+ recursive_inputs(true).flatten.
151
151
  select{|dep| Path === dep && Step === dep.resource }.
152
152
  #select{|dep| ! dep.resource.started? }. # Ignore input_deps already started
153
153
  collect{|dep| dep.resource }
@@ -581,7 +581,6 @@ class Step
581
581
  #but dependencies are absent, meanining that the file could have been dropped
582
582
  #in
583
583
  def rec_dependencies(connected = false, seen = [])
584
-
585
584
  # A step result with no info_file means that it was manually
586
585
  # placed. In that case, do not consider its dependencies
587
586
  return [] if ! (defined? WorkflowRemoteClient && WorkflowRemoteClient::RemoteStep === self) && ! Open.exists?(self.info_file) && Open.exists?(self.path.to_s)
@@ -599,7 +598,7 @@ class Step
599
598
  #next if self.done? && Open.exists?(info_file) && info[:dependencies] && info[:dependencies].select{|task,name,path| path == step.path }.empty?
600
599
  next if archived_deps.include? step.path
601
600
  next if seen.include? step
602
- next if self.done? && connected && ! updatable?
601
+ next if step.done? && connected && ! step.updatable?
603
602
 
604
603
  r = step.rec_dependencies(connected, new_dependencies)
605
604
  new_dependencies.concat r
@@ -90,7 +90,7 @@ class Step
90
90
  end
91
91
  end
92
92
 
93
- def recursive_inputs
93
+ def recursive_inputs(connected = false)
94
94
  if NamedArray === inputs
95
95
  i = {}
96
96
  inputs.zip(inputs.fields).each do |v,f|
@@ -99,7 +99,7 @@ class Step
99
99
  else
100
100
  i = {}
101
101
  end
102
- rec_dependencies.each do |dep|
102
+ rec_dependencies(connected).each do |dep|
103
103
  next unless NamedArray === dep.inputs
104
104
 
105
105
  dep.inputs.zip(dep.inputs.fields).each do |v,f|
@@ -20,7 +20,7 @@ module Task
20
20
  task_inputs = dep_inputs deps, workflow
21
21
  task_inputs.each do |task,new_inputs|
22
22
  new_inputs.zip(task.input_types.values_at(*new_inputs)).select do |i,t|
23
- t.to_sym == :select and task.input_options[i][:select_options]
23
+ t.to_sym == :select && task.input_options.include?(i) && task.input_options[i][:select_options]
24
24
  end.each do |i,t|
25
25
  selects << [i, task.input_options[i][:select_options]]
26
26
  end
@@ -81,7 +81,8 @@ module Workflow
81
81
 
82
82
  def self.plot_trace_job_times(data, plot, width=800, height=800)
83
83
  data.R <<-EOF, [:svg]
84
- rbbt.require('tidyverse')
84
+ rbbt.require('dplyr')
85
+ rbbt.require('tidyr')
85
86
  rbbt.require('ggplot2')
86
87
 
87
88
  names(data) <- make.names(names(data))
data/lib/rbbt/workflow.rb CHANGED
@@ -23,7 +23,7 @@ module Workflow
23
23
 
24
24
  #{{{ WORKFLOW MANAGEMENT
25
25
  class << self
26
- attr_accessor :workflows, :autoinstall, :workflow_dir
26
+ attr_accessor :workflows, :autoinstall, :workflow_dir, :main
27
27
  end
28
28
 
29
29
  self.workflows = []
@@ -202,13 +202,14 @@ module Workflow
202
202
 
203
203
  first = nil
204
204
  wf_name.split("+").each do |wf_name|
205
+ self.main = nil
205
206
  require_local_workflow(wf_name) or
206
207
  (Workflow.autoinstall and `rbbt workflow install #{Misc.snake_case(wf_name)} || rbbt workflow install #{wf_name}` and require_local_workflow(wf_name)) or raise("Workflow not found or could not be loaded: #{ wf_name }")
207
208
 
208
209
  workflow = begin
209
210
  Misc.string2const Misc.camel_case(wf_name)
210
211
  rescue
211
- Workflow.workflows.last || true
212
+ self.main || Workflow.workflows.last
212
213
  end
213
214
  workflow.load_documentation
214
215
 
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt-util'
4
+ require 'rbbt/resource'
5
+ require 'rbbt/workflow'
6
+
7
+ options = SOPT.get <<EOF
8
+ -W--workflows* Workflows to use; 'all' for all in Rbbt.etc.workflows:
9
+ -r--requires* Files to require; 'all' for all in Rbbt.etc.requires:
10
+ -f--force Force the production if the file is already present
11
+ -h--help Help
12
+ EOF
13
+
14
+ if options[:help]
15
+ puts SOPT.doc
16
+ exit
17
+ end
18
+
19
+ case options[:workflows]
20
+ when nil, false, "false", "none"
21
+ when "all"
22
+ Rbbt.etc.workflows.list.each do |workflow|
23
+ Workflow.require_workflow file
24
+ end if Rbbt.etc.workflows.exists?
25
+ else
26
+ options[:workflows].split(/[ ,;|]/).each do |workflow|
27
+ Workflow.require_workflow workflow
28
+ end
29
+ end
30
+
31
+ case options[:requires]
32
+ when nil, false, "false", "none"
33
+ when "all"
34
+ Rbbt.etc.requires.list.each do |file|
35
+ require file
36
+ end if Rbbt.etc.requires.exists?
37
+ else
38
+ options[:requires].split(/[ ,;|]/).each do |file|
39
+ require file
40
+ end
41
+ end
42
+
43
+ resource, path = ARGV
44
+
45
+ begin
46
+ resource = Kernel.const_get(resource)
47
+ rescue
48
+ begin
49
+ resource = Workflow.require_workflow resource
50
+ rescue
51
+ raise "Resource not found: #{ resource }"
52
+ end
53
+ end
54
+
55
+ puts resource.claims * "\n"
56
+
57
+
@@ -220,8 +220,8 @@ The `recursive_clean` cleans all the job dependency steps recursively.
220
220
  -rwt--remote_workflow_tasks* Load a yaml file describing remote workflow tasks
221
221
  -od--override_deps* Override deps using 'Workflow#task=<path>' array_separated
222
222
  -PERF--procpath_performance* Measure performance using procpath
223
- -r--relay* Relay job to SSH server
224
- -sr--slurm_relay* Relay job to SSH SLURM server
223
+ --relay* Relay job to SSH server
224
+ --slurm_relay* Relay job to SSH SLURM server
225
225
  -rdep--relay_dependencies* Relay dependencies instead of main job
226
226
  -pdr--produce_dependencies_for_relay Prepare dependencies previous to relay jobs
227
227
  EOF
@@ -302,7 +302,7 @@ b 2
302
302
  EOF
303
303
 
304
304
  TmpFile.with_file(content) do |filename|
305
- tsv = TSV.open(filename, :key_field => "Value", :select => Proc.new{|l| ! l =~ /1/})
305
+ tsv = TSV.open(filename, :key_field => "Value", :select => Proc.new{|l| l !~ /1/})
306
306
  assert(! tsv.include?("3"))
307
307
  end
308
308
  end
@@ -650,5 +650,20 @@ row3 AA BB|BBB Id3|Id2
650
650
 
651
651
  end
652
652
  end
653
+
654
+ def test_benchmark
655
+ num = 10_000
656
+ txt = num.times.inject(nil) do |acc,i|
657
+ (acc.nil? ? "" : acc << "\n") << (0..10).collect{|v| v == 0 ? i : [v,v] * "|" } * "\t"
658
+ end
659
+
660
+ txt = StringIO.new(([txt] * (10))*"\n")
661
+ #Misc.profile do
662
+ Misc.benchmark(1) do
663
+ data = TSV.open(txt, type: :double, bar: true, merge: true)
664
+ assert_equal num, data.size
665
+ end
666
+ end
667
+
653
668
  end
654
669
 
@@ -50,11 +50,11 @@ class TestTSVParallelThrough < Test::Unit::TestCase
50
50
  def test_traverse_stream
51
51
  require 'rbbt/sources/organism'
52
52
 
53
- head = 1000
53
+ head = 3000
54
54
 
55
55
  tsv = datafile_test('identifiers').open
56
56
  res = {}
57
- TSV.traverse tsv, :head => head, :into => res do |k,v|
57
+ TSV.traverse tsv, :head => head, :into => res, :bar => true do |k,v|
58
58
  [k,v]
59
59
  end
60
60
 
@@ -35,4 +35,18 @@ row2 A B Id3
35
35
  assert_equal %w(aa bb Id2), tsv.unzip_replicates["row1(1)"]
36
36
  end
37
37
  end
38
+
39
+ def test_merge
40
+ content =<<-EOF
41
+ #Id ValueA ValueB OtherID
42
+ row1 a|aa|aaa b|bb|bbb Id1|Id2|Id3
43
+ row2 A B Id3
44
+ EOF
45
+
46
+ TmpFile.with_file(content) do |filename|
47
+ tsv = TSV.open(filename, :sep => /\s+/)
48
+ tsv = tsv.merge({"row3" => [["A3"], ["B3"], ["Id4"]]})
49
+ assert TSV === tsv
50
+ end
51
+ end
38
52
  end
@@ -3,9 +3,9 @@ require 'rbbt-util'
3
3
  require 'rbbt/util/migrate'
4
4
 
5
5
  class TestMigrate < Test::Unit::TestCase
6
- def _test_source_locate
6
+ def test_source_locate
7
7
  assert_equal 'var/jobs/', Rbbt.migrate_source_paths(Rbbt.root['var/jobs'].find(:user)).last
8
- assert Rbbt.migrate_source_paths(Rbbt.root['var/jobs'].find(:user))[1].include?(File.join(ENV["HOME"], '.rbbt/var/jobs/'))
8
+ assert_include Rbbt.migrate_source_paths(Rbbt.root['var/jobs'].find(:user))[1], (File.join(ENV["HOME"], '.rbbt/var/jobs'))
9
9
  end
10
10
 
11
11
  def test_migrate
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.38.1
4
+ version: 5.39.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-01 00:00:00.000000000 Z
11
+ date: 2023-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -390,6 +390,7 @@ files:
390
390
  - share/rbbt_commands/migrate
391
391
  - share/rbbt_commands/migrate_job
392
392
  - share/rbbt_commands/purge_job
393
+ - share/rbbt_commands/resource/claims
393
394
  - share/rbbt_commands/resource/exists
394
395
  - share/rbbt_commands/resource/find
395
396
  - share/rbbt_commands/resource/get
@@ -594,110 +595,110 @@ signing_key:
594
595
  specification_version: 4
595
596
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
596
597
  test_files:
597
- - test/rbbt/test_entity.rb
598
- - test/rbbt/workflow/test_remote_workflow.rb
599
- - test/rbbt/workflow/util/test_archive.rb
600
- - test/rbbt/workflow/util/test_orchestrator.rb
601
- - test/rbbt/workflow/util/test_data.rb
602
- - test/rbbt/workflow/test_doc.rb
603
- - test/rbbt/workflow/test_schedule.rb
604
- - test/rbbt/workflow/test_step.rb
605
- - test/rbbt/workflow/step/test_dependencies.rb
606
- - test/rbbt/workflow/step/test_save_load_inputs.rb
607
- - test/rbbt/workflow/test_task.rb
608
- - test/rbbt/resource/test_path.rb
609
- - test/rbbt/util/test_colorize.rb
610
- - test/rbbt/util/test_procpath.rb
611
- - test/rbbt/util/python/test_util.rb
612
- - test/rbbt/util/misc/test_development.rb
613
- - test/rbbt/util/misc/test_indiferent_hash.rb
614
- - test/rbbt/util/misc/test_omics.rb
615
- - test/rbbt/util/misc/test_pipes.rb
616
- - test/rbbt/util/misc/test_serialize.rb
617
- - test/rbbt/util/misc/test_format.rb
618
- - test/rbbt/util/misc/test_communication.rb
619
- - test/rbbt/util/misc/test_lock.rb
620
- - test/rbbt/util/misc/test_multipart_payload.rb
621
- - test/rbbt/util/misc/test_bgzf.rb
622
- - test/rbbt/util/test_concurrency.rb
623
- - test/rbbt/util/test_cmd.rb
624
- - test/rbbt/util/R/test_plot.rb
625
- - test/rbbt/util/R/test_eval.rb
626
- - test/rbbt/util/R/test_model.rb
627
- - test/rbbt/util/test_config.rb
628
- - test/rbbt/util/test_log.rb
629
- - test/rbbt/util/test_simpleDSL.rb
630
- - test/rbbt/util/log/test_progress.rb
631
- - test/rbbt/util/test_tmpfile.rb
632
- - test/rbbt/util/test_R.rb
633
- - test/rbbt/util/test_excel2tsv.rb
634
- - test/rbbt/util/test_misc.rb
635
- - test/rbbt/util/test_open.rb
636
- - test/rbbt/util/test_ssh.rb
637
- - test/rbbt/util/test_simpleopt.rb
638
- - test/rbbt/util/simpleopt/test_parse.rb
639
- - test/rbbt/util/simpleopt/test_setup.rb
640
- - test/rbbt/util/simpleopt/test_get.rb
641
- - test/rbbt/util/test_python.rb
642
- - test/rbbt/util/test_filecache.rb
643
- - test/rbbt/util/concurrency/test_processes.rb
644
- - test/rbbt/util/concurrency/test_threads.rb
645
- - test/rbbt/util/concurrency/processes/test_socket.rb
646
- - test/rbbt/util/test_semaphore.rb
647
- - test/rbbt/util/test_chain_methods.rb
648
- - test/rbbt/util/test_migrate.rb
649
- - test/rbbt/test_resource.rb
650
- - test/rbbt/test_packed_index.rb
651
- - test/rbbt/tsv/test_change_id.rb
652
- - test/rbbt/tsv/test_attach.rb
653
- - test/rbbt/tsv/test_filter.rb
654
- - test/rbbt/tsv/test_marshal.rb
655
- - test/rbbt/tsv/test_parser.rb
656
- - test/rbbt/tsv/test_csv.rb
657
- - test/rbbt/tsv/test_accessor.rb
658
- - test/rbbt/tsv/test_matrix.rb
659
- - test/rbbt/tsv/test_field_index.rb
660
- - test/rbbt/tsv/test_util.rb
661
- - test/rbbt/tsv/test_index.rb
662
- - test/rbbt/tsv/test_parallel.rb
663
- - test/rbbt/tsv/test_manipulate.rb
664
- - test/rbbt/tsv/test_excel.rb
665
- - test/rbbt/tsv/parallel/test_through.rb
666
- - test/rbbt/tsv/parallel/test_traverse.rb
667
- - test/rbbt/tsv/test_stream.rb
668
- - test/rbbt/test_association.rb
669
- - test/rbbt/hpc/test_batch.rb
670
- - test/rbbt/hpc/orchestrate/test_chains.rb
671
- - test/rbbt/hpc/orchestrate/test_rules.rb
672
- - test/rbbt/hpc/orchestrate/test_batches.rb
673
- - test/rbbt/hpc/test_slurm.rb
674
- - test/rbbt/hpc/test_orchestrate.rb
598
+ - test/rbbt/annotations/test_util.rb
675
599
  - test/rbbt/association/test_database.rb
600
+ - test/rbbt/association/test_index.rb
676
601
  - test/rbbt/association/test_item.rb
677
602
  - test/rbbt/association/test_open.rb
678
603
  - test/rbbt/association/test_util.rb
679
- - test/rbbt/association/test_index.rb
680
- - test/rbbt/test_knowledge_base.rb
681
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
604
+ - test/rbbt/entity/test_identifiers.rb
605
+ - test/rbbt/hpc/orchestrate/test_batches.rb
606
+ - test/rbbt/hpc/orchestrate/test_chains.rb
607
+ - test/rbbt/hpc/orchestrate/test_rules.rb
608
+ - test/rbbt/hpc/test_batch.rb
609
+ - test/rbbt/hpc/test_orchestrate.rb
610
+ - test/rbbt/hpc/test_slurm.rb
611
+ - test/rbbt/knowledge_base/test_enrichment.rb
612
+ - test/rbbt/knowledge_base/test_entity.rb
613
+ - test/rbbt/knowledge_base/test_query.rb
614
+ - test/rbbt/knowledge_base/test_registry.rb
615
+ - test/rbbt/knowledge_base/test_syndicate.rb
616
+ - test/rbbt/knowledge_base/test_traverse.rb
617
+ - test/rbbt/persist/test_tsv.rb
682
618
  - test/rbbt/persist/tsv/test_cdb.rb
619
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
620
+ - test/rbbt/persist/tsv/test_leveldb.rb
683
621
  - test/rbbt/persist/tsv/test_lmdb.rb
684
622
  - test/rbbt/persist/tsv/test_sharder.rb
685
- - test/rbbt/persist/tsv/test_leveldb.rb
686
623
  - test/rbbt/persist/tsv/test_tokyocabinet.rb
687
- - test/rbbt/persist/test_tsv.rb
688
- - test/rbbt/test_tsv.rb
624
+ - test/rbbt/resource/test_path.rb
689
625
  - test/rbbt/test_annotations.rb
626
+ - test/rbbt/test_association.rb
627
+ - test/rbbt/test_entity.rb
690
628
  - test/rbbt/test_fix_width_table.rb
691
- - test/rbbt/test_workflow.rb
692
- - test/rbbt/entity/test_identifiers.rb
693
- - test/rbbt/annotations/test_util.rb
694
629
  - test/rbbt/test_hpc.rb
630
+ - test/rbbt/test_knowledge_base.rb
695
631
  - test/rbbt/test_monitor.rb
632
+ - test/rbbt/test_packed_index.rb
696
633
  - test/rbbt/test_persist.rb
697
- - test/rbbt/knowledge_base/test_entity.rb
698
- - test/rbbt/knowledge_base/test_registry.rb
699
- - test/rbbt/knowledge_base/test_syndicate.rb
700
- - test/rbbt/knowledge_base/test_query.rb
701
- - test/rbbt/knowledge_base/test_enrichment.rb
702
- - test/rbbt/knowledge_base/test_traverse.rb
634
+ - test/rbbt/test_resource.rb
635
+ - test/rbbt/test_tsv.rb
636
+ - test/rbbt/test_workflow.rb
637
+ - test/rbbt/tsv/parallel/test_through.rb
638
+ - test/rbbt/tsv/parallel/test_traverse.rb
639
+ - test/rbbt/tsv/test_accessor.rb
640
+ - test/rbbt/tsv/test_attach.rb
641
+ - test/rbbt/tsv/test_change_id.rb
642
+ - test/rbbt/tsv/test_csv.rb
643
+ - test/rbbt/tsv/test_excel.rb
644
+ - test/rbbt/tsv/test_field_index.rb
645
+ - test/rbbt/tsv/test_filter.rb
646
+ - test/rbbt/tsv/test_index.rb
647
+ - test/rbbt/tsv/test_manipulate.rb
648
+ - test/rbbt/tsv/test_marshal.rb
649
+ - test/rbbt/tsv/test_matrix.rb
650
+ - test/rbbt/tsv/test_parallel.rb
651
+ - test/rbbt/tsv/test_parser.rb
652
+ - test/rbbt/tsv/test_stream.rb
653
+ - test/rbbt/tsv/test_util.rb
654
+ - test/rbbt/util/R/test_eval.rb
655
+ - test/rbbt/util/R/test_model.rb
656
+ - test/rbbt/util/R/test_plot.rb
657
+ - test/rbbt/util/concurrency/processes/test_socket.rb
658
+ - test/rbbt/util/concurrency/test_processes.rb
659
+ - test/rbbt/util/concurrency/test_threads.rb
660
+ - test/rbbt/util/log/test_progress.rb
661
+ - test/rbbt/util/misc/test_bgzf.rb
662
+ - test/rbbt/util/misc/test_communication.rb
663
+ - test/rbbt/util/misc/test_development.rb
664
+ - test/rbbt/util/misc/test_format.rb
665
+ - test/rbbt/util/misc/test_indiferent_hash.rb
666
+ - test/rbbt/util/misc/test_lock.rb
667
+ - test/rbbt/util/misc/test_multipart_payload.rb
668
+ - test/rbbt/util/misc/test_omics.rb
669
+ - test/rbbt/util/misc/test_pipes.rb
670
+ - test/rbbt/util/misc/test_serialize.rb
671
+ - test/rbbt/util/python/test_util.rb
672
+ - test/rbbt/util/simpleopt/test_get.rb
673
+ - test/rbbt/util/simpleopt/test_parse.rb
674
+ - test/rbbt/util/simpleopt/test_setup.rb
675
+ - test/rbbt/util/test_R.rb
676
+ - test/rbbt/util/test_chain_methods.rb
677
+ - test/rbbt/util/test_cmd.rb
678
+ - test/rbbt/util/test_colorize.rb
679
+ - test/rbbt/util/test_concurrency.rb
680
+ - test/rbbt/util/test_config.rb
681
+ - test/rbbt/util/test_excel2tsv.rb
682
+ - test/rbbt/util/test_filecache.rb
683
+ - test/rbbt/util/test_log.rb
684
+ - test/rbbt/util/test_migrate.rb
685
+ - test/rbbt/util/test_misc.rb
686
+ - test/rbbt/util/test_open.rb
687
+ - test/rbbt/util/test_procpath.rb
688
+ - test/rbbt/util/test_python.rb
689
+ - test/rbbt/util/test_semaphore.rb
690
+ - test/rbbt/util/test_simpleDSL.rb
691
+ - test/rbbt/util/test_simpleopt.rb
692
+ - test/rbbt/util/test_ssh.rb
693
+ - test/rbbt/util/test_tmpfile.rb
694
+ - test/rbbt/workflow/step/test_dependencies.rb
695
+ - test/rbbt/workflow/step/test_save_load_inputs.rb
696
+ - test/rbbt/workflow/test_doc.rb
697
+ - test/rbbt/workflow/test_remote_workflow.rb
698
+ - test/rbbt/workflow/test_schedule.rb
699
+ - test/rbbt/workflow/test_step.rb
700
+ - test/rbbt/workflow/test_task.rb
701
+ - test/rbbt/workflow/util/test_archive.rb
702
+ - test/rbbt/workflow/util/test_data.rb
703
+ - test/rbbt/workflow/util/test_orchestrator.rb
703
704
  - test/test_helper.rb