You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
2.7 KiB
123 lines
2.7 KiB
|
|
|
|
|
|
|
|
%module FactorizedPolynomialRational
|
|
%{
|
|
#include <carl/core/MultivariatePolynomial.h>
|
|
#include <carl/core/FactorizedPolynomial.h>
|
|
#include "gmp.h"
|
|
#include "gmpxx.h"
|
|
|
|
|
|
|
|
|
|
typedef mpq_class Rational;
|
|
|
|
|
|
typedef carl::Term<Rational> Term;
|
|
typedef carl::MultivariatePolynomial<Rational> Polynomial;
|
|
typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial;
|
|
typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair;
|
|
|
|
typedef unsigned int uint;
|
|
typedef std::pair<carl::Variable,uint> VarIntPair;
|
|
|
|
|
|
typedef FactorizedPolynomial::CACHE FactorizationCache;
|
|
|
|
|
|
%}
|
|
|
|
%include "std_string.i"
|
|
%include "std_shared_ptr.i"
|
|
%shared_ptr(carl::Cache<FactorizationPair>);
|
|
|
|
%import "variable.i"
|
|
%import "polynomial.i"
|
|
|
|
typedef mpq_class Rational;
|
|
typedef carl::Term<Rational> Term;
|
|
typedef carl::MultivariatePolynomial<Rational> Polynomial;
|
|
typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial;
|
|
typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair;
|
|
|
|
typedef FactorizedPolynomial::CACHE FactorizationCache;
|
|
|
|
|
|
|
|
namespace carl {
|
|
|
|
%rename(FactorizationCache) Cache<FactorizationPair>;
|
|
class Cache<FactorizationPair> {
|
|
public:
|
|
Cache( size_t _maxCacheSize = 10000, double _cacheReductionAmount = 0.2, double _decay = 0.98 );
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template<typename P>
|
|
class FactorizedPolynomial {
|
|
public:
|
|
typedef typename P::CoeffType CoeffType;
|
|
typedef carl::Cache<carl::PolynomialFactorizationPair<P>> CACHE;
|
|
|
|
|
|
explicit FactorizedPolynomial( const CoeffType& );
|
|
|
|
explicit FactorizedPolynomial( const P& _polynomial, const std::shared_ptr<carl::FactorizedPolynomial::CACHE>&, bool = false );
|
|
CoeffType constantPart() const;
|
|
template<typename SubstitutionType = CoeffType>
|
|
SubstitutionType evaluate(const std::map<carl::Variable, SubstitutionType>& substitutions) const;
|
|
|
|
|
|
|
|
std::string toString( bool _infix = true, bool _friendlyVarNames = true ) const;
|
|
|
|
%extend {
|
|
std::vector<carl::Variable> gatherVariables() const {
|
|
std::set<carl::Variable> asSet = $self->gatherVariables();
|
|
return std::vector<carl::Variable>(asSet.begin(),asSet.end());
|
|
}
|
|
|
|
}
|
|
|
|
%extend {
|
|
|
|
carl::FactorizedPolynomial<P> add(const carl::FactorizedPolynomial<P>& rhs) {
|
|
return *$self+rhs;
|
|
}
|
|
|
|
carl::FactorizedPolynomial<P> sub(const carl::FactorizedPolynomial<P>& rhs) {
|
|
return *$self-rhs;
|
|
}
|
|
|
|
carl::FactorizedPolynomial<P> mul(const carl::FactorizedPolynomial<P>& rhs) {
|
|
return *$self*rhs;
|
|
}
|
|
|
|
|
|
bool equals(const carl::FactorizedPolynomial<P>& rhs) {
|
|
return *$self==rhs;
|
|
}
|
|
|
|
bool notEquals(const carl::FactorizedPolynomial<P>& rhs) {
|
|
return *$self!=rhs;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
%template(evaluate) carl::FactorizedPolynomial::evaluate<Rational>;
|
|
|
|
}
|
|
|
|
%template(FactorizedPolynomialRational) carl::FactorizedPolynomial<Polynomial>;
|
|
|