All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.jas.gbufd.MultiplicativeSetFactors Maven / Gradle / Ivy

The newest version!
/*
 * $Id: MultiplicativeSetFactors.java 4061 2012-07-27 12:03:20Z kredel $
 */

package edu.jas.gbufd;


import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import edu.jas.poly.GenPolynomial;
import edu.jas.poly.GenPolynomialRing;
import edu.jas.poly.PolyUtil;
import edu.jas.structure.GcdRingElem;
import edu.jas.ufd.FactorAbstract;
import edu.jas.ufd.FactorFactory;


/**
 * Multiplicative set of irreducible polynomials. a, b in M implies a*b in M, 1
 * in M.
 * @param  coefficient type
 * @author Heinz Kredel.
 */
public class MultiplicativeSetFactors> extends MultiplicativeSet {


    private static final Logger logger = Logger.getLogger(MultiplicativeSetFactors.class);


    //private final boolean debug = logger.isDebugEnabled();


    /**
     * Factors decomposition engine.
     */
    protected final FactorAbstract engine;


    /**
     * MultiplicativeSet constructor. Constructs an empty multiplicative set.
     * @param ring polynomial ring factory for coefficients.
     */
    public MultiplicativeSetFactors(GenPolynomialRing ring) {
        super(ring);
        engine = FactorFactory.getImplementation(ring.coFac);
    }


    /**
     * MultiplicativeSet constructor.
     * @param ring polynomial ring factory for coefficients.
     * @param ms a list of non-zero polynomials.
     * @param eng factorization engine.
     */
    protected MultiplicativeSetFactors(GenPolynomialRing ring, List> ms,
                    FactorAbstract eng) {
        super(ring, ms);
        engine = eng;
    }


    /**
     * toString.
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "MultiplicativeSetFactors" + mset;
    }


    /**
     * Comparison with any other object.
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object B) {
        if (!(B instanceof MultiplicativeSetFactors)) {
            return false;
        }
        return super.equals(B);
    }


    /**
     * Add polynomial to mset.
     * @param cc polynomial to be added to mset.
     * @return new multiplicative set.
     */
    @Override
    public MultiplicativeSetFactors add(GenPolynomial cc) {
        if (cc == null || cc.isZERO() || cc.isConstant()) {
            return this;
        }
        if (ring.coFac.isField()) {
            cc = cc.monic();
        }
        GenPolynomial c = removeFactors(cc);
        if (c.isConstant()) {
            logger.info("skipped unit or constant = " + c);
            return this;
        }
        List> list = engine.factorsRadical(c);
        logger.info("factorsRadical = " + list);
        if (ring.coFac.isField()) {
            list = PolyUtil. monic(list);
        }
        List> ms = new ArrayList>(mset);
        for (GenPolynomial p : list) {
            if (!p.isConstant() && !p.isZERO()) {
                if (!mset.contains(p)) {
                    logger.info("added to irreducible mset = " + p);
                    ms.add(p);
                }
            }
        }
        return new MultiplicativeSetFactors(ring, ms, engine);
    }


    /**
     * Replace polynomial list of mset.
     * @param L polynomial list to replace mset.
     * @return new multiplicative set.
     */
    @Override
    public MultiplicativeSetFactors replace(List> L) {
        MultiplicativeSetFactors ms = new MultiplicativeSetFactors(ring);
        if (L == null || L.size() == 0) {
            return ms;
        }
        for (GenPolynomial p : L) {
            ms = ms.add(p);
        }
        return ms;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy