comana 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
data/comana.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "comana"
8
- s.version = "0.0.8"
8
+ s.version = "0.0.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippei94da"]
12
- s.date = "2012-05-18"
12
+ s.date = "2012-05-29"
13
13
  s.description = "Comana, COmputation MANAger,\n is a software to provide a framework of\n managing scientific computing.\n Researchers on computing have to check calculation and\n generate new calculation and execute, repeatedly.\n The abstract class that this gem provide would help the work.\n "
14
14
  s.email = "ippei94da@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -31,5 +31,14 @@ class MachineInfo
31
31
  @data[series]
32
32
  end
33
33
 
34
+ #def has_info?(host)
35
+ # series = host.sub(/\d*$/, "")
36
+ # unless @data.has_key?(series)
37
+ # raise NoEntryError,
38
+ # "#{series}"
39
+ # end
40
+ # @data[series]
41
+ #end
42
+
34
43
  end
35
44
 
@@ -4,7 +4,6 @@
4
4
  require "fileutils"
5
5
  require "comana/computationmanager.rb"
6
6
  require "comana/machineinfo.rb"
7
- require "optparse"
8
7
 
9
8
  #
10
9
  #
@@ -20,61 +19,64 @@ class QueueSubmitter < ComputationManager
20
19
  class InvalidArgumentError < Exception; end
21
20
 
22
21
  # opts is a hash includes data belows:
23
- # :command => command line.
24
- # :cluster => name of cluster.
25
- # :machineinfo => MachineInfo class instance.
26
- # :directory => calculation as ComputationManager subclass.
27
- # Note that this is not directory name, to check to be calculatable.
22
+ # "command" => executable command line written in script.
23
+ # "cluster" => name of cluster.
24
+ # "target" => calculation as ComputationManager subclass.
25
+ # Note that this is not target name, to check calculatable.
28
26
  def initialize(opts)
29
- [:directory, :command, :number, :cluster, :fileserver].each do |symbol|
30
- raise InitializeError, "No #{symbol}" unless opts.has_key?(symbol)
27
+ #opts = self.class.correct_options(opts)
28
+ ["target", "command", "number", "cluster"].each do |symbol|
29
+ raise InitializeError, "No #{symbol} in argument 'opts'" unless opts.has_key?(symbol)
31
30
  end
32
31
 
33
- super(opts[:directory].dir)
34
- @command = opts[:command]
35
- @cluster = opts[:cluster]
36
- @number = opts[:number]
37
- @fileserver = opts[:fileserver]
32
+ super(opts["target"].dir)
33
+
34
+ @command = opts["command"]
35
+ @cluster = opts["cluster"]
36
+ @number = opts["number"]
38
37
  @lockdir = "lock_queuesubmitter"
39
38
  end
40
39
 
41
- def self.parse_options(ary, machineinfo)
42
- ## option analysis
43
- opts = {}
44
- op = OptionParser.new
45
- op.on("-c cluster", "--cluster" , "Cluster name."){|v| opts[:cluster] = v }
46
- op.on("-n number", "--number", "Indicate node number, or key in ~/.machineinfo."){|v|
47
- opts[:number] = v
48
- }
49
- op.parse!(ary)
50
-
51
- unless ary.size == 1
52
- raise InitializeError, "Not one directory indicated: #{ary.join(", ")}."
53
- end
54
-
55
- opts[:fileserver] = machineinfo.get_info("fileserver")
56
-
57
- unless opts[:cluster]
58
- raise InvalidArgumentError,
59
- "-c option not set."
60
- end
61
-
62
- # Number of nodes: number, key string, or default value(1).
63
- if opts[:number].to_i > 0
64
- opts[:number] = opts[:number].to_i
65
- else
66
- number = machineinfo.get_info(opts[:cluster])[opts[:number]]
67
- if number
68
- opts[:number] = number
69
- else
70
- raise InvalidArgumentError,
71
- "No entry '#{opts[:number]}' in machineinfo: #{machineinfo.inspect}."
72
- end
73
- end
74
- opts[:number] ||= 1
75
-
76
- opts
77
- end
40
+ ## Check and correct options given as hash, 'opts', using machineinfo.
41
+ ## Return hash corrected.
42
+ ## 'opts' must have keys of
43
+ ## "number"
44
+ ## "cluster"
45
+ ## "target"
46
+ ## machineinfo is a MachineInfo class instance.
47
+ #def self.correct_options(opts, machineinfo)
48
+ # # option analysis
49
+ # ["target", "number", "cluster"].each do |symbol|
50
+ # raise InitializeError, "No #{symbol} in argument 'opts'" unless opts.has_key?(symbol)
51
+ # end
52
+
53
+
54
+ # #unless ary.size == 1
55
+ # # raise InitializeError, "Not one target indicated: #{ary.join(", ")}."
56
+ # #end
57
+
58
+ # #unless opts["cluster"]
59
+ # # raise InvalidArgumentError,
60
+ # # "-c option not set."
61
+ # #end
62
+
63
+ # ## Number of nodes: number, key string, or default value(1).
64
+ # #if opts["number"].to_i > 0
65
+ # # opts["number"] = opts["number"].to_i
66
+ # #else
67
+ # # number = machineinfo.get_info(opts["cluster"])[opts["number"]]
68
+ # # if number
69
+ # # opts["number"] = number
70
+ # # else
71
+ # # raise InvalidArgumentError,
72
+ # # "No entry '#{opts["number"]}' in machineinfo: #{machineinfo.inspect}."
73
+ # # end
74
+ # #end
75
+ # #opts["number"] ||= 1
76
+
77
+
78
+ # opts
79
+ #end
78
80
 
