Class JAS::PolyRing
In: examples/jas.rb
Parent: Ring

Represents a JAS polynomial ring: GenPolynomialRing.

Provides more convenient constructor. Then returns a Ring.

Methods

Attributes

auto_inject  [RW] 
grad  [R] 
lex  [R] 

Public Class methods

Ring constructor.

coeff = factory for coefficients, vars = string with variable names, order = term order.

[Source]

      # File examples/jas.rb, line 1238
1238:     def initialize(coeff,vars,order=self.class.grad)
1239:         if coeff == nil
1240:             raise ValueError, "No coefficient given."
1241:         end
1242:         cf = coeff;
1243:         if coeff.is_a? RingElem
1244:             cf = coeff.elem.factory();
1245:         end
1246:         if coeff.is_a? Ring
1247:             cf = coeff.ring;
1248:         end
1249:         if vars == nil
1250:             raise ValueError, "No variable names given."
1251:         end
1252:         names = vars;
1253:         if vars.is_a? String
1254:            names = GenPolynomialTokenizer.variableList(vars);
1255:         end
1256:         nv = names.size;
1257:         to = self.class.grad;
1258:         if order.is_a? TermOrder
1259:             to = order;
1260:         end
1261:         tring = GenPolynomialRing.new(cf,nv,to,names);
1262:         #want: super(Ring,self).initialize(ring=tring)
1263:         @ring = tring;
1264:         super("",@ring) 
1265:         variable_generators()
1266:         if self.class.auto_inject 
1267:            inject_variables();
1268:         end
1269:     end

Public Instance methods

Inject variables for generators in given environment.

[Source]

      # File examples/jas.rb, line 1306
1306:     def inject_gens(env) 
1307:        env.class.instance_eval( "attr_accessor :generators;" )
1308:        if env.generators == nil
1309:           env.generators = {};
1310:        end
1311:        #puts "existing generators: " + env.generators.keys().join(", ");  
1312:        for i in self.gens()
1313:           begin 
1314:              ivs = i.to_s
1315:              if not ivs.include?(",") and not ivs.include?("(")
1316:                 if ivs == "1" or ivs == "1 "
1317:                    ivs = "one"
1318:                 end
1319:                 if env.generators[ ivs ] != nil
1320:                    puts "redefining #{ivs}";
1321:                 end
1322:                 env.generators[ ivs ] = i;
1323:                 env.instance_eval( "def #{ivs}; @generators[ '#{ivs}' ]; end" )
1324:                 #puts "def #{ivs}; @generators[ '#{ivs}' ]; end"
1325:                 first = ivs.slice(0,1);
1326:                 if first.count('A-Z') > 0
1327:                    first = first.downcase
1328:                    ivl = first + ivs.slice(1,ivs.length);
1329:                    puts "warning: '" + str(ivs) + "' additionaly renamed to '" + str(ivl) + "' to avoid constant semantics"
1330:                    env.instance_eval( "def #{ivl}; @generators[ '#{ivs}' ]; end" )
1331:                 end
1332:              end
1333:           rescue 
1334:              puts "error: #{i} = " + i.to_s + ", class = " + i.class.to_s;
1335:           end
1336:        end
1337:     puts "globally defined generators: " + env.generators.keys().join(", ");  
1338:     end

Inject variables for generators in top level environment.

[Source]

      # File examples/jas.rb, line 1344
1344:     def inject_variables() 
1345:         begin 
1346:            require "irb/frame" # must be placed here
1347:            bin = IRB::Frame.bottom(0);
1348:            env = eval "self", bin;
1349:            #puts "env = " + str(env)
1350:            inject_gens(env)
1351:            rescue 
1352:               puts "error: 'irb/frame' not found";
1353:            end
1354:     end

Create a string representation.

[Source]

      # File examples/jas.rb, line 1274
1274:     def to_s()
1275:         return @ring.toScript();
1276:     end

Define instance variables for generators.

[Source]

      # File examples/jas.rb, line 1281
1281:     def variable_generators() 
1282:        PolyRing.instance_eval( "attr_accessor :generators;" )
1283:        @generators = {};
1284:        for i in self.gens()
1285:           begin 
1286:              ivs = i.to_s
1287:              if not ivs.include?(",") and not ivs.include?("(")
1288:                 if ivs == "1" or ivs == "1 "
1289:                    ivs = "one"
1290:                 end
1291:                 @generators[ ivs ] = i;
1292:                 self.instance_eval( "def #{ivs}; @generators[ '#{ivs}' ]; end" )
1293:              end
1294:           rescue 
1295:              puts "error: #{i} = " + i.to_s + ", class = " + i.class.to_s;
1296:              #pass
1297:           end
1298:        end
1299:     puts "defined generators: " + @generators.keys().join(", ");  
1300:     end

[Validate]