rbbt-util 5.32.10 → 5.32.11
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 +4 -4
- data/bin/rbbt +1 -0
- data/lib/rbbt/hpc/batch.rb +23 -7
- data/lib/rbbt/hpc/slurm.rb +27 -12
- data/lib/rbbt/resource.rb +51 -49
- data/lib/rbbt/tsv/csv.rb +2 -2
- data/lib/rbbt/util/cmd.rb +40 -18
- data/lib/rbbt/util/simpleDSL.rb +4 -4
- data/lib/rbbt/workflow.rb +20 -2
- data/lib/rbbt/workflow/accessor.rb +1 -1
- data/lib/rbbt/workflow/step.rb +37 -6
- data/lib/rbbt/workflow/step/accessor.rb +2 -2
- data/share/rbbt_commands/hpc/list +2 -2
- data/share/rbbt_commands/hpc/orchestrate +3 -0
- data/share/rbbt_commands/hpc/task +3 -0
- data/share/rbbt_commands/lsf/list +2 -2
- data/share/rbbt_commands/lsf/orchestrate +3 -0
- data/share/rbbt_commands/lsf/task +3 -0
- data/share/rbbt_commands/slurm/list +2 -2
- data/share/rbbt_commands/slurm/orchestrate +3 -0
- data/share/rbbt_commands/slurm/task +3 -0
- data/share/rbbt_commands/workflow/forget_deps +5 -4
- data/test/rbbt/util/test_simpleDSL.rb +3 -3
- metadata +82 -83
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fab4cf5fb60bb998eeed28a4e07758efd68f1103de0eff61a5b5c1d4a9fd2583
|
|
4
|
+
data.tar.gz: 47c9a2bdc555645ebc833c2a3b92a3452df259546c1dbf200d77dcee04b8969f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92121d5df854b036a37413c27d2244cef0325874c018433abce1a93887c93efc650474e059c13b84c0be9a708d6fdc735daba6f861e1d05a670950fea3d32916
|
|
7
|
+
data.tar.gz: 0d24d99a64101fd33f2ac5774c30267f238c81d6479a754445fc02424384ba716e4c672b8a7c0d1c6f22b9f16c2ac1e1104ba9d35f7697bf4a9631e3a776bb02
|
data/bin/rbbt
CHANGED
data/lib/rbbt/hpc/batch.rb
CHANGED
|
@@ -95,14 +95,15 @@ module HPC
|
|
|
95
95
|
|
|
96
96
|
task = Symbol === job.overriden ? job.overriden : job.task_name
|
|
97
97
|
|
|
98
|
-
if job.overriden
|
|
99
|
-
override_deps = job.rec_dependencies.
|
|
100
|
-
|
|
98
|
+
if job.overriden?
|
|
99
|
+
#override_deps = job.rec_dependencies.
|
|
100
|
+
# select{|dep| Symbol === dep.overriden }.
|
|
101
|
+
|
|
102
|
+
override_deps = job.overriden_deps.
|
|
101
103
|
collect do |dep|
|
|
102
|
-
|
|
103
104
|
name = [dep.workflow.to_s, dep.task_name] * "#"
|
|
104
105
|
[name, dep.path] * "="
|
|
105
|
-
end * ","
|
|
106
|
+
end.uniq * ","
|
|
106
107
|
|
|
107
108
|
options[:override_deps] = override_deps unless override_deps.empty?
|
|
108
109
|
end
|
|
@@ -156,10 +157,15 @@ EOF
|
|
|
156
157
|
:singularity_ruby_inline,
|
|
157
158
|
:sync,
|
|
158
159
|
:task_cpus,
|
|
160
|
+
:mem,
|
|
161
|
+
:mem_per_cpu,
|
|
162
|
+
:licenses,
|
|
163
|
+
:contraints,
|
|
159
164
|
:time,
|
|
160
165
|
:user_group,
|
|
161
166
|
:wipe_container,
|
|
162
167
|
:workdir,
|
|
168
|
+
:purge_deps
|
|
163
169
|
]
|
|
164
170
|
|
|
165
171
|
keys.each do |key|
|
|
@@ -378,9 +384,9 @@ echo "user_scratch: #{scratch_group_dir}/#{user}/{PKGDIR}/{TOPLEVEL}/{SUBPATH}"
|
|
|
378
384
|
end
|
|
379
385
|
|
|
380
386
|
def execute(options)
|
|
381
|
-
exec_cmd, job_cmd = options.values_at :exec_cmd, :rbbt_cmd
|
|
387
|
+
exec_cmd, job_cmd, task_cpus = options.values_at :exec_cmd, :rbbt_cmd, :task_cpus
|
|
382
388
|
|
|
383
|
-
|
|
389
|
+
script=<<-EOF
|
|
384
390
|
step_path=$(
|
|
385
391
|
#{exec_cmd} #{job_cmd} --printpath
|
|
386
392
|
)
|
|
@@ -388,7 +394,10 @@ exit_status=$?
|
|
|
388
394
|
|
|
389
395
|
[[ -z $BATCH_JOB_ID ]] || #{exec_cmd} workflow write_info --recursive --force=false --check_pid "$step_path" batch_job $BATCH_JOB_ID
|
|
390
396
|
[[ -z $BATCH_SYSTEM ]] || #{exec_cmd} workflow write_info --recursive --force=false --check_pid "$step_path" batch_system $BATCH_SYSTEM
|
|
397
|
+
#{exec_cmd} workflow write_info --recursive --force=false --check_pid "$step_path" batch_cpus #{task_cpus}
|
|
391
398
|
EOF
|
|
399
|
+
|
|
400
|
+
script
|
|
392
401
|
end
|
|
393
402
|
|
|
394
403
|
def sync_environment(options = {})
|
|
@@ -409,6 +418,13 @@ fi
|
|
|
409
418
|
|
|
410
419
|
def cleanup_environment(options = {})
|
|
411
420
|
cleanup_environment = ""
|
|
421
|
+
|
|
422
|
+
cleanup_environment +=<<-EOF if options[:purge_deps]
|
|
423
|
+
if [ $exit_status == '0' ]; then
|
|
424
|
+
#{options[:exec_cmd]} workflow forget_deps --purge --recursive_purge "$step_path" 2>1 >> '#{options[:fsync]}'
|
|
425
|
+
fi
|
|
426
|
+
EOF
|
|
427
|
+
|
|
412
428
|
if options[:sync]
|
|
413
429
|
if options[:wipe_container] == 'force'
|
|
414
430
|
cleanup_environment +=<<-EOF
|
data/lib/rbbt/hpc/slurm.rb
CHANGED
|
@@ -31,6 +31,9 @@ export BATCH_SYSTEM=SLURM
|
|
|
31
31
|
licenses = Misc.process_options options, :licenses
|
|
32
32
|
constraint = Misc.process_options options, :constraint
|
|
33
33
|
|
|
34
|
+
mem = Misc.process_options options, :mem
|
|
35
|
+
mem_per_cpu = Misc.process_options options, :mem_per_cpu
|
|
36
|
+
|
|
34
37
|
batch_dir = Misc.process_options options, :batch_dir
|
|
35
38
|
batch_name = Misc.process_options options, :batch_name
|
|
36
39
|
|
|
@@ -39,22 +42,34 @@ export BATCH_SYSTEM=SLURM
|
|
|
39
42
|
|
|
40
43
|
time = Misc.format_seconds Misc.timespan(time) unless time.include? ":"
|
|
41
44
|
|
|
45
|
+
sbatch_params = {"job-name" => batch_name,
|
|
46
|
+
"output" => fout,
|
|
47
|
+
"error" => ferr,
|
|
48
|
+
"cpus-per-task" => task_cpus,
|
|
49
|
+
"nodes" => nodes,
|
|
50
|
+
"time" => time,
|
|
51
|
+
"exclusive" => exclusive,
|
|
52
|
+
"licenses" => licenses,
|
|
53
|
+
"mem" => mem,
|
|
54
|
+
"mem-per-cpu" => mem_per_cpu,
|
|
55
|
+
}
|
|
56
|
+
|
|
42
57
|
header =<<-EOF
|
|
43
58
|
#!/bin/bash
|
|
44
|
-
#SBATCH --job-name="#{batch_name}"
|
|
45
|
-
#SBATCH --workdir="#{workdir}"
|
|
46
|
-
#SBATCH --output="#{fout}"
|
|
47
|
-
#SBATCH --error="#{ferr}"
|
|
48
|
-
#SBATCH --qos="#{queue}"
|
|
49
|
-
#SBATCH --cpus-per-task="#{task_cpus}"
|
|
50
|
-
#SBATCH --time="#{time}"
|
|
51
|
-
#SBATCH --nodes="#{nodes}"
|
|
52
59
|
EOF
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
sbatch_params.each do |name,value|
|
|
62
|
+
next if value.nil? || value == ""
|
|
63
|
+
if TrueClass === value
|
|
64
|
+
header << "#SBATCH --#{name}" << "\n"
|
|
65
|
+
elsif Array === value
|
|
66
|
+
value.each do |v|
|
|
67
|
+
header << "#SBATCH --#{name}=\"#{v}\"" << "\n"
|
|
68
|
+
end
|
|
69
|
+
else
|
|
70
|
+
header << "#SBATCH --#{name}=\"#{value}\"" << "\n"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
58
73
|
|
|
59
74
|
header
|
|
60
75
|
end
|
data/lib/rbbt/resource.rb
CHANGED
|
@@ -87,65 +87,67 @@ module Resource
|
|
|
87
87
|
lock_filename = nil # it seems like this was locked already.
|
|
88
88
|
|
|
89
89
|
Misc.lock lock_filename do
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
|
93
|
-
|
|
94
|
-
if uri.scheme == "https"
|
|
95
|
-
http.use_ssl = true
|
|
96
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
97
|
-
http.instance_variable_set("@ssl_options", OpenSSL::SSL::OP_NO_SSLv2 + OpenSSL::SSL::OP_NO_SSLv3 + OpenSSL::SSL::OP_NO_COMPRESSION)
|
|
98
|
-
end
|
|
90
|
+
begin
|
|
91
|
+
uri = URI(url)
|
|
99
92
|
|
|
100
|
-
|
|
101
|
-
http.read_timeout = timeout
|
|
102
|
-
http.open_timeout = timeout
|
|
103
|
-
request = Net::HTTP::Get.new(uri.request_uri)
|
|
104
|
-
http.request request do |response|
|
|
105
|
-
filename = if response["Content-Disposition"]
|
|
106
|
-
response["Content-Disposition"].split(";").select{|f| f.include? "filename"}.collect{|f| f.split("=").last.gsub('"','')}.first
|
|
107
|
-
else
|
|
108
|
-
nil
|
|
109
|
-
end
|
|
93
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
110
94
|
|
|
111
|
-
if
|
|
112
|
-
|
|
113
|
-
|
|
95
|
+
if uri.scheme == "https"
|
|
96
|
+
http.use_ssl = true
|
|
97
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
98
|
+
http.instance_variable_set("@ssl_options", OpenSSL::SSL::OP_NO_SSLv2 + OpenSSL::SSL::OP_NO_SSLv3 + OpenSSL::SSL::OP_NO_COMPRESSION)
|
|
114
99
|
end
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
100
|
+
|
|
101
|
+
timeout = 60 * 10
|
|
102
|
+
http.read_timeout = timeout
|
|
103
|
+
http.open_timeout = timeout
|
|
104
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
|
105
|
+
http.request request do |response|
|
|
106
|
+
filename = if response["Content-Disposition"]
|
|
107
|
+
response["Content-Disposition"].split(";").select{|f| f.include? "filename"}.collect{|f| f.split("=").last.gsub('"','')}.first
|
|
108
|
+
else
|
|
109
|
+
nil
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
if filename && filename =~ /\.b?gz$/ && final_path !~ /\.b?gz$/
|
|
113
|
+
extension = filename.split(".").last
|
|
114
|
+
final_path += '.' + extension
|
|
121
115
|
end
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
TmpFile.with_file do |tmp_dir|
|
|
128
|
-
Misc.in_dir tmp_dir do
|
|
129
|
-
CMD.cmd('tar xvfz -', :in => Open.open(location, :nocache => true))
|
|
116
|
+
case response
|
|
117
|
+
when Net::HTTPSuccess, Net::HTTPOK
|
|
118
|
+
Misc.sensiblewrite(final_path) do |file|
|
|
119
|
+
response.read_body do |chunk|
|
|
120
|
+
file.write chunk
|
|
130
121
|
end
|
|
131
|
-
FileUtils.mv tmp_dir, final_path
|
|
132
122
|
end
|
|
123
|
+
when Net::HTTPRedirection, Net::HTTPFound
|
|
124
|
+
location = response['location']
|
|
125
|
+
if location.include? 'get_directory'
|
|
126
|
+
Log.debug("Feching directory from: #{location}. Into: #{final_path}")
|
|
127
|
+
FileUtils.mkdir_p final_path unless File.exist? final_path
|
|
128
|
+
TmpFile.with_file do |tmp_dir|
|
|
129
|
+
Misc.in_dir tmp_dir do
|
|
130
|
+
CMD.cmd('tar xvfz -', :in => Open.open(location, :nocache => true))
|
|
131
|
+
end
|
|
132
|
+
FileUtils.mv tmp_dir, final_path
|
|
133
|
+
end
|
|
134
|
+
else
|
|
135
|
+
url = location
|
|
136
|
+
raise TryAgain
|
|
137
|
+
#Open.open(location, :nocache => true) do |s|
|
|
138
|
+
# Misc.sensiblewrite(final_path, s)
|
|
139
|
+
#end
|
|
140
|
+
end
|
|
141
|
+
when Net::HTTPInternalServerError
|
|
142
|
+
@server_missing_resource_cache << url
|
|
143
|
+
raise "Resource Not Found"
|
|
133
144
|
else
|
|
134
|
-
|
|
135
|
-
raise TryAgain
|
|
136
|
-
#Open.open(location, :nocache => true) do |s|
|
|
137
|
-
# Misc.sensiblewrite(final_path, s)
|
|
138
|
-
#end
|
|
145
|
+
raise "Response not understood: #{response.inspect}"
|
|
139
146
|
end
|
|
140
|
-
when Net::HTTPInternalServerError
|
|
141
|
-
@server_missing_resource_cache << url
|
|
142
|
-
raise "Resource Not Found"
|
|
143
|
-
else
|
|
144
|
-
raise "Response not understood: #{response.inspect}"
|
|
145
147
|
end
|
|
148
|
+
rescue TryAgain
|
|
149
|
+
retry
|
|
146
150
|
end
|
|
147
|
-
rescue TryAgain
|
|
148
|
-
retry
|
|
149
151
|
end
|
|
150
152
|
rescue
|
|
151
153
|
Log.warn "Could not retrieve (#{self.to_s}) #{ path } from #{ remote_server }"
|
data/lib/rbbt/tsv/csv.rb
CHANGED
data/lib/rbbt/util/cmd.rb
CHANGED
|
@@ -192,25 +192,48 @@ module CMD
|
|
|
192
192
|
|
|
193
193
|
ConcurrentStream.setup sout, :pids => pids, :autojoin => no_wait, :no_fail => no_fail
|
|
194
194
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
195
|
+
if (Integer === stderr and log) || bar
|
|
196
|
+
err_thread = Thread.new do
|
|
197
|
+
while line = serr.gets
|
|
198
|
+
bar.process(line) if bar
|
|
199
|
+
sout.log = line
|
|
200
|
+
Log.log "STDERR [#{pid}]: " + line, stderr if log
|
|
201
|
+
end
|
|
202
|
+
serr.close
|
|
203
|
+
end
|
|
204
|
+
else
|
|
205
|
+
Misc.consume_stream(serr, true)
|
|
206
|
+
err_thread = nil
|
|
202
207
|
end
|
|
203
208
|
|
|
204
209
|
sout.threads = [in_thread, err_thread, wait_thr].compact
|
|
205
210
|
|
|
206
211
|
sout
|
|
207
212
|
else
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
213
|
+
|
|
214
|
+
if bar
|
|
215
|
+
err = ""
|
|
216
|
+
err_thread = Thread.new do
|
|
217
|
+
while not serr.eof?
|
|
218
|
+
line = serr.gets
|
|
219
|
+
bar.process(line)
|
|
220
|
+
err << line if Integer === stderr and log
|
|
221
|
+
end
|
|
222
|
+
serr.close
|
|
212
223
|
end
|
|
213
|
-
|
|
224
|
+
elsif log and Integer === stderr
|
|
225
|
+
err = ""
|
|
226
|
+
err_thread = Thread.new do
|
|
227
|
+
while not serr.eof?
|
|
228
|
+
err << serr.gets
|
|
229
|
+
end
|
|
230
|
+
serr.close
|
|
231
|
+
end
|
|
232
|
+
else
|
|
233
|
+
Misc.consume_stream(serr, true)
|
|
234
|
+
#serr.close
|
|
235
|
+
err_thread = nil
|
|
236
|
+
err = ""
|
|
214
237
|
end
|
|
215
238
|
|
|
216
239
|
ConcurrentStream.setup sout, :pids => pids, :threads => [in_thread, err_thread].compact, :autojoin => no_wait, :no_fail => no_fail
|
|
@@ -220,7 +243,11 @@ module CMD
|
|
|
220
243
|
|
|
221
244
|
status = wait_thr.value
|
|
222
245
|
if not status.success? and not no_fail
|
|
223
|
-
|
|
246
|
+
if !err.empty?
|
|
247
|
+
raise ProcessFailed.new "Command [#{pid}] #{cmd} failed with error status #{status.exitstatus}.\n#{err}"
|
|
248
|
+
else
|
|
249
|
+
raise ProcessFailed.new "Command [#{pid}] #{cmd} failed with error status #{status.exitstatus}"
|
|
250
|
+
end
|
|
224
251
|
else
|
|
225
252
|
Log.log err, stderr if Integer === stderr and log
|
|
226
253
|
end
|
|
@@ -263,11 +290,6 @@ module CMD
|
|
|
263
290
|
if c == "\n"
|
|
264
291
|
bar.process(line) if bar
|
|
265
292
|
starting = true
|
|
266
|
-
#if pid
|
|
267
|
-
# Log.logn "STDOUT [#{pid}]: ", level
|
|
268
|
-
#else
|
|
269
|
-
# Log.logn "STDOUT: ", level
|
|
270
|
-
#end
|
|
271
293
|
line = "" if bar
|
|
272
294
|
end
|
|
273
295
|
end
|
data/lib/rbbt/util/simpleDSL.rb
CHANGED
|
@@ -38,13 +38,13 @@ module SimpleDSL
|
|
|
38
38
|
hook_method(method)
|
|
39
39
|
|
|
40
40
|
# Execute
|
|
41
|
+
@config ||= {}
|
|
41
42
|
if actions.is_a? Proc
|
|
42
43
|
begin
|
|
43
|
-
require '
|
|
44
|
-
|
|
45
|
-
require 'ruby2ruby'
|
|
46
|
-
@config[@@method_name] = actions.to_ruby.collect[1..-2].join
|
|
44
|
+
require 'method_source'
|
|
45
|
+
@config[@@method_name] = actions.source.split("\n")[1..-2] * "\n"
|
|
47
46
|
rescue Exception
|
|
47
|
+
Log.exception $!
|
|
48
48
|
@config[@@method_name] = NoRuby2Ruby.new "The gem ruby2ruby is not installed. It will not work on ruby 1.9."
|
|
49
49
|
end
|
|
50
50
|
|
data/lib/rbbt/workflow.rb
CHANGED
|
@@ -347,6 +347,11 @@ module Workflow
|
|
|
347
347
|
|
|
348
348
|
inputs = IndiferentHash.setup(inputs)
|
|
349
349
|
|
|
350
|
+
not_overriden = inputs.delete :not_overriden
|
|
351
|
+
if not_overriden
|
|
352
|
+
inputs[:not_overriden] = :not_overriden_dep
|
|
353
|
+
end
|
|
354
|
+
|
|
350
355
|
Workflow.resolve_locals(inputs)
|
|
351
356
|
|
|
352
357
|
task_info = task_info(taskname)
|
|
@@ -400,7 +405,11 @@ module Workflow
|
|
|
400
405
|
jobname = DEFAULT_NAME if jobname.nil? or jobname.empty?
|
|
401
406
|
|
|
402
407
|
dependencies = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
|
|
403
|
-
|
|
408
|
+
|
|
409
|
+
overriden_deps = dependencies.select{|d| d.overriden }
|
|
410
|
+
true_overriden_deps = overriden_deps.select{|d| TrueClass === d.overriden }
|
|
411
|
+
|
|
412
|
+
overriden = has_overriden_inputs || overriden_deps.any?
|
|
404
413
|
|
|
405
414
|
if real_inputs.empty? && Workflow::TAG != :inputs && ! overriden
|
|
406
415
|
step_path = step_path taskname, jobname, [], [], task.extension
|
|
@@ -413,7 +422,16 @@ module Workflow
|
|
|
413
422
|
job = get_job_step step_path, task, input_values, dependencies
|
|
414
423
|
job.workflow = self
|
|
415
424
|
job.clean_name = jobname
|
|
416
|
-
|
|
425
|
+
|
|
426
|
+
case not_overriden
|
|
427
|
+
when TrueClass
|
|
428
|
+
job.overriden = has_overriden_inputs || true_overriden_deps.any?
|
|
429
|
+
when :not_overriden_dep
|
|
430
|
+
job.overriden = true if has_overriden_inputs || true_overriden_deps.any?
|
|
431
|
+
else
|
|
432
|
+
job.overriden = true if has_overriden_inputs || overriden_deps.any?
|
|
433
|
+
end
|
|
434
|
+
|
|
417
435
|
job.real_inputs = real_inputs.keys
|
|
418
436
|
job
|
|
419
437
|
end
|
|
@@ -302,7 +302,7 @@ module Workflow
|
|
|
302
302
|
workflow, task = m.values_at 1, 2
|
|
303
303
|
workflow = self.to_s if workflow.empty?
|
|
304
304
|
override_dependencies[workflow] ||= IndiferentHash.setup({})
|
|
305
|
-
override_dependencies[workflow][task] = value
|
|
305
|
+
override_dependencies[workflow][task] = value.dup
|
|
306
306
|
end
|
|
307
307
|
end
|
|
308
308
|
override_dependencies
|
data/lib/rbbt/workflow/step.rb
CHANGED
|
@@ -34,13 +34,40 @@ class Step
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
|
|
38
|
+
def overriden?
|
|
39
|
+
return true if @overriden
|
|
40
|
+
return true if dependencies.select{|dep| dep.overriden? }.any?
|
|
41
|
+
info[:archived_info].each do |f,i|
|
|
42
|
+
return true if i[:overriden] || i["overriden"]
|
|
43
|
+
end if info[:archived_info]
|
|
44
|
+
return false
|
|
45
|
+
end
|
|
46
|
+
|
|
37
47
|
def overriden
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
@overriden
|
|
49
|
+
#if @overriden.nil?
|
|
50
|
+
# return false if dependencies.nil?
|
|
51
|
+
# dependencies.select{|dep| dep.overriden? }.any?
|
|
52
|
+
#else
|
|
53
|
+
# @overriden
|
|
54
|
+
#end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def overriden_deps
|
|
58
|
+
ord = []
|
|
59
|
+
deps = dependencies.dup
|
|
60
|
+
while dep = deps.shift
|
|
61
|
+
case dep.overriden
|
|
62
|
+
when FalseClass
|
|
63
|
+
next
|
|
64
|
+
when Symbol
|
|
65
|
+
ord << dep
|
|
66
|
+
else
|
|
67
|
+
deps += dep.dependencies
|
|
68
|
+
end
|
|
43
69
|
end
|
|
70
|
+
ord
|
|
44
71
|
end
|
|
45
72
|
|
|
46
73
|
def initialize(path, task = nil, inputs = nil, dependencies = nil, bindings = nil, clean_name = nil)
|
|
@@ -134,7 +161,11 @@ class Step
|
|
|
134
161
|
|
|
135
162
|
archived_info = {}
|
|
136
163
|
dependencies.each do |dep|
|
|
137
|
-
|
|
164
|
+
if Symbol === dep.overriden
|
|
165
|
+
archived_info[dep.path] = dep.overriden
|
|
166
|
+
else
|
|
167
|
+
archived_info[dep.path] = dep.info
|
|
168
|
+
end
|
|
138
169
|
archived_info.merge!(dep.archived_info)
|
|
139
170
|
end if dependencies
|
|
140
171
|
|
|
@@ -248,7 +248,7 @@ class Step
|
|
|
248
248
|
def init_info(force = false)
|
|
249
249
|
return nil if @exec || info_file.nil? || (Open.exists?(info_file) && ! force)
|
|
250
250
|
Open.lock(info_file, :lock => info_lock) do
|
|
251
|
-
i = {:status => :waiting, :pid => Process.pid, :path => path, :real_inputs => real_inputs}
|
|
251
|
+
i = {:status => :waiting, :pid => Process.pid, :path => path, :real_inputs => real_inputs, :overriden => overriden}
|
|
252
252
|
i[:dependencies] = dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]} if dependencies
|
|
253
253
|
Misc.sensiblewrite(info_file, Step.serialize_info(i), :force => true, :lock => false)
|
|
254
254
|
@info_cache = IndiferentHash.setup(i)
|
|
@@ -551,7 +551,7 @@ class Step
|
|
|
551
551
|
|
|
552
552
|
def aborted?
|
|
553
553
|
status = self.status
|
|
554
|
-
status == :aborted || ((status != :dependencies && status != :cleaned && status != :noinfo && status != :setup && status != :noinfo) && nopid?)
|
|
554
|
+
status == :aborted || ((status != :ending && status != :dependencies && status != :cleaned && status != :noinfo && status != :setup && status != :noinfo) && nopid?)
|
|
555
555
|
end
|
|
556
556
|
|
|
557
557
|
# {{{ INFO
|
|
@@ -206,9 +206,9 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
|
|
|
206
206
|
puts Log.color(:magenta, "BATCH parameters: ")
|
|
207
207
|
case job_batch_system
|
|
208
208
|
when 'slurm'
|
|
209
|
-
text = CMD.cmd('grep "^#SBATCH"
|
|
209
|
+
text = CMD.cmd('grep "^#SBATCH" ', :in => Open.read(fcmd)).read.strip
|
|
210
210
|
when 'lsf'
|
|
211
|
-
text = CMD.cmd('grep "^#BSUB"
|
|
211
|
+
text = CMD.cmd('grep "^#BSUB" ', :in => Open.read(fcmd)).read.strip
|
|
212
212
|
else
|
|
213
213
|
text = ""
|
|
214
214
|
end
|
|
@@ -19,6 +19,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
19
19
|
-e--exclusive Make exclusive use of the node
|
|
20
20
|
-hm--highmem Make use of highmem cores
|
|
21
21
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
22
|
+
-pd--purge_deps Purge job dependencies
|
|
22
23
|
-CS--contain_and_sync Contain and sync to default locations
|
|
23
24
|
-ci--copy_image When using a container directory, copy image there
|
|
24
25
|
-t--tail Tail the logs
|
|
@@ -26,6 +27,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
26
27
|
-q--queue* Queue
|
|
27
28
|
-t--task_cpus* Tasks
|
|
28
29
|
-tm--time* Time
|
|
30
|
+
-m--mem* SLURM minimum memory
|
|
31
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
29
32
|
-lin--licenses* SLURM licenses
|
|
30
33
|
-cons--constraint* SLURM constraint
|
|
31
34
|
-W--workflows* Additional workflows
|
|
@@ -18,6 +18,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
18
18
|
-e--exclusive Make exclusive use of the node
|
|
19
19
|
-hm--highmem Make use of highmem cores
|
|
20
20
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
21
|
+
-pd--purge_deps Purge job dependencies
|
|
21
22
|
-CS--contain_and_sync Contain and sync to default locations
|
|
22
23
|
-ci--copy_image When using a container directory, copy image there
|
|
23
24
|
-t--tail Tail the logs
|
|
@@ -25,6 +26,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
25
26
|
-q--queue* Queue
|
|
26
27
|
-t--task_cpus* Tasks
|
|
27
28
|
-tm--time* Time
|
|
29
|
+
-m--mem* SLURM minimum memory
|
|
30
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
28
31
|
-lin--licenses* SLURM licenses
|
|
29
32
|
-cons--constraint* SLURM constraint
|
|
30
33
|
-W--workflows* Additional workflows
|
|
@@ -206,9 +206,9 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
|
|
|
206
206
|
puts Log.color(:magenta, "BATCH parameters: ")
|
|
207
207
|
case job_batch_system
|
|
208
208
|
when 'slurm'
|
|
209
|
-
text = CMD.cmd('grep "^#SBATCH"
|
|
209
|
+
text = CMD.cmd('grep "^#SBATCH" ', :in => Open.read(fcmd)).read.strip
|
|
210
210
|
when 'lsf'
|
|
211
|
-
text = CMD.cmd('grep "^#BSUB"
|
|
211
|
+
text = CMD.cmd('grep "^#BSUB" ', :in => Open.read(fcmd)).read.strip
|
|
212
212
|
else
|
|
213
213
|
text = ""
|
|
214
214
|
end
|
|
@@ -19,6 +19,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
19
19
|
-e--exclusive Make exclusive use of the node
|
|
20
20
|
-hm--highmem Make use of highmem cores
|
|
21
21
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
22
|
+
-pd--purge_deps Purge job dependencies
|
|
22
23
|
-CS--contain_and_sync Contain and sync to default locations
|
|
23
24
|
-ci--copy_image When using a container directory, copy image there
|
|
24
25
|
-t--tail Tail the logs
|
|
@@ -26,6 +27,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
26
27
|
-q--queue* Queue
|
|
27
28
|
-t--task_cpus* Tasks
|
|
28
29
|
-tm--time* Time
|
|
30
|
+
-m--mem* SLURM minimum memory
|
|
31
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
29
32
|
-lin--licenses* SLURM licenses
|
|
30
33
|
-cons--constraint* SLURM constraint
|
|
31
34
|
-W--workflows* Additional workflows
|
|
@@ -18,6 +18,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
18
18
|
-e--exclusive Make exclusive use of the node
|
|
19
19
|
-hm--highmem Make use of highmem cores
|
|
20
20
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
21
|
+
-pd--purge_deps Purge job dependencies
|
|
21
22
|
-CS--contain_and_sync Contain and sync to default locations
|
|
22
23
|
-ci--copy_image When using a container directory, copy image there
|
|
23
24
|
-t--tail Tail the logs
|
|
@@ -25,6 +26,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
25
26
|
-q--queue* Queue
|
|
26
27
|
-t--task_cpus* Tasks
|
|
27
28
|
-tm--time* Time
|
|
29
|
+
-m--mem* SLURM minimum memory
|
|
30
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
28
31
|
-lin--licenses* SLURM licenses
|
|
29
32
|
-cons--constraint* SLURM constraint
|
|
30
33
|
-W--workflows* Additional workflows
|
|
@@ -206,9 +206,9 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
|
|
|
206
206
|
puts Log.color(:magenta, "BATCH parameters: ")
|
|
207
207
|
case job_batch_system
|
|
208
208
|
when 'slurm'
|
|
209
|
-
text = CMD.cmd('grep "^#SBATCH"
|
|
209
|
+
text = CMD.cmd('grep "^#SBATCH" ', :in => Open.read(fcmd)).read.strip
|
|
210
210
|
when 'lsf'
|
|
211
|
-
text = CMD.cmd('grep "^#BSUB"
|
|
211
|
+
text = CMD.cmd('grep "^#BSUB" ', :in => Open.read(fcmd)).read.strip
|
|
212
212
|
else
|
|
213
213
|
text = ""
|
|
214
214
|
end
|
|
@@ -19,6 +19,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
19
19
|
-e--exclusive Make exclusive use of the node
|
|
20
20
|
-hm--highmem Make use of highmem cores
|
|
21
21
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
22
|
+
-pd--purge_deps Purge job dependencies
|
|
22
23
|
-CS--contain_and_sync Contain and sync to default locations
|
|
23
24
|
-ci--copy_image When using a container directory, copy image there
|
|
24
25
|
-t--tail Tail the logs
|
|
@@ -26,6 +27,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
26
27
|
-q--queue* Queue
|
|
27
28
|
-t--task_cpus* Tasks
|
|
28
29
|
-tm--time* Time
|
|
30
|
+
-m--mem* SLURM minimum memory
|
|
31
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
29
32
|
-lin--licenses* SLURM licenses
|
|
30
33
|
-cons--constraint* SLURM constraint
|
|
31
34
|
-W--workflows* Additional workflows
|
|
@@ -18,6 +18,7 @@ $slurm_options = SOPT.get <<EOF
|
|
|
18
18
|
-e--exclusive Make exclusive use of the node
|
|
19
19
|
-hm--highmem Make use of highmem cores
|
|
20
20
|
-wc--wipe_container* Wipe the jobs from the contain directory
|
|
21
|
+
-pd--purge_deps Purge job dependencies
|
|
21
22
|
-CS--contain_and_sync Contain and sync to default locations
|
|
22
23
|
-ci--copy_image When using a container directory, copy image there
|
|
23
24
|
-t--tail Tail the logs
|
|
@@ -25,6 +26,8 @@ $slurm_options = SOPT.get <<EOF
|
|
|
25
26
|
-q--queue* Queue
|
|
26
27
|
-t--task_cpus* Tasks
|
|
27
28
|
-tm--time* Time
|
|
29
|
+
-m--mem* SLURM minimum memory
|
|
30
|
+
-mcpu--mem_per_cpu* SLURM minimum memory per CPU
|
|
28
31
|
-lin--licenses* SLURM licenses
|
|
29
32
|
-cons--constraint* SLURM constraint
|
|
30
33
|
-W--workflows* Additional workflows
|
|
@@ -38,11 +38,11 @@ step.copy_files_dir
|
|
|
38
38
|
dependencies = step.dependencies
|
|
39
39
|
|
|
40
40
|
if remove && remove.any?
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
44
|
else
|
|
45
|
-
|
|
45
|
+
remove_paths = dependencies.collect{|dep| dep.path }
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
step.set_info :dependencies, step.info[:dependencies].reject{|info| remove_paths.include? info.last}
|
|
@@ -50,6 +50,7 @@ step.set_info :dependencies, step.info[:dependencies].reject{|info| remove_paths
|
|
|
50
50
|
if options[:purge] || options[:recursive_purge]
|
|
51
51
|
dependencies.each do |dependency|
|
|
52
52
|
next unless remove_paths.include? dependency.path
|
|
53
|
+
next unless Open.exists?(dependency.info_file)
|
|
53
54
|
Step.purge(dependency.path, options[:recursive_purge])
|
|
54
55
|
end
|
|
55
56
|
end
|
|
@@ -35,12 +35,12 @@ class TestDSL < Test::Unit::TestCase
|
|
|
35
35
|
|
|
36
36
|
def test_config
|
|
37
37
|
config = <<-EOC
|
|
38
|
-
action1
|
|
39
|
-
action2
|
|
38
|
+
action1 "Hello"
|
|
39
|
+
action2 "Good bye"
|
|
40
40
|
EOC
|
|
41
41
|
|
|
42
42
|
begin
|
|
43
|
-
|
|
43
|
+
assert_equal config.split("\n").collect{|l| l.strip}, @parser.config(:action).split("\n").collect{|l| l.strip}
|
|
44
44
|
rescue SimpleDSL::NoRuby2Ruby
|
|
45
45
|
end
|
|
46
46
|
end
|
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.
|
|
4
|
+
version: 5.32.11
|
|
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-05-
|
|
11
|
+
date: 2021-05-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -555,7 +555,7 @@ homepage: http://github.com/mikisvaz/rbbt-util
|
|
|
555
555
|
licenses:
|
|
556
556
|
- MIT
|
|
557
557
|
metadata: {}
|
|
558
|
-
post_install_message:
|
|
558
|
+
post_install_message:
|
|
559
559
|
rdoc_options: []
|
|
560
560
|
require_paths:
|
|
561
561
|
- lib
|
|
@@ -570,104 +570,103 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
570
570
|
- !ruby/object:Gem::Version
|
|
571
571
|
version: '0'
|
|
572
572
|
requirements: []
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
signing_key:
|
|
573
|
+
rubygems_version: 3.1.4
|
|
574
|
+
signing_key:
|
|
576
575
|
specification_version: 4
|
|
577
576
|
summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
|
|
578
577
|
test_files:
|
|
579
|
-
- test/test_helper.rb
|
|
580
|
-
- test/rbbt/entity/test_identifiers.rb
|
|
581
|
-
- test/rbbt/test_resource.rb
|
|
582
|
-
- test/rbbt/test_association.rb
|
|
583
|
-
- test/rbbt/hpc/test_slurm.rb
|
|
584
|
-
- test/rbbt/hpc/test_batch.rb
|
|
585
|
-
- test/rbbt/persist/test_tsv.rb
|
|
586
|
-
- test/rbbt/persist/tsv/test_kyotocabinet.rb
|
|
587
|
-
- test/rbbt/persist/tsv/test_lmdb.rb
|
|
588
|
-
- test/rbbt/persist/tsv/test_tokyocabinet.rb
|
|
589
|
-
- test/rbbt/persist/tsv/test_cdb.rb
|
|
590
|
-
- test/rbbt/persist/tsv/test_leveldb.rb
|
|
591
|
-
- test/rbbt/persist/tsv/test_sharder.rb
|
|
592
|
-
- test/rbbt/test_packed_index.rb
|
|
593
578
|
- test/rbbt/test_entity.rb
|
|
594
|
-
- test/rbbt/test_fix_width_table.rb
|
|
595
579
|
- test/rbbt/workflow/test_remote_workflow.rb
|
|
596
|
-
- test/rbbt/workflow/test_doc.rb
|
|
597
|
-
- test/rbbt/workflow/step/test_dependencies.rb
|
|
598
|
-
- test/rbbt/workflow/test_schedule.rb
|
|
599
580
|
- test/rbbt/workflow/util/test_archive.rb
|
|
600
581
|
- test/rbbt/workflow/util/test_orchestrator.rb
|
|
601
|
-
- test/rbbt/workflow/
|
|
582
|
+
- test/rbbt/workflow/test_doc.rb
|
|
583
|
+
- test/rbbt/workflow/test_schedule.rb
|
|
602
584
|
- test/rbbt/workflow/test_step.rb
|
|
603
|
-
- test/rbbt/
|
|
604
|
-
- test/rbbt/
|
|
605
|
-
- test/rbbt/
|
|
606
|
-
- test/rbbt/util/test_migrate.rb
|
|
607
|
-
- test/rbbt/util/test_simpleDSL.rb
|
|
608
|
-
- test/rbbt/util/concurrency/processes/test_socket.rb
|
|
609
|
-
- test/rbbt/util/concurrency/test_processes.rb
|
|
610
|
-
- test/rbbt/util/concurrency/test_threads.rb
|
|
611
|
-
- test/rbbt/util/test_filecache.rb
|
|
612
|
-
- test/rbbt/util/simpleopt/test_get.rb
|
|
613
|
-
- test/rbbt/util/simpleopt/test_parse.rb
|
|
614
|
-
- test/rbbt/util/simpleopt/test_setup.rb
|
|
615
|
-
- test/rbbt/util/test_misc.rb
|
|
616
|
-
- test/rbbt/util/test_excel2tsv.rb
|
|
617
|
-
- test/rbbt/util/test_semaphore.rb
|
|
618
|
-
- test/rbbt/util/test_procpath.rb
|
|
619
|
-
- test/rbbt/util/R/test_model.rb
|
|
620
|
-
- test/rbbt/util/R/test_eval.rb
|
|
621
|
-
- test/rbbt/util/R/test_plot.rb
|
|
622
|
-
- test/rbbt/util/test_open.rb
|
|
623
|
-
- test/rbbt/util/test_tmpfile.rb
|
|
624
|
-
- test/rbbt/util/test_cmd.rb
|
|
625
|
-
- test/rbbt/util/test_concurrency.rb
|
|
585
|
+
- test/rbbt/workflow/step/test_dependencies.rb
|
|
586
|
+
- test/rbbt/workflow/test_task.rb
|
|
587
|
+
- test/rbbt/resource/test_path.rb
|
|
626
588
|
- test/rbbt/util/test_colorize.rb
|
|
627
|
-
- test/rbbt/util/
|
|
628
|
-
- test/rbbt/util/
|
|
629
|
-
- test/rbbt/util/test_simpleopt.rb
|
|
630
|
-
- test/rbbt/util/test_python.rb
|
|
631
|
-
- test/rbbt/util/test_chain_methods.rb
|
|
589
|
+
- test/rbbt/util/test_procpath.rb
|
|
590
|
+
- test/rbbt/util/misc/test_development.rb
|
|
632
591
|
- test/rbbt/util/misc/test_omics.rb
|
|
592
|
+
- test/rbbt/util/misc/test_pipes.rb
|
|
593
|
+
- test/rbbt/util/misc/test_format.rb
|
|
633
594
|
- test/rbbt/util/misc/test_lock.rb
|
|
634
595
|
- test/rbbt/util/misc/test_multipart_payload.rb
|
|
635
596
|
- test/rbbt/util/misc/test_bgzf.rb
|
|
636
|
-
- test/rbbt/util/
|
|
637
|
-
- test/rbbt/util/
|
|
638
|
-
- test/rbbt/util/
|
|
597
|
+
- test/rbbt/util/test_concurrency.rb
|
|
598
|
+
- test/rbbt/util/test_cmd.rb
|
|
599
|
+
- test/rbbt/util/R/test_plot.rb
|
|
600
|
+
- test/rbbt/util/R/test_eval.rb
|
|
601
|
+
- test/rbbt/util/R/test_model.rb
|
|
602
|
+
- test/rbbt/util/test_config.rb
|
|
603
|
+
- test/rbbt/util/test_log.rb
|
|
604
|
+
- test/rbbt/util/test_simpleDSL.rb
|
|
639
605
|
- test/rbbt/util/log/test_progress.rb
|
|
606
|
+
- test/rbbt/util/test_tmpfile.rb
|
|
640
607
|
- test/rbbt/util/test_R.rb
|
|
641
|
-
- test/rbbt/
|
|
642
|
-
- test/rbbt/
|
|
643
|
-
- test/rbbt/
|
|
644
|
-
- test/rbbt/
|
|
645
|
-
- test/rbbt/
|
|
646
|
-
- test/rbbt/
|
|
647
|
-
- test/rbbt/
|
|
648
|
-
- test/rbbt/
|
|
649
|
-
- test/rbbt/
|
|
650
|
-
- test/rbbt/
|
|
651
|
-
- test/rbbt/
|
|
652
|
-
- test/rbbt/
|
|
653
|
-
- test/rbbt/
|
|
654
|
-
- test/rbbt/
|
|
655
|
-
- test/rbbt/
|
|
656
|
-
- test/rbbt/
|
|
657
|
-
- test/rbbt/
|
|
608
|
+
- test/rbbt/util/test_excel2tsv.rb
|
|
609
|
+
- test/rbbt/util/test_misc.rb
|
|
610
|
+
- test/rbbt/util/test_open.rb
|
|
611
|
+
- test/rbbt/util/test_simpleopt.rb
|
|
612
|
+
- test/rbbt/util/simpleopt/test_parse.rb
|
|
613
|
+
- test/rbbt/util/simpleopt/test_setup.rb
|
|
614
|
+
- test/rbbt/util/simpleopt/test_get.rb
|
|
615
|
+
- test/rbbt/util/test_python.rb
|
|
616
|
+
- test/rbbt/util/test_filecache.rb
|
|
617
|
+
- test/rbbt/util/concurrency/test_processes.rb
|
|
618
|
+
- test/rbbt/util/concurrency/test_threads.rb
|
|
619
|
+
- test/rbbt/util/concurrency/processes/test_socket.rb
|
|
620
|
+
- test/rbbt/util/test_semaphore.rb
|
|
621
|
+
- test/rbbt/util/test_chain_methods.rb
|
|
622
|
+
- test/rbbt/util/test_migrate.rb
|
|
623
|
+
- test/rbbt/test_resource.rb
|
|
624
|
+
- test/rbbt/test_packed_index.rb
|
|
625
|
+
- test/rbbt/tsv/test_change_id.rb
|
|
626
|
+
- test/rbbt/tsv/test_attach.rb
|
|
627
|
+
- test/rbbt/tsv/test_filter.rb
|
|
658
628
|
- test/rbbt/tsv/test_parser.rb
|
|
659
629
|
- test/rbbt/tsv/test_csv.rb
|
|
660
|
-
- test/rbbt/tsv/
|
|
630
|
+
- test/rbbt/tsv/test_accessor.rb
|
|
631
|
+
- test/rbbt/tsv/test_matrix.rb
|
|
661
632
|
- test/rbbt/tsv/test_field_index.rb
|
|
662
633
|
- test/rbbt/tsv/test_util.rb
|
|
663
|
-
- test/rbbt/tsv/
|
|
664
|
-
- test/rbbt/tsv/test_filter.rb
|
|
665
|
-
- test/rbbt/tsv/test_stream.rb
|
|
634
|
+
- test/rbbt/tsv/test_index.rb
|
|
666
635
|
- test/rbbt/tsv/test_parallel.rb
|
|
667
|
-
- test/rbbt/tsv/
|
|
668
|
-
- test/rbbt/tsv/test_attach.rb
|
|
636
|
+
- test/rbbt/tsv/test_manipulate.rb
|
|
669
637
|
- test/rbbt/tsv/test_excel.rb
|
|
670
|
-
- test/rbbt/tsv/test_change_id.rb
|
|
671
|
-
- test/rbbt/tsv/test_index.rb
|
|
672
|
-
- test/rbbt/tsv/parallel/test_traverse.rb
|
|
673
638
|
- test/rbbt/tsv/parallel/test_through.rb
|
|
639
|
+
- test/rbbt/tsv/parallel/test_traverse.rb
|
|
640
|
+
- test/rbbt/tsv/test_stream.rb
|
|
641
|
+
- test/rbbt/test_association.rb
|
|
642
|
+
- test/rbbt/hpc/test_batch.rb
|
|
643
|
+
- test/rbbt/hpc/test_slurm.rb
|
|
644
|
+
- test/rbbt/association/test_database.rb
|
|
645
|
+
- test/rbbt/association/test_item.rb
|
|
646
|
+
- test/rbbt/association/test_open.rb
|
|
647
|
+
- test/rbbt/association/test_util.rb
|
|
648
|
+
- test/rbbt/association/test_index.rb
|
|
649
|
+
- test/rbbt/test_knowledge_base.rb
|
|
650
|
+
- test/rbbt/persist/tsv/test_kyotocabinet.rb
|
|
651
|
+
- test/rbbt/persist/tsv/test_cdb.rb
|
|
652
|
+
- test/rbbt/persist/tsv/test_lmdb.rb
|
|
653
|
+
- test/rbbt/persist/tsv/test_sharder.rb
|
|
654
|
+
- test/rbbt/persist/tsv/test_leveldb.rb
|
|
655
|
+
- test/rbbt/persist/tsv/test_tokyocabinet.rb
|
|
656
|
+
- test/rbbt/persist/test_tsv.rb
|
|
657
|
+
- test/rbbt/test_tsv.rb
|
|
658
|
+
- test/rbbt/test_annotations.rb
|
|
659
|
+
- test/rbbt/test_fix_width_table.rb
|
|
660
|
+
- test/rbbt/test_workflow.rb
|
|
661
|
+
- test/rbbt/entity/test_identifiers.rb
|
|
662
|
+
- test/rbbt/annotations/test_util.rb
|
|
663
|
+
- test/rbbt/test_hpc.rb
|
|
664
|
+
- test/rbbt/test_monitor.rb
|
|
665
|
+
- test/rbbt/test_persist.rb
|
|
666
|
+
- test/rbbt/knowledge_base/test_entity.rb
|
|
667
|
+
- test/rbbt/knowledge_base/test_registry.rb
|
|
668
|
+
- test/rbbt/knowledge_base/test_syndicate.rb
|
|
669
|
+
- test/rbbt/knowledge_base/test_query.rb
|
|
670
|
+
- test/rbbt/knowledge_base/test_enrichment.rb
|
|
671
|
+
- test/rbbt/knowledge_base/test_traverse.rb
|
|
672
|
+
- test/test_helper.rb
|