79
81
  def calculate
80
82
  # prologue
data/memo.txt CHANGED
@@ -4,6 +4,9 @@ Comana don't have information of output files.
4
4
  Because it is difficult to define final output and to deal systematically.
5
5
  e.g., repeated calculation till convergence.
6
6
 
7
+ 0.0.9 release
8
+ Change opts specification in QueueSubmitter; symbol to string
9
+
7
10
  0.0.8 release
8
11
  Changed queuesubmitter option. (long name symbol)
9
12
  Add prologue and epilogue to QueueSubmitter.
@@ -15,13 +15,12 @@ end
15
15
  #describe QueueSubmitter, "with chars to be escaped" do
16
16
  describe QueueSubmitter do
17
17
  describe "#initialize" do
18
- context "opts not have :directory" do
18
+ context "opts not have target" do
19
19
  opts = {
20
- #:directory => "dir_name",
21
- :command => "command_line",
22
- :cluster => "Nodes",
23
- :number => 4,
24
- :fileserver => "FS",
20
+ #"target" => "dir_name",
21
+ "command" => "command_line",
22
+ "cluster" => "Nodes",
23
+ "number" => 4,
25
24
  }
26
25
  it {lambda{QueueSubmitter.new(opts)}.should raise_error(
27
26
  QueueSubmitter::InitializeError)}
@@ -29,23 +28,21 @@ describe QueueSubmitter do
29
28
 
30
29
  context "opts not have :command" do
31
30
  opts = {
32
- :directory => ComputationManager.new("dir_name"),
33
- #:command => "command_line",
34
- :cluster => "Nodes",
35
- :number => 4,
36
- :fileserver => "FS",
31
+ "target" => ComputationManager.new("dir_name"),
32
+ #"command" => "command_line",
33
+ "cluster" => "Nodes",
34
+ "number" => 4,
37
35
  }
38
36
  it {lambda{QueueSubmitter.new(opts)}.should raise_error(
39
37
  QueueSubmitter::InitializeError)}
40
38
  end
41
39
 
42
- context "opts not have :cluster" do
40
+ context "opts not have cluster" do
43
41
  opts = {
44
- :directory => ComputationManager.new("dir_name"),
45
- :command => "command_line",
46
- #:cluster => "Nodes",
47
- :number => 4,
48
- :fileserver => "FS",
42
+ "target" => ComputationManager.new("dir_name"),
43
+ "command" => "command_line",
44
+ #"cluster" => "Nodes",
45
+ "number" => 4,
49
46
  }
50
47
  it {lambda{QueueSubmitter.new(opts)}.should raise_error(
51
48
  QueueSubmitter::InitializeError)}
@@ -53,61 +50,101 @@ describe QueueSubmitter do
53
50
 
54
51
  context "opts not have :command" do
55
52
  opts = {
56
- :directory => ComputationManager.new("dir_name"),
57
- #:command => "command_line",
58
- :cluster => "Nodes",
59
- :number => 4,
60
- :fileserver => "FS",
53
+ "target" => ComputationManager.new("dir_name"),
54
+ #"command" => "command_line",
55
+ "cluster" => "Nodes",
56
+ "number" => 4,
61
57
  }
