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.
 
 
 
 
 
 

140 lines
3.9 KiB

%module ConstraintRationalT
%{
#include <carl/formula/Constraint.h>
#include <carl/core/SimpleConstraint.h>
#include <carl/formula/Formula.h>
#include "gmpxx.h"
#include <carl/core/RationalFunction.h>
#include <carl/core/Relation.h>
typedef mpq_class Rational;
typedef carl::Monomial::Arg Monomial;
typedef carl::Term<Rational> Term;
typedef carl::MultivariatePolynomial<Rational> Polynomial;
typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial;
typedef carl::RationalFunction<Polynomial> RationalFunction;
typedef carl::RationalFunction<FactorizedPolynomial> FactorizedRationalFunction;
typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair;
%}
%import "formula.i"
%include "std_string.i"
%import "variable.i"
%import "polynomial.i"
%import "rationalfunction.i"
%import "factorizedpolynomial.i"
%include "std_vector.i"
%include "std_map.i"
typedef carl::MultivariatePolynomial<Rational> Polynomial;
typedef mpq_class Rational;
typedef carl::Monomial::Arg Monomial;
typedef carl::Term<Rational> Term;
typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial;
typedef carl::RationalFunction<Polynomial> RationalFunction;
typedef carl::RationalFunction<FactorizedPolynomial> FactorizedRationalFunction;
typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair;
namespace carl {
enum class Relation { EQ = 0, NEQ = 1, LESS = 2, LEQ = 4, GREATER = 3, GEQ = 5 };
template<typename Pol> class Constraint {
public:
Constraint( bool _valid = true );
explicit Constraint( carl::Variable::Arg _var, carl::Relation _rel, const typename Pol::NumberType& _bound = constant_zero<typename Pol::NumberType>::get() );
explicit Constraint( const Pol& _lhs, carl::Relation _rel );
unsigned satisfiedBy( const std::map<Variable,Rational>& _assignment ) const;
std::string toString( unsigned _unequalSwitch = 0, bool _infix = true, bool _friendlyVarNames = true ) const;
const Pol& lhs() const;
carl::Relation relation() const;
//TODO: maybe find fix for the weird underscore names
%extend {
carl::Formula<Pol> not_() {
return carl::Formula<Pol>(carl::FormulaType::NOT, carl::Formula<Pol>(*$self));
}
carl::Formula<Pol> and_(const Constraint& rhs) {
return carl::Formula<Pol>(carl::FormulaType::AND, carl::Formula<Pol>(*$self), carl::Formula<Pol>(rhs));
}
carl::Formula<Pol> and_(const carl::Formula<Pol>& rhs) {
return carl::Formula<Pol>(carl::FormulaType::AND, carl::Formula<Pol>(*$self), rhs);
}
carl::Formula<Pol> or_(const Constraint& rhs) {
return carl::Formula<Pol>(carl::FormulaType::OR, carl::Formula<Pol>(*$self), carl::Formula<Pol>(rhs));
}
carl::Formula<Pol> or_(const carl::Formula<Pol>& rhs) {
return carl::Formula<Pol>(carl::FormulaType::OR, carl::Formula<Pol>(*$self), rhs);
}
carl::Formula<Pol> xor_(const Constraint& rhs) {
return carl::Formula<Pol>(carl::FormulaType::XOR, carl::Formula<Pol>(*$self), carl::Formula<Pol>(rhs));
}
carl::Formula<Pol> xor_(const carl::Formula<Pol>& rhs) {
return carl::Formula<Pol>(carl::FormulaType::XOR, carl::Formula<Pol>(*$self), rhs);
}
}
};
template<typename LhsType> class SimpleConstraint {
public:
SimpleConstraint(bool v) : mLhs(v ? 0 : 1), mRelation(carl::Relation::EQ) {}
SimpleConstraint(const LhsType& lhs, carl::Relation rel) : mLhs(lhs), mRelation(rel)
{}
const LhsType& lhs() const {return mLhs;}
const carl::Relation& rel() const {return mRelation;}
%extend {
std::string toString() {
std::stringstream ss;
ss << *$self;
return ss.str();
}
}
};
}
%include "std_map.i"
%template(ConstraintRational) carl::Constraint<Polynomial>;
%template(SimpleConstraintRational) carl::SimpleConstraint<Polynomial>;
%template(SimpleConstraintFunc) carl::SimpleConstraint<FactorizedRationalFunction>;