Class | JAS::PolyRing |
In: |
examples/jas.rb
|
Parent: | Ring |
auto_inject | [RW] | |
grad | [R] | |
lex | [R] |
Ring constructor.
coeff = factory for coefficients, vars = string with variable names, order = term order.
# 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
Inject variables for generators in given environment.
# 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.
# 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.
# File examples/jas.rb, line 1274 1274: def to_s() 1275: return @ring.toScript(); 1276: end
Define instance variables for generators.
# 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