001    /*
002     * $Id: IdealWithUniv.java 3637 2011-05-15 18:54:15Z kredel $
003     */
004    
005    package edu.jas.application;
006    
007    
008    import java.io.Serializable;
009    import java.util.List;
010    
011    import edu.jas.poly.GenPolynomial;
012    import edu.jas.structure.GcdRingElem;
013    
014    
015    /**
016     * Container for Ideals together with univariate polynomials.
017     * @author Heinz Kredel
018     */
019    public class IdealWithUniv<C extends GcdRingElem<C>> implements Serializable {
020    
021    
022        /**
023         * The ideal.
024         */
025        public final Ideal<C> ideal;
026    
027    
028        /**
029         * The list of univariate polynomials.
030         * Contains polynomials from serveral rings, depending on the stage of the decomposition. 
031         * 1) polynomials in a ring of one variable,
032         * 2) polynomials depending on only one variable but in a ring with multiple variables,
033         * 3) after contraction to a non-zero dimensional ring multivariate polynomials depending on 
034         * one significant variable and multiple variables from the quotient coefficients.
035         */
036        public final List<GenPolynomial<C>> upolys;
037    
038    
039        /**
040         * A list of other useful polynomials.
041         * 1) field extension polynomials,
042         * 2) generators for infinite quotients.
043         */
044        public final List<GenPolynomial<C>> others;
045    
046    
047        /**
048         * Constructor not for use.
049         */
050        protected IdealWithUniv() {
051            throw new IllegalArgumentException("do not use this constructor");
052        }
053    
054    
055        /**
056         * Constructor.
057         * @param id the ideal
058         * @param up the list of univariate polynomials
059         */
060        protected IdealWithUniv(Ideal<C> id, List<GenPolynomial<C>> up) {
061            this(id, up, null);
062        }
063    
064    
065        /**
066         * Constructor.
067         * @param id the ideal
068         * @param up the list of univariate polynomials
069         * @param og the list of other polynomials
070         */
071        protected IdealWithUniv(Ideal<C> id, List<GenPolynomial<C>> up, List<GenPolynomial<C>> og) {
072            ideal = id;
073            upolys = up;
074            others = og;
075        }
076    
077    
078        /**
079         * String representation of the ideal.
080         * @see java.lang.Object#toString()
081         */
082        @Override
083        public String toString() {
084            String s = ideal.toString();
085            if ( upolys != null ) {
086                 s += "\nunivariate polynomials:\n" + upolys.toString();
087            }
088            if (others == null) {
089                return s;
090            } else {
091                return s + "\nother polynomials:\n" + others.toString();
092            }
093        }
094    
095    
096        /**
097         * Get a scripting compatible string representation.
098         * @return script compatible representation for this Element.
099         * @see edu.jas.structure.Element#toScript()
100         */
101        public String toScript() {
102            // Python case
103            String s = ideal.toScript();
104            if ( upolys != null ) {
105                 s += ", upolys=" + upolys.toString();
106            }
107            if (others == null) {
108                return s;
109            } else {
110                return s + ", others=" + others.toString();
111            }
112        }
113    
114    }