rbbt-util 5.21.96 → 5.21.97
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rbbt/tsv/attach/util.rb +1 -1
- data/lib/rbbt/tsv/parallel/traverse.rb +3 -0
- data/lib/rbbt/tsv/parser.rb +5 -0
- data/lib/rbbt/tsv/util.rb +1 -1
- data/lib/rbbt/util/R.rb +2 -1
- data/lib/rbbt/util/R/plot.rb +1 -1
- data/lib/rbbt/util/log/progress/report.rb +1 -1
- data/lib/rbbt/util/misc/format.rb +2 -1
- data/lib/rbbt/util/misc/math.rb +17 -6
- data/lib/rbbt/util/open.rb +3 -0
- data/lib/rbbt/util/simpleopt/parse.rb +3 -0
- data/lib/rbbt/workflow/accessor.rb +2 -1
- data/lib/rbbt/workflow/step/dependencies.rb +5 -8
- data/lib/rbbt/workflow/step/run.rb +14 -0
- data/lib/rbbt/workflow/usage.rb +1 -1
- data/share/Rlib/svg.R +8 -8
- data/share/Rlib/util.R +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10ef32da69366f0d5db85823d95e5e2461817656
|
4
|
+
data.tar.gz: 7db675c42bfb34aae38611247d22cc5c3c6e4572
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db31f57eaa344bbbcac12c5a85dad2e46b555f6d19545a55854017c6dc8147d8d321d84f0a2578c29104b1d70b6de322ff5d49dd44c01452fb36fb2ebb59aa0b
|
7
|
+
data.tar.gz: 36f1dbc9bdf5242b02ce9944ce5ae0b93b7b51df4a1a2c68a6370498f7571ca2a9523b5867ce6a637367d26c431d4738a0159de17285f34310a9b0a29d62107a
|
data/lib/rbbt/tsv/attach/util.rb
CHANGED
@@ -276,6 +276,9 @@ module TSV
|
|
276
276
|
traverse_obj(obj.stream, options, &block)
|
277
277
|
when (defined? Step and Step)
|
278
278
|
|
279
|
+
obj.clean if obj.aborted? or obj.recoverable_error?
|
280
|
+
obj.run(true) unless obj.done? or obj.started?
|
281
|
+
|
279
282
|
stream = obj.get_stream
|
280
283
|
|
281
284
|
if stream
|
data/lib/rbbt/tsv/parser.rb
CHANGED
@@ -639,6 +639,11 @@ module TSV
|
|
639
639
|
TSV.identify_field(key_field, fields, field)
|
640
640
|
end
|
641
641
|
|
642
|
+
def rewind
|
643
|
+
stream.reopen(filename, "r") if stream.closed? and filename
|
644
|
+
stream.rewind
|
645
|
+
end
|
646
|
+
|
642
647
|
def self.traverse(stream, options = {}, &block)
|
643
648
|
parser = Parser.new(stream, options)
|
644
649
|
parser.traverse(options, &block)
|
data/lib/rbbt/tsv/util.rb
CHANGED
data/lib/rbbt/util/R.rb
CHANGED
@@ -23,6 +23,7 @@ source('#{UTIL}');
|
|
23
23
|
|
24
24
|
require_sources = source.collect{|source|
|
25
25
|
source = R::LIB_DIR["plot.R"] if source == :plot
|
26
|
+
source = R::LIB_DIR["svg.R"] if source == :svg
|
26
27
|
"source('#{source}')"
|
27
28
|
} * ";\n" if Array === source and source.any?
|
28
29
|
|
@@ -64,7 +65,7 @@ source('#{UTIL}');
|
|
64
65
|
f.puts
|
65
66
|
f.puts script
|
66
67
|
end
|
67
|
-
CMD.cmd("env R_PROFILE='#{init_file}' xterm \"$
|
68
|
+
CMD.cmd("env R_PROFILE='#{init_file}' xterm \"$R_HOME/bin/R\"")
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
data/lib/rbbt/util/R/plot.rb
CHANGED
@@ -165,7 +165,7 @@ module Log
|
|
165
165
|
ellapsed = 0
|
166
166
|
end
|
167
167
|
ellapsed = [ellapsed/3600, ellapsed/60 % 60, ellapsed % 60].map{|t| "%02i" % t }.join(':')
|
168
|
-
done_msg << " " << Log.color(:blue, (@ticks).to_s) << " in " << Log.color(:green, ellapsed)
|
168
|
+
done_msg << " " << Log.color(:blue, (@ticks).to_s) << " #{bytes ? 'bytes' : 'items'} in " << Log.color(:green, ellapsed)
|
169
169
|
@last_count = 0
|
170
170
|
@last_time = @start
|
171
171
|
done_msg << " (" << thr_msg << ")"
|
@@ -165,7 +165,8 @@ module Misc
|
|
165
165
|
(string.respond_to? :valid_encoding and string.valid_encoding)
|
166
166
|
|
167
167
|
if string.respond_to?(:encode)
|
168
|
-
string.encode("UTF-16BE", :invalid => :replace, :undef => :replace, :replace => "?").encode('UTF-8')
|
168
|
+
#string.encode("UTF-16BE", :invalid => :replace, :undef => :replace, :replace => "?").encode('UTF-8')
|
169
|
+
string.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
169
170
|
else
|
170
171
|
require 'iconv'
|
171
172
|
@@ic ||= Iconv.new('UTF-8//IGNORE', 'UTF-8')
|
data/lib/rbbt/util/misc/math.rb
CHANGED
@@ -43,7 +43,7 @@ module Misc
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def self.mean(list)
|
46
|
-
sum(list) / list.compact.length
|
46
|
+
sum(list).to_f / list.compact.length
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.median(array)
|
@@ -52,22 +52,27 @@ module Misc
|
|
52
52
|
(sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
def self.sd(list)
|
55
|
+
def self.variance(list)
|
57
56
|
return nil if list.length < 3
|
58
57
|
mean = mean(list)
|
59
58
|
list = list.compact
|
60
59
|
list_length = list.length
|
61
60
|
|
62
|
-
total_square_distance = 0
|
61
|
+
total_square_distance = 0.0
|
63
62
|
list.each do |value|
|
64
|
-
distance = value - mean
|
63
|
+
distance = value.to_f - mean
|
65
64
|
total_square_distance += distance * distance
|
66
65
|
end
|
67
66
|
|
68
67
|
variance = total_square_distance / (list_length - 1)
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def self.sd(list)
|
73
|
+
return nil if list.length < 3
|
74
|
+
variance = self.variance(list)
|
69
75
|
Math.sqrt(variance)
|
70
|
-
#Math.sqrt(list.compact.inject(0.0){|acc,e| d = e - mean; acc += d * d; acc}) / (list.compact.length - 1)
|
71
76
|
end
|
72
77
|
|
73
78
|
def self.counts(array)
|
@@ -124,4 +129,10 @@ module Misc
|
|
124
129
|
def self.in_delta?(a, b, delta = 0.0001)
|
125
130
|
(a.to_f - b.to_f).abs < delta
|
126
131
|
end
|
132
|
+
|
133
|
+
def self.zscore(e, list)
|
134
|
+
m = Misc.mean(list)
|
135
|
+
sd = Misc.sd(list)
|
136
|
+
(e.to_f - m) / sd
|
137
|
+
end
|
127
138
|
end
|
data/lib/rbbt/util/open.rb
CHANGED
@@ -311,14 +311,17 @@ module Open
|
|
311
311
|
end
|
312
312
|
|
313
313
|
def self.gzip?(file)
|
314
|
+
file = file.find if Path === file
|
314
315
|
!! (file =~ /\.gz$/)
|
315
316
|
end
|
316
317
|
|
317
318
|
def self.bgzip?(file)
|
319
|
+
file = file.find if Path === file
|
318
320
|
!! (file =~ /\.bgz$/)
|
319
321
|
end
|
320
322
|
|
321
323
|
def self.zip?(file)
|
324
|
+
file = file.find if Path === file
|
322
325
|
!! (file =~ /\.zip$/)
|
323
326
|
end
|
324
327
|
|
@@ -4,6 +4,9 @@ module SOPT
|
|
4
4
|
def self.fix_shortcut(short, long)
|
5
5
|
return short unless short and shortcuts.include?(short)
|
6
6
|
|
7
|
+
current = shortcuts.select{|s,l| l == long}.collect{|s,l| s }.first
|
8
|
+
return current if current
|
9
|
+
|
7
10
|
chars = long.chars.to_a
|
8
11
|
current = [chars.shift]
|
9
12
|
short = current * ""
|
@@ -774,7 +774,8 @@ module Workflow
|
|
774
774
|
new_=[]
|
775
775
|
dep.each{|d|
|
776
776
|
if Hash === d
|
777
|
-
|
777
|
+
d[:workflow] ||= self
|
778
|
+
inputs = assign_dep_inputs({}, options.merge(d[:inputs] || {}), real_dependencies, d[:workflow].task_info(d[:task]))
|
778
779
|
d = d[:workflow].job(d[:task], d[:jobname], inputs)
|
779
780
|
end
|
780
781
|
ComputeDependency.setup(d, compute) if compute
|
@@ -6,11 +6,6 @@ class Step
|
|
6
6
|
def self.purge_stream_cache
|
7
7
|
Log.debug "Purging dup. stream cache"
|
8
8
|
STREAM_CACHE_MUTEX.synchronize do
|
9
|
-
#STREAM_CACHE.collect{|k,s|
|
10
|
-
# Thread.new do
|
11
|
-
# Misc.consume_stream s
|
12
|
-
# end
|
13
|
-
#}
|
14
9
|
STREAM_CACHE.clear
|
15
10
|
end
|
16
11
|
end
|
@@ -43,17 +38,18 @@ class Step
|
|
43
38
|
new
|
44
39
|
end
|
45
40
|
end
|
46
|
-
when TSV::Dumper
|
41
|
+
when TSV::Dumper, TSV::Parser
|
42
|
+
orig_stream = stream
|
47
43
|
stream = stream.stream
|
48
44
|
return stream if stream.closed?
|
49
45
|
|
50
46
|
STREAM_CACHE_MUTEX.synchronize do
|
51
47
|
if STREAM_CACHE[stream].nil?
|
52
|
-
Log.high "Not duplicating
|
48
|
+
Log.high "Not duplicating #{Misc.fingerprint orig_stream} #{ stream.inspect }"
|
53
49
|
STREAM_CACHE[stream] = stream
|
54
50
|
else
|
55
51
|
new = Misc.dup_stream(STREAM_CACHE[stream])
|
56
|
-
Log.high "Duplicating
|
52
|
+
Log.high "Duplicating #{Misc.fingerprint orig_stream} #{ stream.inspect } into #{new.inspect}"
|
57
53
|
new
|
58
54
|
end
|
59
55
|
end
|
@@ -64,6 +60,7 @@ class Step
|
|
64
60
|
|
65
61
|
def dup_inputs
|
66
62
|
return if @dupped or ENV["RBBT_NO_STREAM"] == 'true'
|
63
|
+
return if ComputeDependency === self and self.compute == :produce
|
67
64
|
Log.low "Dupping inputs for #{path}"
|
68
65
|
dupped_inputs = @inputs.collect do |input|
|
69
66
|
Step.dup_stream input
|
@@ -51,8 +51,22 @@ class Step
|
|
51
51
|
@inputs.replace new_inputs if step
|
52
52
|
end
|
53
53
|
|
54
|
+
def rewind_inputs
|
55
|
+
return if @inputs.nil?
|
56
|
+
Log.debug "Rewinding inputs for #{path}"
|
57
|
+
@inputs.each do |input|
|
58
|
+
next unless input.respond_to? :rewind
|
59
|
+
begin
|
60
|
+
input.rewind
|
61
|
+
Log.debug "Rewinded #{Misc.fingerprint input}"
|
62
|
+
rescue
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
54
67
|
def _exec
|
55
68
|
resolve_input_steps
|
69
|
+
rewind_inputs
|
56
70
|
@exec = true if @exec.nil?
|
57
71
|
begin
|
58
72
|
old = Signal.trap("INT"){ Thread.current.raise Aborted }
|
data/lib/rbbt/workflow/usage.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rbbt/util/simpleopt'
|
|
3
3
|
module Task
|
4
4
|
def doc(workflow = nil, deps = nil)
|
5
5
|
puts Log.color(:yellow, "## #{ name }") << ":"
|
6
|
-
puts "\n" << description << "\n" if description and not description.empty?
|
6
|
+
puts "\n" << Misc.format_paragraph(description.strip) << "\n" if description and not description.empty?
|
7
7
|
puts
|
8
8
|
|
9
9
|
case
|
data/share/Rlib/svg.R
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
rbbt.require('plyr')
|
2
|
+
rbbt.require('proto')
|
3
|
+
rbbt.require('ggplot2')
|
4
|
+
rbbt.require('gridSVG')
|
5
|
+
rbbt.require('grid')
|
6
|
+
rbbt.require('XML')
|
7
|
+
rbbt.require('ggthemes')
|
8
|
+
rbbt.require('Cairo')
|
9
9
|
|
10
10
|
# Modified from http://aaronecay.com/blog/2014/02/tooltips-in-ggplot/
|
11
11
|
|
data/share/Rlib/util.R
CHANGED
@@ -636,12 +636,13 @@ rbbt.plot.text_scatter <- function(formula, data) {
|
|
636
636
|
|
637
637
|
rbbt.install.CRAN <- function(pkg){
|
638
638
|
res = FALSE
|
639
|
-
tryCatch({ install.packages(pkg); res = TRUE }, error = function(e){ warning(paste("Could not install CRAN ", pkg)); res = FALSE })
|
639
|
+
tryCatch({ install.packages(pkg); library(pkg); res = TRUE }, error = function(e){ warning(paste("Could not install CRAN ", pkg)); res = FALSE })
|
640
640
|
return(res)
|
641
641
|
}
|
642
|
+
|
642
643
|
rbbt.install.bioc <-function(pkg){
|
643
644
|
res = FALSE
|
644
|
-
tryCatch({ source("http://bioconductor.org/biocLite.R"); biocLite(pkg); res = TRUE }, error = function(e){ warning(paste("Could not install Bioconductor ", pkg)); res = FALSE })
|
645
|
+
tryCatch({ source("http://bioconductor.org/biocLite.R"); biocLite(pkg, ask=FALSE, suppressUpdates = TRUE); res = TRUE }, error = function(e){ warning(paste("Could not install Bioconductor ", pkg)); res = FALSE })
|
645
646
|
return(res)
|
646
647
|
}
|
647
648
|
|
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.21.
|
4
|
+
version: 5.21.97
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|