batch_experiment 0.1.0 → 1.0.0
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 +4 -4
- data/examples/bible.txt +8 -0
- data/examples/example_batch.rb +42 -0
- data/examples/sample_batch.rb +8 -33
- data/examples/taoteching.txt +10 -0
- data/examples/ukp_batch.rb +2 -2
- data/lib/batch_experiment.rb +51 -50
- data/lib/batch_experiment/extractor.rb +62 -22
- data/lib/batch_experiment/sample_extractors.rb +73 -34
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6db331d43fbfee1847a2385bc1c90616433451b
|
4
|
+
data.tar.gz: 0b5b00e526fe8ff5d78d32991ee79e2655d24c5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41b4f4c3866c68c86677630466e88eb574ca0ccd417a55c94eaa378d55c368673f07c5bd6dfb4018ac69d1519c730e8d6b41cc8d0c9e6ac58e51e12684435322
|
7
|
+
data.tar.gz: babb03ca7415332843d231e21e30a9ecea32f3da5792fc48ccc5023c4c31eaf374c48091869e9a42c45e83b01f8d6647ea70e384d14fdecd511cdac9fc580be3
|
data/examples/bible.txt
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
IN THE beginning [before all time] was the Word (Christ), and the Word was with God, and the Word was God Himself.
|
2
|
+
He was present originally with God.
|
3
|
+
All things were made and came into existence through Him, and without Him was not even one thing made that has come into being.
|
4
|
+
In Him was Life, and the Life was the Light of men.
|
5
|
+
And the Light shines on in the darkness, for the darkness has never overpowered it [put it out or absorbed it or appropriated it, and is unreceptive to it].
|
6
|
+
There came a man sent from God, whose name was John.
|
7
|
+
This man came to witness, that he might testify of the Light, that all men might believe in it [adhere to it, trust it, and rely upon it] through him.
|
8
|
+
He was not the Light himself, but came that he might bear witness regarding the Light.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/bin/ruby
|
2
|
+
|
3
|
+
require 'batch_experiment'
|
4
|
+
require 'batch_experiment/sample_extractors'
|
5
|
+
|
6
|
+
comms_info = [{
|
7
|
+
command: 'cat X',
|
8
|
+
pattern: 'X',
|
9
|
+
extractor: BatchExperiment::FirstLineExtractor,
|
10
|
+
prefix: 'cat',
|
11
|
+
}, {
|
12
|
+
command: 'echo y',
|
13
|
+
pattern: 'y',
|
14
|
+
extractor: BatchExperiment::FirstLineExtractor,
|
15
|
+
prefix: 'echo',
|
16
|
+
}, {
|
17
|
+
command: 'wc FILE',
|
18
|
+
pattern: 'FILE',
|
19
|
+
extractor: BatchExperiment::WcExtractor,
|
20
|
+
prefix: 'wc',
|
21
|
+
}]
|
22
|
+
|
23
|
+
execution_info = {
|
24
|
+
# IDs of the CPU cores that can be used for executing tests.
|
25
|
+
cpus_available: [1, 2, 3],
|
26
|
+
# Maximum number of seconds that a command can run. After this a kill command
|
27
|
+
# (TERM signal) will be issued.
|
28
|
+
timeout: 5,
|
29
|
+
}
|
30
|
+
|
31
|
+
conf = {
|
32
|
+
# The name of the file where will be written the CSV data.
|
33
|
+
csvfname: 'example.csv',
|
34
|
+
# The columns will be ordered by command. All the columns of the first
|
35
|
+
# command before the one from the second and so on.
|
36
|
+
ic_columns: false,
|
37
|
+
}
|
38
|
+
|
39
|
+
files = ['bible.txt', 'taoteching.txt']
|
40
|
+
|
41
|
+
BatchExperiment::experiment(comms_info, execution_info, conf, files)
|
42
|
+
|
data/examples/sample_batch.rb
CHANGED
@@ -1,34 +1,16 @@
|
|
1
1
|
#!/bin/ruby
|
2
2
|
|
3
3
|
require 'batch_experiment'
|
4
|
-
require 'batch_experiment/sample_extractors'
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# Extractor object. Receives the output of the command and return
|
12
|
-
# the most important fields.
|
13
|
-
extractor: SampleExtractor.new,
|
14
|
-
# String used to identify the command. Will be used to prefix the return of
|
15
|
-
# extractor.names.
|
16
|
-
prefix: 'doubled',
|
17
|
-
}, {
|
18
|
-
command: 'sleep 3 && echo "banana X"',
|
19
|
-
pattern: 'X',
|
20
|
-
extractor: SampleExtractor.new,
|
21
|
-
prefix: 'banana',
|
22
|
-
}, {
|
23
|
-
command: 'sleep 100 && echo "never gonna happen X"',
|
24
|
-
pattern: 'X',
|
25
|
-
extractor: SampleExtractor.new,
|
26
|
-
prefix: 'timeout',
|
27
|
-
}]
|
5
|
+
commands = [
|
6
|
+
'sleep 2 && echo orange',
|
7
|
+
'sleep 4 && echo banana',
|
8
|
+
'sleep 100 && echo "never gonna happen"',
|
9
|
+
]
|
28
10
|
|
29
|
-
|
11
|
+
conf = {
|
30
12
|
# IDs of the CPU cores that can be used for executing tests.
|
31
|
-
cpus_available: [
|
13
|
+
cpus_available: [0, 1],
|
32
14
|
# Maximum number of seconds that a command can run. After this a kill command
|
33
15
|
# (TERM signal) will be issued.
|
34
16
|
timeout: 5,
|
@@ -37,12 +19,5 @@ execution_info = {
|
|
37
19
|
post_timeout: 1,
|
38
20
|
}
|
39
21
|
|
40
|
-
conf
|
41
|
-
# The name of the file where will be written the CSV data.
|
42
|
-
csvfname: 'sample.csv',
|
43
|
-
}
|
44
|
-
|
45
|
-
files = ['apple', 'orange'] # Applejack would be proud
|
46
|
-
|
47
|
-
BatchExperiment::experiment(comms_info, execution_info, conf, files)
|
22
|
+
BatchExperiment::batch(commands, conf)
|
48
23
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
The tao that can be told is not the eternal Tao.
|
2
|
+
The name that can be named is not the eternal Name.
|
3
|
+
The unnamable is the eternally real.
|
4
|
+
Naming is the origin of all particular things.
|
5
|
+
Free from desire, you realize the mystery.
|
6
|
+
Caught in desire, you see only the manifestations.
|
7
|
+
Yet mystery and manifestations arise from the same source.
|
8
|
+
This source is called darkness.
|
9
|
+
Darkness within darkness.
|
10
|
+
The gateway to all understanding.
|
data/examples/ukp_batch.rb
CHANGED
@@ -12,12 +12,12 @@ require_relative 'batch_experiment/sample_extractors'
|
|
12
12
|
comms_info = [{
|
13
13
|
command: 'pyasukpt -src INST_FILE',
|
14
14
|
pattern: 'INST_FILE',
|
15
|
-
extractor: PyaExtractor
|
15
|
+
extractor: BatchExperiment::PyaExtractor,
|
16
16
|
prefix: 'PYAsUKP',
|
17
17
|
}, {
|
18
18
|
command: 'run_ukp5.out INST_FILE',
|
19
19
|
pattern: 'INST_FILE',
|
20
|
-
extractor: UKP5Extractor
|
20
|
+
extractor: BatchExperiment::UKP5Extractor,
|
21
21
|
prefix: 'UKP5',
|
22
22
|
}]
|
23
23
|
|
data/lib/batch_experiment.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'childprocess'
|
2
2
|
require 'pathname'
|
3
3
|
|
4
|
+
# The main module, the two main utility methods offered are ::batch and
|
5
|
+
# ::experiment.
|
4
6
|
module BatchExperiment
|
5
|
-
# The default callable
|
7
|
+
# The default callable object used by #batch to convert a command into a
|
6
8
|
# filename.
|
7
|
-
|
8
|
-
def call(command)
|
9
|
+
module FilenameSanitizer
|
10
|
+
def self.call(command)
|
9
11
|
fname = command.strip
|
10
12
|
fname.gsub!(/[^[:alnum:]]/, '_')
|
11
13
|
fname.gsub!(/_+/, '_')
|
@@ -32,55 +34,53 @@ module BatchExperiment
|
|
32
34
|
|
33
35
|
# Takes a list of commands, execute them only on the designed core/cpus, and
|
34
36
|
# kill them if the timeout expires, never lets a core/cpu rest for more than
|
35
|
-
#
|
36
|
-
#
|
37
|
-
# filenames
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
# remains if the batch procedure is interrupted (not a specific command).
|
37
|
+
# a predetermined amount of seconds between a command and another. Partial
|
38
|
+
# filenames are derived from the commands. Appending '.out' to one of the
|
39
|
+
# partial filenames will give the filename were the command stdout was
|
40
|
+
# redirected. The analogue is valid for '.err' and stderr. Right before a
|
41
|
+
# command begans to run, a "partial_filename.unfinished file is created.
|
42
|
+
# After the command ends its execution this file is removed. If the command
|
43
|
+
# ends its execution by means of a timeout the file is also removed. The file
|
44
|
+
# only remains if the batch procedure is interrupted (script was killed,
|
45
|
+
# or system crashed).
|
45
46
|
#
|
46
47
|
# @param commands [Array<String>] The shell commands.
|
47
48
|
# @param conf [Hash] The configurations, as follows:
|
48
|
-
#
|
49
|
+
# -- cpus_available [Array<Fixnum>] Cpu cores that can be used to run the
|
49
50
|
# commands. Required parameter. The cpu numbers begin at 0, despite what
|
50
|
-
# htop tells you
|
51
|
-
#
|
52
|
-
# parameter. Is the same for all the commands
|
53
|
-
#
|
51
|
+
# htop tells you.
|
52
|
+
# -- timeout [Number] Number of seconds before killing a command. Required
|
53
|
+
# parameter. Is the same for all the commands.
|
54
|
+
# -- time_fmt [String] A string in the time (external command) format. See
|
54
55
|
# http://linux.die.net/man/1/time. Default: 'ext_time: %e\next_mem: %M\n'.
|
55
|
-
#
|
56
|
+
# busy_loop_sleep [Number] How many seconds to wait before checking if a
|
56
57
|
# command ended execution. This is max time a cpu will be vacant between
|
57
|
-
# two commands. Default: 0.1
|
58
|
-
#
|
59
|
-
# a TERM signal. If the command hasn't stopped, waits
|
60
|
-
# before sending a KILL signal (give it a chance to
|
61
|
-
# Default: 5
|
62
|
-
#
|
58
|
+
# two commands. Default: 0.1.
|
59
|
+
# -- post_timeout [Number] A command isn't guaranteed to end after
|
60
|
+
# receiving a TERM signal. If the command hasn't stopped, waits
|
61
|
+
# post_timeout seconds before sending a KILL signal (give it a chance to
|
62
|
+
# end gracefully). Default: 5.
|
63
|
+
# -- fname_sanitizer [#call] The call method of this object
|
63
64
|
# should take a String and convert it (possibly losing information), to a
|
64
65
|
# valid filename. Used over the commands to define the output files of
|
65
|
-
# commands.
|
66
|
-
#
|
67
|
-
# :skip_done_comms [FalseClass,TrueClass] Skip any command for what a
|
66
|
+
# commands. Default: BatchExperiment::FilenameSanitizer
|
67
|
+
# -- skip_done_comms [FalseClass,TrueClass] Skip any command for what a
|
68
68
|
# corresponding '.out' file exists, except if both a '.out' and a
|
69
69
|
# '.unfinished' file exist, in the last case the command is executed.
|
70
|
-
# Default: true
|
71
|
-
#
|
72
|
-
# Default: '.unfinished'
|
73
|
-
#
|
74
|
-
# Default: '.out'
|
75
|
-
#
|
76
|
-
# Default: '.err'
|
70
|
+
# Default: true.
|
71
|
+
# -- unfinished_ext [String] Extension to be used in place of
|
72
|
+
# '.unfinished'. Default: '.unfinished'.
|
73
|
+
# -- out_ext [String] Extension to be used in place of '.out'.
|
74
|
+
# Default: '.out'.
|
75
|
+
# -- err_ext [String] Extension to be used in place of '.err'.
|
76
|
+
# Default: '.err'.
|
77
77
|
# @return [String] Which commands were executed. Can be different from
|
78
78
|
# the 'commands' argument if commands are skipped (see :skip_done_comms).
|
79
79
|
#
|
80
|
-
# @note
|
81
|
-
#
|
82
|
-
#
|
83
|
-
# conf[:fname_sanitizer] can be used to circumvent the restriction over
|
80
|
+
# @note If the same command is executed over the same file more than one
|
81
|
+
# time, then only the last execution will be saved (because the '.out',
|
82
|
+
# '.err' and '.unfinished' files will be overwritten). But the parameter
|
83
|
+
# conf\[:fname_sanitizer\] can be used to circumvent the restriction over
|
84
84
|
# equal commands (if the object has state it can return a different
|
85
85
|
# filename for every time it's called with the same argument).
|
86
86
|
# @note This procedure makes use of the following linux commands: time (not
|
@@ -91,13 +91,13 @@ module BatchExperiment
|
|
91
91
|
# shell).
|
92
92
|
# @note The command is executed inside a call to "sh -c command", so it has
|
93
93
|
# to be a valid sh command.
|
94
|
-
# @note The output of the command "time -f
|
95
|
-
# appended to the '.out' file of every command. If you set
|
96
|
-
# to a empty string only a newline will be appended.
|
94
|
+
# @note The output of the command "time -f conf\[:time_fmt\]" will be
|
95
|
+
# appended to the '.out' file of every command. If you set
|
96
|
+
# conf\[:time_fmt\] to a empty string only a newline will be appended.
|
97
97
|
def self.batch(commands, conf)
|
98
98
|
# Throw exceptions if required configurations aren't provided.
|
99
|
-
fail
|
100
|
-
fail
|
99
|
+
fail 'conf[:cpus_available] not set' unless conf[:cpus_available]
|
100
|
+
fail 'conf[:timeout] not set' unless conf[:timeout]
|
101
101
|
|
102
102
|
# Initialize optional configurations with default values if they weren't
|
103
103
|
# provided. Don't change the conf argument, only our version of conf.
|
@@ -108,7 +108,7 @@ module BatchExperiment
|
|
108
108
|
conf[:err_ext] ||= '.err'
|
109
109
|
conf[:busy_loop_sleep] ||= 0.1
|
110
110
|
conf[:post_timeout] ||= 5
|
111
|
-
conf[:fname_sanitizer] ||= BatchExperiment::FilenameSanitizer
|
111
|
+
conf[:fname_sanitizer] ||= BatchExperiment::FilenameSanitizer
|
112
112
|
conf[:skip_done_comms] = true if conf[:skip_done_comms].nil?
|
113
113
|
|
114
114
|
# Initialize main variables
|
@@ -227,7 +227,7 @@ module BatchExperiment
|
|
227
227
|
# command [String] A string with a sh shell command.
|
228
228
|
# pattern [String] A substring of command, will be replace by the strings
|
229
229
|
# in the paramenter 'files'.
|
230
|
-
# extractor [
|
230
|
+
# extractor [#extract,#names] Object implementing the Extractor interface.
|
231
231
|
# prefix [String] A string that will be used to prefix the extractor.names
|
232
232
|
# when they are used as column names. Improves Extractor reusability.
|
233
233
|
# @param batch_conf [Hash] Configuration used to call batch. See the
|
@@ -266,7 +266,8 @@ module BatchExperiment
|
|
266
266
|
# @return [NilClass,Array<String>] The return of the internal #batch
|
267
267
|
# call. Returns nil if conf[:skip_commands] was set to true.
|
268
268
|
#
|
269
|
-
# @see BatchExperiment
|
269
|
+
# @see BatchExperiment::batch
|
270
|
+
# @note This command call ::batch internally.
|
270
271
|
def self.experiment(comms_info, batch_conf, conf, files)
|
271
272
|
# Throw exceptions if required configurations aren't provided.
|
272
273
|
fail 'conf[:csvfname] is not defined' unless conf[:csvfname]
|
@@ -283,7 +284,7 @@ module BatchExperiment
|
|
283
284
|
out_ext = batch_conf[:out_ext] || '.out'
|
284
285
|
unfinished_ext = batch_conf[:unfinished_ext] || '.unfinished'
|
285
286
|
fname_sanitizer = batch_conf[:fname_sanitizer]
|
286
|
-
fname_sanitizer ||= BatchExperiment::FilenameSanitizer
|
287
|
+
fname_sanitizer ||= BatchExperiment::FilenameSanitizer
|
287
288
|
|
288
289
|
# Create commands the templates and the file list.
|
289
290
|
comms_sets = []
|
@@ -291,7 +292,7 @@ module BatchExperiment
|
|
291
292
|
comms_sets << gencommff(comm_info[:command], comm_info[:pattern], files)
|
292
293
|
end
|
293
294
|
|
294
|
-
comm_list = conf[:
|
295
|
+
comm_list = conf[:ic_comms] ? intercalate(comms_sets) : comms_sets.flatten
|
295
296
|
|
296
297
|
# Execute the commands (or not).
|
297
298
|
ret = batch(comm_list, batch_conf) unless conf[:skip_commands]
|
@@ -313,7 +314,7 @@ module BatchExperiment
|
|
313
314
|
line = []
|
314
315
|
comms_info.each_with_index do | comm_info, i |
|
315
316
|
command =
|
316
|
-
if conf[:
|
317
|
+
if conf[:ic_comms]
|
317
318
|
comm_list[(j * comms_info.size) + i]
|
318
319
|
else
|
319
320
|
comm_list[(i * files.size) + j]
|
@@ -1,29 +1,69 @@
|
|
1
|
-
module
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module BatchExperiment
|
2
|
+
# Module that defines the interface used for extracting info from other
|
3
|
+
# programs output. You don't need to include it in your object, will suffice
|
4
|
+
# that the object (that you will use to extract info from the output) has the
|
5
|
+
# ::names and ::extract methods defined.
|
6
|
+
module Extractor
|
7
|
+
# Find a line in the following format: "field: value", return value.
|
8
|
+
#
|
9
|
+
# @param lines [Array<String>] Program output, broken in lines.
|
10
|
+
# @param field [String] String to be found at the lines in the following
|
11
|
+
# pattern: 'field: value'.
|
12
|
+
#
|
13
|
+
# @return [String] The 'value' as a string or, if 'field' isn't found, an
|
14
|
+
# empty string.
|
15
|
+
def self.get_field(lines, field)
|
16
|
+
lines.grep(/^#{field}: .*/).each { | l | return l.match(/:[\t ]+(.*)/)[1] }
|
17
|
+
''
|
18
|
+
end
|
7
19
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
20
|
+
# Find a line in the following format: "field<linebreak>value", return
|
21
|
+
# value.
|
22
|
+
#
|
23
|
+
# @param lines [Array<String>] Program output, broken in lines.
|
24
|
+
# @param field [String] String to be found at the lines in the following
|
25
|
+
# pattern: 'field<lineabreak>value'. Only include the linebreak at the
|
26
|
+
# field, if the lines array have linebreaks at the end of every string
|
27
|
+
# element.
|
28
|
+
#
|
29
|
+
# @return [String] The 'value' as a string or, if 'field' isn't found, an
|
30
|
+
# empty string.
|
31
|
+
def self.get_hfield(lines, field)
|
32
|
+
if ix = lines.find_index(field) then lines[ix + 1] else '' end
|
33
|
+
end
|
12
34
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
35
|
+
# Return the field names for each of the elements returned by extract. Ex.:
|
36
|
+
# ['Time', 'Max Mem Use', 'opt', ... ]
|
37
|
+
#
|
38
|
+
# @note To be on the safe side you should create a new array at each call.
|
39
|
+
# If you always return a reference to the same array the array can be
|
40
|
+
# modified.
|
41
|
+
#
|
42
|
+
# @return [Array<String>] The strings that will be used to make the column
|
43
|
+
# names at the BatchExperiment.experiment method.
|
44
|
+
def names
|
45
|
+
fail 'This method should have been overwritten by a subclass.'
|
46
|
+
end
|
18
47
|
|
19
|
-
|
20
|
-
|
21
|
-
|
48
|
+
# Extract N values of some program output, where N is equal to #names.size.
|
49
|
+
# If some value isn't present, the array should remain the same size, and
|
50
|
+
# the value at the corresponding position should be nil.
|
51
|
+
#
|
52
|
+
# @param content [String] Program output.
|
53
|
+
# @return [Array<String>] The N extracted values, as strings.
|
54
|
+
def extract(content)
|
55
|
+
extract_from_lines(content.lines.map! { | l | l.chomp! })
|
56
|
+
end
|
22
57
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
58
|
+
# Optionally, you can define this method instead of #extract. The #extract
|
59
|
+
# method will call this method if not overrided.
|
60
|
+
#
|
61
|
+
# @param lines [Array<String>] Program output, broken in lines,
|
62
|
+
# and the line string elements don't end in linebreak.
|
63
|
+
# @return [Array<String>] The N extracted values, as strings.
|
64
|
+
def extract_from_lines(lines)
|
65
|
+
fail 'This method should have been overwritten by a subclass.'
|
66
|
+
end
|
27
67
|
end
|
28
68
|
end
|
29
69
|
|
@@ -1,49 +1,88 @@
|
|
1
|
-
require '
|
2
|
-
require_relative './extractor.rb'
|
1
|
+
require 'batch_experiment/extractor'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module BatchExperiment
|
4
|
+
module FirstLineExtractor
|
5
|
+
extend Extractor
|
6
|
+
def self.names
|
7
|
+
['first line', 'ext_time', 'ext_mem']
|
8
|
+
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def self.extract_from_lines(lines)
|
11
|
+
[ (lines[0] or ''),
|
12
|
+
Extractor.get_field(lines, 'ext_time'),
|
13
|
+
Extractor.get_field(lines, 'ext_mem')
|
14
|
+
]
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
18
|
+
module WcExtractor
|
19
|
+
extend Extractor
|
20
|
+
def self.names
|
21
|
+
['lines', 'words', 'bytes', 'ext_time', 'ext_mem']
|
22
|
+
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def self.extract(content)
|
25
|
+
arr = content.split(' ')
|
26
|
+
qt_lines, words, bytes = arr[0], arr[1], arr[2]
|
27
|
+
lines = content.lines.map! { | l | l.chomp! }
|
28
|
+
[ qt_lines, words, bytes,
|
29
|
+
Extractor.get_field(lines, 'ext_time'),
|
30
|
+
Extractor.get_field(lines, 'ext_mem')
|
31
|
+
]
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
28
|
-
|
29
|
-
|
30
|
-
|
35
|
+
module TwoWordsExtractor
|
36
|
+
extend Extractor
|
37
|
+
def self.names
|
38
|
+
['first word', 'second word', 'ext_time', 'ext_mem']
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.extract_from_lines(lines)
|
42
|
+
words = lines.empty? || lines[0].nil? ? ['',''] : lines[0].split().take(2)
|
43
|
+
words << Extractor.get_field(lines, 'ext_time')
|
44
|
+
words << Extractor.get_field(lines, 'ext_mem')
|
45
|
+
words
|
31
46
|
end
|
32
47
|
end
|
33
|
-
end
|
34
48
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
49
|
+
# Sample extractors used at https://github.com/henriquebecker91/masters,
|
50
|
+
# where this code had its beggining. This file contains the code used to
|
51
|
+
# extract info from the different outputs generated by UKP solving programs.
|
52
|
+
|
53
|
+
# Extractor for the output of the run_ukp5.out program available at
|
54
|
+
# https://github.com/henriquebecker91/masters. Not of interest for the
|
55
|
+
# majority of the users of this gem. Kept as example, and for this gem author
|
56
|
+
# personal use.
|
57
|
+
module UKP5Extractor
|
58
|
+
extend Extractor
|
59
|
+
def self.names
|
60
|
+
['internal time', 'external time', 'external memory', 'opt']
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.extract_from_lines(lines)
|
64
|
+
['Seconds', 'ext_time', 'ext_mem', 'opt'].map do | label |
|
65
|
+
Extractor.get_field(lines, label)
|
66
|
+
end
|
67
|
+
end
|
39
68
|
end
|
40
69
|
|
41
|
-
|
42
|
-
|
43
|
-
|
70
|
+
# Extractor for the output of the pyasukp program available at
|
71
|
+
# https://github.com/henriquebecker91/masters. Not of interest for the
|
72
|
+
# majority of the users of this gem. Kept as example, and for this gem author
|
73
|
+
# personal use.
|
74
|
+
class PyaExtractor
|
75
|
+
extend Extractor
|
76
|
+
def self.names
|
77
|
+
['internal time', 'external time', 'external memory', 'opt']
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.extract_from_lines(lines)
|
81
|
+
values = ['Total Time ', 'ext_time', 'ext_mem'].map do | label |
|
82
|
+
Extractor.get_field(lines, label)
|
83
|
+
end
|
84
|
+
opt_key = '#The optimal value for the given capacity'
|
85
|
+
values << Extractor.get_hfield(lines, opt_key)
|
44
86
|
end
|
45
|
-
opt_key = '#The optimal value for the given capacity'
|
46
|
-
values << Extractor.get_hfield(lines, opt_key)
|
47
87
|
end
|
48
88
|
end
|
49
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batch_experiment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrique Becker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: childprocess
|
@@ -30,14 +30,16 @@ executables: []
|
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
|
+
- examples/bible.txt
|
34
|
+
- examples/example_batch.rb
|
33
35
|
- examples/sample_batch.rb
|
36
|
+
- examples/taoteching.txt
|
34
37
|
- examples/ukp_batch.rb
|
35
38
|
- lib/batch_experiment.rb
|
36
39
|
- lib/batch_experiment/extractor.rb
|
37
40
|
- lib/batch_experiment/sample_extractors.rb
|
38
41
|
homepage: https://rubygems.org/gems/batch_experiment
|
39
42
|
licenses:
|
40
|
-
- Public Domain
|
41
43
|
- Unlicense
|
42
44
|
metadata: {}
|
43
45
|
post_install_message:
|
@@ -62,3 +64,4 @@ specification_version: 4
|
|
62
64
|
summary: A ruby script that distributes system commands between cpu cores, and save
|
63
65
|
their output.
|
64
66
|
test_files: []
|
67
|
+
has_rdoc:
|