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.
155 lines
3.1 KiB
155 lines
3.1 KiB
|
|
%module TermRational
|
|
%{
|
|
#include <carl/core/Term.h>
|
|
#include <carl/core/MultivariatePolynomial.h>
|
|
#include <carl/core/RationalFunction.h>
|
|
#include "gmp.h"
|
|
#include "gmpxx.h"
|
|
|
|
typedef mpq_class Rational;
|
|
|
|
|
|
typedef carl::Term<Rational> Term;
|
|
|
|
typedef carl::MultivariatePolynomial<Rational> Polynomial;
|
|
typedef carl::RationalFunction<Polynomial> RationalFunction;
|
|
|
|
%}
|
|
|
|
|
|
%include "std_string.i"
|
|
%import "monomial.i"
|
|
%import "rational.i"
|
|
%import "polynomial.i"
|
|
%import "rationalfunction.i"
|
|
typedef mpq_class Rational;
|
|
typedef carl::Term<Rational> Term;
|
|
typedef carl::MultivariatePolynomial<Rational> Polynomial;
|
|
typedef carl::RationalFunction<Polynomial> RationalFunction;
|
|
|
|
|
|
namespace carl {
|
|
|
|
|
|
template<typename Coefficient>
|
|
class Term {
|
|
public:
|
|
Term(const Coefficient& c, const carl::Monomial::Arg& m);
|
|
|
|
Coefficient& coeff();
|
|
|
|
inline const Monomial::Arg& monomial() const;
|
|
//template<typename C = Coefficient, DisableIf<is_interval<C>> = dummy>
|
|
//std::string toString(bool infix=true, bool friendlyVarNames=true) const;
|
|
|
|
carl::Term<Coefficient> pow(uint exp) const;
|
|
|
|
|
|
%extend {
|
|
|
|
std::string toString() const {
|
|
return $self->toString();
|
|
}
|
|
|
|
Polynomial add(const carl::Term<Coefficient>& rhs) {
|
|
return *($self)+rhs;
|
|
}
|
|
|
|
Polynomial add(const Polynomial& rhs) {
|
|
return *($self)+rhs;
|
|
}
|
|
|
|
Polynomial add(const Monomial::Arg& rhs) {
|
|
return *($self)+rhs;
|
|
}
|
|
|
|
Polynomial add(carl::Variable::Arg rhs) {
|
|
return *($self)+rhs;
|
|
}
|
|
|
|
Polynomial add(const Coefficient& rhs) {
|
|
return *($self)+rhs;
|
|
}
|
|
|
|
|
|
Polynomial sub(const carl::Term<Coefficient>& rhs) {
|
|
return *($self)-rhs;
|
|
}
|
|
|
|
Polynomial sub(const Polynomial& rhs) {
|
|
return *($self)-rhs;
|
|
}
|
|
|
|
Polynomial sub(const Monomial::Arg& rhs) {
|
|
return *($self)-rhs;
|
|
}
|
|
|
|
Polynomial sub(carl::Variable::Arg rhs) {
|
|
return *($self)-rhs;
|
|
}
|
|
|
|
Polynomial sub(const Coefficient& rhs) {
|
|
return *($self)-rhs;
|
|
}
|
|
|
|
|
|
carl::Term<Coefficient> mul(const carl::Term<Coefficient>& rhs) {
|
|
return *($self)*rhs;
|
|
}
|
|
|
|
Polynomial mul(const Polynomial& rhs) {
|
|
return *($self)*rhs;
|
|
}
|
|
|
|
carl::Term<Coefficient> mul(const Monomial::Arg& rhs) {
|
|
return *($self)*rhs;
|
|
}
|
|
|
|
carl::Term<Coefficient> mul(carl::Variable::Arg rhs) {
|
|
return *($self)*rhs;
|
|
}
|
|
|
|
carl::Term<Coefficient> mul(const Coefficient& rhs) {
|
|
return *($self)*rhs;
|
|
}
|
|
|
|
|
|
RationalFunction div(const RationalFunction& rhs) {
|
|
return RationalFunction(Polynomial(*($self))) / rhs;
|
|
}
|
|
|
|
RationalFunction div(const Polynomial& rhs) {
|
|
return RationalFunction(Polynomial(*($self))) / rhs;
|
|
}
|
|
|
|
RationalFunction div(const carl::Term<Coefficient>& rhs) {
|
|
return RationalFunction(Polynomial(*($self))) / rhs;
|
|
}
|
|
|
|
RationalFunction div(const Monomial::Arg& rhs) {
|
|
return RationalFunction(Polynomial(*($self))) / rhs;
|
|
}
|
|
|
|
RationalFunction div(carl::Variable::Arg rhs) {
|
|
return RationalFunction(Polynomial(*($self))) / rhs;
|
|
}
|
|
|
|
carl::Term<Coefficient> div(const Rational& rhs) {
|
|
return *$self / rhs;
|
|
}
|
|
|
|
|
|
|
|
carl::Term<Coefficient> neg() {
|
|
return *$self*Coefficient(-1);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
%template(TermRational) carl::Term<Rational>;
|