001/*
002 * $Id$
003 */
004
005package edu.jas.poly;
006
007
008import java.util.List;
009import java.util.Random;
010
011
012import edu.jas.structure.RingElem;
013import edu.jas.structure.RingFactory;
014
015
016/**
017 * Polynomial factory interface.
018 * Defines polynomial specific factory methods.
019 * @author Heinz Kredel
020 */
021
022public 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}