algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/glue/glue_series_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 <numerix/integer.hpp>
00007 #include <numerix/rational.hpp>
00008 #include <algebramix/series.hpp>
00009 #include <algebramix/series_elementary.hpp>
00010 #include <algebramix/series_integer.hpp>
00011 #include <algebramix/series_rational.hpp>
00012 #include <algebramix/series_sugar.hpp>
00013 #include <basix/tuple.hpp>
00014 #include <basix/routine.hpp>
00015 #include <basix/glue.hpp>
00016 
00017 namespace mmx {
00018     template<typename C> polynomial<C>
00019     polynomial_reverse (const vector<C>& v) {
00020       return polynomial<C> (reverse (v)); }
00021 
00022     template<typename C> polynomial<modular<modulus<C>, modular_local> >
00023     as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00024       modular<modulus<C>, modular_local>::set_modulus (p);
00025       return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00026 
00027     template<typename C> vector<generic>
00028     wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00029       return as<vector<generic> > (subresultants (f, g)); }
00030 
00031   }
00032 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00033 #define series_shift_default(s,sh) shift (s, sh, mmx_bit_precision)
00034 
00035 namespace mmx {
00036   static generic
00037   GLUE_1 (const int &arg_1) {
00038     return integer_construct (arg_1);
00039   }
00040   
00041   static void
00042   GLUE_2 (const series<generic> &arg_1, const generic &arg_2) {
00043     set_variable_name (arg_1, arg_2);
00044   }
00045   
00046   static void
00047   GLUE_3 (const series<generic> &arg_1, const int &arg_2) {
00048     set_output_order (arg_1, arg_2);
00049   }
00050   
00051   static void
00052   GLUE_4 (const series<generic> &arg_1, const int &arg_2) {
00053     set_cancel_order (arg_1, arg_2);
00054   }
00055   
00056   static void
00057   GLUE_5 (const series<generic> &arg_1, const bool &arg_2) {
00058     set_formula_output (arg_1, arg_2);
00059   }
00060   
00061   static series<generic>
00062   GLUE_6 (const tuple<generic> &arg_1) {
00063     return series<generic > (as_vector (arg_1));
00064   }
00065   
00066   static series<generic>
00067   GLUE_7 (const polynomial<generic> &arg_1) {
00068     return series<generic > (arg_1);
00069   }
00070   
00071   static iterator<generic>
00072   GLUE_8 (const series<generic> &arg_1) {
00073     return iterate (arg_1);
00074   }
00075   
00076   static generic
00077   GLUE_9 (const series<generic> &arg_1, const int &arg_2) {
00078     return arg_1[arg_2];
00079   }
00080   
00081   static polynomial<generic>
00082   GLUE_10 (const series<generic> &arg_1, const int &arg_2, const int &arg_3) {
00083     return range (arg_1, arg_2, arg_3);
00084   }
00085   
00086   static series<generic>
00087   GLUE_11 (const series<generic> &arg_1) {
00088     return -arg_1;
00089   }
00090   
00091   static series<generic>
00092   GLUE_12 (const series<generic> &arg_1) {
00093     return square (arg_1);
00094   }
00095   
00096   static series<generic>
00097   GLUE_13 (const series<generic> &arg_1, const series<generic> &arg_2) {
00098     return arg_1 + arg_2;
00099   }
00100   
00101   static series<generic>
00102   GLUE_14 (const series<generic> &arg_1, const series<generic> &arg_2) {
00103     return arg_1 - arg_2;
00104   }
00105   
00106   static series<generic>
00107   GLUE_15 (const series<generic> &arg_1, const series<generic> &arg_2) {
00108     return arg_1 * arg_2;
00109   }
00110   
00111   static series<generic>
00112   GLUE_16 (const series<generic> &arg_1, const int &arg_2) {
00113     return binpow (arg_1, arg_2);
00114   }
00115   
00116   static series<generic>
00117   GLUE_17 (const series<generic> &arg_1) {
00118     return derive (arg_1);
00119   }
00120   
00121   static series<generic>
00122   GLUE_18 (const series<generic> &arg_1) {
00123     return xderive (arg_1);
00124   }
00125   
00126   static series<generic>
00127   GLUE_19 (const series<generic> &arg_1, const int &arg_2) {
00128     return dilate (arg_1, arg_2);
00129   }
00130   
00131   static series<generic>
00132   GLUE_20 (const series<generic> &arg_1, const int &arg_2) {
00133     return lshiftz (arg_1, arg_2);
00134   }
00135   
00136   static series<generic>
00137   GLUE_21 (const series<generic> &arg_1, const int &arg_2) {
00138     return rshiftz (arg_1, arg_2);
00139   }
00140   
00141   static series<generic>
00142   GLUE_22 (const series<generic> &arg_1, const series<generic> &arg_2) {
00143     return arg_1 / arg_2;
00144   }
00145   
00146   static series<generic>
00147   GLUE_23 (const series<generic> &arg_1, const series<generic> &arg_2) {
00148     return arg_1 / arg_2;
00149   }
00150   
00151   static bool
00152   GLUE_24 (const series<generic> &arg_1, const series<generic> &arg_2) {
00153     return divides (arg_1, arg_2);
00154   }
00155   
00156   static series<generic>
00157   GLUE_25 (const series<generic> &arg_1, const series<generic> &arg_2) {
00158     return gcd (arg_1, arg_2);
00159   }
00160   
00161   static series<generic>
00162   GLUE_26 (const series<generic> &arg_1, const series<generic> &arg_2) {
00163     return lcm (arg_1, arg_2);
00164   }
00165   
00166   static series<generic>
00167   GLUE_27 (const series<generic> &arg_1) {
00168     return integrate (arg_1);
00169   }
00170   
00171   static series<generic>
00172   GLUE_28 (const series<generic> &arg_1, const series<generic> &arg_2) {
00173     return compose (arg_1, arg_2);
00174   }
00175   
00176   static series<generic>
00177   GLUE_29 (const series<generic> &arg_1) {
00178     return reverse (arg_1);
00179   }
00180   
00181   static series<generic>
00182   GLUE_30 (const series<generic> &arg_1, const generic &arg_2) {
00183     return q_difference (arg_1, arg_2);
00184   }
00185   
00186   static series<generic>
00187   GLUE_31 (const series<generic> &arg_1, const generic &arg_2) {
00188     return series_shift_default (arg_1, arg_2);
00189   }
00190   
00191   static series<generic>
00192   GLUE_32 (const series<generic> &arg_1, const generic &arg_2, const int &arg_3) {
00193     return shift (arg_1, arg_2, arg_3);
00194   }
00195   
00196   static series<generic>
00197   GLUE_33 (const series<generic> &arg_1, const series<generic> &arg_2) {
00198     return pow (arg_1, arg_2);
00199   }
00200   
00201   static series<generic>
00202   GLUE_34 (const series<generic> &arg_1) {
00203     return sqrt (arg_1);
00204   }
00205   
00206   static series<generic>
00207   GLUE_35 (const series<generic> &arg_1) {
00208     return exp (arg_1);
00209   }
00210   
00211   static series<generic>
00212   GLUE_36 (const series<generic> &arg_1) {
00213     return log (arg_1);
00214   }
00215   
00216   static series<generic>
00217   GLUE_37 (const series<generic> &arg_1) {
00218     return cos (arg_1);
00219   }
00220   
00221   static series<generic>
00222   GLUE_38 (const series<generic> &arg_1) {
00223     return sin (arg_1);
00224   }
00225   
00226   static series<generic>
00227   GLUE_39 (const series<generic> &arg_1) {
00228     return tan (arg_1);
00229   }
00230   
00231   static series<generic>
00232   GLUE_40 (const series<generic> &arg_1) {
00233     return acos (arg_1);
00234   }
00235   
00236   static series<generic>
00237   GLUE_41 (const series<generic> &arg_1) {
00238     return asin (arg_1);
00239   }
00240   
00241   static series<generic>
00242   GLUE_42 (const series<generic> &arg_1) {
00243     return atan (arg_1);
00244   }
00245   
00246   static bool
00247   GLUE_43 (const series<generic> &arg_1, const series<generic> &arg_2) {
00248     return arg_1 <= arg_2;
00249   }
00250   
00251   static bool
00252   GLUE_44 (const series<generic> &arg_1, const series<generic> &arg_2) {
00253     return arg_1 >= arg_2;
00254   }
00255   
00256   static bool
00257   GLUE_45 (const series<generic> &arg_1, const series<generic> &arg_2) {
00258     return arg_1 < arg_2;
00259   }
00260   
00261   static bool
00262   GLUE_46 (const series<generic> &arg_1, const series<generic> &arg_2) {
00263     return arg_1 > arg_2;
00264   }
00265   
00266   static series<generic>
00267   GLUE_47 (const routine &arg_1, const generic &arg_2) {
00268     return fixed_point_series (arg_1, arg_2);
00269   }
00270   
00271   static vector<generic>
00272   GLUE_48 (const routine &arg_1, const vector<generic> &arg_2) {
00273     return gen_fixed_point_vector_series (arg_1, arg_2);
00274   }
00275   
00276   static series<generic>
00277   GLUE_49 (const routine &arg_1, const generic &arg_2) {
00278     return integrate_series (arg_1, arg_2);
00279   }
00280   
00281   static vector<generic>
00282   GLUE_50 (const routine &arg_1, const vector<generic> &arg_2) {
00283     return gen_integrate_vector_series (arg_1, arg_2);
00284   }
00285   
00286   static series<generic>
00287   GLUE_51 (const routine &arg_1, const generic &arg_2) {
00288     return implicit_series (arg_1, arg_2);
00289   }
00290   
00291   static vector<generic>
00292   GLUE_52 (const routine &arg_1, const vector<generic> &arg_2) {
00293     return gen_implicit_vector_series (arg_1, arg_2);
00294   }
00295   
00296   void
00297   glue_series_generic () {
00298     static bool done = false;
00299     if (done) return;
00300     done = true;
00301     call_glue (string ("glue_polynomial_generic"));
00302     define_constructor<int > (GLUE_1);
00303     define_type<series<generic> > (gen (lit ("Series"), lit ("Generic")));
00304     define ("set_variable_name", GLUE_2);
00305     define ("set_output_order", GLUE_3);
00306     define ("set_cancel_order", GLUE_4);
00307     define ("set_formula_output", GLUE_5);
00308     define ("series", GLUE_6);
00309     define_converter ("upgrade", GLUE_7, PENALTY_PROMOTE_GENERIC);
00310     define_converter (":>", GLUE_8, PENALTY_PROMOTE_GENERIC);
00311     define (".[]", GLUE_9);
00312     define (".[]", GLUE_10);
00313     define ("-", GLUE_11);
00314     define ("square", GLUE_12);
00315     define ("+", GLUE_13);
00316     define ("-", GLUE_14);
00317     define ("*", GLUE_15);
00318     define ("^", GLUE_16);
00319     define ("derive", GLUE_17);
00320     define ("xderive", GLUE_18);
00321     define ("dilate", GLUE_19);
00322     define ("<<", GLUE_20);
00323     define (">>", GLUE_21);
00324     define ("/", GLUE_22);
00325     define ("div", GLUE_23);
00326     define ("divides?", GLUE_24);
00327     define ("gcd", GLUE_25);
00328     define ("lcm", GLUE_26);
00329     define ("integrate", GLUE_27);
00330     define ("@", GLUE_28);
00331     define ("reverse", GLUE_29);
00332     define ("q_difference", GLUE_30);
00333     define ("shift", GLUE_31);
00334     define ("shift", GLUE_32);
00335     define ("^", GLUE_33);
00336     define ("sqrt", GLUE_34);
00337     define ("exp", GLUE_35);
00338     define ("log", GLUE_36);
00339     define ("cos", GLUE_37);
00340     define ("sin", GLUE_38);
00341     define ("tan", GLUE_39);
00342     define ("arccos", GLUE_40);
00343     define ("arcsin", GLUE_41);
00344     define ("arctan", GLUE_42);
00345     define ("<=", GLUE_43);
00346     define (">=", GLUE_44);
00347     define ("<", GLUE_45);
00348     define (">", GLUE_46);
00349     define ("fixed_point_series", GLUE_47);
00350     define ("fixed_point_series", GLUE_48);
00351     define ("integrate_series", GLUE_49);
00352     define ("integrate_series", GLUE_50);
00353     define ("implicit_series", GLUE_51);
00354     define ("implicit_series", GLUE_52);
00355   }
00356 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines