%module ConstraintRationalT %{ #include #include #include #include "gmpxx.h" #include #include typedef mpq_class Rational; typedef carl::Monomial::Arg Monomial; typedef carl::Term Term; typedef carl::MultivariatePolynomial Polynomial; typedef carl::FactorizedPolynomial FactorizedPolynomial; typedef carl::RationalFunction RationalFunction; typedef carl::RationalFunction FactorizedRationalFunction; typedef carl::PolynomialFactorizationPair 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 Polynomial; typedef mpq_class Rational; typedef carl::Monomial::Arg Monomial; typedef carl::Term Term; typedef carl::FactorizedPolynomial FactorizedPolynomial; typedef carl::RationalFunction RationalFunction; typedef carl::RationalFunction FactorizedRationalFunction; typedef carl::PolynomialFactorizationPair FactorizationPair; namespace carl { enum Relation { EQ = 0, NEQ = 1, LESS = 2, LEQ = 4, GREATER = 3, GEQ = 5 }; template class Constraint { public: Constraint( bool _valid = true ); explicit Constraint( carl::Variable::Arg _var, carl::Relation _rel, const typename Pol::NumberType& _bound = constant_zero::get() ); explicit Constraint( const Pol& _lhs, carl::Relation _rel ); unsigned satisfiedBy( const std::map& _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 not_() { return carl::Formula(carl::FormulaType::NOT, carl::Formula(*$self)); } carl::Formula and_(const Constraint& rhs) { return carl::Formula(carl::FormulaType::AND, carl::Formula(*$self), carl::Formula(rhs)); } carl::Formula and_(const carl::Formula& rhs) { return carl::Formula(carl::FormulaType::AND, carl::Formula(*$self), rhs); } carl::Formula or_(const Constraint& rhs) { return carl::Formula(carl::FormulaType::OR, carl::Formula(*$self), carl::Formula(rhs)); } carl::Formula or_(const carl::Formula& rhs) { return carl::Formula(carl::FormulaType::OR, carl::Formula(*$self), rhs); } carl::Formula xor_(const Constraint& rhs) { return carl::Formula(carl::FormulaType::XOR, carl::Formula(*$self), carl::Formula(rhs)); } carl::Formula xor_(const carl::Formula& rhs) { return carl::Formula(carl::FormulaType::XOR, carl::Formula(*$self), rhs); } } }; template 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; %template(SimpleConstraintRational) carl::SimpleConstraint; %template(SimpleConstraintFunc) carl::SimpleConstraint;