dydx 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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/base'
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
@@ -5,7 +5,7 @@ module Dydx
5
5
  module Interface
6
6
  %w(+ - * / ^).each do |operator|
7
7
  define_method(operator) do |x|
8
- x = _(x) if x.is_a?(Fixnum)
8
+ x = ::Set::Num.new(x) if x.is_a?(Fixnum)
9
9
  super(x)
10
10
  end
11
11
  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
@@ -12,9 +12,10 @@ module Dydx
12
12
  "cos( #{x.to_s} )"
13
13
  end
14
14
 
15
- def d(sym=:x)
15
+ def differentiate(sym=:x)
16
16
  -1 * sin(x) * x.d(sym)
17
17
  end
18
+ alias_method :d, :differentiate
18
19
  end
19
20
  end
20
21
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Dydx
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.1
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-10 00:00:00.000000000 Z
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: 1.8.23
133
+ rubygems_version: 2.2.2
147
134
  signing_key:
148
- specification_version: 3
135
+ specification_version: 4
149
136
  summary: We can enjoy the derivative.
150
137
  test_files:
151
138
  - spec/dydx_spec.rb