rbbt-util 5.36.0 → 5.37.0

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: d105d6c21ad018f28acf6a234feae8d81f327f3f94f228c01f118abed6c386f6
4
- data.tar.gz: 5c883e0611f02203d394ec02e448664efdc42361be04e9d873e9ba3f5e6cc92e
3
+ metadata.gz: 281f115df5158fada081c65b87e292e69e4f378b8353d6e2542b3c45db0c03f1
4
+ data.tar.gz: e9801707391c731a2a4b4ead8156cff82fdf30c4e769a8bed34d1d77185b447a
5
5
  SHA512:
6
- metadata.gz: 20a4bccdeb0c587041b7f20f09bda19949713fcb362911a249b08112399c09178f8e50b5ae90f390bd6cd1389b3c9a47b7374c4fc05a83b073f1d43bdfdc6611
7
- data.tar.gz: 1b3b112106b4ac1e261bcf1630ecaeea0ed27f1975aeead9694708241e9268fdac36da4f5b4be25c12288cb7f97b8b4163815b8d9010aba40f6f2434e654f99c
6
+ metadata.gz: 3da2876b28c245b27f32b6dbd00188bdeea498fb118ccab048fb5d72925548e5e89926dea6b6316573e9d95a570c07983109e0e09de92360ec89ab2aec088439
7
+ data.tar.gz: 0166d47c3198bfc4c636a1f47ac9be1d2a64b8d97a2836166b02d1ac17d46c2b835ad210953da586f15a98f8593e18f6010ebc07220e95da149dcabec44b33a9
@@ -28,6 +28,7 @@ class RbbtProcessQueue
28
28
 
29
29
 
30
30
  def dump(obj, stream)
31
+ obj.concurrent_stream = nil if obj.respond_to?(:concurrent_stream)
31
32
  case obj
32
33
  when Annotated
33
34
  payload = @serializer.dump(obj)
@@ -65,11 +65,7 @@ class RbbtProcessQueue
65
65
  Log.high "Worker #{Process.pid} leaving"
66
66
  rescue Exception
67
67
  Log.high "Worker #{Process.pid} had exception: #{$!.message}"
68
- Log.exception $!
69
- begin
70
- @callback_queue.push($!) if @callback_queue
71
- rescue
72
- end
68
+ @callback_queue.push($!) if @callback_queue
73
69
  Kernel.exit! -1
74
70
  ensure
75
71
  @callback_queue.close_write if @callback_queue
@@ -180,13 +180,15 @@ class RbbtProcessQueue
180
180
  rescue Exception
181
181
  Log.low "Process monitor exception [#{Process.pid}]: #{$!.message}"
182
182
  processes.each{|p| p.abort_and_join}
183
- Log.low "Processes aborted #{Process.pid}"
183
+ Log.low "Processes aborted for monitor #{Process.pid}"
184
184
  processes.clear
185
185
 
186
+ @manager_thread.report_on_exception = false
186
187
  @manager_thread.raise $! if @manager_thread.alive?
187
188
  raise Aborted, "Aborted monitor thread with exception"
188
189
  end
189
190
  end
191
+ @monitor_thread.report_on_exception = false
190
192
 
191
193
  RbbtSemaphore.post_semaphore(@sem)
192
194
 
@@ -215,33 +217,36 @@ class RbbtProcessQueue
215
217
  init_master
216
218
 
217
219
  RbbtSemaphore.synchronize(@sem) do
218
- @callback_thread = Thread.new do
219
- begin
220
- loop do
221
- p = @callback_queue.pop unless @callback_queue.cleaned
220
+ @callback_thread = Thread.new do
221
+ begin
222
+ loop do
223
+ p = @callback_queue.pop unless @callback_queue.cleaned
222
224
 
223
- if Exception === p or (Array === p and Exception === p.first)
224
- e = Array === p ? p.first : p
225
- Log.low "Callback recieved exception from worker: #{e.message}" unless Aborted === e or ClosedStream === e
226
- raise e
227
- end
225
+ if Exception === p or (Array === p and Exception === p.first)
226
+ e = Array === p ? p.first : p
227
+ Log.low "Callback recieved exception from worker: #{e.message}" unless Aborted === e or ClosedStream === e
228
+ raise e
229
+ end
228
230
 
