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 }