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