rbbt-util 5.34.24 → 5.34.26

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: 7359f3a8ce8bde23107f23515557f47eb7bb65ee094c64419ba5542378af1c8c
4
- data.tar.gz: 0a030eb0b6f9648a60c11abaac383fe33b24845c288ddd7a28eb8e9aa8d8ac1c
3
+ metadata.gz: da3b496fd0fb7d9ff645cba0fb4ba3914288fb0b88bf80f43a79d02bd1ee2cfd
4
+ data.tar.gz: ab120f9bb96f1b0628f1edc6dc114a43c32ed39a5c29ce5252bbf85383d24359
5
5
  SHA512:
6
- metadata.gz: dce1b81193d5d0d7ad86140e7287228b4a9d83fe99f08c4a431e34491d3c2a6057054cc9d80a76be9d4ac34b422c8203470d53579c4ba84bee8a804b6f12a2dd
7
- data.tar.gz: 5b1d4e2aa040b183a92ea7b3ccb45fef2e3467a7d94203fd5214a366cbc87bfd6944095888f68c0ca6c8da6d2442cd0f6685b381e4be2e5b68c07bc68365ae72
6
+ metadata.gz: 3f5b5326a834f1f972756919ea2f04c9626998be3c9ca058fd386c06787011ad021798e6091eb8eae1f7873dcceb9adcfa02de14a5269dadef4a2902d5475a9d
7
+ data.tar.gz: d74344affb899a6b62a494d02e9058dc338a7be4138b9ce32331d0657bc121035b312da21f48827751dc13e1bdee4511fb6f1eeaf481d39f73e5967ff3243800
@@ -101,6 +101,11 @@ module HPC
101
101
 
102
102
  task = Symbol === job.overriden ? job.overriden : job.task_name
103
103
 
104
+ #override_deps = job.overriden_deps.collect do |dep|
105
+ # name = [dep.workflow.to_s, dep.task_name] * "#"
106
+ # [name, dep.path] * "="
107
+ #end.uniq * ","
108
+
104
109
  if job.overriden?
105
110
  #override_deps = job.rec_dependencies.
106
111
  # select{|dep| Symbol === dep.overriden }.
@@ -568,7 +573,7 @@ env > #{batch_options[:fenv]}
568
573
  Misc.add_defaults options,
569
574
  :batch_dir => batch_dir,
570
575
  :inputs_dir => File.join(batch_dir, "inputs_dir"),
571
- :workflows => workflows_to_load.uniq * ","
576
+ :workflows => workflows_to_load.any? ? workflows_to_load.uniq * "," : nil
572
577
 
573
578
  options[:procpath_performance] ||= File.join(batch_dir, "procpath##{procpath.gsub(',', '#')}") if procpath
574
579
 
@@ -72,10 +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
- if not Step === dep
76
- located = Open.exists?(dep)
77
- dep = Workflow.load_step(dep)
78
- end
75
+ dep = Workflow.load_step(dep) if not Step === dep
79
76
 
80
77
  dep.original_workflow ||= dep.workflow if dep.workflow
81
78
  dep.original_task_name ||= dep.task_name if dep.task_name
@@ -86,7 +83,6 @@ module Workflow
86
83
  dep.workflow = workflow
87
84
  dep.info[:name] = dep.name
88
85
 
89
-
90
86
  begin
91
87
  workflow = Kernel.const_get workflow if String === workflow
92
88
  dep.task = workflow.tasks[task_name] if dep.task.nil? && workflow.tasks.include?(task_name)
@@ -95,13 +91,17 @@ module Workflow
95
91
  end
96
92
 
97
93
  dep.task_name = task_name
98
- dep.overriden = dep.original_task_name.to_sym if dep.original_task_name && located
94
+ dep.overriden = dep.original_task_name.to_sym if dep.original_task_name
99
95
 
100
96
  dep.extend step_module
101
97
 
102
98
  dep
103
99
  end
104
100
 
101
+ def unlocated_override?(dep)
102
+ String === dep && ! (Open.exists?(dep) || Open.exists?(dep + '.info'))
103
+ end
104
+
105
105
  def assign_dep_inputs(_inputs, options, all_d, task_info)
106
106
  IndiferentHash.setup(_inputs)
107
107
 
@@ -153,6 +153,7 @@ module Workflow
153
153
 
154
154
  override_dependencies = override_dependencies(inputs)
155
155
 
156
+ overriden = false
156
157
  dependencies.each do |dependency|
157
158
  _inputs = IndiferentHash.setup(inputs.dup)
158
159
  jobname = orig_jobname
@@ -163,6 +164,7 @@ module Workflow
163
164
  workflow, dep_task, options = dependency
164
165
 
165
166
  if override_dependencies[workflow.to_s] && value = override_dependencies[workflow.to_s][dep_task]
167
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
166
168
  setup_override_dependency(value, workflow, dep_task)
167
169
  else
168
170
 
@@ -175,15 +177,23 @@ module Workflow
175
177
 
176
178
  job = workflow._job(dep_task, jobname, _inputs)
177
179
  ComputeDependency.setup(job, compute) if compute
180
+
181
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
182
+
178
183
  job
179
184
  end
180
185
  when Step
181
- dependency
186
+ job = dependency
187
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
188
+ job
182
189
  when Symbol
183
190
  if override_dependencies[self.to_s] && value = override_dependencies[self.to_s][dependency]
191
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
184
192
  setup_override_dependency(value, self, dependency)
185
193
  else
186
- _job(dependency, jobname, _inputs)
194
+ job = _job(dependency, jobname, _inputs)
195
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
196
+ job
187
197
  end
188
198
  when Proc
189
199
  if DependencyBlock === dependency
@@ -191,6 +201,7 @@ module Workflow
191
201
  wf, task_name, options = orig_dep
192
202
 
193
203
  if override_dependencies[wf.to_s] && value = override_dependencies[wf.to_s][task_name]
204
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
194
205
  dep = setup_override_dependency(value, wf, task_name)
195
206
  else
196
207
 
@@ -206,16 +217,20 @@ module Workflow
206
217
  dep.each{|d|
207
218
  next if d.nil?
208
219
  if Hash === d
220
+ d = d.merge(options)
209
221
  d[:workflow] ||= wf
210
222
  d[:task] ||= task_name
211
223
  _override_dependencies = override_dependencies.merge(override_dependencies(d[:inputs] || {}))
212
224
  d = if _override_dependencies[d[:workflow].to_s] && value = _override_dependencies[d[:workflow].to_s][d[:task]]
225
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
213
226
  setup_override_dependency(value, d[:workflow], d[:task])
214
227
  else
215
228
  task_info = d[:workflow].task_info(d[:task])
216
229
 
217
230
  _inputs = assign_dep_inputs({}, options.merge(d[:inputs] || {}), real_dependencies, task_info)
218
- d[:workflow]._job(d[:task], d[:jobname], _inputs)
231
+ job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
232
+ overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
233
+ job
219
234
  end
220
235
  end
221
236
  ComputeDependency.setup(d, compute) if compute
@@ -230,11 +245,15 @@ module Workflow
230
245
  dep[:workflow] ||= wf || self
231
246
  _override_dependencies = override_dependencies.merge(override_dependencies(dep[:inputs] || {}))
232
247
  if _override_dependencies[dep[:workflow].to_s] && value = _override_dependencies[dep[:workflow].to_s][dep[:task]]
248
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
233
249
  setup_override_dependency(value, dep[:workflow], dep[:task])
234
250
  else
235
251
  task_info = (dep[:task] && dep[:workflow]) ? dep[:workflow].task_info(dep[:task]) : nil
236
252
  _inputs = assign_dep_inputs({}, dep[:inputs], real_dependencies, task_info)
237
- dep = dep[:workflow]._job(dep[:task], dep[:jobname], _inputs)
253
+ job = dep[:workflow]._job(dep[:task], dep[:jobname], _inputs)
254
+ job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
255
+ overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
256
+ job
238
257
  end
239
258
  end
240
259
  end
@@ -246,6 +265,6 @@ module Workflow
246
265
 
247
266
  real_dependencies << real_dep
248
267
  end
249
- real_dependencies.flatten.compact
268
+ [real_dependencies.flatten.compact, overriden]
250
269
  end
251
270
  end
@@ -526,8 +526,9 @@ class Step
526
526
  end
527
527
 
528
528
  def overriden?
529
+ return @overriden
529
530
  return true if @overriden
530
- return true if dependencies && dependencies.select{|dep| dep.overriden? }.any?
531
+ return true if dependencies && dependencies.select{|dep| TrueClass === dep.overriden }.any?
531
532
  info[:archived_info].each do |f,i|
532
533
  next if Symbol === i
533
534
  return true if i[:overriden] || i["overriden"]
@@ -31,6 +31,8 @@ module Workflow
31
31
 
32
32
  type = :step_array if file.split(".").last == 'as_step_array'
33
33
 
34
+ type = :number_array if file.split(".").last == 'as_number_array'
35
+
34
36
  type = :step_file if file.split(".").last == 'as_step_file'
35
37
 
36
38
  type = :step_file_array if file.split(".").last == 'as_step_file_array'
@@ -57,6 +59,9 @@ module Workflow
57
59
  when :step_array
58
60
  steps = Open.read(file).strip.split("\n").collect{|path| Workflow.load_step(path) }
59
61
  inputs[input.to_sym] = steps
62
+ when :number_array
63
+ numbers = Open.read(file).strip.split("\n").collect{|num| num.to_f }
64
+ inputs[input.to_sym] = numbers
60
65
  when :step
61
66
  steps = Open.read(file).strip.split("\n").collect{|path| Workflow.load_step(path) }
62
67
  inputs[input.to_sym] = steps.first
@@ -176,6 +181,8 @@ class Step
176
181
  when Step
177
182
  path = path + '.as_step_array'
178
183
  value = value.collect{|s| s.path }
184
+ when Numeric
185
+ path = path + '.as_number_array'
179
186
  end
180
187
 
181
188
  value = value * "\n"
data/lib/rbbt/workflow.rb CHANGED
@@ -285,6 +285,7 @@ module Workflow
285
285
 
286
286
  workdir[taskname][tagged_jobname].find
287
287
  end
288
+
288
289
  def import_task(workflow, orig, new)
289
290
  orig_task = workflow.tasks[orig]
290
291
  new_task = orig_task.dup
@@ -437,15 +438,13 @@ module Workflow
437
438
  jobname_input = nil
438
439
  end
439
440
 
440
- if jobname_input && jobname && inputs[jobname_input].nil?
441
- inputs[jobname_input] = jobname
441
+ if jobname_input && inputs[jobname_input].nil?
442
+ inputs[jobname_input] = jobname || DEFAULT_NAME
442
443
  end
443
444
 
444
445
  real_inputs = {}
445
- has_overriden_inputs = false
446
446
 
447
447
  inputs.each do |k,v|
448
- #has_overriden_inputs = true if String === k and k.include? "#"
449
448
  next unless (task_inputs.include?(k.to_sym) or task_inputs.include?(k.to_s))
450
449
  default = all_defaults[k]
451
450
  next if default == v
@@ -461,12 +460,10 @@ module Workflow
461
460
 
462
461
  jobname = DEFAULT_NAME if jobname.nil? or jobname.empty?
463
462
 
464
- dependencies = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
465
-
466
- overriden_deps = dependencies.select{|d| d.overriden }
467
- true_overriden_deps = overriden_deps.select{|d| TrueClass === d.overriden }
463
+ dependencies, overriden = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
468
464
 
469
- overriden = has_overriden_inputs || overriden_deps.any?
465
+ #overriden_deps = dependencies.select{|d| Symbol === d.overriden }
466
+ #overriden_target_deps = overriden_deps.select{|d| TrueClass === d.overriden }
470
467
 
471
468
  extension = task.extension
472
469
 
@@ -492,19 +489,20 @@ module Workflow
492
489
  step_path = step_path taskname, jobname, input_values, dependencies, extension
493
490
  end
494
491
 
495
-
496
492
  job = get_job_step step_path, task, input_values, dependencies
497
493
  job.workflow = self
494
+ job.overriden ||= overriden
498
495
  job.clean_name = jobname
499
496
 
500
- case not_overriden
501
- when TrueClass
502
- job.overriden = has_overriden_inputs || true_overriden_deps.any?
503
- when :not_overriden_dep
504
- job.overriden = true if has_overriden_inputs || true_overriden_deps.any?
505
- else
506
- job.overriden = true if has_overriden_inputs || overriden_deps.any?
507
- end
497
+ #iif [job, not_overriden]
498
+ #case not_overriden
499
+ #when TrueClass
500
+ # job.overriden = false
501
+ #when :not_overriden_dep
502
+ # job.overriden = true if overriden_target_deps.any?
503
+ #else
504
+ # job.overriden = true if overriden_deps.any?
505
+ #end
508
506
 
509
507
  job.real_inputs = real_inputs.keys
510
508
  job
@@ -61,7 +61,8 @@ class Step
61
61
  else
62
62
  begin
63
63
  Log.debug "Issuing SLURM job for #{self.path}"
64
- @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
64
+ #@batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
65
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, $slurm_options)
65
66
  if no_load
66
67
  self
67
68
  else
@@ -61,7 +61,8 @@ class Step
61
61
  else
62
62
  begin
63
63
  Log.debug "Issuing SLURM job for #{self.path}"
64
- @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
64
+ #@batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
65
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, $slurm_options)
65
66
  if no_load
66
67
  self
67
68
  else
@@ -61,7 +61,8 @@ class Step
61
61
  else
62
62
  begin
63
63
  Log.debug "Issuing SLURM job for #{self.path}"
64
- @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
64
+ #@batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
65
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, $slurm_options)
65
66
  if no_load
66
67
  self
67
68
  else
@@ -166,6 +166,33 @@ for this dependency
166
166
  dep = dependencies.flatten.first
167
167
  end
168
168
 
169
+ task :overr_orig => :string do
170
+ "over"
171
+ end
172
+
173
+ task :overr_alt => :string do
174
+ "alt"
175
+ end
176
+
177
+ dep :overr_orig
178
+ task :overr_target => :string do
179
+ step(:overr_orig).load.reverse
180
+ end
181
+
182
+ dep :overr_alt, :not_overriden => true
183
+ dep :overr_target, "TestWF#overr_orig" => :overr_alt, :not_overriden => true
184
+ task :overr_action => :string do
185
+ step(:overr_target).load.upcase
186
+ end
187
+
188
+
189
+ dep :overr_alt, :not_overriden => true
190
+ dep :overr_target, "TestWF#overr_orig" => :overr_alt
191
+ task :overr_action2 => :string do
192
+ step(:overr_target).load.upcase
193
+ end
194
+
195
+
169
196
  end
170
197
 
171
198
  TestWF.workdir = Rbbt.tmp.test.jobs.TestWF
@@ -419,7 +446,7 @@ class TestWorkflow < Test::Unit::TestCase
419
446
  TmpFile.with_file do |dir|
420
447
  Path.setup(dir)
421
448
  Step.save_job_inputs(job, dir)
422
- assert_equal Dir.glob(dir + "/*"), [dir.file.find]
449
+ assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.as_path']
423
450
  end
424
451
  end
425
452
 
@@ -427,7 +454,7 @@ class TestWorkflow < Test::Unit::TestCase
427
454
  TmpFile.with_file do |dir|
428
455
  Path.setup(dir)
429
456
  Step.save_job_inputs(job, dir)
430
- assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.yaml']
457
+ assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.as_path']
431
458
  inputs = Workflow.load_inputs(dir, [:file], :file => :file)
432
459
  assert_equal inputs, {:file => 'code'}
433
460
  end
@@ -472,4 +499,18 @@ class TestWorkflow < Test::Unit::TestCase
472
499
  end
473
500
  end
474
501
  end
502
+
503
+ def test_overriden
504
+ job = TestWF.job(:overr_action)
505
+ job.recursive_clean
506
+ assert_equal "TLA", job.run
507
+
508
+ assert Symbol === job.step(:overr_orig).overriden
509
+ assert TrueClass === job.step(:overr_target).overriden
510
+ assert ! job.overriden
511
+
512
+ job = TestWF.job(:overr_action2)
513
+ assert_equal "TLA", job.run
514
+ assert job.overriden
515
+ end
475
516
  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.34.24
4
+ version: 5.34.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-09 00:00:00.000000000 Z
11
+ date: 2022-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake