rbbt-util 5.44.1 → 6.0.4

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.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/bin/rbbt +67 -90
  4. data/bin/rbbt_exec.rb +2 -2
  5. data/etc/app.d/base.rb +2 -2
  6. data/etc/app.d/semaphores.rb +3 -3
  7. data/lib/rbbt/annotations/annotated_array.rb +207 -207
  8. data/lib/rbbt/annotations/refactor.rb +27 -0
  9. data/lib/rbbt/annotations/util.rb +282 -282
  10. data/lib/rbbt/annotations.rb +343 -320
  11. data/lib/rbbt/association/database.rb +200 -225
  12. data/lib/rbbt/association/index.rb +294 -291
  13. data/lib/rbbt/association/item.rb +227 -227
  14. data/lib/rbbt/association/open.rb +35 -34
  15. data/lib/rbbt/association/util.rb +0 -169
  16. data/lib/rbbt/association.rb +2 -4
  17. data/lib/rbbt/entity/identifiers.rb +119 -118
  18. data/lib/rbbt/entity/refactor.rb +12 -0
  19. data/lib/rbbt/entity.rb +319 -315
  20. data/lib/rbbt/hpc/batch.rb +72 -53
  21. data/lib/rbbt/hpc/lsf.rb +2 -2
  22. data/lib/rbbt/hpc/orchestrate/batches.rb +2 -2
  23. data/lib/rbbt/hpc/orchestrate/chains.rb +25 -5
  24. data/lib/rbbt/hpc/orchestrate/rules.rb +2 -2
  25. data/lib/rbbt/hpc/orchestrate.rb +19 -13
  26. data/lib/rbbt/hpc/slurm.rb +18 -18
  27. data/lib/rbbt/knowledge_base/entity.rb +13 -5
  28. data/lib/rbbt/knowledge_base/query.rb +2 -2
  29. data/lib/rbbt/knowledge_base/registry.rb +32 -31
  30. data/lib/rbbt/knowledge_base/traverse.rb +1 -1
  31. data/lib/rbbt/knowledge_base.rb +1 -1
  32. data/lib/rbbt/monitor.rb +36 -25
  33. data/lib/rbbt/persist/refactor.rb +166 -0
  34. data/lib/rbbt/persist/tsv/tokyocabinet.rb +105 -105
  35. data/lib/rbbt/persist/tsv.rb +187 -185
  36. data/lib/rbbt/persist.rb +556 -551
  37. data/lib/rbbt/refactor.rb +20 -0
  38. data/lib/rbbt/resource/path/refactor.rb +178 -0
  39. data/lib/rbbt/resource/path.rb +317 -497
  40. data/lib/rbbt/resource/util.rb +0 -48
  41. data/lib/rbbt/resource.rb +3 -390
  42. data/lib/rbbt/tsv/accessor.rb +2 -838
  43. data/lib/rbbt/tsv/attach.rb +303 -299
  44. data/lib/rbbt/tsv/change_id.rb +244 -245
  45. data/lib/rbbt/tsv/csv.rb +87 -85
  46. data/lib/rbbt/tsv/dumper.rb +2 -100
  47. data/lib/rbbt/tsv/excel.rb +26 -24
  48. data/lib/rbbt/tsv/field_index.rb +4 -1
  49. data/lib/rbbt/tsv/filter.rb +3 -2
  50. data/lib/rbbt/tsv/index.rb +2 -284
  51. data/lib/rbbt/tsv/manipulate.rb +750 -747
  52. data/lib/rbbt/tsv/marshal.rb +3 -3
  53. data/lib/rbbt/tsv/matrix.rb +2 -2
  54. data/lib/rbbt/tsv/parallel/through.rb +2 -1
  55. data/lib/rbbt/tsv/parallel/traverse.rb +783 -781
  56. data/lib/rbbt/tsv/parser.rb +678 -678
  57. data/lib/rbbt/tsv/refactor.rb +195 -0
  58. data/lib/rbbt/tsv/stream.rb +253 -251
  59. data/lib/rbbt/tsv/util.rb +420 -420
  60. data/lib/rbbt/tsv.rb +210 -208
  61. data/lib/rbbt/util/R/eval.rb +4 -4
  62. data/lib/rbbt/util/R/plot.rb +62 -166
  63. data/lib/rbbt/util/R.rb +21 -18
  64. data/lib/rbbt/util/cmd.rb +2 -318
  65. data/lib/rbbt/util/color.rb +269 -269
  66. data/lib/rbbt/util/colorize.rb +89 -89
  67. data/lib/rbbt/util/concurrency/processes/refactor.rb +22 -0
  68. data/lib/rbbt/util/concurrency/processes/worker.rb +2 -2
  69. data/lib/rbbt/util/concurrency/processes.rb +389 -386
  70. data/lib/rbbt/util/config.rb +169 -167
  71. data/lib/rbbt/util/filecache.rb +1 -1
  72. data/lib/rbbt/util/iruby.rb +20 -0
  73. data/lib/rbbt/util/log/progress/report.rb +241 -241
  74. data/lib/rbbt/util/log/progress/util.rb +99 -99
  75. data/lib/rbbt/util/log/progress.rb +102 -102
  76. data/lib/rbbt/util/log/refactor.rb +49 -0
  77. data/lib/rbbt/util/log.rb +486 -532
  78. data/lib/rbbt/util/migrate.rb +2 -2
  79. data/lib/rbbt/util/misc/concurrent_stream.rb +248 -246
  80. data/lib/rbbt/util/misc/development.rb +12 -11
  81. data/lib/rbbt/util/misc/exceptions.rb +117 -112
  82. data/lib/rbbt/util/misc/format.rb +2 -230
  83. data/lib/rbbt/util/misc/indiferent_hash.rb +2 -107
  84. data/lib/rbbt/util/misc/inspect.rb +2 -476
  85. data/lib/rbbt/util/misc/lock.rb +109 -106
  86. data/lib/rbbt/util/misc/omics.rb +9 -1
  87. data/lib/rbbt/util/misc/pipes.rb +765 -793
  88. data/lib/rbbt/util/misc/refactor.rb +20 -0
  89. data/lib/rbbt/util/misc/ssw.rb +27 -17
  90. data/lib/rbbt/util/misc/system.rb +92 -105
  91. data/lib/rbbt/util/misc.rb +39 -20
  92. data/lib/rbbt/util/named_array/refactor.rb +4 -0
  93. data/lib/rbbt/util/named_array.rb +3 -220
  94. data/lib/rbbt/util/open/refactor.rb +7 -0
  95. data/lib/rbbt/util/open.rb +3 -857
  96. data/lib/rbbt/util/procpath.rb +6 -6
  97. data/lib/rbbt/util/python/paths.rb +27 -0
  98. data/lib/rbbt/util/python/run.rb +115 -0
  99. data/lib/rbbt/util/python/script.rb +110 -0
  100. data/lib/rbbt/util/python/util.rb +3 -3
  101. data/lib/rbbt/util/python.rb +22 -81
  102. data/lib/rbbt/util/semaphore.rb +152 -148
  103. data/lib/rbbt/util/simpleopt.rb +9 -8
  104. data/lib/rbbt/util/ssh/refactor.rb +19 -0
  105. data/lib/rbbt/util/ssh.rb +122 -118
  106. data/lib/rbbt/util/tar.rb +117 -115
  107. data/lib/rbbt/util/tmpfile.rb +69 -67
  108. data/lib/rbbt/util/version.rb +2 -0
  109. data/lib/rbbt/workflow/refactor/entity.rb +11 -0
  110. data/lib/rbbt/workflow/refactor/export.rb +66 -0
  111. data/lib/rbbt/workflow/refactor/inputs.rb +24 -0
  112. data/lib/rbbt/workflow/refactor/recursive.rb +64 -0
  113. data/lib/rbbt/workflow/refactor/task_info.rb +66 -0
  114. data/lib/rbbt/workflow/refactor.rb +150 -0
  115. data/lib/rbbt/workflow/remote_workflow/driver/rest.rb +1 -2
  116. data/lib/rbbt/workflow/remote_workflow/driver/ssh.rb +55 -32
  117. data/lib/rbbt/workflow/remote_workflow/remote_step/rest.rb +3 -1
  118. data/lib/rbbt/workflow/remote_workflow/remote_step/ssh.rb +14 -5
  119. data/lib/rbbt/workflow/remote_workflow/remote_step.rb +19 -7
  120. data/lib/rbbt/workflow/remote_workflow.rb +6 -1
  121. data/lib/rbbt/workflow/step/run.rb +766 -766
  122. data/lib/rbbt/workflow/step/save_load_inputs.rb +254 -254
  123. data/lib/rbbt/workflow/step.rb +2 -362
  124. data/lib/rbbt/workflow/task.rb +118 -118
  125. data/lib/rbbt/workflow/usage.rb +289 -287
  126. data/lib/rbbt/workflow/util/archive.rb +6 -5
  127. data/lib/rbbt/workflow/util/data.rb +1 -1
  128. data/lib/rbbt/workflow/util/orchestrator.rb +249 -246
  129. data/lib/rbbt/workflow/util/trace.rb +79 -44
  130. data/lib/rbbt/workflow.rb +4 -882
  131. data/lib/rbbt-util.rb +21 -13
  132. data/lib/rbbt.rb +16 -3
  133. data/python/rbbt/__init__.py +96 -4
  134. data/python/rbbt/workflow/remote.py +104 -0
  135. data/python/rbbt/workflow.py +64 -0
  136. data/python/test.py +10 -0
  137. data/share/Rlib/plot.R +37 -37
  138. data/share/Rlib/svg.R +22 -5
  139. data/share/install/software/lib/install_helpers +1 -1
  140. data/share/rbbt_commands/hpc/list +2 -3
  141. data/share/rbbt_commands/hpc/orchestrate +4 -4
  142. data/share/rbbt_commands/hpc/tail +2 -0
  143. data/share/rbbt_commands/hpc/task +10 -7
  144. data/share/rbbt_commands/lsf/list +2 -3
  145. data/share/rbbt_commands/lsf/orchestrate +4 -4
  146. data/share/rbbt_commands/lsf/tail +2 -0
  147. data/share/rbbt_commands/lsf/task +10 -7
  148. data/share/rbbt_commands/migrate +1 -1
  149. data/share/rbbt_commands/pbs/list +2 -3
  150. data/share/rbbt_commands/pbs/orchestrate +4 -4
  151. data/share/rbbt_commands/pbs/tail +2 -0
  152. data/share/rbbt_commands/pbs/task +10 -7
  153. data/share/rbbt_commands/resource/produce +8 -1
  154. data/share/rbbt_commands/slurm/list +2 -3
  155. data/share/rbbt_commands/slurm/orchestrate +4 -4
  156. data/share/rbbt_commands/slurm/tail +2 -0
  157. data/share/rbbt_commands/slurm/task +10 -7
  158. data/share/rbbt_commands/system/clean +5 -5
  159. data/share/rbbt_commands/system/status +5 -5
  160. data/share/rbbt_commands/tsv/get +2 -3
  161. data/share/rbbt_commands/tsv/info +10 -13
  162. data/share/rbbt_commands/tsv/keys +18 -14
  163. data/share/rbbt_commands/tsv/slice +2 -2
  164. data/share/rbbt_commands/tsv/transpose +6 -2
  165. data/share/rbbt_commands/workflow/info +20 -24
  166. data/share/rbbt_commands/workflow/list +1 -1
  167. data/share/rbbt_commands/workflow/prov +20 -13
  168. data/share/rbbt_commands/workflow/retry +43 -0
  169. data/share/rbbt_commands/workflow/server +12 -2
  170. data/share/rbbt_commands/workflow/task +80 -73
  171. data/share/rbbt_commands/workflow/write_info +26 -9
  172. data/share/software/opt/ssw/ssw.c +861 -0
  173. data/share/software/opt/ssw/ssw.h +130 -0
  174. data/share/workflow_config.ru +3 -3
  175. metadata +45 -6
@@ -1,4 +1,4 @@
1
- require 'rbbt/util/cmd'
1
+ require 'scout/cmd'
2
2
  module ProcPath
3
3
  CMD.tool :procpath do
4
4
  'pip install procpath'
@@ -6,11 +6,11 @@ module ProcPath
6
6
 
7
7
  def self.record(pid, path, options = {})
8
8
  IndiferentHash.setup(options)
9
- options = Misc.add_defaults options, "interval" => 30
9
+ options = IndiferentHash.add_defaults options, "interval" => 30
10
10
 
11
11
  cmd_options = %w(interval recnum reevalnum).inject({}){|acc,k| acc[k] = options[k]; acc}
12
12
 
13
- Log.debug "ProcPath recording #{pid} in #{path} (#{Misc.fingerprint options})"
13
+ Log.debug "ProcPath recording #{pid} in #{path} (#{Log.fingerprint options})"
14
14
  procpath_thread = Thread.new do
15
15
  begin
16
16
  procpath_pid = CMD.cmd_pid(:procpath, "record --database-file '#{path}' '$..children[?(@.stat.pid == #{pid})]'", cmd_options.merge(:nofail => true, :add_option_dashes => true))
@@ -28,7 +28,7 @@ module ProcPath
28
28
 
29
29
  def self.plot(path, output, options = {})
