class Algebra::AlgebraicExtensionField

Public Class Methods

create(field, var_obj) { |var| ... } click to toggle source
Calls superclass method
# File lib/algebra/algebraic-extension-field.rb, line 18
    def self.create(field, var_obj)
      poly_ring = Algebra.Polynomial(field, var_obj)

      modulus = yield(poly_ring.var)
      klass = super(poly_ring, modulus)

      #      def klass.var; self[ground.var]; end
      klass.sysvar :var, klass[klass.ground.var]
      klass.sysvar :base, field

      if Algebra::AlgebraicExtensionField >= field
        env_ring = Algebra.Polynomial(field.env_ring, var_obj)
        klass.sysvar :def_polys, field.def_polys + [modulus]
      else
        env_ring = poly_ring
        klass.sysvar :def_polys, [modulus]
      end

      poly_ring.class_eval <<-__DEF__
      def abs_lift
        if Algebra::AlgebraicExtensionField >= ground
          project(self.class.env_ring) {|c, n| c.abs_lift }
        else
          project(self.class.env_ring) {|c, n| c }
        end
      end
      __DEF__
      poly_ring.sysvar :env_ring, env_ring
      klass.sysvar :env_ring, env_ring

      klass
    end
to_ary() click to toggle source
# File lib/algebra/algebraic-extension-field.rb, line 59
def self.to_ary
  [self, var]
end

Public Instance Methods

[](n) click to toggle source
# File lib/algebra/algebraic-extension-field.rb, line 51
def [](n)
  lift[n]
end
abs_lift() click to toggle source
# File lib/algebra/algebraic-extension-field.rb, line 55
def abs_lift
  Algebra::AlgebraicExtensionField >= self.class.base ? lift.abs_lift : lift
end