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