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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/fnc-base.rb +15 -0
- data/lib/numbers.rb +47 -15
- data/lib/op.rb +42 -7
- data/lib/ragni-cas.rb +0 -6
- data/lib/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4242043e0dc955dc78fbb741acc0ddea85e53e5
|
4
|
+
data.tar.gz: ddb216f2b7e4fdda8abe923b0b73aa572387d878
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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.
|
47
|
-
|
48
|
-
|
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
|
69
|
+
def initialize(name)
|
70
|
+
raise CASError, "Variable #{name} already exists" if CAS::Variable.exist? name
|
57
71
|
@name = name
|
58
|
-
@
|
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
|
-
"#{@
|
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
|
-
|
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.
|
89
|
+
"#{self.class}(#{@x.inspect})"
|
82
90
|
end
|
83
91
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
data/lib/version.rb
CHANGED
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
|
+
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-
|
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
|