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 TermRationalT  | |
| %{ | |
| #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>;
 |