53 for (
size_t var = 0; var <
_varCount; ++var)
55 (
translator.getExponent(var, term).get_mpz_t());
58 void setTerm(
const vector<mpz_class>& term) {
61 for (
size_t var = 0; var <
_varCount; ++var)
95 virtual void consume(
const vector<mpz_class>& term) {
140 const vector<mpz_class>& term) {
143 for (
size_t var = 0; var <
_varCount; ++var)
226 ASSERT(_data->_atVariable <= _data->_ideal.getVarCount());
228 if (_data->_atVariable == _data->_ideal.getVarCount()) {
229 _data->_ideal.newLastTerm();
230 _data->_atVariable = 0;
231 if (_data->_ideal.getVarCount() == 0)
235 mpz_class&
ref = _data->_ideal.getLastTermExponentRef(_data->_atVariable);
237 ++_data->_atVariable;
242 addExponent(
tmp.get_mpz_t());
247 addExponent(
tmp.get_mpz_t());
262 facade.computeAlexanderDual();
264 vector<mpz_class>
point;
266 for (
size_t var = 0; var <
bigIdeal.getVarCount(); ++var)
312 facade.computeMultigradedHilbertSeries();
323 facade.computeUnivariateHilbertSeries();
344 for (
size_t var = 0; var < _varCount; ++var)
345 _term[var] = _zero.get_mpz_t();
353 _consumer->idealBegin(_varCount);
355 bool isIdentity =
true;
356 for (
size_t var = 0; var < _varCount; ++var) {
360 _consumer->consume(&*(_term.begin()));
361 _term[var] = _zero.get_mpz_t();
365 _consumer->idealEnd();
388 if (
bigIdeal.getGeneratorCount() == 0)
396 facade.computeIrreducibleDecomposition(
true);
409 facade.computePrimaryDecomposition();
421 facade.computeMaximalStandardMonomials();
432 for (
size_t var = 0; var <
bigIdeal.getVarCount(); ++var)
468 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.
const char *const frobby_version
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.