rbbt-util 5.32.0 → 5.32.6

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: ef9271207cbe69c725a4ab3a8553295d3b68e5f04ec1bfd25ad4654f162ed9cb
4
- data.tar.gz: '087009c9ac6b4fee6d9fa7bceb003e050a0cc1e73f96987ec792c07388760633'
3
+ metadata.gz: 2bc1c3443b09a4274a030b64479091e506ed1e165371d999eb154b750b2806b3
4
+ data.tar.gz: 83d0ae91ee88ed3283985b5d7101759bbb45db37fbb54271bc7f16fae8ab4f52
5
5
  SHA512:
6
- metadata.gz: b031c1143992b4c75eeeabcb231d656af2927a5bc46a0ea3527c4c90b7ffcc5eb44b0ec02ef9e31d4879fcf2b3192165ba5b22cd1978dc5250eec355f2556bdc
7
- data.tar.gz: eb43875132a5f4ddc7ff9ae5dcaed7677c6bff84a4d61454cad9a83361d2a3dd63432cd5b28c656cd9e7bb589b8517bbdd3b57c0fa370527724d3ae55810b0cb
6
+ metadata.gz: 0b83533d504d6d66b06083a7f19a689e9b3f82fefbc26278d9bd9af0efbdfb010f87cc609bf90396bb17257a643715e335ac8127f9ff1f11ccdd52f639b77ca8
7
+ data.tar.gz: a4b93ca7d481120edde1d65f529984e652c261f365c67bea6d1c463d360733006d29486d3851d0b071ba2005cb90cf71382eb5665c7d4e1828a25f322b570ce7
data/lib/rbbt/hpc/lsf.rb CHANGED
@@ -8,7 +8,7 @@ module HPC
8
8
  def self.batch_system_variables
9
9
  <<-EOF
10
10
  let TOTAL_PROCESORS="$(cat /proc/cpuinfo|grep ^processor |wc -l)"
11
- let MAX_MEMORY_DEFAULT="$(grep MemTotal /proc/meminfo|grep -o "[[:digit:]]*") / ( (1024 * $TOTAL_PROCESORS) / $SLURM_CPUS_PER_TASK )"
11
+ let MAX_MEMORY_DEFAULT="$(grep MemTotal /proc/meminfo|grep -o "[[:digit:]]*") / ( (1024 * $TOTAL_PROCESORS) / $LSB_MAX_NUM_PROCESSORS )"
12
12
  [ ! -z $LSB_MAX_MEM_RUSAGE ] && let MAX_MEMORY="$LSB_MAX_MEM_RUSAGE" || MAX_MEMORY="$MAX_MEMORY_DEFAULT"
13
13
  export MAX_MEMORY_DEFAULT
14
14
  export MAX_MEMORY
@@ -132,7 +132,7 @@ module Persist
132
132
 
133
133
  def read_lock
134
134
  read if closed?
135
- if read?
135
+ if read? || write?
136
136
  return yield
137
137
  end
138
138
 
data/lib/rbbt/resource.rb CHANGED
@@ -6,6 +6,7 @@ require 'set'
6
6
 
7
7
 
8
8
  module Resource
9
+ class ResourceNotFound < RbbtException; end
9
10
 
10
11
  class << self
11
12
  attr_accessor :lock_dir
@@ -154,16 +155,18 @@ module Resource
154
155
  rake_dir, content = rake_for(path)
155
156
  rake_dir = Path.setup(rake_dir.dup, self.pkgdir, self)
156
157
  else
157
- begin
158
- if path !~ /\.(gz|bgz)$/
158
+ if path !~ /\.(gz|bgz)$/
159
+ begin
160
+ produce(path.annotate(path + '.gz'), force)
161
+ rescue ResourceNotFound
159
162
  begin
160
- produce(path.annotate(path + '.gz'), force)
161
- rescue
162
163
  produce(path.annotate(path + '.bgz'), force)
164
+ rescue ResourceNotFound
165
+ raise ResourceNotFound, "Resource is missing and does not seem to be claimed: #{ self } -- #{ path } "
163
166
  end
164
167
  end
165
- rescue
166
- raise "Resource is missing and does not seem to be claimed: #{ self } -- #{ path } "
168
+ else
169
+ raise ResourceNotFound, "Resource is missing and does not seem to be claimed: #{ self } -- #{ path } "
167
170
  end
168
171
  end
169
172
 
@@ -174,7 +177,7 @@ module Resource
174
177
  end
175
178
 
176
179
  if type and not File.exist?(final_path) or force
177
- Log.medium "Producing: #{ final_path }"
180
+ Log.medium "Producing: (#{self.to_s}) #{ final_path }"
178
181
  lock_filename = Persist.persistence_path(final_path, {:dir => Resource.lock_dir})
179
182
 
180
183
  Misc.lock lock_filename do
data/lib/rbbt/tsv/csv.rb CHANGED
@@ -8,6 +8,7 @@ module TSV
8
8
  noheaders = ! headers
9
9
 
10
10
  type = options.delete :type
11
+ cast = options.delete :cast
11
12
  merge = options.delete :merge
12
13
  key_field = options.delete :key_field
13
14
  fields = options.delete :fields
@@ -46,6 +47,10 @@ module TSV
46
47
  else
47
48
  key, *values = row
48
49
  end
50
+
51
+ if cast
52
+ values = values.collect{|v| v.send cast }
53
+ end
49
54
 
50
55
  case type
51
56
  when :double, :flat
@@ -40,7 +40,7 @@ module TSV
40
40
  # Process fields line
41
41
 
42
42
  preamble << line if line
