rbbt-util 5.17.23 → 5.17.24

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
  SHA1:
3
- metadata.gz: e2fcaa1a8cec7f031c197e5c53d2d00ac527c4c1
4
- data.tar.gz: 5d3cc36a13708b9477fee6b4968ef1db0ca621ff
3
+ metadata.gz: 1b5fa2c99f1f5a1055a498543a82cf6c2e411477
4
+ data.tar.gz: 8aa11e4383e4b2a5c7720c521d46192d2f0c282c
5
5
  SHA512:
6
- metadata.gz: a81edfde27f5e5ba34f2a34fbc3bce55872696380cce3e0e0b72ea185cbbd20a8149e41565e08b6023d40315e9a845dd74d0fea55cda9cb70627b36712a9ede0
7
- data.tar.gz: 9645b3c2c856cb2f9f8d2797090d20496bac1f5f15a9ef8d8c05339b1362f7bcf4fec500aa5029f8105c2d0a4075101ddfab8a3b99634d251b105766bd84ecd5
6
+ metadata.gz: af6894a3cf476efbf5b17447cf70376e37a2c648f8dfeba0acfe13e0272d8f487a7bda9114593497bf0c546d553923c96e74544a6e2d5359b47ec92e61aa0053
7
+ data.tar.gz: 257842a422857624986f833453280ee834a2d1547de0dd595ad191735bed123c746eb2a6a9f08098cb5a11ab9b59bc7dd308c839f8a54109c6d3f4bd295b2feb
data/lib/rbbt/persist.rb CHANGED
@@ -295,11 +295,9 @@ module Persist
295
295
  end
296
296
 
297
297
  rescue Lockfile::StolenLockError
298
- begin
299
- Log.medium "Lockfile stolen: #{path}"
300
- sleep 1 + rand(2)
301
- rescue Exception
302
- end
298
+ Log.medium "Lockfile stolen: #{path} - #{lock_filename}"
299
+ Log.exception $!
300
+ sleep 1 + rand(2)
303
301
  retry
304
302
  rescue Exception
305
303
  Log.medium "Error in persist: #{path}#{Open.exists?(path) ? Log.color(:red, " Erasing") : ""}"
data/lib/rbbt/tsv/util.rb CHANGED
@@ -4,9 +4,11 @@ module TSV
4
4
  def self.reorder_stream(stream, positions, sep = "\t")
5
5
  Misc.open_pipe do |sin|
6
6
  line = stream.gets
7
+ line.strip! unless line.nil?
7
8
  while line =~ /^#\:/
8
9
  sin.puts line
9
10
  line = stream.gets
11
+ line.strip! unless line.nil?
10
12
  end
11
13
  while line =~ /^#/
12
14
  if Hash === positions
@@ -19,6 +21,7 @@ module TSV
19
21
  end
