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 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