dydx 0.1.28 → 0.1.29
Sign up to get free protection for your applications and to get access to all the features.
- data/dydx.gemspec +2 -2
- data/lib/dydx/algebra/formula.rb +8 -14
- data/lib/dydx/algebra/inverse.rb +3 -10
- data/lib/dydx/algebra/operator/parts/formula.rb +9 -5
- data/lib/dydx/algebra/operator/parts/general.rb +2 -2
- data/lib/dydx/algebra/operator/parts/symbol.rb +1 -1
- data/lib/dydx/algebra/set/num.rb +0 -4
- data/lib/dydx/algebra/set/sin.rb +3 -2
- data/lib/dydx/helper.rb +1 -3
- data/lib/dydx/version.rb +1 -1
- data/spec/lib/algebra/operator/parts/formula_spec.rb +5 -0
- data/spec/lib/function_spec.rb +2 -2
- metadata +32 -18
- checksums.yaml +0 -7
data/dydx.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["gogotanaka"]
|
10
10
|
spec.email = ["qlli.illb@gmail.com"]
|
11
11
|
spec.homepage = "https://github.com/gogotanaka"
|
12
|
-
spec.summary = %q{We can enjoy the
|
13
|
-
spec.description = %q{
|
12
|
+
spec.summary = %q{We can enjoy the math.}
|
13
|
+
spec.description = %q{Dydx is new math DSL in Ruby. The most important thing in this DSL is we can handle math in the same sense sense of the math on paper.}
|
14
14
|
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
data/lib/dydx/algebra/formula.rb
CHANGED
@@ -11,10 +11,8 @@ module Dydx
|
|
11
11
|
|
12
12
|
def differentiate(sym=:x)
|
13
13
|
case @operator
|
14
|
-
when :+
|
15
|
-
|
16
|
-
when :*
|
17
|
-
(f.d(sym) * g) + (f * g.d(sym))
|
14
|
+
when :+ then f.d(sym) + g.d(sym)
|
15
|
+
when :* then (f.d(sym) * g) + (f * g.d(sym))
|
18
16
|
when :^
|
19
17
|
# TODO:
|
20
18
|
if g.is_num?
|
@@ -31,18 +29,14 @@ module Dydx
|
|
31
29
|
alias_method :d, :differentiate
|
32
30
|
|
33
31
|
def to_s
|
34
|
-
if (
|
32
|
+
if (formula?(:*) && (f.is_minus1? || g.is_minus1?) )
|
35
33
|
"( - #{g.to_s} )"
|
36
|
-
elsif
|
37
|
-
"( #{f.to_s}
|
38
|
-
elsif
|
39
|
-
"( #{g.to_s}
|
40
|
-
elsif addition? && g.inverse?(:+)
|
41
|
-
"( #{f.to_s} - #{g.x.to_s} )"
|
42
|
-
elsif addition? && f.inverse?(:+)
|
43
|
-
"( #{g.to_s} - #{f.x.to_s} )"
|
34
|
+
elsif g.inverse?(operator)
|
35
|
+
"( #{f.to_s} #{inverse_ope(operator)} #{g.x.to_s} )"
|
36
|
+
elsif f.inverse?(operator)
|
37
|
+
"( #{g.to_s} #{inverse_ope(operator)} #{f.x.to_s} )"
|
44
38
|
else
|
45
|
-
"( #{f.to_s} #{
|
39
|
+
"( #{f.to_s} #{operator} #{g.to_s} )"
|
46
40
|
end
|
47
41
|
end
|
48
42
|
|
data/lib/dydx/algebra/inverse.rb
CHANGED
@@ -9,12 +9,9 @@ module Dydx
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def to_s
|
12
|
-
# sym = {'*'=>'/', '+'=>'-'}[operator.to_s]
|
13
12
|
case operator
|
14
|
-
when :+
|
15
|
-
|
16
|
-
when :*
|
17
|
-
"( 1 / #{x} )"
|
13
|
+
when :+ then "( - #{x} )"
|
14
|
+
when :* then "( 1 / #{x} )"
|
18
15
|
end
|
19
16
|
end
|
20
17
|
|
@@ -27,10 +24,6 @@ module Dydx
|
|
27
24
|
end
|
28
25
|
end
|
29
26
|
alias_method :d, :differentiate
|
30
|
-
|
31
|
-
def ==(x)
|
32
|
-
to_s == x.to_s
|
33
|
-
end
|
34
27
|
end
|
35
28
|
end
|
36
|
-
end
|
29
|
+
end
|
@@ -13,6 +13,8 @@ module Dydx
|
|
13
13
|
else
|
14
14
|
super(x)
|
15
15
|
end
|
16
|
+
elsif formula?(sub_ope(operator)) && openable?(operator, x)
|
17
|
+
f.send(operator, x).send(sub_ope(operator), g.send(operator, x))
|
16
18
|
elsif formula?(super_ope(operator)) && x.formula?(super_ope(operator))
|
17
19
|
w1, w2 = common_factors(x)
|
18
20
|
return super(x) unless (w1 && w2) && (super_ope(operator).commutative? || w1 == w2)
|
@@ -49,11 +51,13 @@ module Dydx
|
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
(
|
55
|
-
|
56
|
-
|
54
|
+
%w(^).map(&:to_sym).each do |operator|
|
55
|
+
define_method(operator) do |x|
|
56
|
+
if formula?(sub_ope(operator)) && openable?(operator, x)
|
57
|
+
f.send(operator, x).send(sub_ope(operator), g.send(operator, x))
|
58
|
+
else
|
59
|
+
super(x)
|
60
|
+
end
|
57
61
|
end
|
58
62
|
end
|
59
63
|
end
|
data/lib/dydx/algebra/set/num.rb
CHANGED
data/lib/dydx/algebra/set/sin.rb
CHANGED
data/lib/dydx/helper.rb
CHANGED
@@ -62,6 +62,7 @@ module Dydx
|
|
62
62
|
case operator
|
63
63
|
when :+
|
64
64
|
(is_num? && x.is_num?) ||
|
65
|
+
(formula?(:*) && (f.is_num? || g.is_num?)) && x.is_num? ||
|
65
66
|
like_term?(x) ||
|
66
67
|
inverse?(:+, x)
|
67
68
|
when :*
|
@@ -110,9 +111,6 @@ module Dydx
|
|
110
111
|
([:f, :g] - [f_or_g]).first
|
111
112
|
end
|
112
113
|
|
113
|
-
def commutative?
|
114
|
-
end
|
115
|
-
|
116
114
|
def distributable?(operator)
|
117
115
|
end
|
118
116
|
|
data/lib/dydx/version.rb
CHANGED
@@ -47,6 +47,11 @@ describe Dydx::Algebra::Operator::Parts::Formula do
|
|
47
47
|
it{ expect((:y - (:x - :y)).to_s).to eq('( ( 2 * y ) - x )') }
|
48
48
|
it{ expect((:y - (:y - :x)).to_s).to eq('x') }
|
49
49
|
|
50
|
+
it{ expect((x + 3) * 2).to eq(x * 2 + 6) }
|
51
|
+
# it{ expect((x - 3) * 2).to eq(x * 2 - 6) }
|
52
|
+
it{ expect((x + 3) * 2).to eq(x * 2 + 6) }
|
53
|
+
it{ expect((x + 3) * 2).to eq(x * 2 + 6) }
|
54
|
+
|
50
55
|
it{ expect(((:x * 2) ^ 2).to_s).to eq('( 4 * ( x ^ 2 ) )') }
|
51
56
|
it{ expect(((:x / 2) ^ 2).to_s).to eq('( ( x ^ 2 ) / 4 )') }
|
52
57
|
|
data/spec/lib/function_spec.rb
CHANGED
@@ -28,8 +28,8 @@ describe Dydx:Function do
|
|
28
28
|
|
29
29
|
it{ expect(h(a, b, c) <= d/db(g(a, b))).to eq(h(a, b, c)) }
|
30
30
|
it{ expect(h(a, b, c) <= d/db(g(a, b))).to eq($h) }
|
31
|
-
it{ expect(h(a, b, c)).to eq(( ( 2 * b )
|
32
|
-
it{ expect(h(a, b, c).algebra).to eq(( ( 2 * b )
|
31
|
+
it{ expect(h(a, b, c)).to eq(( a + ( 2 * b ) )) }
|
32
|
+
it{ expect(h(a, b, c).algebra).to eq(( a + ( 2 * b ) )) }
|
33
33
|
|
34
34
|
it 'ex.4' do
|
35
35
|
$f = nil
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dydx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.29
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- gogotanaka
|
@@ -13,56 +14,62 @@ dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '1.6'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.6'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
|
-
description:
|
56
|
-
|
62
|
+
description: Dydx is new math DSL in Ruby. The most important thing in this DSL is
|
63
|
+
we can handle math in the same sense sense of the math on paper.
|
57
64
|
email:
|
58
65
|
- qlli.illb@gmail.com
|
59
66
|
executables: []
|
60
67
|
extensions: []
|
61
68
|
extra_rdoc_files: []
|
62
69
|
files:
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
70
|
+
- .gitignore
|
71
|
+
- .rspec
|
72
|
+
- .travis.yml
|
66
73
|
- Gemfile
|
67
74
|
- LICENSE.txt
|
68
75
|
- README.md
|
@@ -125,27 +132,34 @@ files:
|
|
125
132
|
homepage: https://github.com/gogotanaka
|
126
133
|
licenses:
|
127
134
|
- MIT
|
128
|
-
metadata: {}
|
129
135
|
post_install_message:
|
130
136
|
rdoc_options: []
|
131
137
|
require_paths:
|
132
138
|
- lib
|
133
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
134
141
|
requirements:
|
135
|
-
- -
|
142
|
+
- - ! '>='
|
136
143
|
- !ruby/object:Gem::Version
|
137
144
|
version: '0'
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
hash: -4040478879646027093
|
138
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
139
150
|
requirements:
|
140
|
-
- -
|
151
|
+
- - ! '>='
|
141
152
|
- !ruby/object:Gem::Version
|
142
153
|
version: '0'
|
154
|
+
segments:
|
155
|
+
- 0
|
156
|
+
hash: -4040478879646027093
|
143
157
|
requirements: []
|
144
158
|
rubyforge_project:
|
145
|
-
rubygems_version:
|
159
|
+
rubygems_version: 1.8.23
|
146
160
|
signing_key:
|
147
|
-
specification_version:
|
148
|
-
summary: We can enjoy the
|
161
|
+
specification_version: 3
|
162
|
+
summary: We can enjoy the math.
|
149
163
|
test_files:
|
150
164
|
- spec/dydx_spec.rb
|
151
165
|
- spec/lib/algebra/formula_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: a53690ed9d47e90702608c9276bdf2dd76af42f4
|
4
|
-
data.tar.gz: eb525a3c66c33109a6c70a621c1dfaff1fe31bb4
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: afc1fabc722750af74ff12f064479928cbc3863066d76f20bb74aa46317bd556c3d90d92abf0365c528feaa76029c00e245b5ee31140a5ad2721e9145172b6c6
|
7
|
-
data.tar.gz: a1f587f80289788da9b414af04c3efe270a49b5a4e84287c88a6c58a3d7fc2bcb6619fb6e95b9a00650e2782f4ef0cf4749bac894d34790b5b80144561c094fe
|