20
22
  sin.puts "#" + line.sub!(/^#/,'').strip.split(sep).values_at(*positions).compact * sep
21
23
  line = stream.gets
24
+ line.strip! unless line.nil?
22
25
  end
23
26
  while line
24
27
  if Hash === positions
@@ -31,6 +34,7 @@ module TSV
31
34
  end
32
35
  sin.puts line.strip.split(sep).values_at(*positions) * sep
33
36
  line = stream.gets
37
+ line.strip! unless line.nil?
34
38
  end
35
39
  end
36
40
  end
data/lib/rbbt/util/R.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'rbbt/util/cmd'
2
2
  require 'rbbt/tsv'
3
3
  require 'rbbt/util/R/eval'
4
+ require 'rbbt/util/R/plot'
5
+ require 'rbbt/util/R/model'
4
6
 
5
7
  module R
6
8
 
@@ -1,4 +1,3 @@
1
- require 'rbbt/util/R'
2
1
 
3
2
  module R
4
3
 
@@ -0,0 +1,109 @@
1
+ module R
2
+ module SVG
3
+ def self.ggplotSVG(data, script = nil, width = nil, height = nil, options = {})
4
+ width ||= 3
5
+ height ||= 3
6
+ values = []
7
+
8
+ options = options.dup
9
+
10
+ sources = [:plot, Rbbt.share.Rlib["svg.R"].find(:lib), options[:source]].flatten.compact
11
+ options.delete :source
12
+
13
+ if data
14
+ data.each do |k,v|
15
+ v = Array === v ? v : [v]
16
+ next if v == "NA" or v.nil? or v.include? "NA" or v.include? nil
17
+ values = v
18
+ break
19
+ end
20
+ values = [values] unless Array === values
21
+ field_classes = values.collect do |v|
22
+ case v
23
+ when FalseClass, TrueClass
24
+ "'logical'"
25
+ when Fixnum, Float
26
+ "'numeric'"
27
+ when String
28
+ if v.strip =~ /^[-+]?[\d\.]+$/
29
+ "'numeric'"
30
+ else
31
+ "'character'"
32
+ end
33
+ when Symbol
34
+ "'factor'"
35
+ else
36
+ ":NA"
37
+ end
38
+ end
39
+ options[:R_open] ||= "colClasses=c('character'," + field_classes * ", " + ')'
40
+
41
+ TmpFile.with_file nil, true, :extension => 'svg' do |tmpfile|
42
+ data.R <<-EOF, sources, options
43
+ plot = { #{script} }
44
+
45
+ rbbt.SVG.save('#{tmpfile}', plot, width = #{R.ruby2R width}, height = #{R.ruby2R height})
46
+ data = NULL
47
+ EOF
48
+ Open.read(tmpfile).gsub(/(glyph\d+-\d+)/, '\1-' + File.basename(tmpfile))
49
+ end
50
+ else
51
+
52
+ TmpFile.with_file nil, true, :extension => 'svg' do |tmpfile|
53
+ R.run <<-EOF, sources, options
54
+ plot = { #{script} }
55
+
56
+ rbbt.SVG.save('#{tmpfile}', plot, width = #{R.ruby2R width}, height = #{R.ruby2R height})
57
+ data = NULL
58
+ EOF
59
+ Open.read(tmpfile).gsub(/(glyph\d+-\d+)/, '\1-' + File.basename(tmpfile))
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ module PNG
66
+
67
+ def self.ggplotPNG(filename, data, script = nil, width = nil, height = nil, options = {})
68
+ width ||= 3
69
+ height ||= 3
70
+ values = []
71
+
72
+ sources = [:plot, options[:source]].flatten.compact
73
+
74
+ data.each do |k,v|
75
+ v = Array === v ? v : [v]
76
+ next if v == "NA" or v.nil? or v.include? "NA" or v.include? nil
77
+ values = v
78
+ break
79
+ end
80
+ values = [values] unless Array === values
81
+ field_classes = values.collect do |v|
82
+ case v
83
+ when FalseClass, TrueClass
84
+ "'logical'"
85
+ when Fixnum, Float
86
+ "'numeric'"
87
+ when String
88
+ if v.strip =~ /^[-+]?[\d\.]+$/
89
+ "'numeric'"
90
+ else
91
+ "'character'"
92
+ end
93
+ when Symbol
94
+ "'factor'"
95
+ else
96
+ ":NA"
97
+ end
98
+ end
99
+ options[:R_open] ||= "colClasses=c('character'," + field_classes * ", " + ')'
100
+
101
+ data.R <<-EOF, :plot, options
102
+ plot = { #{script} }
103
+
104
+ ggsave('#{filename}', plot, width = #{R.ruby2R width}, height = #{R.ruby2R height})
105
+ data = NULL
106
+ EOF
107
+ end
108
+ end
109
+ end
@@ -3,26 +3,25 @@ module Misc
3
3
  if use
4
4
  Log.medium "Activating lockfile ids"
5
5
  Lockfile.dont_use_lock_id = false
6
- Lockfile.refresh = 20
7
- Lockfile.max_age = 60 * 10
8
- Lockfile.suspend = 10
6
+ #Lockfile.refresh = 20
7
+ #Lockfile.max_age = 60
8
+ #Lockfile.suspend = 2
9
9
  else
10
10
  Log.medium "De-activating lockfile ids"
11
11
  Lockfile.dont_use_lock_id = true
12
- Lockfile.refresh = 5
13
- Lockfile.max_age = 30
14
- Lockfile.suspend = 5
12
+ #Lockfile.refresh = 5
13
+ #Lockfile.max_age = 60 * 10
14
+ #Lockfile.suspend = 5
15
15
  end
16
16
 
17
- Lockfile.refresh = 3
18
- Lockfile.max_age = 10
17
+ Lockfile.refresh = 10
18
+ Lockfile.max_age = 60
19
19
  Lockfile.suspend = 2
20
20
  end
21
21
 
22
22
  self.use_lock_id = ENV["RBBT_NO_LOCKFILE_ID"] != "true"
23
23
 
24
24
  LOCK_MUTEX = Mutex.new
25
- #def self.lock(file, unlock = true, options = {})
26
25
  def self.lock(file, unlock = true, options = {})
27
26
  unlock, options = true, unlock if Hash === unlock
28
27
  return yield if file.nil?
@@ -35,7 +34,12 @@ module Misc
35
34
  lockfile = options[:lock]
36
35
  lockfile.lock unless lockfile.locked?
37
36
  when FalseClass
37
+ lockfile = nil
38
38
  unlock = false
39
+ when Path, String
40
+ lock_path = options[:lock]
41
+ lockfile = Lockfile.new(lock_path, options)
42
+ lockfile.lock
39
43
  else
40
44
  lock_path = File.expand_path(file + '.lock')
41
45
  lockfile = Lockfile.new(lock_path, options)
@@ -224,6 +224,9 @@ module Misc
224
224
  lock_options = lock_options[:lock] if Hash === lock_options[:lock]
225
225
  tmp_path = Persist.persistence_path(path, {:dir => Misc.sensiblewrite_dir})
226
226
  tmp_path_lock = Persist.persistence_path(path, {:dir => Misc.sensiblewrite_lock_dir})
227
+
228
+ tmp_path_lock = nil if FalseClass === options[:lock]
229
+
227
230
  Misc.lock tmp_path_lock, lock_options do
228
231
 
229
232
  if Open.exists? path and not force
@@ -264,6 +267,7 @@ module Misc
264
267
  Open.rm path if File.exists? path
265
268
  rescue Exception
266
269
  Log.medium "Exception in sensiblewrite: #{$!.message} -- #{ Log.color :blue, path }"
270
+ Log.exception $!
267
271
  content.abort if content.respond_to? :abort
268
272
  Open.rm path if File.exists? path
269
273
  raise $!
@@ -275,7 +275,7 @@ module Open
275
275
  end
276
276
 
277
277
  def self.lock(file, options = {}, &block)
278
- if (dir_sub_path = find_repo_dir(file))
278
+ if file and (dir_sub_path = find_repo_dir(file))
279
279
  dir, sub_path = dir_sub_path
280
280
  repo = get_repo_from_dir(dir)
281
281
  Misc.lock_in_repo(repo, sub_path, &block)
@@ -14,7 +14,18 @@ class Step
14
14
  jobs = [jobs] if Step === jobs
15
15
  begin
16
16
  threads = []
17
- jobs.each do |j| threads << Thread.new{j.join} end
17
+
18
+ threads = jobs.collect do |j|
19
+ Thread.new do
20
+ begin
21
+ j.join
22
+ rescue Exception
23
+ Log.error "Exception waiting for job: #{Log.color :blue, j.path}"
24
+ raise $!
25
+ end
26
+ end
27
+ end
28
+
18
29
  threads.each{|t| t.join }
19
30
  rescue Exception
20
31
  threads.each{|t| t.exit }
@@ -65,10 +76,11 @@ class Step
65
76
  end
66
77
 
67
78
  def info_lock
68
- @info_lock ||= begin
69
- path = Persist.persistence_path(info_file + '.lock', {:dir => Step.lock_dir})
70
- Lockfile.new path
71
- end
79
+ @info_lock = begin
80
+ path = Persist.persistence_path(info_file + '.lock', {:dir => Step.lock_dir})
81
+ Lockfile.new path, :refresh => false, :dont_use_lock_id => true
82
+ end if @info_lock.nil?
83
+ @info_lock
72
84
  end
73
85
 
74
86
  def info(check_lock = true)
@@ -125,7 +137,7 @@ class Step
125
137
  i = info(false)
126
138
  i.merge! hash
127
139
  @info_cache = i
128
- Misc.sensiblewrite(info_file, INFO_SERIALIAZER.dump(i), :force => true)
140
+ Misc.sensiblewrite(info_file, INFO_SERIALIAZER.dump(i), :force => true, :lock => false)
129
141
  @info_cache_time = Time.now
130
142
  value
131
143
  end
@@ -248,7 +260,9 @@ class Step
248
260
 
249
261
  def log(status, message = nil, &block)
250
262
  self.status = status
251
- self.message Log.uncolor(message)
263
+ if message
264
+ self.message Log.uncolor(message)
265
+ end
252
266
  Step.log(status, message, path, &block)
253
267
  end
254
268
 
@@ -517,7 +531,6 @@ module Workflow
517
531
  when Array
518
532
  workflow, task, options = dependency
519
533
 
520
- #options = dependency.last if Hash === dependency.last
521
534
  _inputs = IndiferentHash.setup(inputs.dup)
522
535
  options.each{|i,v|
523
536
  case v
data/share/Rlib/svg.R ADDED
@@ -0,0 +1,59 @@
1
+ library(plyr)
2
+ library(proto)
3
+ library(ggplot2)
4
+ library(gridSVG)
5
+ library(grid)
6
+ library(XML)
7
+ library(ggthemes)
8
+ library(Cairo)
9
+
10
+ # Modified from http://aaronecay.com/blog/2014/02/tooltips-in-ggplot/
11
+
12
+ rbbt.SVG.extract <- function(plot, size=NULL, prefix=NULL, ...){
13
+
14
+ if (is.null(prefix)) prefix = rbbt.random_string();
15
+ if (is.null(size)){
16
+ print(plot, type='cairo');
17
+ mysvg <- grid.export(prefix=prefix, ...)
18
+ }else{
19
+ base.size = 10 * (7/size)
20
+ resolution = 72 * (size/7)
21
+
22
+ if (length(plot$theme) == 0) plot <- plot + theme_gdocs();
23
+
24
+ plot$theme$text$size = base.size
25
+
26
+ print(plot, type='cairo')
27
+
28
+ mysvg <- grid.export(res=resolution, prefix=prefix, ...)
29
+ }
30
+
31
+ xml <- saveXML(mysvg$svg)
32
+ xml
33
+ }
34
+
35
+ rbbt.SVG.save <- function(filename, plot, width=NULL, height=NULL){
36
+ if (is.null(width)){
37
+ if (is.null(height)){
38
+ size = NULL
39
+ }else{
40
+ size=height
41
+ }
42
+ }else{
43
+ if (is.null(height)){
44
+ size = width
45
+ }else{
46
+ size=max(width, height)
47
+ }
48
+ }
49
+
50
+ xml = rbbt.SVG.extract(plot, size)
51
+ fileConn<-file(filename, 'w')
52
+ cat(xml, file=fileConn)
53
+ close(fileConn)
54
+ }
55
+
56
+ rbbt.SVG.save.fast <- function(filename, plot, width=3, height=3){
57
+ ggsave(file=filename, plot, width=width, height=height);
58
+ }
59
+
@@ -3,7 +3,6 @@
3
3
  require 'rbbt/util/simpleopt'
4
4
  require 'rbbt/workflow'
5
5
 
6
- require 'zurb-foundation'
7
6
  require 'modular-scale'
8
7
 
9
8
  require 'rbbt/rest/main'
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.17.23
4
+ version: 5.17.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-14 00:00:00.000000000 Z
11
+ date: 2015-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -216,6 +216,7 @@ files:
216
216
  - lib/rbbt/util/R.rb
217
217
  - lib/rbbt/util/R/eval.rb
218
218
  - lib/rbbt/util/R/model.rb
219
+ - lib/rbbt/util/R/plot.rb
219
220
  - lib/rbbt/util/chain_methods.rb
220
221
  - lib/rbbt/util/cmd.rb
221
222
  - lib/rbbt/util/color.rb
@@ -274,6 +275,7 @@ files:
274
275
  - lib/rbbt/workflow/task.rb
275
276
  - lib/rbbt/workflow/usage.rb
276
277
  - share/Rlib/plot.R
278
+ - share/Rlib/svg.R
277
279
  - share/Rlib/util.R
278
280
  - share/config.ru
279
281
  - share/install/software/lib/install_helpers