algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/glue/glue_quotient_polynomial_rational.cpp
Go to the documentation of this file.
00001 
00002 #include <numerix/integer.hpp>
00003 #include <numerix/rational.hpp>
00004 #include <numerix/complex.hpp>
00005 #include <basix/vector.hpp>
00006 #include <algebramix/polynomial.hpp>
00007 #include <algebramix/polynomial_polynomial.hpp>
00008 #include <algebramix/polynomial_integer.hpp>
00009 #include <algebramix/polynomial_rational.hpp>
00010 #include <algebramix/polynomial_complex.hpp>
00011 #include <algebramix/polynomial_schonhage.hpp>
00012 #include <algebramix/quotient.hpp>
00013 #include <basix/glue.hpp>
00014 
00015 namespace mmx {
00016     template<typename C> polynomial<C>
00017     polynomial_reverse (const vector<C>& v) {
00018       return polynomial<C> (reverse (v)); }
00019 
00020     template<typename C> polynomial<modular<modulus<C>, modular_local> >
00021     as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00022       modular<modulus<C>, modular_local>::set_modulus (p);
00023       return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00024 
00025     template<typename C> vector<generic>
00026     wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00027       return as<vector<generic> > (subresultants (f, g)); }
00028 
00029   }
00030 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00031 #define simple_quotient(C) quotient<C,C >
00032 
00033 namespace mmx {
00034   static simple_quotient(polynomial<rational> )
00035   GLUE_1 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00036     return (simple_quotient(polynomial<rational> ) (arg_1, arg_2));
00037   }
00038   
00039   static simple_quotient(polynomial<rational> )
00040   GLUE_2 (const polynomial<rational> &arg_1) {
00041     return (simple_quotient(polynomial<rational> ) (arg_1));
00042   }
00043   
00044   static simple_quotient(polynomial<rational> )
00045   GLUE_3 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00046     return (simple_quotient(polynomial<rational> ) (arg_1, arg_2));
00047   }
00048   
00049   static simple_quotient(polynomial<rational> )
00050   GLUE_4 (const polynomial<rational> &arg_1) {
00051     return (simple_quotient(polynomial<rational> ) (arg_1));
00052   }
00053   
00054   static polynomial<rational>
00055   GLUE_5 (const simple_quotient(polynomial<rational> ) &arg_1) {
00056     return numerator (arg_1);
00057   }
00058   
00059   static polynomial<rational>
00060   GLUE_6 (const simple_quotient(polynomial<rational> ) &arg_1) {
00061     return denominator (arg_1);
00062   }
00063   
00064   static simple_quotient(polynomial<rational> )
00065   GLUE_7 (const simple_quotient(polynomial<rational> ) &arg_1) {
00066     return -arg_1;
00067   }
00068   
00069   static simple_quotient(polynomial<rational> )
00070   GLUE_8 (const simple_quotient(polynomial<rational> ) &arg_1) {
00071     return square (arg_1);
00072   }
00073   
00074   static simple_quotient(polynomial<rational> )
00075   GLUE_9 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00076     return arg_1 + arg_2;
00077   }
00078   
00079   static simple_quotient(polynomial<rational> )
00080   GLUE_10 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00081     return arg_1 - arg_2;
00082   }
00083   
00084   static simple_quotient(polynomial<rational> )
00085   GLUE_11 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00086     return arg_1 * arg_2;
00087   }
00088   
00089   static simple_quotient(polynomial<rational> )
00090   GLUE_12 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00091     return arg_1 / arg_2;
00092   }
00093   
00094   static simple_quotient(polynomial<rational> )
00095   GLUE_13 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00096     return arg_1 + arg_2;
00097   }
00098   
00099   static simple_quotient(polynomial<rational> )
00100   GLUE_14 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) {
00101     return arg_1 + arg_2;
00102   }
00103   
00104   static simple_quotient(polynomial<rational> )
00105   GLUE_15 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00106     return arg_1 - arg_2;
00107   }
00108   
00109   static simple_quotient(polynomial<rational> )
00110   GLUE_16 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) {
00111     return arg_1 - arg_2;
00112   }
00113   
00114   static simple_quotient(polynomial<rational> )
00115   GLUE_17 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00116     return arg_1 * arg_2;
00117   }
00118   
00119   static simple_quotient(polynomial<rational> )
00120   GLUE_18 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) {
00121     return arg_1 * arg_2;
00122   }
00123   
00124   static simple_quotient(polynomial<rational> )
00125   GLUE_19 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) {
00126     return arg_1 / arg_2;
00127   }
00128   
00129   static simple_quotient(polynomial<rational> )
00130   GLUE_20 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) {
00131     return arg_1 / arg_2;
00132   }
00133   
00134   void
00135   glue_quotient_polynomial_rational () {
00136     static bool done = false;
00137     if (done) return;
00138     done = true;
00139     call_glue (string ("glue_polynomial_rational"));
00140     define_type<simple_quotient(polynomial<rational> ) > (gen (lit ("Quotient"), gen (lit ("Polynomial"), lit ("Rational"))));
00141     define ("quotient", GLUE_1);
00142     define ("quotient", GLUE_2);
00143     define ("/", GLUE_3);
00144     define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION);
00145     define ("numerator", GLUE_5);
00146     define ("denominator", GLUE_6);
00147     define ("-", GLUE_7);
00148     define ("square", GLUE_8);
00149     define ("+", GLUE_9);
00150     define ("-", GLUE_10);
00151     define ("*", GLUE_11);
00152     define ("/", GLUE_12);
00153     define ("+", GLUE_13);
00154     define ("+", GLUE_14);
00155     define ("-", GLUE_15);
00156     define ("-", GLUE_16);
00157     define ("*", GLUE_17);
00158     define ("*", GLUE_18);
00159     define ("/", GLUE_19);
00160     define ("/", GLUE_20);
00161   }
00162 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines