edu.jas.gbufd.MultiplicativeSetCoPrime Maven / Gradle / Ivy
/*
* $Id: MultiplicativeSetCoPrime.java 4061 2012-07-27 12:03:20Z kredel $
*/
package edu.jas.gbufd;
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.GCDFactory;
import edu.jas.ufd.GreatestCommonDivisorAbstract;
/**
* Multiplicative set of co-prime polynomials. a, b in M implies a*b in M, 1 in
* M.
* @param coefficient type
* @author Heinz Kredel.
*/
public class MultiplicativeSetCoPrime> extends MultiplicativeSet {
private static final Logger logger = Logger.getLogger(MultiplicativeSetCoPrime.class);
//private final boolean debug = logger.isDebugEnabled();
/**
* Gcd computation engine.
*/
protected final GreatestCommonDivisorAbstract engine;
/**
* MultiplicativeSet constructor. Constructs an empty multiplicative set.
* @param ring polynomial ring factory for coefficients.
*/
public MultiplicativeSetCoPrime(GenPolynomialRing ring) {
super(ring);
engine = GCDFactory.getProxy(ring.coFac);
}
/**
* MultiplicativeSet constructor.
* @param ring polynomial ring factory for coefficients.
* @param ms a list of non-zero polynomials.
* @param eng gcd computation engine.
*/
protected MultiplicativeSetCoPrime(GenPolynomialRing ring, List> ms,
GreatestCommonDivisorAbstract eng) {
super(ring, ms);
engine = eng;
}
/**
* toString.
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "MultiplicativeSetCoPrime" + mset;
}
/**
* Comparison with any other object.
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object B) {
if (!(B instanceof MultiplicativeSetCoPrime)) {
return false;
}
return super.equals(B);
}
/**
* Add polynomial to mset.
* @param cc polynomial to be added to mset.
* @return new multiplicative set.
*/
@Override
public MultiplicativeSetCoPrime add(GenPolynomial cc) {
if (cc == null || cc.isZERO() || cc.isConstant()) {
return this;
}
if (ring.coFac.isField()) {
cc = cc.monic();
}
List> list;
if (mset.size() == 0) {
list = engine.coPrime(cc, mset);
if (ring.coFac.isField()) {
list = PolyUtil. monic(list);
}
return new MultiplicativeSetCoPrime(ring, list, engine);
}
GenPolynomial c = removeFactors(cc);
if (c.isConstant()) {
logger.info("skipped unit or constant = " + c);
return this;
}
logger.info("added to co-prime mset = " + c);
list = engine.coPrime(c, mset);
if (ring.coFac.isField()) {
list = PolyUtil. monic(list);
}
return new MultiplicativeSetCoPrime(ring, list, engine);
}
/**
* Replace polynomial list of mset.
* @param L polynomial list to replace mset.
* @return new multiplicative set.
*/
@Override
public MultiplicativeSetCoPrime replace(List> L) {
MultiplicativeSetCoPrime ms = new MultiplicativeSetCoPrime(ring);
if (L == null || L.size() == 0) {
return ms;
}
for (GenPolynomial p : L) {
ms = ms.add(p);
}
return ms;
}
}