rbbt-util 5.34.24 → 5.34.26

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: 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