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 }