62
58
  it {lambda{QueueSubmitter.new(opts)}.should raise_error(
63
59
  QueueSubmitter::InitializeError)}
64
60
  end
65
61
  end
66
62
 
67
- describe "#self.parse_options" do
68
- before do
69
- @machine_info = MachineInfo.new(
70
- {
71
- "fileserver" => "FS",
72
- "CLUSTER" => {
73
- "speed" => 2,
74
- "economy" => 1,
75
- },
76
- }
77
- )
78
- end
63
+ #describe "#self.correct_options" do
64
+ # before do
65
+ # @machine_info = MachineInfo.new(
66
+ # {
67
+ # "CLUSTER" => {
68
+ # "speed" => 2,
69
+ # "economy" => 1,
70
+ # "command" => "calc_command"
71
+ # },
72
+ # }
73
+ # )
74
+ # end
79
75
 
80
- context "-c not indicated" do
81
- ary = %w( a -n 1 )
82
- it {lambda{QueueSubmitter.parse_options(ary, @machine_info)}.should raise_error(
83
- QueueSubmitter::InvalidArgumentError)}
84
- end
76
+ # context "cluster not indicated" do
77
+ # opts = {
78
+ # "number" => 1,
79
+ # #"cluster" => "CLUSTER",
80
+ # "target" => "calc_dir",
81
+ # }
82
+ # it {lambda{QueueSubmitter.correct_options(opts, @machine_info)}.should
83
+ # raise_error(QueueSubmitter::InvalidArgumentError)}
84
+ # end
85
85
 
86
- #context "-n not indicated" do
87
- # ary = %w( a -c CLUSTER_DUMMY )
88
- # it {lambda{QueueSubmitter.parse_options(ary, @machine_info)}.should raise_error(MachineInfo::NoEntryError)}
89
- #end
86
+ # context "target not indicated" do
87
+ # opts = {
88
+ # "number" => 1,
89
+ # "cluster" => "CLUSTER",
90
+ # #"target" => "calc_dir",
91
+ # }
92
+ # it {lambda{QueueSubmitter.correct_options(opts, @machine_info)}.should
93
+ # raise_error(QueueSubmitter::InvalidArgumentError)}
94
+ # end
90
95
 
91
- context "-n not indicated" do
92
- ary = %w( a -c CLUSTER )
93
- it {lambda{QueueSubmitter.parse_options(ary, @machine_info)}.should raise_error(QueueSubmitter::InvalidArgumentError)}
94
- end
96
+ # context "number not indicated" do
97
+ # opts = {
98
+ # #"number" => 1,
99
+ # "cluster" => "CLUSTER",
100
+ # "target" => "calc_dir",
101
+ # }
102
+ # it {lambda{QueueSubmitter.correct_options(opts, @machine_info)}.should
103
+ # raise_error(QueueSubmitter::InvalidArgumentError)}
104
+ # end
95
105
 
96
- context "-c and -n number indicated" do
97
- ary = %w( a -c CLUSTER -n 1 )
98
- it {lambda{QueueSubmitter.parse_options(ary, @machine_info)}.should_not raise_error}
99
- end
106
+ # context "orthodox indication" do
107
+ # opts = {
108
+ # "number" => 1,
109
+ # "cluster" => "CLUSTER",
110
+ # "target" => "calc_dir",
111
+ # }
112
+ # results = QueueSubmitter.correct_options(opts, @machine_info)
113
+ # it {results.should ==
114
+ # {
115
+ # "target" => "calc_dir",
116
+ # "command" => "calc_command",
117
+ # "number" => 1,
118
+ # "cluster" => "CLUSTER",
119
+ # }
120
+ # }
121
+ # end
100
122
 
101
- end
123
+ # context "number indication as string in MachineInfo" do
124
+ # opts = {
125
+ # "cluster" => "CLUSTER",
126
+ # "number" => "speed",
127
+ # "target" => "calc_dir",
128
+ # }
129
+ # results = QueueSubmitter.correct_options(opts, @machine_info)
130
+ # it {results.should ==
131
+ # {
132
+ # "cluster" => "CLUSTER",
133
+ # "number" => 2,
134
+ # "target" => "calc_dir",
135
+ # "command" => "calc_command",
136
+ # }
137
+ # }
138
+ # end
139
+ #end
102
140
 
103
141
  describe "#dump_prologue" do
104
142
  before do
105
143
  opts = {
106
- :directory => ComputationManager.new("spec/not_started"),
107
- :command => "command_line",
108
- :cluster => "Nodes",
109
- :number => 4,
110
- :fileserver => "FS",
144
+ "target" => ComputationManager.new("spec/not_started"),
145
+ "command" => "command_line",
146
+ "cluster" => "Nodes",
147
+ "number" => 4,
111
148
  }
112
149
  @qs00 = QueueSubmitter.new(opts)
113
150
 
@@ -137,11 +174,10 @@ describe QueueSubmitter do
137
174
  describe "#dump_script" do
138
175
  before do
139
176
  opts = {
140
- :directory => ComputationManager.new("spec/not_started"),
141
- :command => "command_line",
142
- :cluster => "Nodes",
143
- :number => 4,
144
- :fileserver => "FS",
177
+ "target" => ComputationManager.new("spec/not_started"),
178
+ "command" => "command_line",
179
+ "cluster" => "Nodes",
180
+ "number" => 4,
145
181
  }
146
182
  @qs00 = QueueSubmitter.new(opts)
147
183
 
@@ -164,11 +200,10 @@ describe QueueSubmitter do
164
200
  describe "#dump_epilogue" do
165
201
  before do
166
202
  opts = {
167
- :directory => ComputationManager.new("spec/not_started"),
168
- :command => "command_line",
169
- :cluster => "Nodes",
170
- :number => 4,
171
- :fileserver => "FS",
203
+ "target" => ComputationManager.new("spec/not_started"),
204
+ "command" => "command_line",
205
+ "cluster" => "Nodes",
206
+ "number" => 4,
172
207
  }
173
208
  @qs00 = QueueSubmitter.new(opts)
174
209
 
@@ -200,11 +235,10 @@ describe QueueSubmitter do
200
235
  context "locked" do
201
236
  it do
202
237
  opts = {
203
- :directory => ComputationManager.new("spec/queuesubmitter/locked"),
204
- :command => "command_line",
205
- :cluster => "Nodes",
206
- :number => 4,
207
- :fileserver => "FS",
238
+ "target" => ComputationManager.new("spec/queuesubmitter/locked"),
239
+ "command" => "command_line",
240
+ "cluster" => "Nodes",
241
+ "number" => 4,
208
242
  }
209
243
  @qs00 = QueueSubmitter.new(opts)
210
244
 
@@ -215,11 +249,10 @@ describe QueueSubmitter do
215
249
  context "unlocked" do
216
250
  it do
217
251
  opts = {
218
- :directory => ComputationManager.new("spec/queuesubmitter/unlocked"),
219
- :command => "command_line",
220
- :cluster => "Nodes",
221
- :number => 4,
222
- :fileserver => "FS",
252
+ "target" => ComputationManager.new("spec/queuesubmitter/unlocked"),
253
+ "command" => "command_line",
254
+ "cluster" => "Nodes",
255
+ "number" => 4,
223
256
  }
224
257
  @qs00 = QueueSubmitter.new(opts)
225
258
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-18 00:00:00.000000000 Z
12
+ date: 2012-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &71401920 !ruby/object:Gem::Requirement
16
+ requirement: &72264660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.10.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *71401920
24
+ version_requirements: *72264660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &71401380 !ruby/object:Gem::Requirement
27
+ requirement: &72264230 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *71401380
35
+ version_requirements: *72264230
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &71400960 !ruby/object:Gem::Requirement
38
+ requirement: &72263870 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *71400960
46
+ version_requirements: *72263870
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &71400540 !ruby/object:Gem::Requirement
49
+ requirement: &72263500 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *71400540
57
+ version_requirements: *72263500
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &71399840 !ruby/object:Gem::Requirement
60
+ requirement: &72263070 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *71399840
68
+ version_requirements: *72263070
69
69
  description: ! "Comana, COmputation MANAger,\n is a software to provide a framework
70
70
  of\n managing scientific computing.\n Researchers on computing have to check
71
71
  calculation and\n generate new calculation and execute, repeatedly.\n The
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: 49117789
128
+ hash: 67223151
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements: