001    /*
002     * $Id: PolynomialRing.java 1801 2008-05-19 20:50:39Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    
008    import java.util.List;
009    import java.util.Random;
010    
011    
012    import edu.jas.structure.RingElem;
013    import edu.jas.structure.RingFactory;
014    
015    
016    /**
017     * Polynomial factory interface.
018     * Defines polynomial specific factory methods.
019     * @author Heinz Kredel
020     */
021    
022    public interface PolynomialRing<C extends RingElem<C>> 
023                     extends RingFactory< Polynomial<C> > {
024    
025    
026        /**
027         * Number of variables.
028         * @return the number of variables.
029         */
030        public int numberOfVariables();
031    
032    
033        /** Get the variable names. 
034         * @return vars.
035         */
036        public String[] getVars();
037    
038    
039        /**
040         * Generate a random polynomial.
041         * @param k bitsize of random coefficients.
042         * @param l number of terms.
043         * @param d maximal degree in each variable.
044         * @param q density of nozero exponents.
045         * @return a random polynomial.
046         */
047        public Polynomial<C> random(int k, int l, int d, float q);
048    
049    
050        /**
051         * Generate a random polynomial.
052         * @param k bitsize of random coefficients.
053         * @param l number of terms.
054         * @param d maximal degree in each variable.
055         * @param q density of nozero exponents.
056         * @param rnd is a source for random bits.
057         * @return a random polynomial.
058         */
059        public Polynomial<C> random(int k, int l, int d, float q, Random rnd);
060    
061    
062        /**
063         * Generate univariate polynomial in a given variable.
064         * @param i the index of the variable.
065         * @return X_i as univariate polynomial.
066         */
067        public Polynomial<C> univariate(int i);
068    
069    
070        /**
071         * Generate univariate polynomial in a given variable with given exponent.
072         * @param i the index of the variable.
073         * @param e the exponent of the variable.
074         * @return X_i^e as univariate polynomial.
075         */
076        public Polynomial<C> univariate(int i, long e);
077    
078    
079        /**
080         * Generate list of univariate polynomials in all variables.
081         * @return List(X_1,...,X_n) a list of univariate polynomials.
082         */
083        public List<? extends Polynomial<C>> univariateList();
084    
085    
086        /**
087         * Extend variables. Used e.g. in module embedding.
088         * Extend number of variables by i.
089         * @param i number of variables to extend.
090         * @return extended polynomial ring factory.
091         */
092        public PolynomialRing<C> extend(int i);
093    
094    
095        /**
096         * Contract variables. Used e.g. in module embedding.
097         * Contract number of variables by i.
098         * @param i number of variables to remove.
099         * @return contracted polynomial ring factory.
100         */
101        public PolynomialRing<C> contract(int i);
102    
103    
104        /**
105         * Reverse variables. Used e.g. in opposite rings.
106         * @return polynomial ring factory with reversed variables.
107         */
108        public PolynomialRing<C> reverse();
109    
110    
111    }