229
- if @callback.arity == 0
230
- @callback.call
231
- else
232
- @callback.call p
231
+ if @callback.arity == 0
232
+ @callback.call
233
+ else
234
+ @callback.call p
235
+ end
233
236
  end
237
+ rescue ClosedStream
238
+ Log.low "Callback thread closing"
239
+ rescue Aborted
240
+ Log.low "Callback thread aborted"
241
+ raise $!
242
+ rescue Exception
243
+ Log.low "Exception captured in callback: #{$!.message}"
244
+ raise $!
234
245
  end
235
- rescue ClosedStream
236
- Log.low "Callback thread closing"
237
- rescue Aborted
238
- Log.low "Callback thread aborted"
239
- raise $!
240
- rescue Exception
241
- Log.low "Exception captured in callback: #{$!.message}"
242
- raise $!
243
- end
244
- end if @callback_queue
246
+ end if @callback_queue
247
+
248
+ @callback_thread.report_on_exception = false
249
+
245
250
  end
246
251
 
247
252
  end
@@ -343,9 +343,9 @@ module Misc
343
343
  end
344
344
  when Array
345
345
  if obj.length > HASH2MD5_MAX_ARRAY_LENGTH
346
- "[" << sample_large_obj(obj, HASH2MD5_MAX_ARRAY_LENGTH).collect{|v| obj2str(v)} * "," << "]"
346
+ "[" << sample_large_obj(obj, HASH2MD5_MAX_ARRAY_LENGTH).collect{|v| obj2str(v.nil? ? "" : v) } * "," << "]"
347
347
  else
348
- "[" << obj.collect{|v| obj2str(v) } * "," << "]"
348
+ "[" << obj.collect{|v| obj2str(v.nil? ? "" : v) } * "," << "]"
349
349
  end
350
350
  when TSV::Parser
351
351
  remove_long_items(obj)
@@ -72,6 +72,7 @@ module Workflow
72
72
  def setup_override_dependency(dep, workflow, task_name)
73
73
  return [] if dep == :skip || dep == 'skip'
74
74
 
75
+ unlocated = unlocated_override?(dep)
75
76
  dep = Workflow.load_step(dep) if not Step === dep
76
77
 
77
78
  dep.original_workflow ||= dep.workflow if dep.workflow
@@ -91,7 +92,7 @@ module Workflow
91
92
  end
92
93
 
93
94
  dep.task_name = task_name
94
- dep.overriden = dep.original_task_name.to_sym if dep.original_task_name
95
+ dep.overriden = dep.original_task_name.to_sym if dep.original_task_name && dep.original_task_name.to_s != task_name.to_s || ! unlocated
95
96
 
96
97
  dep.extend step_module
97
98
 
@@ -169,6 +170,16 @@ module Workflow
169
170
  else
170
171
 
171
172
  compute = options[:compute] if options
173
+ if options && options[:canfail]
174
+ compute = case compute
175
+ when nil
176
+ :canfail
177
+ when Array
178
+ compute + [:canfail]
179
+ else
180
+ [compute, :canfail]
181
+ end
182
+ end
172
183
 
173
184
  all_d = (real_dependencies + real_dependencies.flatten.collect{|d| d.rec_dependencies} ).flatten.compact.uniq
174
185
 
@@ -207,6 +218,16 @@ module Workflow
207
218
 
208
219
  options = {} if options.nil?
209
220
  compute = options[:compute]
221
+ if options[:canfail]
222
+ compute = case compute
223
+ when nil
224
+ :canfail
225
+ when Array
226
+ compute + [:canfail]
227
+ else
228
+ [compute, :canfail]
229
+ end
230
+ end
210
231
 
211
232
  options = IndiferentHash.setup(options.dup)
212
233
  dep = dependency.call jobname, _inputs.merge(options), real_dependencies
@@ -228,7 +249,8 @@ module Workflow
228
249
  task_info = d[:workflow].task_info(d[:task])
229
250
 
230
251
  _inputs = assign_dep_inputs({}, options.merge(d[:inputs] || {}), real_dependencies, task_info)
231
- job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
252
+ _jobname = d.include?(:jobname) ? d[:jobname] : jobname
253
+ job = d[:workflow]._job(d[:task], _jobname, _inputs)
232
254
  overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
233
255
  job
234
256
  end
@@ -250,8 +272,8 @@ module Workflow
250
272
  else
251
273
  task_info = (dep[:task] && dep[:workflow]) ? dep[:workflow].task_info(dep[:task]) : nil
252
274
  _inputs = assign_dep_inputs({}, dep[:inputs], real_dependencies, task_info)
253
- job = dep[:workflow]._job(dep[:task], dep[:jobname], _inputs)
254
- job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
275
+ _jobname = dep.include?(:jobname) ? dep[:jobname] : jobname
276
+ job = dep[:workflow]._job(dep[:task], _jobname, _inputs)
255
277
  overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
256
278
  job
257
279
  end
@@ -24,8 +24,8 @@ class RemoteWorkflow
24
24
  workflow, task, job, *rest = path.split("/")
25
25
 
26
26
  workflow_name = begin
27
- workflow = Kernel.const_get(workflow) if String === workflow
28
- workflow.respond_to?(:complete_name) ? workflow.complete_name : workflow
27
+ wf = Kernel.const_get(workflow) if String === workflow && ! workflow.empty?
28
+ wf.respond_to?(:complete_name) ? (wf.complete_name || workflow) : workflow
29
29
  rescue
30
30
  workflow
31
31
  end
@@ -188,9 +188,10 @@ job.clean
188
188
  # Open.write(file, new)
189
189
  # end
190
190
 
191
- paths = Dir.glob(File.join(dir, "*.as_step")).collect{|f| Open.read(f).strip }
191
+ files = Dir.glob(File.join(dir, "*.as_step"))
192
+ paths = files.collect{|f| Open.read(f).strip }
192
193
  new = Step.migrate(paths, :user, :target => server)
193
- paths.zip(new).each{|file,new| Open.write(file, new) }
194
+ files.zip(new).each{|file,new| Open.write(file, new) }
194
195
 
195
196
  CMD.cmd_log("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/; scp -r '#{dir}' #{server}:.rbbt/tmp/tmp-ssh_job_inputs/#{input_id}")
196
197
  end
@@ -229,10 +230,11 @@ job.clean
229
230
  job.input_dependencies.each do |dep|
230
231
  Log.medium "Producing #{dep.workflow}:#{dep.short_path} dependency for #{job.workflow}:#{job.short_path}"
231
232
  dep.produce
232
- end if produce_dependencies
233
+ end
233
234
 
234
235
  migrate_dependencies = job.rec_dependencies.select{|d| d.done? }.collect{|d| d.path }
235
- Log.medium "Migrating #{migrate_dependencies.length} dependencies to #{ server }"
236
+ migrate_dependencies += job.input_dependencies.select{|d| d.done? }.collect{|d| d.path }
237
+ Log.medium "Migrating #{migrate_dependencies.length} dependencies from #{job.path} to #{ server }"
236
238
  Step.migrate(migrate_dependencies, search_path, :target => server) if migrate_dependencies.any?
237
239
  end
238
240
 
@@ -52,6 +52,7 @@ class RemoteStep
52
52
  end
53
53
 
54
54
  def _run
55
+ RemoteWorkflow::SSH.upload_dependencies(self, @server)
55
56
  RemoteWorkflow::SSH.run_job(File.join(base_url, task.to_s), @input_id, @base_name)
56
57
  end
57
58
 
@@ -97,6 +98,18 @@ class RemoteStep
97
98
  _restart
98
99
  end
99
100
 
101
+ def abort
102
+ Log.warn "not implemented RemoteWorkflow::SSH.abort(@url, @input_id, @base_name)"
103
+ end
104
+
105
+ def input_dependencies
106
+ @input_dependencies ||= inputs.values.flatten.
107
+ select{|i| Step === i || (defined?(RemoteStep) && RemoteStep === i) } +
108
+ inputs.values.flatten.
109
+ select{|dep| Path === dep && Step === dep.resource }.
110
+ select{|dep| ! dep.resource.started? }. # Ignore input_deps already started
111
+ collect{|dep| dep.resource }
112
+ end
100
113
  end
101
114
  end
102
115
 
@@ -145,11 +145,12 @@ class Step
145
145
  end
146
146
 
