rulp 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 912368647d83dea0e265b19db45e2fd01ca13eae
4
- data.tar.gz: 5021fac9d0b62dc4a4160ce43cdf1c085327d632
3
+ metadata.gz: 6efb7eb7ffab874e21b74ad4c7e7c8288bd9a1e7
4
+ data.tar.gz: 31f181cdbb431e6b9e22e86fd555a83f73d773e4
5
5
  SHA512:
6
- metadata.gz: 72b4248581c87d1cace2d073667ba70de3b02f9381d16e483454d162422e69f887ea08d4596c0353f7e602c8915f0348af73bd413ec8ea22426153eb2078b25e
7
- data.tar.gz: 15b32b970cf4d0404f5c160831f3b2dc08851633d39377be87ffeef3c4506b5a00577f130d52437b47bc224479c76404a9ca266925648467178f0fba637f46fd
6
+ metadata.gz: d626aeecb10b6223689f447ce7489a607fe1cc832dba72879442c3b7d84d3e5f9844587c708eefcec61f7fe775ba65180b93890a19ea19414596f56a1b7f0458
7
+ data.tar.gz: d47b81d18089719e3fefc9848cf8806a8d4e11dd79c3dc5f9cb9f15a3b233d153240f6dbc6851777c98cf9c694395aa7ce11001da1cd16462e9ed26e5c584a4e
data/lib/helpers/log.rb CHANGED
@@ -1,83 +1,36 @@
1
- ##
2
- # Basic logger module.
3
- # Allows logging in the format
4
- #
5
- # "This is a string".log(:debug)
6
- # "Oh no!".log(:error)
7
- #
8
- # Log level is set as follows.
9
- # Rulp::Logger::level = :debug
10
- #
11
- ##
12
- module Rulp
13
- module Logger
14
- DEBUG = 5
15
- INFO = 4
16
- WARN = 3
17
- ERROR = 2
18
- OFF = 1
19
-
20
- LEVELS = {
21
- debug: DEBUG,
22
- info: INFO,
23
- warn: WARN,
24
- error: ERROR,
25
- off: OFF
26
- }
1
+ require 'logger'
27
2
 
28
- def self.level=(value)
29
- raise StandardError.new("#{value} is not a valid log level") unless LEVELS[value]
30
- @@level = value
31
- end
3
+ module Rulp
4
+ module Log
32
5
 
33
- def self.level
34
- @@level || :info
6
+ def print_solver_outputs=(print)
7
+ @@print_solver_outputs = print
35
8
  end
36
9
 
37
- def self.print_solver_outputs
38
- @@solver_level
10
+ def print_solver_outputs
11
+ @@print_solver_outputs
39
12
  end
40
13
 
41
- def self.print_solver_outputs=(value)
42
- @@solver_level = value
14
+ def log_level=(level)
15
+ @@log_level = level
43
16
  end
44
17
 
45
- def self.log(level, message)
46
- if(LEVELS[level].to_i <= LEVELS[self.level])
47
- puts("[#{colorize(level)}] #{message}")
48
- end
18
+ def log_level
19
+ @@log_level || Logger::DEBUG
49
20
  end
50
21
 
51
- def self.colorize(level)
52
- if defined?(Pry) && Pry.color
53
- case level.to_sym
54
- when :debug
55
- Pry::Helpers::Text.cyan(level)
56
- when :info
57
- Pry::Helpers::Text.green(level)
58
- when :warn
59
- Pry::Helpers::Text.magenta(level)
60
- when :error
61
- Pry::Helpers::Text.red(level)
62
- end
63
- else
64
- level
22
+ def log(level, message)
23
+ if level >= self.log_level
24
+ self.logger.add(level, message)
65
25
  end
66
26
  end
67
27
 
68
- self.level = :info
69
- self.print_solver_outputs = true
70
-
71
- class ::String
72
- def log(level)
73
- Logger::log(level, self)
74
- end
28
+ def logger=(logger)
29
+ @@logger = logger
75
30
  end
76
31
 
77
- class ::Array
78
- def log(level, sep="\n")
79
- Logger::log(level, self.join("#{sep}[#{level}] "))
80
- end
32
+ def logger
33
+ @@logger = Logger.new(STDOUT)
81
34
  end
82
35
  end
83
36
  end
data/lib/rulp/rulp.rb CHANGED
@@ -10,6 +10,7 @@ require_relative "../helpers/log"
10
10
 
11
11
  require 'set'
12
12
  require 'open3'
13
+ require 'logger'
13
14
 
14
15
  GLPK = "glpsol"
15
16
  SCIP = "scip"
@@ -18,6 +19,9 @@ GUROBI = "gurobi_cl"
18
19
 
19
20
  module Rulp
20
21
  attr_accessor :expressions
22
+ extend Rulp::Log
23
+ self.print_solver_outputs = true
24
+
21
25
  MIN = "Minimize"
22
26
  MAX = "Maximize"
23
27
 
@@ -33,6 +37,7 @@ module Rulp
33
37
  GUROBI => Gurobi,
34
38
  }
35
39
 
40
+
36
41
  def self.Glpk(lp, opts={})
37
42
  lp.solve_with(GLPK, opts)
38
43
  end
@@ -50,12 +55,12 @@ module Rulp
50
55
  end
51
56
 
52
57
  def self.Max(objective_expression)
53
- "Creating maximization problem".log :info
58
+ Rulp.log(Logger::INFO, "Creating maximization problem")
54
59
  Problem.new(Rulp::MAX, objective_expression)
55
60
  end
56
61
 
57
62
  def self.Min(objective_expression)
58
- "Creating minimization problem".log :info
63
+ Rulp.log(Logger::INFO, "Creating minimization problem")
59
64
  Problem.new(Rulp::MIN, objective_expression)
60
65
  end
61
66
 
@@ -68,9 +73,9 @@ module Rulp
68
73
 
69
74
  def self.exec(command)
70
75
  result = ""
71
- Open3.popen2e("#{command} #{Rulp::Logger.print_solver_outputs ? "" : "> /dev/null 2>&1"}") do | inp, out, thr|
76
+ Open3.popen2e("#{command} #{Rulp.print_solver_outputs ? "" : "> /dev/null 2>&1"}") do | inp, out, thr|
72
77
  out.each do |line|
73
- puts line
78
+ Rulp.log(Logger::DEBUG, line)
74
79
  result << line
75
80
  end
76
81
  end
@@ -90,13 +95,13 @@ module Rulp
90
95
  end
91
96
 
92
97
  def [](*constraints)
93
- "Got constraints".log(:info)
98
+ Rulp.log(Logger::INFO, "Got constraints")
94
99
  constraints.flatten!
95
- "Flattened constraints".log(:info)
100
+ Rulp.log(Logger::INFO, "Flattened constraints")
96
101
  @constraints.concat(constraints)
97
- "Joint constraints".log(:info)
102
+ Rulp.log(Logger::INFO, "Joint constraints")
98
103
  @variables.merge(constraints.flat_map(&:variables).uniq)
99
- "Extracted variables".log(:info)
104
+ Rulp.log(Logger::INFO, "Extracted variables")
100
105
  self
101
106
  end
102
107
 
@@ -152,22 +157,23 @@ module Rulp
152
157
  end
153
158
 
154
159
  def solve_with(type, options={})
160
+
155
161
  filename = get_output_filename
156
162
  solver = SOLVERS[type].new(filename, options)
157
163
 
158
- "Writing problem".log(:info)
164
+ Rulp.log(Logger::INFO, "Writing problem")
159
165
  IO.write(filename, self)
160
166
 
161
167
  Rulp.exec("open #{filename}") if options[:open_definition]
162
168
 
163
- "Solving problem".log(:info)
169
+ Rulp.log(Logger::INFO, "Solving problem")
164
170
  self.trace, time = _profile{ solver.solve }
165
171
 
166
172
  Rulp.exec("open #{solver.outfile}") if options[:open_solution]
167
173
 
168
- "Solver took #{time}".log(:debug)
174
+ Rulp.log(Logger::DEBUG, "Solver took #{time}")
169
175
 
170
- "Parsing result".log(:info)
176
+ Rulp.log(Logger::INFO, "Parsing result")
171
177
  solver.store_results(@variables)
172
178
 
173
179
  solver.remove_lp_file if options[:remove_lp_file]
@@ -175,7 +181,7 @@ module Rulp
175
181
 
176
182
  self.result = @objective_expression.evaluate
177
183
 
178
- "Objective: #{result}\n#{@variables.map{|v|[v.name, "=", v.value].join(' ') if v.value}.compact.join("\n")}".log(:debug)
184
+ Rulp.log(Logger::DEBUG, "Objective: #{result}\n#{@variables.map{|v|[v.name, "=", v.value].join(' ') if v.value}.compact.join("\n")}")
179
185
  return self.result
180
186
  end
181
187
 
data/test/test_helper.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require_relative "../lib/rulp"
2
+ require 'logger'
2
3
 
3
4
  gem "minitest"
4
5
  require "minitest/autorun"
5
6
 
6
- Rulp::Logger::level = :off
7
- Rulp::Logger::print_solver_outputs = false
7
+ Rulp::log_level = Logger::UNKNOWN
8
+ Rulp::print_solver_outputs = false
8
9
 
9
10
  def each_solver
10
11
  [:scip, :cbc, :glpk, :gurobi].each do |solver|
@@ -12,7 +13,7 @@ def each_solver
12
13
  if Rulp::solver_exists?(solver)
13
14
  yield(solver)
14
15
  else
15
- "Couldn't find solver #{solver}".log(:info)
16
+ Rulp::log(Logger::INFO, "Couldn't find solver #{solver}")
16
17
  end
17
18
  end
18
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rulp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-21 00:00:00.000000000 Z
11
+ date: 2016-02-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple Ruby LP description DSL
14
14
  email: wc@pico.net.nz