43
- while line and (TrueClass === @header_hash or (String === @header_hash and Misc.fixutf8(line) =~ /^#{@header_hash}/ ))
43
+ while line && (TrueClass === @header_hash || (String === @header_hash && Misc.fixutf8(line) =~ /^#{@header_hash}/ ))
44
44
  @fields = line.split(@sep, -1)
45
45
  @key_field = @fields.shift
46
46
  @key_field = @key_field[(0 + header_hash.length)..-1] if String === @header_hash
@@ -49,7 +49,7 @@ module TSV
49
49
  line = (@header_hash != "" ? stream.gets : nil)
50
50
  line = Misc.fixutf8 line.chomp if line
51
51
  preamble << line if line
52
- @header_hash = false if TrueClass === @header_hash
52
+ @header_hash = false if TrueClass === @header_hash || @header_hash == ""
53
53
  end
54
54
 
55
55
  @preamble = preamble[0..-3] * "\n"
@@ -56,6 +56,7 @@ module TSV
56
56
  preambles = []
57
57
 
58
58
  streams = streams.collect do |stream|
59
+
59
60
  parser = TSV::Parser.new stream, options.dup
60
61
  sfields = parser.fields
61
62
 
@@ -43,7 +43,7 @@ module Misc
43
43
  File.mkfifo path
44
44
  yield path
45
45
  ensure
46
- FileUtils.rm path if erase
46
+ FileUtils.rm path if erase && File.exists?(path)
47
47
  end
48
48
  end
49
49
 
data/lib/rbbt/workflow.rb CHANGED
@@ -187,17 +187,21 @@ module Workflow
187
187
  clean_name = wf_name.sub(/::.*/,'')
188
188
  Log.info{"Looking for '#{wf_name}' in '#{clean_name}'"}
189
189
  require_workflow clean_name
190
- return Misc.string2const Misc.camel_case(wf_name)
190
+ workflow = Misc.string2const Misc.camel_case(wf_name)
191
+ workflow.load_documentation
192
+ return workflow
191
193
  end
192
194
 
193
195
  Log.high{"Loading workflow #{wf_name}"}
194
196
  require_local_workflow(wf_name) or
195
197
  (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 }")
196
- begin
197
- Misc.string2const Misc.camel_case(wf_name)
198
- rescue
199
- Workflow.workflows.last || true
200
- end
198
+ workflow = begin
199
+ Misc.string2const Misc.camel_case(wf_name)
200
+ rescue
201
+ Workflow.workflows.last || true
202
+ end
203
+ workflow.load_documentation
204
+ workflow
201
205
  end
202
206
 
203
207
  attr_accessor :description
@@ -596,6 +600,17 @@ module Workflow
596
600
  true
597
601
  end
598
602
  end
603
+
604
+ if ! Open.exists?(step.info_file)
605
+ begin
606
+ workflow = step.path.split("/")[-3]
607
+ task_name = step.path.split("/")[-2]
608
+ workflow = Kernel.const_get workflow
609
+ step.task = workflow.tasks[task_name.to_sym]
610
+ rescue
611
+ Log.exception $!
612
+ end
613
+ end
599
614
  step
600
615
  end
601
616
 
@@ -74,6 +74,7 @@ module Workflow
74
74
  def dep_task(name, workflow, oname, *rest, &block)
75
75
  dep(workflow, oname, *rest, &block)
76
76
  extension workflow.tasks[oname].extension if workflow.tasks.include?(oname) unless @extension
77
+ returns workflow.tasks[oname].result_description if workflow.tasks.include?(oname) unless @result_description
77
78
  task name do
78
79
  raise RbbtException, "dependency not found in dep_task" if dependencies.empty?
79
80
  dep = dependencies.last
@@ -45,10 +45,25 @@ module Workflow
45
45
  end
46
46
 
47
47
  def load_documentation
48
- @documentation = Workflow.parse_workflow_doc documentation_markdown
48
+ return if @documentation
49
+ @documentation ||= Workflow.parse_workflow_doc documentation_markdown
49
50
  @documentation[:tasks].each do |task, description|
50
- raise "Documentation for #{ task }, but not a #{ self.to_s } task" unless tasks.include? task.to_sym
51
- tasks[task.to_sym].description = description
51
+ if task.include? "#"
52
+ workflow, task = task.split("#")
53
+ workflow = begin
54
+ Kernel.const_get workflow
55
+ rescue
56
+ next
57
+ end
58
+ else
59
+ workflow = self
60
+ end
61
+
62
+ if workflow.tasks.include? task.to_sym
63
+ workflow.tasks[task.to_sym].description = description
64
+ else
65
+ Log.low "Documentation for #{ task }, but not a #{ workflow.to_s } task"
66
+ end
52
67
  end
53
68
  end
54
69
 
@@ -97,6 +97,7 @@ class Step
97
97
  Open.ln_s(value.path, path)
98
98
  when type.to_s == "file"
99
99
  if String === value && File.exists?(value)
100
+ value = File.expand_path(value)
100
101
  Open.ln_s(value, path)
101
102
  else
102
103
  value = value.collect{|v| v = "#{v}" if Path === v; v }if Array === value
@@ -122,7 +122,7 @@ module Workflow
122
122
  last = _prov_tasks(workflow.dep_tree(task_name))
123
123
 
124
124
  if child
125
- description << "->" << task_name.to_s
125
+ description << "-> " << task_name.to_s
126
126
  elsif first
127
127
  description << "" << task_name.to_s
128
128
  else
@@ -198,7 +198,7 @@ module Workflow
198
198
  puts Misc.format_definition_list_item(name.to_s, description, Log.terminal_width, 20, :yellow)
199
199
 
200
200
  prov_string = prov_string(dep_tree(name))
201
- puts Log.color :blue, " ->" + prov_string if prov_string && ! prov_string.empty?
201
+ puts Misc.format_paragraph Log.color(:blue, "-> " + prov_string) if prov_string && ! prov_string.empty?
202
202
  end
203
203
 
204
204
  else
@@ -1,6 +1,6 @@
1
1
  class Step
2
2
 
3
- MAIN_RSYNC_ARGS="-avztAXHP"
3
+ MAIN_RSYNC_ARGS="-avztAXHP --copy-links"
4
4
 
5
5
  def self.link_job(path, target_dir, task = nil, workflow = nil)
6
6
  Path.setup(target_dir)
@@ -10,6 +10,9 @@ module Workflow
10
10
  started = job.info[:started]
11
11
  ddone = job.info[:done]
12
12
 
13
+ started = Time.parse started if String === started
14
+ ddone = Time.parse ddone if String === ddone
15
+
13
16
  code = [job.workflow, job.task_name].compact.collect{|s| s.to_s} * " · "
14
17
  code = job.name + " - " + code
15
18
 
@@ -70,8 +73,8 @@ module Workflow
70
73
 
71
74
  start = data.column("Start.second").values.flatten.collect{|v| v.to_f}.min
72
75
  eend = data.column("End.second").values.flatten.collect{|v| v.to_f}.max
73
- total = eend - start
74
- Log.info "Total time elapsed: #{total} seconds"
76
+ total = eend - start unless eend.nil? || start.nil?
77
+ Log.info "Total time elapsed: #{total} seconds" if total
75
78
 
76
79
  data
77
80
  end
@@ -140,7 +143,13 @@ rbbt.png_plot('#{plot}', 'plot(timeline)', width=#{width}, height=#{height}, poi
140
143
  info = tasks_info[task] ||= IndiferentHash.setup({})
141
144
  dep_info = IndiferentHash.setup(dep.info)
142
145
 
143
- time = dep_info[:done] - dep_info[:started]
146
+ ddone = dep_info[:done]
147
+ started = dep_info[:started]
148
+
149
+ started = Time.parse started if String === started
150
+ ddone = Time.parse ddone if String === ddone
151
+
152
+ time = ddone - started
144
153
  info[:time] ||= []
145
154
  info[:time] << time
146
155
 
@@ -178,19 +187,25 @@ rbbt.png_plot('#{plot}', 'plot(timeline)', width=#{width}, height=#{height}, poi
178
187
  jobs = []
179
188
  seed_jobs.each do |step|
180
189
  jobs += step.rec_dependencies + [step]
181
-
182
190
  step.info[:archived_info].each do |path,ainfo|
183
191
  archived_step = Step.new path
184
- class << archived_step
185
- self
186
- end.define_method :info do
192
+
193
+ archived_step.define_singleton_method :info do
187
194
  ainfo
188
195
  end
196
+
197
+ #class << archived_step
198
+ # self
199
+ #end.define_method :info do
200
+ # ainfo
201
+ #end
202
+
189
203
  jobs << archived_step
190
204
  end if step.info[:archived_info]
205
+
191
206
  end
192
207
 
193
- jobs = jobs.uniq.sort_by{|job| t = job.info[:done]; t || Open.mtime(job.path) || 0 }
208
+ jobs = jobs.uniq.sort_by{|job| t = job.info[:started] || Open.mtime(job.path) || Time.now; Time === t ? t : Time.parse(t) }
194
209
 
195
210
  data = trace_job_times(jobs, options[:fix_gap])
196
211
 
@@ -200,10 +215,10 @@ rbbt.png_plot('#{plot}', 'plot(timeline)', width=#{width}, height=#{height}, poi
200
215
 
201
216
  raise "No jobs to process" if data.size == 0
202
217
 
203
- plot, size, width, height = options.values_at :plot, :width, :height
218
+ plot, size, width, height = options.values_at :plot, :size, :width, :height
204
219
 
205
220
  size = 800 if size.nil?
206
- width = size * 2 if width.nil?
221
+ width = size.to_i * 2 if width.nil?
207
222
  height = size if height.nil?
208
223
 
209
224
  plot_trace_job_times(data, plot, width, height) if plot
@@ -94,12 +94,12 @@ real_paths.each do |source|
94
94
  end
95
95
 
96
96
  if options[:target]
97
- target_path = [options[:target], target] * ":"
97
+ target_path = [options[:target], "'" + target + "'"] * ":"
98
98
  else
99
- target_path = target
99
+ target_path = "'" + target + "'"
100
100
  end
101
101
 
102
- cmd = "rsync -avztAXHP --copy-unsafe-links #{test_str} #{excludes_str} #{source} #{target_path} #{other * " "}"
102
+ cmd = "rsync -avztAXHP --copy-unsafe-links #{test_str} #{excludes_str} '#{source}' #{target_path} #{other * " "}"
103
103
 
104
104
  cmd << " && rm -Rf #{source}" if options[:delete]
105
105
 
@@ -8,9 +8,11 @@ $0 = "rbbt #{$previous_commands*" "} #{ File.basename(__FILE__) }" if $previous_
8
8
 
9
9
  options = SOPT.setup <<EOF
10
10
 
11
- Make a job forget all its dependencies and archive their meta-data
11
+ Make a job forget its dependencies and archive their meta-data
12
12
 
13
- $ #{$0} [options] <job_path>
13
+ $ #{$0} [options] <job_path> [<task_name>|<workflow>#<task_name>] ...
14
+
15
+ Specific dependencies can be specified as . Otherwise, all are forgoten.
14
16
 
15
17
  -h--help Print this help
16
18
  -p--purge Purge dependencies
@@ -26,7 +28,7 @@ if options[:help]
26
28
  exit 0
27
29
  end
28
30
 
29
- path = ARGV[0]
31
+ path, *remove = ARGV
30
32
 
31
33
  raise ParameterException, "No path given" if path.nil?
32
34
  step = Workflow.load_step path
@@ -34,10 +36,20 @@ step = Workflow.load_step path
34
36
  step.archive_deps
35
37
  step.copy_files_dir
36
38
  dependencies = step.dependencies
37
- step.set_info :dependencies, []
38
39
 
39
- if options[:purge]
40
+ if remove && remove.any?
41
+ remove_paths = dependencies.select do |dep|
42
+ remove.include?(dep.task_name) || remove.include?([dep.workflow.to_s, dep.task_name] * "#")
43
+ end.collect{|dep| dep.path }
44
+ else
45
+ remove_paths = dependencies.collect{|dep| dep.path }
46
+ end
47
+
48
+ step.set_info :dependencies, step.info[:dependencies].reject{|info| remove_paths.include? info.last}
49
+
50
+ if options[:purge] || options[:recursive_purge]
40
51
  dependencies.each do |dependency|
52
+ next unless remove_paths.include? dependency.path
41
53
  Step.purge(dependency.path, options[:recursive_purge])
42
54
  end
43
55
  end
@@ -51,7 +51,7 @@ class TestPersistTSVTC < Test::Unit::TestCase
51
51
  end
52
52
  end
53
53
 
54
- def test_annotation_persist_with_repeitions
54
+ def test_annotation_persist_with_repetitions
55
55
  TmpFile.with_file do |tmp|
56
56
  entity1 = "Entity 1"
57
57
  entity2 = "Entity 2"
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.32.0
4
+ version: 5.32.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-15 00:00:00.000000000 Z
11
+ date: 2021-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -542,7 +542,7 @@ homepage: http://github.com/mikisvaz/rbbt-util
542
542
  licenses:
543
543
  - MIT
544
544
  metadata: {}
545
- post_install_message:
545
+ post_install_message:
546
546
  rdoc_options: []
547
547
  require_paths:
548
548
  - lib
@@ -557,101 +557,102 @@ required_rubygems_version: !ruby/object:Gem::Requirement
557
557
  - !ruby/object:Gem::Version
558
558
  version: '0'
559
559
  requirements: []
560
- rubygems_version: 3.1.4
561
- signing_key:
560
+ rubyforge_project:
561
+ rubygems_version: 2.7.6
562
+ signing_key:
562
563
  specification_version: 4
563
564
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
564
565
  test_files:
566
+ - test/test_helper.rb
567
+ - test/rbbt/entity/test_identifiers.rb
568
+ - test/rbbt/test_resource.rb
569
+ - test/rbbt/test_association.rb
570
+ - test/rbbt/hpc/test_slurm.rb
571
+ - test/rbbt/hpc/test_batch.rb
572
+ - test/rbbt/persist/test_tsv.rb
573
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
574
+ - test/rbbt/persist/tsv/test_lmdb.rb
575
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
576
+ - test/rbbt/persist/tsv/test_cdb.rb
577
+ - test/rbbt/persist/tsv/test_leveldb.rb
578
+ - test/rbbt/persist/tsv/test_sharder.rb
579
+ - test/rbbt/test_packed_index.rb
565
580
  - test/rbbt/test_entity.rb
581
+ - test/rbbt/test_fix_width_table.rb
566
582
  - test/rbbt/workflow/test_remote_workflow.rb
567
- - test/rbbt/workflow/util/test_orchestrator.rb
568
583
  - test/rbbt/workflow/test_doc.rb
569
- - test/rbbt/workflow/test_schedule.rb
570
- - test/rbbt/workflow/test_step.rb
571
584
  - test/rbbt/workflow/step/test_dependencies.rb
585
+ - test/rbbt/workflow/test_schedule.rb
586
+ - test/rbbt/workflow/util/test_orchestrator.rb
572
587
  - test/rbbt/workflow/test_task.rb
573
- - test/rbbt/resource/test_path.rb
574
- - test/rbbt/util/test_colorize.rb
588
+ - test/rbbt/workflow/test_step.rb
589
+ - test/rbbt/test_tsv.rb
590
+ - test/rbbt/test_annotations.rb
591
+ - test/rbbt/test_knowledge_base.rb
592
+ - test/rbbt/util/test_simpleDSL.rb
593
+ - test/rbbt/util/concurrency/processes/test_socket.rb
594
+ - test/rbbt/util/concurrency/test_processes.rb
595
+ - test/rbbt/util/concurrency/test_threads.rb
596
+ - test/rbbt/util/test_filecache.rb
597
+ - test/rbbt/util/simpleopt/test_get.rb
598
+ - test/rbbt/util/simpleopt/test_parse.rb
599
+ - test/rbbt/util/simpleopt/test_setup.rb
600
+ - test/rbbt/util/test_misc.rb
601
+ - test/rbbt/util/test_excel2tsv.rb
602
+ - test/rbbt/util/test_semaphore.rb
575
603
  - test/rbbt/util/test_procpath.rb
576
- - test/rbbt/util/misc/test_development.rb
577
- - test/rbbt/util/misc/test_omics.rb
578
- - test/rbbt/util/misc/test_pipes.rb
579
- - test/rbbt/util/misc/test_format.rb
580
- - test/rbbt/util/misc/test_lock.rb
581
- - test/rbbt/util/misc/test_multipart_payload.rb
582
- - test/rbbt/util/misc/test_bgzf.rb
583
- - test/rbbt/util/test_concurrency.rb
584
- - test/rbbt/util/test_cmd.rb
585
- - test/rbbt/util/R/test_plot.rb
586
- - test/rbbt/util/R/test_eval.rb
587
604
  - test/rbbt/util/R/test_model.rb
605
+ - test/rbbt/util/R/test_eval.rb
606
+ - test/rbbt/util/R/test_plot.rb
607
+ - test/rbbt/util/test_open.rb
608
+ - test/rbbt/util/test_tmpfile.rb
609
+ - test/rbbt/util/test_cmd.rb
610
+ - test/rbbt/util/test_concurrency.rb
611
+ - test/rbbt/util/test_colorize.rb
588
612
  - test/rbbt/util/test_config.rb
589
613
  - test/rbbt/util/test_log.rb
590
- - test/rbbt/util/test_simpleDSL.rb
591
- - test/rbbt/util/log/test_progress.rb
592
- - test/rbbt/util/test_tmpfile.rb
593
- - test/rbbt/util/test_R.rb
594
- - test/rbbt/util/test_excel2tsv.rb
595
- - test/rbbt/util/test_misc.rb
596
- - test/rbbt/util/test_open.rb
597
614
  - test/rbbt/util/test_simpleopt.rb
598
- - test/rbbt/util/simpleopt/test_parse.rb
599
- - test/rbbt/util/simpleopt/test_setup.rb
600
- - test/rbbt/util/simpleopt/test_get.rb
601
615
  - test/rbbt/util/test_python.rb
602
- - test/rbbt/util/test_filecache.rb
603
- - test/rbbt/util/concurrency/test_processes.rb
604
- - test/rbbt/util/concurrency/test_threads.rb
605
- - test/rbbt/util/concurrency/processes/test_socket.rb
606
- - test/rbbt/util/test_semaphore.rb
607
616
  - test/rbbt/util/test_chain_methods.rb
608
- - test/rbbt/test_resource.rb
609
- - test/rbbt/test_packed_index.rb
610
- - test/rbbt/tsv/test_change_id.rb
611
- - test/rbbt/tsv/test_attach.rb
612
- - test/rbbt/tsv/test_filter.rb
617
+ - test/rbbt/util/misc/test_omics.rb
618
+ - test/rbbt/util/misc/test_lock.rb
619
+ - test/rbbt/util/misc/test_multipart_payload.rb
620
+ - test/rbbt/util/misc/test_bgzf.rb
621
+ - test/rbbt/util/misc/test_development.rb
622
+ - test/rbbt/util/misc/test_format.rb
623
+ - test/rbbt/util/misc/test_pipes.rb
624
+ - test/rbbt/util/log/test_progress.rb
625
+ - test/rbbt/util/test_R.rb
626
+ - test/rbbt/test_workflow.rb
627
+ - test/rbbt/knowledge_base/test_entity.rb
628
+ - test/rbbt/knowledge_base/test_enrichment.rb
629
+ - test/rbbt/knowledge_base/test_traverse.rb
630
+ - test/rbbt/knowledge_base/test_syndicate.rb
631
+ - test/rbbt/knowledge_base/test_registry.rb
632
+ - test/rbbt/knowledge_base/test_query.rb
633
+ - test/rbbt/association/test_item.rb
634
+ - test/rbbt/association/test_util.rb
635
+ - test/rbbt/association/test_open.rb
636
+ - test/rbbt/association/test_database.rb
637
+ - test/rbbt/association/test_index.rb
638
+ - test/rbbt/annotations/test_util.rb
639
+ - test/rbbt/test_monitor.rb
640
+ - test/rbbt/resource/test_path.rb
641
+ - test/rbbt/test_hpc.rb
642
+ - test/rbbt/test_persist.rb
613
643
  - test/rbbt/tsv/test_parser.rb
614
644
  - test/rbbt/tsv/test_csv.rb
615
- - test/rbbt/tsv/test_accessor.rb
616
- - test/rbbt/tsv/test_matrix.rb
645
+ - test/rbbt/tsv/test_manipulate.rb
617
646
  - test/rbbt/tsv/test_field_index.rb
618
647
  - test/rbbt/tsv/test_util.rb
619
- - test/rbbt/tsv/test_index.rb
648
+ - test/rbbt/tsv/test_accessor.rb
649
+ - test/rbbt/tsv/test_filter.rb
650
+ - test/rbbt/tsv/test_stream.rb
620
651
  - test/rbbt/tsv/test_parallel.rb
621
- - test/rbbt/tsv/test_manipulate.rb
652
+ - test/rbbt/tsv/test_matrix.rb
653
+ - test/rbbt/tsv/test_attach.rb
622
654
  - test/rbbt/tsv/test_excel.rb
623
- - test/rbbt/tsv/parallel/test_through.rb
655
+ - test/rbbt/tsv/test_change_id.rb
656
+ - test/rbbt/tsv/test_index.rb
624
657
  - test/rbbt/tsv/parallel/test_traverse.rb
625
- - test/rbbt/tsv/test_stream.rb
626
- - test/rbbt/test_association.rb
627
- - test/rbbt/hpc/test_batch.rb
628
- - test/rbbt/hpc/test_slurm.rb
629
- - test/rbbt/association/test_database.rb
630
- - test/rbbt/association/test_item.rb
631
- - test/rbbt/association/test_open.rb
632
- - test/rbbt/association/test_util.rb
633
- - test/rbbt/association/test_index.rb
634
- - test/rbbt/test_knowledge_base.rb
635
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
636
- - test/rbbt/persist/tsv/test_cdb.rb
637
- - test/rbbt/persist/tsv/test_lmdb.rb
638
- - test/rbbt/persist/tsv/test_sharder.rb
639
- - test/rbbt/persist/tsv/test_leveldb.rb
640
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
641
- - test/rbbt/persist/test_tsv.rb
642
- - test/rbbt/test_tsv.rb
643
- - test/rbbt/test_annotations.rb
644
- - test/rbbt/test_fix_width_table.rb
645
- - test/rbbt/test_workflow.rb
646
- - test/rbbt/entity/test_identifiers.rb
647
- - test/rbbt/annotations/test_util.rb
648
- - test/rbbt/test_hpc.rb
649
- - test/rbbt/test_monitor.rb
650
- - test/rbbt/test_persist.rb
651
- - test/rbbt/knowledge_base/test_entity.rb
652
- - test/rbbt/knowledge_base/test_registry.rb
653
- - test/rbbt/knowledge_base/test_syndicate.rb
654
- - test/rbbt/knowledge_base/test_query.rb
655
- - test/rbbt/knowledge_base/test_enrichment.rb
656
- - test/rbbt/knowledge_base/test_traverse.rb
657
- - test/test_helper.rb
658
+ - test/rbbt/tsv/parallel/test_through.rb