algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/glue/glue_polynomial_generic.cpp
Go to the documentation of this file.
00001 
00002 #include <basix/vector.hpp>
00003 #include <algebramix/polynomial.hpp>
00004 #include <algebramix/polynomial_polynomial.hpp>
00005 #include <algebramix/polynomial_schonhage.hpp>
00006 #include <basix/tuple.hpp>
00007 #include <basix/glue.hpp>
00008 
00009 namespace mmx {
00010     template<typename C> polynomial<C>
00011     polynomial_reverse (const vector<C>& v) {
00012       return polynomial<C> (reverse (v)); }
00013 
00014     template<typename C> polynomial<modular<modulus<C>, modular_local> >
00015     as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00016       modular<modulus<C>, modular_local>::set_modulus (p);
00017       return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00018 
00019     template<typename C> vector<generic>
00020     wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00021       return as<vector<generic> > (subresultants (f, g)); }
00022 
00023   }
00024 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00025 
00026 namespace mmx {
00027   static polynomial<generic>
00028   GLUE_1 (const tuple<generic> &arg_1) {
00029     return polynomial_reverse (as_vector (arg_1));
00030   }
00031   
00032   static polynomial<generic>
00033   GLUE_2 (const tuple<generic> &arg_1) {
00034     return polynomial<generic > (as_vector (arg_1));
00035   }
00036   
00037   static void
00038   GLUE_3 (const polynomial<generic> &arg_1, const generic &arg_2) {
00039     set_variable_name (arg_1, arg_2);
00040   }
00041   
00042   static iterator<generic>
00043   GLUE_4 (const polynomial<generic> &arg_1) {
00044     return iterate (arg_1);
00045   }
00046   
00047   static int
00048   GLUE_5 (const polynomial<generic> &arg_1) {
00049     return N (arg_1);
00050   }
00051   
00052   static int
00053   GLUE_6 (const polynomial<generic> &arg_1) {
00054     return deg (arg_1);
00055   }
00056   
00057   static generic
00058   GLUE_7 (const polynomial<generic> &arg_1, const int &arg_2) {
00059     return arg_1[arg_2];
00060   }
00061   
00062   static polynomial<generic>
00063   GLUE_8 (const polynomial<generic> &arg_1) {
00064     return -arg_1;
00065   }
00066   
00067   static polynomial<generic>
00068   GLUE_9 (const polynomial<generic> &arg_1) {
00069     return square (arg_1);
00070   }
00071   
00072   static polynomial<generic>
00073   GLUE_10 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00074     return arg_1 + arg_2;
00075   }
00076   
00077   static polynomial<generic>
00078   GLUE_11 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00079     return arg_1 - arg_2;
00080   }
00081   
00082   static polynomial<generic>
00083   GLUE_12 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00084     return arg_1 * arg_2;
00085   }
00086   
00087   static polynomial<generic>
00088   GLUE_13 (const polynomial<generic> &arg_1, const int &arg_2) {
00089     return binpow (arg_1, arg_2);
00090   }
00091   
00092   static polynomial<generic>
00093   GLUE_14 (const polynomial<generic> &arg_1, const int &arg_2) {
00094     return lshiftz (arg_1, arg_2);
00095   }
00096   
00097   static polynomial<generic>
00098   GLUE_15 (const polynomial<generic> &arg_1, const int &arg_2) {
00099     return rshiftz (arg_1, arg_2);
00100   }
00101   
00102   static polynomial<generic>
00103   GLUE_16 (const polynomial<generic> &arg_1) {
00104     return derive (arg_1);
00105   }
00106   
00107   static polynomial<generic>
00108   GLUE_17 (const polynomial<generic> &arg_1) {
00109     return xderive (arg_1);
00110   }
00111   
00112   static generic
00113   GLUE_18 (const polynomial<generic> &arg_1, const generic &arg_2) {
00114     return evaluate (arg_1, arg_2);
00115   }
00116   
00117   static vector<generic>
00118   GLUE_19 (const polynomial<generic> &arg_1, const vector<generic> &arg_2) {
00119     return evaluate (arg_1, arg_2);
00120   }
00121   
00122   static generic
00123   GLUE_20 (const polynomial<generic> &arg_1, const generic &arg_2) {
00124     return evaluate (arg_1, arg_2);
00125   }
00126   
00127   static vector<generic>
00128   GLUE_21 (const polynomial<generic> &arg_1, const vector<generic> &arg_2) {
00129     return evaluate (arg_1, arg_2);
00130   }
00131   
00132   static polynomial<generic>
00133   GLUE_22 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00134     return arg_1 / arg_2;
00135   }
00136   
00137   static polynomial<generic>
00138   GLUE_23 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00139     return quo (arg_1, arg_2);
00140   }
00141   
00142   static polynomial<generic>
00143   GLUE_24 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00144     return rem (arg_1, arg_2);
00145   }
00146   
00147   static bool
00148   GLUE_25 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00149     return divides (arg_1, arg_2);
00150   }
00151   
00152   static polynomial<generic>
00153   GLUE_26 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2, const int &arg_3) {
00154     return subresultant (arg_1, arg_2, arg_3);
00155   }
00156   
00157   static vector<generic>
00158   GLUE_27 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00159     return wrap_subresultants (arg_1, arg_2);
00160   }
00161   
00162   static generic
00163   GLUE_28 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00164     return resultant (arg_1, arg_2);
00165   }
00166   
00167   static generic
00168   GLUE_29 (const polynomial<generic> &arg_1) {
00169     return discriminant (arg_1);
00170   }
00171   
00172   static polynomial<generic>
00173   GLUE_30 (const polynomial<generic> &arg_1) {
00174     return integrate (arg_1);
00175   }
00176   
00177   static polynomial<generic>
00178   GLUE_31 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00179     return compose (arg_1, arg_2);
00180   }
00181   
00182   static polynomial<generic>
00183   GLUE_32 (const polynomial<generic> &arg_1, const generic &arg_2) {
00184     return q_difference (arg_1, arg_2);
00185   }
00186   
00187   static polynomial<generic>
00188   GLUE_33 (const polynomial<generic> &arg_1, const int &arg_2) {
00189     return dilate (arg_1, arg_2);
00190   }
00191   
00192   static polynomial<generic>
00193   GLUE_34 (const vector<generic> &arg_1) {
00194     return annulator (arg_1);
00195   }
00196   
00197   static polynomial<generic>
00198   GLUE_35 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00199     return interpolate (arg_1, arg_2);
00200   }
00201   
00202   static polynomial<generic>
00203   GLUE_36 (const polynomial<generic> &arg_1, const generic &arg_2) {
00204     return shift (arg_1, arg_2);
00205   }
00206   
00207   static polynomial<generic>
00208   GLUE_37 (const polynomial<generic> &arg_1) {
00209     return graeffe (arg_1);
00210   }
00211   
00212   static generic
00213   GLUE_38 (const polynomial<generic> &arg_1) {
00214     return contents (arg_1);
00215   }
00216   
00217   static polynomial<generic>
00218   GLUE_39 (const polynomial<generic> &arg_1) {
00219     return primitive_part (arg_1);
00220   }
00221   
00222   static polynomial<generic>
00223   GLUE_40 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00224     return gcd (arg_1, arg_2);
00225   }
00226   
00227   static polynomial<generic>
00228   GLUE_41 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00229     return lcm (arg_1, arg_2);
00230   }
00231   
00232   void
00233   glue_polynomial_generic () {
00234     static bool done = false;
00235     if (done) return;
00236     done = true;
00237     call_glue (string ("glue_vector_generic"));
00238     define_type<polynomial<generic> > (gen (lit ("Polynomial"), lit ("Generic")));
00239     define ("poly", GLUE_1);
00240     define ("polynomial", GLUE_2);
00241     define ("set_variable_name", GLUE_3);
00242     define_converter (":>", GLUE_4, PENALTY_PROMOTE_GENERIC);
00243     define ("#", GLUE_5);
00244     define ("deg", GLUE_6);
00245     define (".[]", GLUE_7);
00246     define ("-", GLUE_8);
00247     define ("square", GLUE_9);
00248     define ("+", GLUE_10);
00249     define ("-", GLUE_11);
00250     define ("*", GLUE_12);
00251     define ("^", GLUE_13);
00252     define ("<<", GLUE_14);
00253     define (">>", GLUE_15);
00254     define ("derive", GLUE_16);
00255     define ("xderive", GLUE_17);
00256     define ("eval", GLUE_18);
00257     define ("eval", GLUE_19);
00258     define ("evaluate", GLUE_20);
00259     define ("evaluate", GLUE_21);
00260     define ("div", GLUE_22);
00261     define ("quo", GLUE_23);
00262     define ("rem", GLUE_24);
00263     define ("divides?", GLUE_25);
00264     define ("subresultant", GLUE_26);
00265     define ("subresultants", GLUE_27);
00266     define ("resultant", GLUE_28);
00267     define ("discriminant", GLUE_29);
00268     define ("integrate", GLUE_30);
00269     define ("@", GLUE_31);
00270     define ("q_difference", GLUE_32);
00271     define ("dilate", GLUE_33);
00272     define ("annulator", GLUE_34);
00273     define ("interpolate", GLUE_35);
00274     define ("shift", GLUE_36);
00275     define ("graeffe", GLUE_37);
00276     define ("contents", GLUE_38);
00277     define ("primitive_part", GLUE_39);
00278     define ("gcd", GLUE_40);
00279     define ("lcm", GLUE_41);
00280   }
00281 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines