dydx 0.0.1 → 0.0.2
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 +7 -0
- data/README.md +27 -2
- data/lib/dydx/algebra.rb +15 -66
- data/lib/dydx/algebra/operator/parts/interface.rb +1 -1
- data/lib/dydx/algebra/set.rb +72 -0
- data/lib/dydx/algebra/set/cos.rb +2 -1
- data/lib/dydx/algebra/set/fixnum.rb +0 -14
- data/lib/dydx/version.rb +1 -1
- metadata +17 -30
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8ec6bd373a47873bdafe89c3d13330f76ba28e0c
|
4
|
+
data.tar.gz: d65b0b2e28ba2e7af9448fbc85faff29b469497f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 50c0d17b503141dffc4ee4268cfce736ba72c50e9eda312ecdfd4f6b8a121210132ec58142c6145cff4169337dac1386fc5d61fb576da63ddc2e92abfa5d3816
|
7
|
+
data.tar.gz: 065b046b6f972ffb1c46c2ff6312cd9c659be35dddc7ef39d189762b01ebff7a80df34ab3a304128b86d3addeb056057dd647e10ab32800d9f33e409248ddbd9
|
data/README.md
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
# Dydx
|
2
|
+
It always happens you want to differentiate with ruby. right?
|
2
3
|
|
3
|
-
|
4
|
+
Dydx will eliminate this. Like this
|
5
|
+
|
6
|
+
```
|
7
|
+
( d/dx(e ^ :x) ).to_s
|
8
|
+
=> "( e ^ x )"
|
9
|
+
|
10
|
+
$y = cos(:x)
|
11
|
+
(dy/dx).to_s
|
12
|
+
=> "( - sin( x ) )"
|
13
|
+
|
14
|
+
# pretermit '.to_s'
|
15
|
+
|
16
|
+
d/dx(log(:x))
|
17
|
+
=> "( 1 / x )"
|
18
|
+
|
19
|
+
d/dx(:x^:n)
|
20
|
+
=> "( n * ( x ^ ( n - 1 ) ) )"
|
21
|
+
|
22
|
+
|
23
|
+
d/dx(:x^2)
|
24
|
+
=> "( 2 * x )"
|
25
|
+
|
26
|
+
```
|
27
|
+
|
28
|
+
(That's wonderful!!!!! But, I feel there is no meaning ... )
|
4
29
|
|
5
30
|
## Installation
|
6
31
|
|
@@ -18,7 +43,7 @@ Or install it yourself as:
|
|
18
43
|
|
19
44
|
## Usage
|
20
45
|
|
21
|
-
|
46
|
+
include Dydx
|
22
47
|
|
23
48
|
## Contributing
|
24
49
|
|
data/lib/dydx/algebra.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
require 'dydx/algebra/formula'
|
2
2
|
|
3
|
-
require 'dydx/algebra/set
|
4
|
-
require 'dydx/algebra/set/num'
|
5
|
-
require 'dydx/algebra/set/fixnum'
|
6
|
-
require 'dydx/algebra/set/symbol'
|
7
|
-
require 'dydx/algebra/set/e'
|
8
|
-
require 'dydx/algebra/set/pi'
|
9
|
-
require 'dydx/algebra/set/log'
|
10
|
-
require 'dydx/algebra/set/sin'
|
11
|
-
require 'dydx/algebra/set/cos'
|
12
|
-
require 'dydx/algebra/set/tan'
|
3
|
+
require 'dydx/algebra/set'
|
13
4
|
|
14
5
|
require 'dydx/algebra/operator/formula'
|
15
6
|
require 'dydx/algebra/operator/symbol'
|
@@ -21,6 +12,20 @@ module Dydx
|
|
21
12
|
include Set
|
22
13
|
module Set
|
23
14
|
Symbol.class_eval{ include Operator::Symbol }
|
15
|
+
Fixnum.class_eval do
|
16
|
+
%w(+ - * / ^).each do |operator|
|
17
|
+
define_method(operator) do |g|
|
18
|
+
if g.is_a?(Symbol) ||
|
19
|
+
g.is_a?(Formula) ||
|
20
|
+
g.is_a?(Base)
|
21
|
+
|
22
|
+
Num.new(self).send(operator.to_sym, g)
|
23
|
+
else
|
24
|
+
(to_f.send(operator.to_sym, g)).to_i
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
24
29
|
class Num; include Operator::Num; end
|
25
30
|
class E; include Operator::General; end
|
26
31
|
class Pi; include Operator::General; end
|
@@ -30,61 +35,5 @@ module Dydx
|
|
30
35
|
class Tan; include Operator::General; end
|
31
36
|
end
|
32
37
|
class Formula; include Operator::Formula; end
|
33
|
-
|
34
|
-
def _(num)
|
35
|
-
if num >= 0
|
36
|
-
eval("@p#{num} ||= Num.new(num)")
|
37
|
-
else
|
38
|
-
eval("@n#{-1 * num} ||= Num.new(num)")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def pi
|
43
|
-
@pi ||= Pi.new
|
44
|
-
end
|
45
|
-
|
46
|
-
def e
|
47
|
-
@e ||= E.new
|
48
|
-
end
|
49
|
-
|
50
|
-
def log(formula)
|
51
|
-
if formula.multiplication?
|
52
|
-
f, g = formula.f, formula.g
|
53
|
-
log(f) + log(g)
|
54
|
-
elsif formula.exponentiation?
|
55
|
-
f, g = formula.f, formula.g
|
56
|
-
g * log(f)
|
57
|
-
elsif formula.is_1?
|
58
|
-
_(0)
|
59
|
-
elsif formula.is_a?(E)
|
60
|
-
_(1)
|
61
|
-
else
|
62
|
-
Log.new(formula)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def sin(x)
|
67
|
-
multiplier = x.is_multiple_of(pi)
|
68
|
-
if multiplier.is_a?(Num)
|
69
|
-
_(0)
|
70
|
-
else
|
71
|
-
Sin.new(x)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def cos(x)
|
76
|
-
multiplier = x.is_multiple_of(pi)
|
77
|
-
if multiplier.is_a?(Num) && multiplier.n % 2 == 0
|
78
|
-
_(1)
|
79
|
-
elsif multiplier.is_a?(Num) && multiplier.n % 2 == 1
|
80
|
-
_(-1)
|
81
|
-
else
|
82
|
-
Cos.new(x)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def tan(x)
|
87
|
-
Tan.new(x)
|
88
|
-
end
|
89
38
|
end
|
90
39
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'dydx/algebra/set/base'
|
2
|
+
require 'dydx/algebra/set/num'
|
3
|
+
require 'dydx/algebra/set/fixnum'
|
4
|
+
require 'dydx/algebra/set/symbol'
|
5
|
+
require 'dydx/algebra/set/e'
|
6
|
+
require 'dydx/algebra/set/pi'
|
7
|
+
require 'dydx/algebra/set/log'
|
8
|
+
require 'dydx/algebra/set/sin'
|
9
|
+
require 'dydx/algebra/set/cos'
|
10
|
+
require 'dydx/algebra/set/tan'
|
11
|
+
|
12
|
+
module Dydx
|
13
|
+
module Algebra
|
14
|
+
module Set
|
15
|
+
def _(num)
|
16
|
+
if num >= 0
|
17
|
+
eval("$p#{num} ||= Num.new(num)")
|
18
|
+
else
|
19
|
+
eval("$n#{-1 * num} ||= Num.new(num)")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def pi
|
24
|
+
$pi ||= Pi.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def e
|
28
|
+
$e ||= E.new
|
29
|
+
end
|
30
|
+
|
31
|
+
def log(formula)
|
32
|
+
if formula.multiplication?
|
33
|
+
f, g = formula.f, formula.g
|
34
|
+
log(f) + log(g)
|
35
|
+
elsif formula.exponentiation?
|
36
|
+
f, g = formula.f, formula.g
|
37
|
+
g * log(f)
|
38
|
+
elsif formula.is_1?
|
39
|
+
_(0)
|
40
|
+
elsif formula.is_a?(E)
|
41
|
+
_(1)
|
42
|
+
else
|
43
|
+
Log.new(formula)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def sin(x)
|
48
|
+
multiplier = x.is_multiple_of(pi)
|
49
|
+
if multiplier.is_a?(Num)
|
50
|
+
_(0)
|
51
|
+
else
|
52
|
+
Sin.new(x)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def cos(x)
|
57
|
+
multiplier = x.is_multiple_of(pi)
|
58
|
+
if multiplier.is_a?(Num) && multiplier.n % 2 == 0
|
59
|
+
_(1)
|
60
|
+
elsif multiplier.is_a?(Num) && multiplier.n % 2 == 1
|
61
|
+
_(-1)
|
62
|
+
else
|
63
|
+
Cos.new(x)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def tan(x)
|
68
|
+
Tan.new(x)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/dydx/algebra/set/cos.rb
CHANGED
@@ -4,20 +4,6 @@ module Dydx
|
|
4
4
|
Fixnum.class_eval do
|
5
5
|
include Helper
|
6
6
|
|
7
|
-
%w(+ - * / ^).each do |operator|
|
8
|
-
define_method(operator) do |g|
|
9
|
-
if g.is_a?(Symbol) ||
|
10
|
-
g.is_a?(Formula) ||
|
11
|
-
g.is_a?(Base) ||
|
12
|
-
%w(/ ^).include?(operator)
|
13
|
-
|
14
|
-
_(self).send(operator.to_sym, g)
|
15
|
-
else
|
16
|
-
(to_f.send(operator.to_sym, g)).to_i
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
7
|
def differentiate(sym=:x)
|
22
8
|
_(0)
|
23
9
|
end
|
data/lib/dydx/version.rb
CHANGED
metadata
CHANGED
@@ -1,62 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dydx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- gogotanaka
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.6'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '1.6'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
description: It is possible to use the differential using the Symbol and Fixnum by
|
@@ -67,9 +60,9 @@ executables: []
|
|
67
60
|
extensions: []
|
68
61
|
extra_rdoc_files: []
|
69
62
|
files:
|
70
|
-
- .gitignore
|
71
|
-
- .rspec
|
72
|
-
- .travis.yml
|
63
|
+
- ".gitignore"
|
64
|
+
- ".rspec"
|
65
|
+
- ".travis.yml"
|
73
66
|
- Gemfile
|
74
67
|
- LICENSE.txt
|
75
68
|
- README.md
|
@@ -89,6 +82,7 @@ files:
|
|
89
82
|
- lib/dydx/algebra/operator/parts/num.rb
|
90
83
|
- lib/dydx/algebra/operator/parts/symbol.rb
|
91
84
|
- lib/dydx/algebra/operator/symbol.rb
|
85
|
+
- lib/dydx/algebra/set.rb
|
92
86
|
- lib/dydx/algebra/set/base.rb
|
93
87
|
- lib/dydx/algebra/set/cos.rb
|
94
88
|
- lib/dydx/algebra/set/e.rb
|
@@ -119,33 +113,26 @@ files:
|
|
119
113
|
homepage: https://github.com/gogotanaka
|
120
114
|
licenses:
|
121
115
|
- MIT
|
116
|
+
metadata: {}
|
122
117
|
post_install_message:
|
123
118
|
rdoc_options: []
|
124
119
|
require_paths:
|
125
120
|
- lib
|
126
121
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
122
|
requirements:
|
129
|
-
- -
|
123
|
+
- - ">="
|
130
124
|
- !ruby/object:Gem::Version
|
131
125
|
version: '0'
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: 4103525150309275403
|
135
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
127
|
requirements:
|
138
|
-
- -
|
128
|
+
- - ">="
|
139
129
|
- !ruby/object:Gem::Version
|
140
130
|
version: '0'
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
hash: 4103525150309275403
|
144
131
|
requirements: []
|
145
132
|
rubyforge_project:
|
146
|
-
rubygems_version:
|
133
|
+
rubygems_version: 2.2.2
|
147
134
|
signing_key:
|
148
|
-
specification_version:
|
135
|
+
specification_version: 4
|
149
136
|
summary: We can enjoy the derivative.
|
150
137
|
test_files:
|
151
138
|
- spec/dydx_spec.rb
|