lib/dydx/algebra.rb in dydx-0.1.3 vs lib/dydx/algebra.rb in dydx-0.1.4
- old
+ new
@@ -1,90 +1,22 @@
-require 'dydx/algebra/formula'
-require 'dydx/algebra/inverse'
-
require 'dydx/algebra/set'
-require 'dydx/algebra/operator/inverse'
-require 'dydx/algebra/operator/formula'
-require 'dydx/algebra/operator/symbol'
-require 'dydx/algebra/operator/num'
-require 'dydx/algebra/operator/general'
-
module Dydx
module Algebra
include Set
- module Set
- # TODO: Refactor
- Symbol.class_eval{ include Operator::Symbol }
- Fixnum.class_eval do
- alias_method :addition, :+
- alias_method :subtraction, :-
- alias_method :multiplication, :*
- alias_method :division, :/
- alias_method :exponentiation, :**
- ope_to_str = {
- addition: :+,
- subtraction: :-,
- multiplication: :*,
- division: :/,
- exponentiation: :^
- }
- %w(+ - * / ^).each do |operator|
- define_method(operator) do |g|
- if g.is_a?(Symbol) ||
- g.is_a?(Formula) ||
- g.is_a?(Base)
- Num.new(self).send(operator.to_sym, g)
- else
- send(ope_to_str.key(operator.to_sym), g)
- end
- end
- end
- end
-
- Float.class_eval do
- alias_method :addition, :+
- alias_method :subtraction, :-
- alias_method :multiplication, :*
- alias_method :division, :/
- alias_method :exponentiation, :**
- ope_to_str = {
- addition: :+,
- subtraction: :-,
- multiplication: :*,
- division: :/,
- exponentiation: :^
- }
- %w(+ - * / ^).each do |operator|
- define_method(operator) do |g|
- if g.is_a?(Symbol) ||
- g.is_a?(Formula) ||
- g.is_a?(Base)
-
- Num.new(self).send(operator.to_sym, g)
- else
- send(ope_to_str.key(operator.to_sym), g)
- end
- end
- end
- end
- class Num; include Operator::Num; end
- class E; include Operator::General; end
- class Pi; include Operator::General; end
- class Log; include Operator::General; end
- class Sin; include Operator::General; end
- class Cos; include Operator::General; end
- class Tan; include Operator::General; end
- end
class Formula; include Operator::Formula; end
class Inverse; include Operator::Inverse; end
+ # TODO: Cyclomatic complexity for inverse is too high. [7/6]
def inverse(x, operator)
- if operator == :+ && x.is_0?
- e0
- elsif operator == :* && x.is_1?
- e1
+ if x.num?
+ x = x.to_numeric
+ if operator == :+
+ _(- x)
+ else
+ _(Rational(1, x))
+ end
elsif x.is_a?(Inverse) && x.operator == operator
x.x
else
Inverse.new(x, operator)
end