147
147
  def input_dependencies
148
- @input_dependencies ||= (recursive_inputs.flatten.select{|i| Step === i } +
149
- recursive_inputs.flatten.
150
- select{|dep| Path === dep && Step === dep.resource }.
151
- select{|dep| ! dep.resource.started? }. # Ignore input_deps already started
152
- collect{|dep| dep.resource })
148
+ @input_dependencies ||= recursive_inputs.flatten.
149
+ select{|i| Step === i || (defined?(RemoteStep) && RemoteStep === i) } +
150
+ recursive_inputs.flatten.
151
+ select{|dep| Path === dep && Step === dep.resource }.
152
+ select{|dep| ! dep.resource.started? }. # Ignore input_deps already started
153
+ collect{|dep| dep.resource }
153
154
  end
154
155
 
155
156
  def execute_dependency(dependency, log = true)
@@ -260,6 +261,9 @@ class Step
260
261
  dep.produce
261
262
  rescue RbbtException
262
263
  Log.warn "Allowing failing of #{dep.path}: #{dep.messages.last if dep.messages}"
264
+ rescue Exception
265
+ Log.warn "Not Allowing failing of #{dep.path} because #{$!.class} not RbbtException"
266
+ raise $!
263
267
  end
264
268
  nil
265
269
  end
@@ -447,13 +451,15 @@ class Step
447
451
  compute_simple_dependencies = {}
448
452
  compute_last_deps = {}
449
453
  seen_paths = Set.new
450
- rec_dependencies.uniq.each do |step|
454
+ rec_dependencies.uniq.reverse.each do |step|
451
455
  next if seen_paths.include? step.path
452
456
  seen_paths << step.path
453
457
  next unless required_dep_paths.include? step.path
454
458
  required_seen_paths = seen_paths & required_dep_paths
455
459
 
456
- internal = step.inputs.select{|i| Step == i && required_paths.include?(i.path) && seen_paths.include?(i.path) }
460
+ inputs = step.inputs
461
+ inputs = inputs.values if Hash === inputs
462
+ internal = inputs.select{|i| i.respond_to?(:path) && required_seen_paths.include?(i.path) }.any?
457
463
 
458
464
  if ComputeDependency === step
459
465
  next if produced.include? step.path
@@ -466,9 +472,9 @@ class Step
466
472
  end
467
473
  else
468
474
  if internal
469
- simple_dependencies.prepend(step)
470
- else
471
475
  simple_dependencies << step
476
+ else
477
+ simple_dependencies.prepend(step)
472
478
  end
473
479
  end
474
480
  end
@@ -98,8 +98,10 @@ class Step
98
98
  old = Signal.trap("INT"){ Thread.current.raise Aborted }
99
99
  if @task.respond_to?(:exec_in)
100
100
  @task.exec_in((bindings || self), *@inputs)
101
- else
101
+ elsif @task
102
102
  (bindings || self).instance_exec *@inputs, &@task
103
+ else
104
+ raise DependencyError, "Dependency #{self.path} cannot be produced"
103
105
  end
104
106
  ensure
105
107
  Signal.trap("INT", old)
data/lib/rbbt/workflow.rb CHANGED
@@ -490,8 +490,10 @@ module Workflow
490
490
  end
491
491
  end
492
492
 
493
+ overriden = true if dependencies.select{|d| d.overriden && d.clean_name != d.name }.any?
494
+
493
495
  input_values = task.take_input_values(inputs)
494
- if real_inputs.empty? && Workflow::TAG != :inputs && ! overriden
496
+ if real_inputs.empty? && Workflow::TAG != :inputs && ! overriden #&& ! dependencies.select{|d| d.overriden && d.clean_name != d.name }.any?
495
497
  step_path = step_path taskname, jobname, [], [], extension
496
498
  else
497
499
  step_path = step_path taskname, jobname, input_values, dependencies, extension
@@ -428,15 +428,19 @@ begin
428
428
 
429
429
  def match_dependencies(queries, dependencies)
430
430
  queries = queries.collect{|q| q.include?("#") ? q.split("#") : q }
431
- dependencies.select do |dep|
432
- queries.select do |q|
431
+
432
+ matched = []
433
+ queries.each do |q|
434
+ matched += dependencies.select do |dep|
433
435
  if Array === q
434
436
  q.first == dep.workflow.to_s && q.last == dep.task_name.to_s
435
437
  else
436
438
  q.to_s == dep.task_name.to_s
437
439
  end
438
- end.any?
440
+ end
439
441
  end
442
+
443
+ matched
440
444
  end
441
445
 
442
446
  if server = options.delete(:relay)
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.36.0
4
+ version: 5.37.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-03-02 00:00:00.000000000 Z
11
+ date: 2023-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: progress-monitor
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: lockfile
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,34 +38,6 @@ dependencies:
52
38
  - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: spreadsheet
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubyXL
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: highline
85
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +80,6 @@ dependencies:
122
80
  - - ">="
123
81
  - !ruby/object:Gem::Version
124
82
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rest-client
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
83
  - !ruby/object:Gem::Dependency
140
84
  name: to_regexp
141
85
  requirement: !ruby/object:Gem::Requirement
@@ -613,113 +557,113 @@ required_rubygems_version: !ruby/object:Gem::Requirement
613
557
  - !ruby/object:Gem::Version
614
558
  version: '0'
615
559
  requirements: []
616
- rubygems_version: 3.1.2
560
+ rubygems_version: 3.1.4
617
561
  signing_key:
618
562
  specification_version: 4
619
563
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
620
564
  test_files:
621
- - test/test_helper.rb
622
- - test/rbbt/entity/test_identifiers.rb
623
- - test/rbbt/test_resource.rb
624
- - test/rbbt/test_association.rb
625
- - test/rbbt/hpc/test_orchestrate.rb
626
- - test/rbbt/hpc/test_slurm.rb
627
- - test/rbbt/hpc/orchestrate/test_batches.rb
628
- - test/rbbt/hpc/orchestrate/test_rules.rb
629
- - test/rbbt/hpc/orchestrate/test_chains.rb
630
- - test/rbbt/hpc/test_batch.rb
631
- - test/rbbt/persist/test_tsv.rb
632
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
633
- - test/rbbt/persist/tsv/test_lmdb.rb
634
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
635
- - test/rbbt/persist/tsv/test_cdb.rb
636
- - test/rbbt/persist/tsv/test_leveldb.rb
637
- - test/rbbt/persist/tsv/test_sharder.rb
638
- - test/rbbt/test_packed_index.rb
639
565
  - test/rbbt/test_entity.rb
640
- - test/rbbt/test_fix_width_table.rb
641
566
  - test/rbbt/workflow/test_remote_workflow.rb
642
- - test/rbbt/workflow/test_doc.rb
643
- - test/rbbt/workflow/step/test_save_load_inputs.rb
644
- - test/rbbt/workflow/step/test_dependencies.rb
645
- - test/rbbt/workflow/test_schedule.rb
646
567
  - test/rbbt/workflow/util/test_archive.rb
647
568
  - test/rbbt/workflow/util/test_orchestrator.rb
648
569
  - test/rbbt/workflow/util/test_data.rb
649
- - test/rbbt/workflow/test_task.rb
570
+ - test/rbbt/workflow/test_doc.rb
571
+ - test/rbbt/workflow/test_schedule.rb
650
572
  - test/rbbt/workflow/test_step.rb
651
- - test/rbbt/test_tsv.rb
652
- - test/rbbt/test_annotations.rb
653
- - test/rbbt/test_knowledge_base.rb
654
- - test/rbbt/util/test_migrate.rb
655
- - test/rbbt/util/test_simpleDSL.rb
656
- - test/rbbt/util/concurrency/processes/test_socket.rb
657
- - test/rbbt/util/concurrency/test_processes.rb
658
- - test/rbbt/util/concurrency/test_threads.rb
659
- - test/rbbt/util/test_filecache.rb
660
- - test/rbbt/util/simpleopt/test_get.rb
661
- - test/rbbt/util/simpleopt/test_parse.rb
662
- - test/rbbt/util/simpleopt/test_setup.rb
663
- - test/rbbt/util/test_misc.rb
664
- - test/rbbt/util/test_excel2tsv.rb
665
- - test/rbbt/util/test_semaphore.rb
666
- - test/rbbt/util/test_procpath.rb
667
- - test/rbbt/util/R/test_model.rb
668
- - test/rbbt/util/R/test_eval.rb
669
- - test/rbbt/util/R/test_plot.rb
670
- - test/rbbt/util/test_open.rb
671
- - test/rbbt/util/test_tmpfile.rb
672
- - test/rbbt/util/test_cmd.rb
673
- - test/rbbt/util/test_concurrency.rb
573
+ - test/rbbt/workflow/step/test_dependencies.rb
574
+ - test/rbbt/workflow/step/test_save_load_inputs.rb
575
+ - test/rbbt/workflow/test_task.rb
576
+ - test/rbbt/resource/test_path.rb
674
577
  - test/rbbt/util/test_colorize.rb
