001/* 002 * $Id$ 003 */ 004 005package edu.jas.gb; 006 007import java.util.List; 008 009import edu.jas.poly.GenSolvablePolynomial; 010import edu.jas.poly.GenSolvablePolynomialRing; 011import edu.jas.poly.ModuleList; 012import edu.jas.poly.PolynomialList; 013import edu.jas.structure.RingElem; 014 015 016/** 017 * Container for a GB and transformation matrices. 018 * A container for F, G, calG and calF. 019 * Immutable objects. 020 * @typeparam C coefficient type 021 */ 022public class SolvableExtendedGB<C extends RingElem<C>> { 023 024 public final List<GenSolvablePolynomial<C>> F; 025 public final List<GenSolvablePolynomial<C>> G; 026 public final List<List<GenSolvablePolynomial<C>>> F2G; 027 public final List<List<GenSolvablePolynomial<C>>> G2F; 028 public final GenSolvablePolynomialRing<C> ring; 029 030 031 /** 032 * Container for a GB and transformation matrices. 033 * @param F an ideal base. 034 * @param G a Groebner base of F. 035 * @param F2G a transformation matrix from F to G. 036 * @param G2F a transformation matrix from G to F. 037 */ 038 public SolvableExtendedGB( List<GenSolvablePolynomial<C>> F, 039 List<GenSolvablePolynomial<C>> G, 040 List<List<GenSolvablePolynomial<C>>> F2G, 041 List<List<GenSolvablePolynomial<C>>> G2F) { 042 this.F = F; 043 this.G = G; 044 this.F2G = F2G; 045 this.G2F = G2F; 046 GenSolvablePolynomialRing<C> r = null; 047 if ( G != null ) { 048 for ( GenSolvablePolynomial<C> p : G ) { 049 if ( p != null ) { 050 r = p.ring; 051 break; 052 } 053 } 054 if ( r != null && r.getVars() == null ) { 055 r.setVars( r.newVars("y") ); 056 } 057 } 058 this.ring = r; 059 } 060 061 062 /** Get the String representation. 063 * @see java.lang.Object#toString() 064 */ 065 @Override 066 public String toString() { 067 PolynomialList<C> P; 068 ModuleList<C> M; 069 StringBuffer s = new StringBuffer("SolvableExtendedGB: \n\n"); 070 P = new PolynomialList<C>( ring, F ); 071 s.append("F = " + P + "\n\n"); 072 P = new PolynomialList<C>( ring, G ); 073 s.append("G = " + P + "\n\n"); 074 M = new ModuleList<C>( ring, F2G ); 075 s.append("F2G = " + M + "\n\n"); 076 M = new ModuleList<C>( ring, G2F ); 077 s.append("G2F = " + M + "\n"); 078 return s.toString(); 079 } 080 081}