49 for (
size_t var = 0; var <
_varCount; ++var)
51 (
translator.getExponent(var, term).get_mpz_t());
54 void setTerm(
const vector<mpz_class>& term) {
57 for (
size_t var = 0; var <
_varCount; ++var)
91 virtual void consume(
const vector<mpz_class>& term) {
136 const vector<mpz_class>& term) {
139 for (
size_t var = 0; var <
_varCount; ++var)
222 ASSERT(_data->_atVariable <= _data->_ideal.getVarCount());
224 if (_data->_atVariable == _data->_ideal.getVarCount()) {
225 _data->_ideal.newLastTerm();
226 _data->_atVariable = 0;
227 if (_data->_ideal.getVarCount() == 0)
231 mpz_class&
ref = _data->_ideal.getLastTermExponentRef(_data->_atVariable);
233 ++_data->_atVariable;
238 addExponent(
tmp.get_mpz_t());
243 addExponent(
tmp.get_mpz_t());
258 facade.computeAlexanderDual();
260 vector<mpz_class>
point;
262 for (
size_t var = 0; var <
bigIdeal.getVarCount(); ++var)
308 facade.computeMultigradedHilbertSeries();
319 facade.computeUnivariateHilbertSeries();
340 for (
size_t var = 0; var < _varCount; ++var)
341 _term[var] = _zero.get_mpz_t();
349 _consumer->idealBegin(_varCount);
351 bool isIdentity =
true;
352 for (
size_t var = 0; var < _varCount; ++var) {
356 _consumer->consume(&*(_term.begin()));
357 _term[var] = _zero.get_mpz_t();
361 _consumer->idealEnd();
384 if (
bigIdeal.getGeneratorCount() == 0)
392 facade.computeIrreducibleDecomposition(
true);
405 facade.computePrimaryDecomposition();
417 facade.computeMaximalStandardMonomials();
428 for (
size_t var = 0; var <
bigIdeal.getVarCount(); ++var)
464 facade.computeAssociatedPrimes();
void nameFactoryRegister(NameFactory< AbstractProduct > &factory)
Registers the string returned by ConcreteProduct::getStaticName() to a function that default-construc...
ConsumerWrapper(size_t varCount)
void setTerm(const vector< mpz_class > &term)
void setTerm(const Term &term, const TermTranslator &translator)
virtual ~ConsumerWrapper()
virtual void doneConsuming()
Must be called once after each time beginConsuming has been called.
ExternalIdealConsumerWrapper(Frobby::IdealConsumer *consumer, size_t varCount)
Frobby::IdealConsumer * _consumer
virtual void consumeRing(const VarNames &names)
Tell the consumer which ring is being used.
virtual void consume(const Term &term, const TermTranslator &translator)
virtual void consume(const vector< mpz_class > &term)
virtual void beginConsuming()
Tell the consumer to begin consuming an ideal.
virtual void beginConsuming()
virtual void doneConsuming()
virtual void consume(const mpz_class &coef, const Term &term, const TermTranslator &translator)
virtual void consumeRing(const VarNames &names)
ExternalPolynomialConsumerWrapper(Frobby::PolynomialConsumer *consumer, size_t varCount)
Frobby::PolynomialConsumer * _consumer
virtual void consume(const mpz_class &coef, const vector< mpz_class > &term)
This is the base of the Frobby exception hierarchy for exceptions that can occur due to expected erro...
FrobbyIdealHelper(size_t variableCount)
static const BigIdeal & getIdeal(const Frobby::Ideal &ideal)
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 ~IdealConsumer()
The provided implementation does nothing.
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.
Ideal & operator=(const Ideal &ideal)
Ideal(size_t variableCount)
FrobbyImpl::FrobbyIdealHelper * _data
void addExponent(const mpz_t exponent)
Call addExponent once for each variable to add a term one exponent at a time.
This class provides a way to get polynomials as output from Frobby one term at a time.
virtual void polynomialBegin(size_t varCount)
Called before output of a polynomial.
virtual ~PolynomialConsumer()
The provided implementation does nothing.
virtual void polynomialEnd()
Called after output of a polynomial.
virtual void consume(const mpz_t coefficient, mpz_ptr *exponentVector)=0
For output of a term of the polynomial.
A facade for performing operations on BigIdeal.
IdealConsumer * _consumer
virtual void idealBegin(size_t varCount)
Called before output of a monomial ideal.
virtual void idealEnd()
Called after output of a monomial ideal.
~IrreducibleIdealDecoder()
IrreducibleIdealDecoder(IdealConsumer *consumer)
virtual void consume(mpz_ptr *exponentVector)
For output of a generator of the ideal.
A facade for operations on monomial ideals using the Slice Algorithm.
void useIndependenceSplits(bool value)
TermTranslator handles translation between terms whose exponents are infinite precision integers and ...
Term represents a product of variables which does not include a coefficient.
size_t getVarCount() const
Defines the variables of a polynomial ring and facilities IO involving them.
The namespace FrobbyImpl is for internal use inside Frobby only.
void dimension(const Ideal &ideal, mpz_t dim)
Compute the Krull dimension of a monomial ideal.
bool alexanderDual(const Ideal &ideal, const mpz_t *reflectionMonomial, IdealConsumer &consumer)
Compute the Alexander dual of ideal using the point reflectionMonomial.
void irreducibleDecompositionAsIdeals(const Ideal &ideal, IdealConsumer &consumer)
Compute the irreducible decomposition of ideal.
void codimension(const Ideal &ideal, mpz_t codim)
Compute the codimension of a monomial ideal.
void associatedPrimes(const Ideal &ideal, IdealConsumer &consumer)
Compute the associated primes of the ideal.
void univariateHilbertPoincareSeries(const Ideal &ideal, PolynomialConsumer &consumer)
Compute the univariate Hilbert-Poincare series of ideal.
bool solveStandardMonomialProgram(const Ideal &ideal, const mpz_t *l, IdealConsumer &consumer)
Solve the optimization program.
bool irreducibleDecompositionAsMonomials(const Ideal &ideal, IdealConsumer &consumer)
Compute the irreducible decomposition of ideal, and encode each irreducible component as a monomial.
void maximalStandardMonomials(const Ideal &ideal, IdealConsumer &consumer)
Compute the maximal standard monomials of ideal.
void primaryDecomposition(const Ideal &ideal, IdealConsumer &consumer)
Compute the canonical primary decomposition of a monomial ideal.
void multigradedHilbertPoincareSeries(const Ideal &ideal, PolynomialConsumer &consumer)
Compute the multigraded Hilbert-Poincare series of ideal.
const char *const version