30
30
  IndiferentHash.setup(options)
31
- options = Misc.add_defaults options, "query-name" => 'rss', 'epsilon' => 0.5, "moving-average-window" => 10
31
+ options = IndiferentHash.add_defaults options, "query-name" => 'rss', 'epsilon' => 0.5, "moving-average-window" => 10
32
32
 
33
33
  cmd_options = %w(query-name epsilon monitor-average-window title logarithmic after before custom-query-file custom-value-expr).inject({}){|acc,k| acc[k] = options[k]; acc}
34
34
  CMD.cmd_log(:procpath, "plot --database-file '#{path}' --plot-file '#{output}' ", cmd_options.merge(:nofail => true, :add_option_dashes => true))
@@ -36,10 +36,10 @@ module ProcPath
36
36
 
37
37
  def self.monitor(pid, path)
38
38
  database, options_str = path.split("#")
39
- options = options_str.nil? ? {} : Misc.string2hash(options_str)
39
+ options = options_str.nil? ? {} : IndiferentHash.string2hash(options_str)
40
40
 
41
41
  database = File.expand_path database
42
- Log.low "ProcPath monitor #{pid} in #{database} (#{Misc.fingerprint options})"
42
+ Log.low "ProcPath monitor #{pid} in #{database} (#{Log.fingerprint options})"
43
43
 
44
44
  ProcPath.record(pid, database + '.sqlite3', options)
45
45
  ProcPath.plot(database + '.sqlite3', database + '.cpu.svg', options.merge("query-name" => 'cpu'))
@@ -0,0 +1,27 @@
1
+ module RbbtPython
2
+ class << self
3
+ attr_accessor :paths
4
+ def paths
5
+ @paths ||= []
6
+ end
7
+ end
8
+
9
+ def self.add_path(path)
10
+ self.paths << path
11
+ end
12
+
13
+ def self.add_paths(paths)
14
+ self.paths.concat paths
15
+ end
16
+
17
+ def self.process_paths
18
+ RbbtPython.run_direct 'sys' do
19
+ RbbtPython.paths.each do |path|
20
+ sys.path.append path
21
+ end
22
+ nil
23
+ end
24
+ end
25
+
26
+ add_paths(Rbbt.python.find_all)
27
+ end
@@ -0,0 +1,115 @@
1
+ module RbbtPython
2
+ class << self
3
+ attr_accessor :thread
4
+ end
5
+
6
+ def self.thread
7
+ @thread ||= defined?(@thread) ? @thread : nil
8
+ end
9
+
10
+ MUTEX= Mutex.new
11
+ QUEUE_IN ||= Queue.new
12
+ QUEUE_OUT ||= Queue.new
13
+ def self.synchronize(&block)
14
+ MUTEX.synchronize &block
15
+ end
16
+
17
+ def self.init_thread
18
+ if defined?(self.thread) && (self.thread && ! self.thread.alive?)
19
+ Log.warn "Reloading RbbtPython thread"
20
+ self.thread.join
21
+ self.thread = nil
22
+ end
23
+
24
+ self.thread ||= Thread.new do
25
+ require 'pycall'
26
+ RbbtPython.process_paths
27
+ begin
28
+ while block = QUEUE_IN.pop
29
+ break if block == :stop
30
+ res =
31
+ begin
32
+ module_eval(&block)
33
+ rescue Exception
34
+ Log.exception $!
35
+ raise $!
36
+ end
37
+
38
+ QUEUE_OUT.push res
39
+ end
40
+ rescue Exception
41
+ Log.exception $!
42
+ raise $!
43
+ ensure
44
+ PyCall.finalize if PyCall.respond_to?(:finalize)
45
+ end
46
+ end
47
+ end
48
+
49
+ def self.run_in_thread(&block)
50
+ self.synchronize do
51
+ init_thread
52
+ QUEUE_IN.push block
53
+ QUEUE_OUT.pop
54
+ end
55
+ end
56
+
57
+ def self.stop_thread
58
+ self.synchronize do
59
+ QUEUE_IN.push :stop
60
+ end if self.thread && self.thread.alive?
61
+ self.thread.join if self.thread
62
+ end
63
+
64
+ def self.run_direct(mod = nil, imports = nil, &block)
65
+ if mod
66
+ if Hash === imports
67
+ pyimport mod, **imports
68
+ elsif imports.nil?
69
+ pyimport mod
70
+ else
71
+ pyfrom mod, :import => imports
72
+ end
73
+ end
74
+
75
+ module_eval(&block)
76
+ end
77
+
78
+ def self.run_threaded(mod = nil, imports = nil, &block)
79
+ run_in_thread do
80
+ if Hash === imports
81
+ pyimport mod, **imports
82
+ elsif imports.nil?
83
+ pyimport mod
84
+ else
85
+ pyfrom mod, :import => imports
86
+ end
87
+ end if mod
88
+
89
+ run_in_thread(&block)
90
+ end
91
+
92
+ def self.run_simple(mod = nil, imports = nil, &block)
93
+ self.synchronize do
94
+ RbbtPython.process_paths
95
+ run_direct(mod, imports, &block)
96
+ end
97
+ end
98
+
99
+ class << self
100
+ alias run run_simple
101
+ end
102
+
103
+ def self.run_log(mod = nil, imports = nil, severity = 0, severity_err = nil, &block)
104
+ Log.trap_std("Python STDOUT", "Python STDERR", severity, severity_err) do
105
+ run(mod, imports, &block)
106
+ end
107
+ end
108
+
109
+ def self.run_log_stderr(mod = nil, imports = nil, severity = 0, &block)
110
+ Log.trap_stderr("Python STDERR", severity) do
111
+ run(mod, imports, &block)
112
+ end
113
+ end
114
+
115
+ end
@@ -0,0 +1,110 @@
1
+ module RbbtPython
2
+ def self.ruby2python(object)
3
+ case object
4
+ when Float::INFINITY
5
+ "inf"
6
+ when nil
7
+ "None"
8
+ when ":NA"
9
+ "None"
10
+ when Symbol
11
+ "#{ object }"
12
+ when String
13
+ object = object.dup if Path === object
14
+ object[0] == ":" ? object[1..-1] : "'#{ object }'"
15
+ when Numeric
16
+ object
17
+ when TrueClass
18
+ "True"
19
+ when FalseClass
20
+ "False"
21
+ when Array
22
+ "[#{object.collect{|e| ruby2python(e) } * ", "}]"
23
+ when Hash
24
+ "{" << object.collect{|k,v| [ruby2python(k.to_s), ruby2python(v)] * ":"} * ", " << "}"
25
+ else
26
+ raise "Type of object not known: #{ object.inspect }"
27
+ end
28
+ end
29
+
30
+ def self.load_script_variables(variables = {})
31
+ code = "# Variables\nimport rbbt\n"
32
+ tmp_files = []
33
+ variables.each do |name,value|
34
+ case value
35
+ when TSV
36
+ tmp_file = TmpFile.tmp_file
37
+ tmp_files << tmp_file
38
+ Open.write(tmp_file, value.to_s)
39
+ code << "#{name} = rbbt.tsv('#{tmp_file}')" << "\n"
40
+ else
41
+ code << "#{name} = #{RbbtPython.ruby2python(value)}" << "\n"
42
+ end
43
+ end
44
+
45
+ [code, tmp_files]
46
+ end
47
+
48
+ def self.save_script_result_pickle(file)
49
+ <<-EOF
50
+
51
+ # Save
52
+ try: result
53
+ except NameError: result = None
54
+ if result is not None:
55
+ import pickle
56
+ file = open('#{file}', 'wb')
57
+ # dump information to that file
58
+ pickle.dump(result, file)
59
+ EOF
60
+ end
61
+
62
+ def self.load_pickle(file)
63
+ require 'python/pickle'
64
+ Log.debug ("Loading pickle #{file}")
65
+ Python::Pickle.load_file(file)
66
+ end
67
+
68
+ def self.save_script_result_json(file)
69
+ <<-EOF
70
+
71
+ # Save
72
+ try: result
73
+ except NameError: result = None
74
+ if result is not None:
75
+ import json
76
+ file = open('#{file}', 'w', encoding='utf-8')
77
+ # dump information to that file
78
+ file.write(json.dumps(result))
79
+ file.flush
80
+ file.close
81
+ EOF
82
+ end
83
+
84
+ def self.load_json(file)
85
+ JSON.load_file(file)
86
+ end
87
+
88
+ class << self
89
+ alias save_script_result save_script_result_pickle
90
+ alias load_result load_pickle
91
+ end
92
+
93
+ def self.script(text, variables = {})
94
+ if variables.any?
95
+ variable_definitions, tmp_files = load_script_variables(variables)
96
+ text = variable_definitions + "\n# Script\n" + text
97
+ end
98
+
99
+ TmpFile.with_file do |tmp_file|
100
+ text += save_script_result(tmp_file)
101
+ Log.debug "Running python script:\n#{text.dup}"
102
+ path_env = RbbtPython.paths * ":"
103
+ CMD.cmd_log("env PYTHONPATH=#{path_env} python", {in: text})
104
+ tmp_files.each{|file| Open.rm_rf file } if tmp_files
105
+ if Open.exists?(tmp_file)
106
+ load_result(tmp_file)
107
+ end
108
+ end
109
+ end
110
+ end
@@ -10,7 +10,7 @@ module RbbtPython
10
10
 
11
11
  def self.tsv2df(tsv)
12
12
  df = nil
13
- RbbtPython.run 'pandas' do
13
+ RbbtPython.run_direct 'pandas' do
14
14
  df = pandas.DataFrame.new(tsv.values, columns: tsv.fields, index: tsv.keys)
15
15
  df.columns.name = tsv.key_field
16
16
  end
@@ -21,9 +21,9 @@ module RbbtPython
21
21
  options = Misc.add_defaults options, :type => :list
22
22
  IndiferentHash.setup options
23
23
  tsv = TSV.setup({}, options)
24
- tsv.key_field = options[:key_field] || tuple.columns.name
24
+ tsv.key_field = options[:key_field] || tuple.columns.name.to_s
25
25
  tsv.fields = py2ruby_a(tuple.columns.values)
26
- keys = tuple.index.values
26
+ keys = py2ruby_a(tuple.index.values)
27
27
  PyCall.len(tuple.index).times do |i|
28
28
  k = keys[i]
29
29
  tsv[k] = py2ruby_a(tuple.values[i])
@@ -1,6 +1,10 @@
1
1
  require 'rbbt-util'
2
- require 'pycall/import'
2
+ require 'rbbt/util/python/paths'
3
+ require 'rbbt/util/python/run'
3
4
  require 'rbbt/util/python/util'
5
+ require 'rbbt/util/python/script'
6
+
7
+ require 'pycall/import'
4
8
 
5
9
  module RbbtPython
6
10
  extend PyCall::Import
@@ -15,41 +19,19 @@ module RbbtPython
15
19
  end
16
20
  end
17
21
 
18
- def self.script(text, options = {})
19
- Log.debug "Running python script:\n#{text.dup}"
20
- text = StringIO.new text unless IO === text
21
- CMD.cmd_log(:python, options.merge(:in => text))
22
- end
23
-
24
- def self.add_path(path)
25
- begin
26
- self.run 'sys' do
27
- sys.path.append path
28
- end
29
- rescue
30
- raise RbbtPythonException,
31
- "Could not add path #{Misc.fingerprint path} to python sys: " + $!.message
32
- end
33
- end
34
-
35
- def self.add_paths(paths)
36
- self.run 'sys' do
37
- paths.each do |path|
38
- sys.path.append path
39
- end
40
- end
41
- end
42
-
43
22
  def self.init_rbbt
44
23
  if ! defined?(@@__init_rbbt_python) || ! @@__init_rbbt_python
45
- Log.debug "Loading python 'rbbt' module into pycall RbbtPython module"
46
- RbbtPython.add_paths(Rbbt.python.find_all)
47
- RbbtPython.pyimport("rbbt")
24
+ RbbtPython.process_paths
25
+ res = RbbtPython.run do
26
+ Log.debug "Loading python 'rbbt' module into pycall RbbtPython module"
27
+ pyimport("rbbt")
28
+ end
48
29
  @@__init_rbbt_python = true
49
30
  end
50
31
  end
51
32
 
52
33
  def self.import_method(module_name, method_name, as = nil)
34
+ init_rbbt
53
35
  RbbtPython.pyfrom module_name, import: method_name
54
36
  RbbtPython.method(method_name)
55
37
  end
@@ -57,11 +39,17 @@ module RbbtPython
57
39
  def self.call_method(module_name, method_name, *args)
58
40
  RbbtPython.import_method(module_name, method_name).call(*args)
59
41
  end
60
-
61
- def self.get_class(module_name, class_name)
42
+
43
+ def self.get_module(module_name)
44
+ init_rbbt
62
45
  save_module_name = module_name.to_s.gsub(".", "_")
63
46
  RbbtPython.pyimport(module_name, as: save_module_name)
64
- RbbtPython.send(save_module_name).send(class_name)
47
+ RbbtPython.send(save_module_name)
48
+ end
49
+
50
+ def self.get_class(module_name, class_name)
51
+ mod = get_module(module_name)
52
+ mod.send(class_name)
65
53
  end
66
54
 
67
55
  def self.class_new_obj(module_name, class_name, args={})
@@ -73,7 +61,6 @@ module RbbtPython
73
61
  end
74
62
 
75
63
  def self.iterate_index(elem, options = {})
76
- iii :interate_index
77
64
  bar = options[:bar]
78
65
 
79
66
  len = PyCall.len(elem)
@@ -152,54 +139,6 @@ module RbbtPython
152
139
  acc
153
140
  end
154
141
 
155
- def self.run(mod = nil, imports = nil, &block)
156
- if mod
157
- if Hash === imports
158
- pyimport mod, **imports
159
- elsif imports.nil?
160
- pyimport mod
161
- else
162
- pyfrom mod, :import => imports
163
- end
164
- end
165
-
166
- module_eval(&block)
167
- end
168
-
169
- def self.run_log(mod = nil, imports = nil, severity = 0, severity_err = nil, &block)
170
- if mod
171
- if imports == "*" || imports == ["*"]
172
- pyfrom mod
173
- elsif Array === imports
174
- pyfrom mod, :import => imports
175
- elsif Hash === imports
176
- pyimport mod, imports
177
- else
178
- pyimport mod
179
- end
180
- end
181
-
182
- Log.trap_std("Python STDOUT", "Python STDERR", severity, severity_err) do
183
- module_eval(&block)
184
- end
185
- end
186
-
187
- def self.run_log_stderr(mod = nil, imports = nil, severity = 0, &block)
188
- if mod
189
- if Array === imports
190
- pyfrom mod, :import => imports
191
- elsif Hash === imports
192
- pyimport mod, imports
193
- else
194
- pyimport mod
195
- end
196
- end
197
-
198
- Log.trap_stderr("Python STDERR", severity) do
199
- module_eval(&block)
200
- end
201
- end
202
-
203
142
  def self.new_binding
204
143
  Binding.new
205
144
  end
@@ -209,3 +148,5 @@ module RbbtPython
209
148
  binding.instance_exec *args, &block
210
149
  end
211
150
  end
151
+
152
+ RbbtPython.add_path Rbbt.python.find(:lib)