ragni-cas 0.1.4 → 0.1.5

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
2
  SHA1:
3
- metadata.gz: 3b2ffa2dcbd78af09927a604e69f2a565a81a37e
4
- data.tar.gz: 134be78382ccefbada1ab75dbcc3869c4d4204e9
3
+ metadata.gz: a4242043e0dc955dc78fbb741acc0ddea85e53e5
4
+ data.tar.gz: ddb216f2b7e4fdda8abe923b0b73aa572387d878
5
5
  SHA512:
6
- metadata.gz: df5f85762fccdfce9d886aaadaec1b0648867e05bde256c0d24c3b8ae3b89bfb71863023bc14b36811352ca2b89f03002c5a80768a7f451da8e31566015bb643
7
- data.tar.gz: c43b45ee2efab3ed5d4a786d76a9b4d10a1b69f0fa01949d03422b6ac21a8b35817c03aaf05f73129e2ceb2e4111892323790d83aa9a45daa0eee2f0bd822af8
6
+ metadata.gz: fe985e5da5eacf6e38194b4973f076e93c219e29140172f4cc296058287c39452a65c47b5ab4cf38f67c361e240c38905ffb1920bf6fd6b61f1dc457b259c24b
7
+ data.tar.gz: 7f80d8eaf5983d19de5bdda2886bd05f521ed7d2543d61b99ea54717a29bbf5946f18c5b45f0c221ab18e55f850bd5064f42b57fa9ed366ac7557ee627743d0a
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/fnc-base.rb CHANGED
@@ -32,12 +32,19 @@ module CAS
32
32
  if @x == @y
33
33
  return @x * 2.0
34
34
  end
35
+ if @x == -@y or -@x == @y
36
+ return CAS::Zero
37
+ end
35
38
  if @x.is_a? CAS::Constant and @y.is_a? CAS::Constant
36
39
  return CAS.const(self.call({}))
37
40
  end
38
41
  return self
39
42
  end
40
43
 
44
+ def ==(op)
45
+ self.class == op.class and ((@x == op.x and @y == op.y) or (@y == op.x and @x == op.y))
46
+ end
47
+
41
48
  def to_code
42
49
  "(#{@x.to_code} + #{@y.to_code})"
43
50
  end
@@ -80,6 +87,10 @@ module CAS
80
87
  return self
81
88
  end
82
89
 
90
+ def ==(op)
91
+ self.class == op.class and ((@x == op.x and @y == op.y) or (@y == op.x and @x == op.y))
92
+ end
93
+
83
94
  def to_code
84
95
  "(#{@x.to_code} - #{@y.to_code})"
85
96
  end
@@ -125,6 +136,10 @@ module CAS
125
136
  return self
126
137
  end
127
138
 
139
+ def ==(op)
140
+ self.class == op.class and ((@x == op.x and @y == op.y) or (@y == op.x and @x == op.y))
141
+ end
142
+
128
143
  def to_code
129
144
  "(#{@x.to_code} * #{@y.to_code})"
130
145
  end
data/lib/numbers.rb CHANGED
@@ -11,9 +11,13 @@ module CAS
11
11
  end
12
12
 
13
13
  def diff(v); CAS::Zero; end
14
- def call(f = {}); @x; end
14
+
15
+ def call(f); @x; end
16
+
15
17
  def depend?(v); false; end
18
+
16
19
  def to_s; "#{@x}"; end
20
+
17
21
  def simplify
18
22
  case x
19
23
  when 0
@@ -30,7 +34,20 @@ module CAS
30
34
  return self
31
35
  end
32
36
  end
37
+
38
+ def args
39
+ []
40
+ end
41
+
42
+ def ==(op)
43
+ @x == op.x
44
+ end
45
+
46
+ def inspect
47
+ "Const(#{@x})"
48
+ end
33
49
  end
50
+
34
51
  def self.const(f)
35
52
  CAS::Constant.new f
36
53
  end
@@ -40,22 +57,20 @@ module CAS
40
57
  # \ V / _` | '_| / _` | '_ \ / -_)
41
58
  # \_/\__,_|_| |_\__,_|_.__/_\___|
42
59
  class Variable < CAS::Op
43
- @@counter = 0
44
60
  @@vars = {}
61
+ @@counter = 0
45
62
 
46
- def self.all_variables
47
- @@vars
48
- end
49
-
50
- def initialize(name = "x")
51
- self.is(name)
52
- @@vars[@identifier] = self
53
- @@counter = @@counter + 1
63
+ def self.list; @@vars; end
64
+ def self.size; @@counter; end
65
+ def self.exist?(name)
66
+ @@vars.keys.include? name
54
67
  end
55
68
 
56
- def is(name)
69
+ def initialize(name)
70
+ raise CASError, "Variable #{name} already exists" if CAS::Variable.exist? name
57
71
  @name = name
58
- @identifier = "var[#{@@counter}]"
72
+ @@vars[@name] = self
73
+ @@counter = @@counter + 1
59
74
  end
60
75
 
61
76
  def diff(v)
@@ -66,8 +81,13 @@ module CAS
66
81
  self == v
67
82
  end
68
83
 
84
+ def ==(op)
85
+ self.inspect == op.inspect
86
+ end
87
+
69
88
  def call(f)
70
- f[self]
89
+ return f[self] if f[self]
90
+ return f[@name] if f[@name]
71
91
  end
72
92
 
73
93
  def to_s
@@ -75,14 +95,26 @@ module CAS
75
95
  end
76
96
 
77
97
  def to_code
78
- "#{@identifier}"
98
+ "#{@name}.call(fd)"
99
+ end
100
+
101
+ def args
102
+ [self]
103
+ end
104
+
105
+ def inspect
106
+ "Var(#{@name})"
79
107
  end
80
108
 
81
109
  def simplify
82
- return self
110
+ self
83
111
  end
84
112
  end # Number
85
113
 
114
+ def self.variable(name)
115
+ CAS::Variable.new name
116
+ end
117
+
86
118
  # _______ ___ ___
87
119
  # |_ / __| _ \/ _ \
88
120
  # / /| _|| / (_) |
data/lib/op.rb CHANGED
@@ -40,6 +40,10 @@ module CAS
40
40
  @x.call(f)
41
41
  end
42
42
 
43
+ def subs(dt)
44
+ @x == dt[@x] if dt[@x].inspect == @x.inspect
45
+ end
46
+
43
47
  def to_s
44
48
  "#{@x}"
45
49
  end
@@ -68,6 +72,10 @@ module CAS
68
72
  CAS.pow(self, op)
69
73
  end
70
74
 
75
+ def -@
76
+ CAS.invert(self)
77
+ end
78
+
71
79
  def simplify # TODO: improve this
72
80
  hash = @x.to_s
73
81
  @x = @x.simplify
@@ -78,15 +86,25 @@ module CAS
78
86
  end
79
87
 
80
88
  def inspect
81
- self.to_code
89
+ "#{self.class}(#{@x.inspect})"
82
90
  end
83
91
 
84
- def as_proc
85
- eval <<-EOP
86
- Proc.new do |var|
87
- #{self.to_code}
88
- end
89
- EOP
92
+
93
+ def ==(op)
94
+ self.class == op.class and @x == op.x
95
+ end
96
+
97
+ def !=(op)
98
+ not self.==(op)
99
+ end
100
+
101
+ def as_proc(bind)
102
+ arguments = (self.args.map { |e| e.to_s }).join(" ")
103
+ bind.eval("Proc.new do |#{arguments}, fd|; #{self.to_code}; end")
104
+ end
105
+
106
+ def args
107
+ @x.args.uniq
90
108
  end
91
109
  end # Op
92
110
 
@@ -133,6 +151,11 @@ module CAS
133
151
  return left, right
134
152
  end
135
153
 
154
+ def subs(dt)
155
+ @x = dt[@x] if dt[@x].inspect @x.inspect
156
+ @y = dt[@y] if dt[@y].inspect @y.inspect
157
+ end
158
+
136
159
  def call
137
160
  raise CASError, "Not Implemented. This is a virtual method"
138
161
  end
@@ -145,6 +168,18 @@ module CAS
145
168
  raise CASError, "Not implemented. This is a virtual method"
146
169
  end
147
170
 
171
+ def args
172
+ (@x.args + @y.args).uniq
173
+ end
174
+
175
+ def inspect
176
+ "#{self.class}(#{@x.inspect}, #{@y.inspect})"
177
+ end
178
+
179
+ def ==(op)
180
+ self.class == op.class and @x == op.x and @y == op.y
181
+ end
182
+
148
183
  def simplify # TODO: improve this
149
184
  hash = @x.to_s
150
185
  @x = @x.simplify
data/lib/ragni-cas.rb CHANGED
@@ -5,9 +5,3 @@ require_relative 'numbers.rb'
5
5
  require_relative 'fnc-base.rb'
6
6
  require_relative 'fnc-trig.rb'
7
7
  require_relative 'fnc-trsc.rb'
8
-
9
- module CAS
10
- def self.as_proc(obj, op)
11
- eval("Proc.new do |var|; #{op.to_code}; end")
12
- end
13
- end
data/lib/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
  #!/usr/bin/env ruby
3
3
 
4
4
  module CAS
5
- VERSION = [0, 1, 4]
5
+ VERSION = [0, 1, 5]
6
6
  end
7
7
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ragni-cas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Ragni
@@ -29,7 +29,7 @@ cert_chain:
29
29
  XorZtzkkLImvKFj35xKLFfVkv0Vd8tGQoiL8vdmQNJjAjtE+C+Y7OI4dpiZPKO4G
30
30
  R/8JOvUuk9jPbyLxjQH/sFaFqqYGX2xo1zk2CRy/A0WhJrSaXVw1r5lEi7b0W5gg
31
31
  -----END CERTIFICATE-----
32
- date: 2016-07-20 00:00:00.000000000 Z
32
+ date: 2016-07-21 00:00:00.000000000 Z
33
33
  dependencies: []
34
34
  description:
35
35
  email: info@ragni.me
metadata.gz.sig CHANGED
Binary file