675
- - test/rbbt/util/test_config.rb
578
+ - test/rbbt/util/test_procpath.rb
676
579
  - test/rbbt/util/python/test_util.rb
677
- - test/rbbt/util/test_log.rb
678
- - test/rbbt/util/test_simpleopt.rb
679
- - test/rbbt/util/test_python.rb
680
- - test/rbbt/util/test_chain_methods.rb
681
- - test/rbbt/util/misc/test_omics.rb
682
- - test/rbbt/util/misc/test_lock.rb
683
- - test/rbbt/util/misc/test_multipart_payload.rb
684
- - test/rbbt/util/misc/test_bgzf.rb
685
580
  - test/rbbt/util/misc/test_development.rb
581
+ - test/rbbt/util/misc/test_omics.rb
582
+ - test/rbbt/util/misc/test_pipes.rb
686
583
  - test/rbbt/util/misc/test_serialize.rb
687
584
  - test/rbbt/util/misc/test_format.rb
688
585
  - test/rbbt/util/misc/test_communication.rb
689
- - test/rbbt/util/misc/test_pipes.rb
586
+ - test/rbbt/util/misc/test_lock.rb
587
+ - test/rbbt/util/misc/test_multipart_payload.rb
588
+ - test/rbbt/util/misc/test_bgzf.rb
589
+ - test/rbbt/util/test_concurrency.rb
590
+ - test/rbbt/util/test_cmd.rb
591
+ - test/rbbt/util/R/test_plot.rb
592
+ - test/rbbt/util/R/test_eval.rb
593
+ - test/rbbt/util/R/test_model.rb
594
+ - test/rbbt/util/test_config.rb
595
+ - test/rbbt/util/test_log.rb
596
+ - test/rbbt/util/test_simpleDSL.rb
690
597
  - test/rbbt/util/log/test_progress.rb
598
+ - test/rbbt/util/test_tmpfile.rb
691
599
  - test/rbbt/util/test_R.rb
692
- - test/rbbt/test_workflow.rb
693
- - test/rbbt/knowledge_base/test_entity.rb
694
- - test/rbbt/knowledge_base/test_enrichment.rb
695
- - test/rbbt/knowledge_base/test_traverse.rb
696
- - test/rbbt/knowledge_base/test_syndicate.rb
697
- - test/rbbt/knowledge_base/test_registry.rb
698
- - test/rbbt/knowledge_base/test_query.rb
699
- - test/rbbt/association/test_item.rb
700
- - test/rbbt/association/test_util.rb
701
- - test/rbbt/association/test_open.rb
702
- - test/rbbt/association/test_database.rb
703
- - test/rbbt/association/test_index.rb
704
- - test/rbbt/annotations/test_util.rb
705
- - test/rbbt/test_monitor.rb
706
- - test/rbbt/resource/test_path.rb
707
- - test/rbbt/test_hpc.rb
708
- - test/rbbt/test_persist.rb
600
+ - test/rbbt/util/test_excel2tsv.rb
601
+ - test/rbbt/util/test_misc.rb
602
+ - test/rbbt/util/test_open.rb
603
+ - test/rbbt/util/test_simpleopt.rb
604
+ - test/rbbt/util/simpleopt/test_parse.rb
605
+ - test/rbbt/util/simpleopt/test_setup.rb
606
+ - test/rbbt/util/simpleopt/test_get.rb
607
+ - test/rbbt/util/test_python.rb
608
+ - test/rbbt/util/test_filecache.rb
609
+ - test/rbbt/util/concurrency/test_processes.rb
610
+ - test/rbbt/util/concurrency/test_threads.rb
611
+ - test/rbbt/util/concurrency/processes/test_socket.rb
612
+ - test/rbbt/util/test_semaphore.rb
613
+ - test/rbbt/util/test_chain_methods.rb
614
+ - test/rbbt/util/test_migrate.rb
615
+ - test/rbbt/test_resource.rb
616
+ - test/rbbt/test_packed_index.rb
617
+ - test/rbbt/tsv/test_change_id.rb
618
+ - test/rbbt/tsv/test_attach.rb
619
+ - test/rbbt/tsv/test_filter.rb
620
+ - test/rbbt/tsv/test_marshal.rb
709
621
  - test/rbbt/tsv/test_parser.rb
