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}