Go to the documentation of this file.
34 _term(new mpz_ptr[varCount]) {
45 for (
size_t var = 0; var <
_varCount; ++var)
46 _term[var] =
const_cast<mpz_ptr
>
50 void setTerm(
const vector<mpz_class>& term) {
53 for (
size_t var = 0; var <
_varCount; ++var)
54 _term[var] =
const_cast<mpz_ptr
>(term[var].get_mpz_t());
87 virtual void consume(
const vector<mpz_class>& term) {
132 const vector<mpz_class>& term) {
135 for (
size_t var = 0; var <
_varCount; ++var)
136 _term[var] =
const_cast<mpz_ptr
>(term[var].get_mpz_t());
178 _atVariable(variableCount) {
228 mpz_set(ref.get_mpz_t(), exponent);
233 mpz_class tmp(exponent);
238 mpz_class tmp(exponent);
243 const mpz_t* reflectionMonomial,
251 SliceFacade facade(params, bigIdeal, wrappedConsumer);
253 if (reflectionMonomial == 0)
256 vector<mpz_class> point;
258 for (
size_t var = 0; var < bigIdeal.
getVarCount(); ++var)
259 mpz_set(point[var].get_mpz_t(), reflectionMonomial[var]);
263 reflectionMonomial = 0;
276 const Ideal& reflectionMonomial,
287 const vector<mpz_class>& monomial = reflectionIdeal.
getTerm(0);
288 const mpz_t* monomialPtr = 0;
290 monomialPtr = (
const mpz_t*)&(monomial[0]);
302 SliceFacade facade(params, bigIdeal, wrappedConsumer);
313 SliceFacade facade(params, bigIdeal, wrappedConsumer);
334 _varCount = varCount;
335 _term.resize(varCount);
336 for (
size_t var = 0; var < _varCount; ++var)
337 _term[var] = _zero.get_mpz_t();
344 virtual void consume(mpz_ptr* exponentVector) {
345 _consumer->idealBegin(_varCount);
348 for (
size_t var = 0; var < _varCount; ++var) {
349 if (mpz_cmp_ui(exponentVector[var], 0) != 0) {
351 _term[var] = exponentVector[var];
352 _consumer->consume(&*(_term.begin()));
353 _term[var] = _zero.get_mpz_t();
357 _consumer->idealEnd();
386 SliceFacade facade(params, bigIdeal, wrappedConsumer);
399 SliceFacade facade(params, bigIdeal, wrappedConsumer);
411 SliceFacade facade(params, bigIdeal, wrappedConsumer);
423 vector<mpz_class> grading;
424 for (
size_t var = 0; var < bigIdeal.
getVarCount(); ++var)
425 grading.push_back(mpz_class(l[var]));
431 SliceFacade facade(params, bigIdeal, wrappedConsumer);
448 mpz_set(dim, dimen.get_mpz_t());
458 SliceFacade facade(params, bigIdeal, wrappedConsumer);
static const BigIdeal & getIdeal(const Frobby::Ideal &ideal)
virtual void polynomialEnd()
Called after output of a polynomial.
Frobby::IdealConsumer * _consumer
void computeMultigradedHilbertSeries()
Compute the numerator of the multigraded Hilbert-Poincare series.
void dimension(const Ideal &ideal, mpz_t dim)
Compute the Krull dimension of a monomial ideal.
mpz_class computeDimension(const BigIdeal &ideal, bool codimension=false, bool squareFreeAndMinimal=false)
Compute the Krull dimension of ideal.
virtual void polynomialBegin(size_t varCount)
Called before output of a polynomial.
virtual void doneConsuming()
Must be called once after each time beginConsuming has been called.
virtual void beginConsuming()
Tell the consumer to begin consuming an ideal.
virtual ~PolynomialConsumer()
The provided implementation does nothing.
virtual void idealEnd()
Called after output of a monomial ideal.
IdealConsumer * _consumer
virtual void consume(const mpz_class &coef, const Term &term, const TermTranslator &translator)
size_t getVarCount() const
virtual void idealEnd()
Called after output of a monomial ideal.
virtual void consume(mpz_ptr *exponentVector)=0
For output of a generator of the ideal.
virtual void consume(mpz_ptr *exponentVector)
For output of a generator of the ideal.
void maximalStandardMonomials(const Ideal &ideal, IdealConsumer &consumer)
Compute the maximal standard monomials of ideal.
bool irreducibleDecompositionAsMonomials(const Ideal &ideal, IdealConsumer &consumer)
Compute the irreducible decomposition of ideal, and encode each irreducible component as a monomial.
TermTranslator handles translation between terms whose exponents are infinite precision integers and ...
const vector< mpz_class > & getTerm(size_t term) const
void setTerm(const vector< mpz_class > &term)
const mpz_class & getExponent(size_t variable, Exponent exponent) const
This method translates from IDs to arbitrary precision integers.
void multigradedHilbertPoincareSeries(const Ideal &ideal, PolynomialConsumer &consumer)
Compute the multigraded Hilbert-Poincare series of ideal.
size_t getVarCount() const
FrobbyImpl::FrobbyIdealHelper * _data
void computeMaximalStandardMonomials()
Compute the maximal standard monomials of the ideal.
Ideal & operator=(const Ideal &ideal)
size_t getVarCount() const
Returns the current number of variables.
bool solveStandardProgram(const vector< mpz_class > &grading, mpz_class &value, bool reportAllSolutions)
Solve an optimization program over maximal standard monomials.
virtual void consume(const mpz_t coefficient, mpz_ptr *exponentVector)=0
For output of a term of the polynomial.
mpz_class & getLastTermExponentRef(size_t var)
void computeAssociatedPrimes()
Compute the associated primes of the ideal.
void univariateHilbertPoincareSeries(const Ideal &ideal, PolynomialConsumer &consumer)
Compute the univariate Hilbert-Poincare series of ideal.
ConsumerWrapper(size_t varCount)
IrreducibleIdealDecoder(IdealConsumer *consumer)
Term represents a product of variables which does not include a coefficient.
void irreducibleDecompositionAsIdeals(const Ideal &ideal, IdealConsumer &consumer)
Compute the irreducible decomposition of ideal.
bool solveStandardMonomialProgram(const Ideal &ideal, const mpz_t *l, IdealConsumer &consumer)
Solve the optimization program.
bool alexanderDual(const Ideal &ideal, const mpz_t *reflectionMonomial, IdealConsumer &consumer)
Compute the Alexander dual of ideal using the point reflectionMonomial.
void setTerm(const Term &term, const TermTranslator &translator)
FrobbyIdealHelper(size_t variableCount)
This class provides a way to get monomial ideals as output from Frobby one generator at a time.
virtual void idealBegin(size_t varCount)
Called before output of a monomial ideal.
virtual void consume(const vector< mpz_class > &term)
void codimension(const Ideal &ideal, mpz_t codim)
Compute the codimension of a monomial ideal.
virtual ~ConsumerWrapper()
ExternalIdealConsumerWrapper(Frobby::IdealConsumer *consumer, size_t varCount)
virtual void idealBegin(size_t varCount)
Called before output of a monomial ideal.
virtual void doneConsuming()
void useIndependenceSplits(bool value)
virtual void consumeRing(const VarNames &names)
Tell the consumer which ring is being used.
void associatedPrimes(const Ideal &ideal, IdealConsumer &consumer)
Compute the associated primes of the ideal.
void primaryDecomposition(const Ideal &ideal, IdealConsumer &consumer)
Compute the canonical primary decomposition of a monomial ideal.
virtual ~IdealConsumer()
The provided implementation does nothing.
This is the base of the Frobby exception hierarchy for exceptions that can occur due to expected erro...
void computeUnivariateHilbertSeries()
Compute the numerator of the univariate Hilbert-Poincare series.
Frobby::PolynomialConsumer * _consumer
void computeIrreducibleDecomposition(bool encode)
Compute the unique irredundant set of irreducible ideals whose intersection equals ideal.
virtual void consume(const mpz_class &coef, const vector< mpz_class > &term)
Ideal(size_t variableCount)
ExternalPolynomialConsumerWrapper(Frobby::PolynomialConsumer *consumer, size_t varCount)
virtual void beginConsuming()
A facade for performing operations on BigIdeal.
~IrreducibleIdealDecoder()
Defines the variables of a polynomial ring and facilities IO involving them.
virtual void consume(const Term &term, const TermTranslator &translator)
The namespace FrobbyImpl is for internal use inside Frobby only.
size_t getGeneratorCount() const
virtual void consumeRing(const VarNames &names)
A facade for operations on monomial ideals using the Slice Algorithm.
void addExponent(const mpz_t exponent)
Call addExponent once for each variable to add a term one exponent at a time.
void computePrimaryDecomposition()
Compute the unique "nicest" primary decomposition of the ideal.
size_t getVarCount() const
void computeAlexanderDual(const vector< mpz_class > &point)
Compute the Alexander dual of the ideal.
bool isIdentity(const Word *a, Word *aEnd)
This class provides a way to get polynomials as output from Frobby one term at a time.