710
622
  - test/rbbt/tsv/test_csv.rb
711
- - test/rbbt/tsv/test_manipulate.rb
623
+ - test/rbbt/tsv/test_accessor.rb
624
+ - test/rbbt/tsv/test_matrix.rb
712
625
  - test/rbbt/tsv/test_field_index.rb
713
626
  - test/rbbt/tsv/test_util.rb
714
- - test/rbbt/tsv/test_accessor.rb
715
- - test/rbbt/tsv/test_filter.rb
716
- - test/rbbt/tsv/test_stream.rb
627
+ - test/rbbt/tsv/test_index.rb
717
628
  - test/rbbt/tsv/test_parallel.rb
718
- - test/rbbt/tsv/test_marshal.rb
719
- - test/rbbt/tsv/test_matrix.rb
720
- - test/rbbt/tsv/test_attach.rb
629
+ - test/rbbt/tsv/test_manipulate.rb
721
630
  - test/rbbt/tsv/test_excel.rb
722
- - test/rbbt/tsv/test_change_id.rb
723
- - test/rbbt/tsv/test_index.rb
724
- - test/rbbt/tsv/parallel/test_traverse.rb
725
631
  - test/rbbt/tsv/parallel/test_through.rb
632
+ - test/rbbt/tsv/parallel/test_traverse.rb
633
+ - test/rbbt/tsv/test_stream.rb
634
+ - test/rbbt/test_association.rb
635
+ - test/rbbt/hpc/test_batch.rb
636
+ - test/rbbt/hpc/orchestrate/test_chains.rb
637
+ - test/rbbt/hpc/orchestrate/test_rules.rb
638
+ - test/rbbt/hpc/orchestrate/test_batches.rb
639
+ - test/rbbt/hpc/test_slurm.rb
640
+ - test/rbbt/hpc/test_orchestrate.rb
641
+ - test/rbbt/association/test_database.rb
642
+ - test/rbbt/association/test_item.rb
643
+ - test/rbbt/association/test_open.rb
644
+ - test/rbbt/association/test_util.rb
645
+ - test/rbbt/association/test_index.rb
646
+ - test/rbbt/test_knowledge_base.rb
647
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
648
+ - test/rbbt/persist/tsv/test_cdb.rb
649
+ - test/rbbt/persist/tsv/test_lmdb.rb
650
+ - test/rbbt/persist/tsv/test_sharder.rb
651
+ - test/rbbt/persist/tsv/test_leveldb.rb
652
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
653
+ - test/rbbt/persist/test_tsv.rb
654
+ - test/rbbt/test_tsv.rb
655
+ - test/rbbt/test_annotations.rb
656
+ - test/rbbt/test_fix_width_table.rb
657
+ - test/rbbt/test_workflow.rb
658
+ - test/rbbt/entity/test_identifiers.rb
659
+ - test/rbbt/annotations/test_util.rb
660
+ - test/rbbt/test_hpc.rb
661
+ - test/rbbt/test_monitor.rb
662
+ - test/rbbt/test_persist.rb
663
+ - test/rbbt/knowledge_base/test_entity.rb
664
+ - test/rbbt/knowledge_base/test_registry.rb
665
+ - test/rbbt/knowledge_base/test_syndicate.rb
666
+ - test/rbbt/knowledge_base/test_query.rb
667
+ - test/rbbt/knowledge_base/test_enrichment.rb
668
+ - test/rbbt/knowledge_base/test_traverse.rb
669
+ - test/test_helper.rb