rulp 0.0.44 → 0.0.46

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
- SHA1:
3
- metadata.gz: b02471f804f1086c6193730ce602be9cf03d3ab4
4
- data.tar.gz: a9f7197bb1aeb4a1a707333244b6600fed798322
2
+ SHA256:
3
+ metadata.gz: 79e259317b851f96717dc4e0e66b07f08cf035efc420eeef915db1f40d7b5389
4
+ data.tar.gz: 68cfcdf7d345b9e1ee0c66b70b822a3edcac50af649a906902ef08db4f673f87
5
5
  SHA512:
6
- metadata.gz: 5268c02947e586c5ad74630a9d9aadbca40c29f9ea5078f0f2a31563fdc81016a0664fc8d1f5b0406a7a5fe5d63d4e0ddfbd526a555f6b02525b509271a7707f
7
- data.tar.gz: 280a4f73804264683b9f65cfe42244934f12cf5a585a62e13f6d7cd8823466d1fc1fb43ff83d694fdf6d3e0a1e7cc0c29fbd373a53885f3b3b1f318435b6c283
6
+ metadata.gz: 0fe7414a15de24cd86043956491056cda383ce81ab21a7010add8715fbb2d2a376ff284faade9f7e66a512b1ae3c62926dcceb9dcf9a2dfe3e497eb11f558b8e
7
+ data.tar.gz: 3596934464b9aa30a43467fdc08e69a935f8d53219d2edf1b8110ca1806e71d5507802bd79d770df4d17be1d35f905e5b1b2a6554f3cbb4b5e78548864ebe9ee
@@ -1,5 +1,4 @@
1
- require_relative './array_extensions'
2
1
  require_relative './kernel_extensions'
3
2
  require_relative './object_extensions'
4
3
  require_relative './file_extensions'
5
- require_relative './os_extensions'
4
+ require_relative './os_extensions'
@@ -18,17 +18,15 @@ module Kernel
18
18
  alias_method :old_method_missing, :method_missing
19
19
  def method_missing(value, *args)
20
20
  method_name = "#{value}" rescue ""
21
- start = method_name[0]
22
- if (start <= "Z" && start >= "A")
23
- case method_name[-1]
24
- when "b"
25
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
21
+ if ("A".."Z").cover?(method_name[0])
22
+ if method_name.end_with?(BV.suffix)
23
+ method_name = method_name.chomp(BV.suffix).chomp("_")
26
24
  return BV.definition(method_name, args)
27
- when "i"
28
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
25
+ elsif method_name.end_with?(IV.suffix)
26
+ method_name = method_name.chomp(IV.suffix).chomp("_")
29
27
  return IV.definition(method_name, args)
30
- when "f"
31
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
28
+ elsif method_name.end_with?(LV.suffix)
29
+ method_name = method_name.chomp(LV.suffix).chomp("_")
32
30
  return LV.definition(method_name, args)
33
31
  end
34
32
  end
@@ -14,13 +14,13 @@ class << Object
14
14
  alias_method :old_const_missing, :const_missing
15
15
  def const_missing(value)
16
16
  method_name = "#{value}".split("::")[-1] rescue ""
17
- if (("A".."Z").include?(method_name[0]))
18
- if(method_name.end_with?("b"))
19
- return BV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
20
- elsif(method_name.end_with?("i"))
21
- return IV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
22
- elsif(method_name.end_with?("f"))
23
- return LV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
17
+ if ("A".."Z").cover?(method_name[0])
18
+ if method_name.end_with?(BV.suffix)
19
+ return BV.definition(method_name.chomp(BV.suffix).chomp("_"))
20
+ elsif method_name.end_with?(IV.suffix)
21
+ return IV.definition(method_name.chomp(IV.suffix).chomp("_"))
22
+ elsif method_name.end_with?(LV.suffix)
23
+ return LV.definition(method_name.chomp(LV.suffix).chomp("_"))
24
24
  end
25
25
  end
26
26
  old_const_missing(value)
@@ -21,15 +21,14 @@ class Expressions
21
21
  @expressions.map(&:variable)
22
22
  end
23
23
 
24
- [:==, :<, :<=, :>, :>=].each do |constraint_type|
25
- define_method(constraint_type){|value|
24
+ %i[== < <= > >=].each do |constraint_type|
25
+ define_method(constraint_type) do |value|
26
26
  Constraint.new(self, constraint_type, value)
27
- }
27
+ end
28
28
  end
29
29
 
30
30
  def -@
31
- -self.expressions[0]
32
- self
31
+ self.class.new(expressions.map(&:-@))
33
32
  end
34
33
 
35
34
  def -(other)
@@ -38,7 +37,7 @@ class Expressions
38
37
  end
39
38
 
40
39
  def +(other)
41
- Expressions.new(self.expressions + Expressions[other].expressions)
40
+ Expressions.new(expressions + Expressions[other].expressions)
42
41
  end
43
42
 
44
43
  def self.[](value)
@@ -50,7 +49,7 @@ class Expressions
50
49
  end
51
50
 
52
51
  def evaluate
53
- self.expressions.map(&:evaluate).inject(:+)
52
+ expressions.map(&:evaluate).inject(:+)
54
53
  end
55
54
  end
56
55
 
@@ -66,19 +65,19 @@ class Fragment
66
65
  end
67
66
 
68
67
  def +(other)
69
- return Expressions.new([self] + Expressions[other].expressions)
68
+ Expressions.new([self] + Expressions[other].expressions)
70
69
  end
71
70
 
72
71
  def -(other)
73
72
  self.+(-other)
74
73
  end
75
74
 
76
- def *(value)
77
- Fragment.new(@lv, @operand * value)
75
+ def *(other)
76
+ Fragment.new(@lv, @operand * other)
78
77
  end
79
78
 
80
79
  def evaluate
81
- if [TrueClass,FalseClass].include? @lv.value.class
80
+ if [TrueClass, FalseClass].include? @lv.value.class
82
81
  @operand * (@lv.value ? 1 : 0)
83
82
  else
84
83
  @operand * @lv.value
@@ -94,20 +93,18 @@ class Fragment
94
93
  @lv
95
94
  end
96
95
 
97
- [:==, :<, :<=, :>, :>=].each do |constraint_type|
98
- define_method(constraint_type){|value|
96
+ %i[== < <= > >=].each do |constraint_type|
97
+ define_method(constraint_type) do |value|
99
98
  Constraint.new(Expressions.new(self), constraint_type, value)
100
- }
99
+ end
101
100
  end
102
101
 
103
102
  def to_s
104
- @as_str ||= begin
105
- case @operand
106
- when -1 then " - #{@lv}"
107
- when 1 then " + #{@lv}"
108
- when ->(op){ op < 0} then " - #{@operand.abs} #{@lv}"
109
- else " + #{@operand} #{@lv}"
110
- end
111
- end
103
+ @as_str ||= case @operand
104
+ when -1 then " - #{@lv}"
105
+ when 1 then " + #{@lv}"
106
+ when ->(op) { op < 0 } then " - #{@operand.abs} #{@lv}"
107
+ else " + #{@operand} #{@lv}"
108
+ end
112
109
  end
113
- end
110
+ end
data/lib/rulp/lv.rb CHANGED
@@ -21,8 +21,12 @@ class LV
21
21
  "#{self.name}_#{self.suffix}"
22
22
  end
23
23
 
24
+ def self.suffix
25
+ ENV['RULP_LV_SUFFIX'] || "f"
26
+ end
27
+
24
28
  def suffix
25
- "f"
29
+ self.class.suffix
26
30
  end
27
31
 
28
32
  def self.definition(name, *args)
@@ -74,12 +78,13 @@ class LV
74
78
  end
75
79
 
76
80
  class BV < LV;
77
- def suffix
78
- "b"
81
+ def self.suffix
82
+ ENV['RULP_BV_SUFFIX'] || "b"
79
83
  end
80
84
  end
85
+
81
86
  class IV < LV;
82
- def suffix
83
- "i"
87
+ def self.suffix
88
+ ENV['RULP_IV_SUFFIX'] || "i"
84
89
  end
85
- end
90
+ end
data/lib/rulp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rulp
2
- VERSION = '0.0.44'
3
- end
2
+ VERSION = '0.0.46'
3
+ end
data/test/test_boolean.rb CHANGED
@@ -8,8 +8,8 @@ require_relative 'test_helper'
8
8
  class BooleanTest < Minitest::Test
9
9
  def setup
10
10
  @items = 30.times.map(&Shop_Item_b)
11
- items_count = @items.sum
12
- @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.sum
11
+ items_count = @items.inject(:+)
12
+ @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.inject(:+)
13
13
 
14
14
  @problem =
15
15
  Rulp::Min( @items_costs ) [
@@ -8,8 +8,8 @@ require_relative 'test_helper'
8
8
  class InfeasibleTest < Minitest::Test
9
9
  def setup
10
10
  @items = 30.times.map(&Shop_Item_b)
11
- items_count = @items.sum
12
- @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.sum
11
+ items_count = @items.inject(:+)
12
+ @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.inject(:+)
13
13
 
14
14
  @problem =
15
15
  Rulp::Min( @items_costs ) [
@@ -0,0 +1,30 @@
1
+ require_relative 'test_helper'
2
+
3
+ class NegateExpressionTest < Minitest::Test
4
+
5
+ def test_negate_expression
6
+ @problem = Rulp::Max(- (X1_i + 2 * X2_i))
7
+ @problem[
8
+ X1_i + X2_i == 10,
9
+ X1_i >= 0,
10
+ X2_i >= 0
11
+ ]
12
+
13
+ @problem.solve
14
+ assert X1_i.value == 10
15
+ assert X2_i.value == 0
16
+ end
17
+
18
+ def test_double_negate_expression
19
+ @problem = Rulp::Max(-(-(X1_i + 2 * X2_i)))
20
+ @problem[
21
+ X1_i + X2_i == 10,
22
+ X1_i >= 0,
23
+ X2_i >= 0
24
+ ]
25
+
26
+ @problem.solve
27
+ assert X1_i.value == 0
28
+ assert X2_i.value == 10
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'test_helper'
2
+
3
+ class NegateTerm < Minitest::Test
4
+ def setup
5
+ @problem = Rulp::Max(-X1_i + 2 * X2_i)
6
+ @problem[
7
+ X1_i + X2_i == 10,
8
+ X1_i >= 0,
9
+ X2_i >= 0
10
+ ]
11
+
12
+ @problem.solve
13
+ end
14
+
15
+ def test_negate_term
16
+ assert X1_i.value == 0
17
+ assert X2_i.value == 10
18
+ end
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.44
4
+ version: 0.0.46
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-01 00:00:00.000000000 Z
11
+ date: 2024-04-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple Ruby LP description DSL
14
14
  email: wc@pico.net.nz
@@ -18,7 +18,6 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - bin/rulp
21
- - lib/extensions/array_extensions.rb
22
21
  - lib/extensions/extensions.rb
23
22
  - lib/extensions/file_extensions.rb
24
23
  - lib/extensions/kernel_extensions.rb
@@ -43,12 +42,14 @@ files:
43
42
  - test/test_boolean.rb
44
43
  - test/test_helper.rb
45
44
  - test/test_infeasible.rb
45
+ - test/test_negate_expression.rb
46
+ - test/test_negate_term.rb
46
47
  - test/test_save_to_file.rb
47
48
  - test/test_simple.rb
48
- homepage:
49
+ homepage:
49
50
  licenses: []
50
51
  metadata: {}
51
- post_install_message:
52
+ post_install_message:
52
53
  rdoc_options: []
53
54
  require_paths:
54
55
  - lib
@@ -63,9 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.5.1
68
- signing_key:
67
+ rubygems_version: 3.5.6
68
+ signing_key:
69
69
  specification_version: 4
70
70
  summary: Ruby Linear Programming
71
71
  test_files:
@@ -73,5 +73,7 @@ test_files:
73
73
  - test/test_boolean.rb
74
74
  - test/test_helper.rb
75
75
  - test/test_infeasible.rb
76
+ - test/test_negate_expression.rb
77
+ - test/test_negate_term.rb
76
78
  - test/test_save_to_file.rb
77
79
  - test/test_simple.rb
@@ -1,5 +0,0 @@
1
- class Array
2
- def sum
3
- self.inject(:+)
4
- end
5
- end