Sha256: ff996961879c438e4f15ee00053b9148c616cfac2b516c99c74657d8fd1b688b

Contents?: true

Size: 1.92 KB

Versions: 5

Compression:

Stored size: 1.92 KB

Contents

module Dydx
  module Algebra
    module Operator
      module Parts
        module General
          %w(+ * ^).map(&:to_sym).each do |operator|
            define_method(operator) do |x|
              if x.is_0?
                case operator
                when :+ then self
                when :* then x
                when :^ then e1
                end
              elsif x.is_1?
                case operator
                when :+ then super(x)
                when :* then self
                when :^ then self
                end
              elsif self == x
                case operator
                when :+ then _(2) * self
                when :* then self ^ _(2)
                when :^ then super(x)
                end
              elsif operator == :+ && inverse?(:+, x)
                e0
              elsif operator == :* && inverse?(:*, x)
                e1
              elsif [:+, :*].include?(operator) && x.formula?(operator)
                if combinable?(x.f, operator)
                  send(operator, x.f).send(operator, x.g)
                elsif combinable?(x.g, operator)
                  send(operator, x.g).send(operator, x.f)
                else
                  super(x)
                end
              elsif x.is_a?(Inverse) && x.operator == operator && x.x.formula?(operator)
                if combinable?(x.x.f, operator)
                  send(operator, inverse(x.x.f, operator)).send(operator, inverse(x.x.g, operator))
                elsif combinable?(x.x.g, operator)
                  send(operator, inverse(x.x.g, operator)).send(operator, inverse(x.x.f, operator))
                else
                  super(x)
                end
              elsif [:*].include?(operator) && x.inverse?(:+)
                inverse(::Algebra::Formula.new(self, x.x, operator.to_sym), :+)
              else
                super(x)
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dydx-0.1.28 lib/dydx/algebra/operator/parts/general.rb
dydx-0.1.25 lib/dydx/algebra/operator/parts/general.rb
dydx-0.1.2 lib/dydx/algebra/operator/parts/general.rb
dydx-0.1.1 lib/dydx/algebra/operator/parts/general.rb
dydx-0.1.0 lib/dydx/algebra/operator/parts/general.rb