algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/glue/glue_polynomial_integer.cpp
Go to the documentation of this file.
00001 
00002 #include <numerix/integer.hpp>
00003 #include <basix/vector.hpp>
00004 #include <algebramix/polynomial.hpp>
00005 #include <algebramix/polynomial_polynomial.hpp>
00006 #include <algebramix/polynomial_integer.hpp>
00007 #include <algebramix/polynomial_schonhage.hpp>
00008 #include <basix/tuple.hpp>
00009 #include <basix/glue.hpp>
00010 
00011 namespace mmx {
00012     template<typename C> polynomial<C>
00013     polynomial_reverse (const vector<C>& v) {
00014       return polynomial<C> (reverse (v)); }
00015 
00016     template<typename C> polynomial<modular<modulus<C>, modular_local> >
00017     as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00018       modular<modulus<C>, modular_local>::set_modulus (p);
00019       return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00020 
00021     template<typename C> vector<generic>
00022     wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00023       return as<vector<generic> > (subresultants (f, g)); }
00024 
00025   }
00026 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00027 
00028 namespace mmx {
00029   static polynomial<integer>
00030   GLUE_1 (const tuple<integer> &arg_1) {
00031     return polynomial_reverse (as_vector (arg_1));
00032   }
00033   
00034   static polynomial<integer>
00035   GLUE_2 (const tuple<integer> &arg_1) {
00036     return polynomial<integer > (as_vector (arg_1));
00037   }
00038   
00039   static void
00040   GLUE_3 (const polynomial<integer> &arg_1, const generic &arg_2) {
00041     set_variable_name (arg_1, arg_2);
00042   }
00043   
00044   static polynomial<integer>
00045   GLUE_4 (const integer &arg_1) {
00046     return polynomial<integer > (arg_1);
00047   }
00048   
00049   static iterator<generic>
00050   GLUE_5 (const polynomial<integer> &arg_1) {
00051     return as<iterator<generic> > (iterate (arg_1));
00052   }
00053   
00054   static int
00055   GLUE_6 (const polynomial<integer> &arg_1) {
00056     return N (arg_1);
00057   }
00058   
00059   static int
00060   GLUE_7 (const polynomial<integer> &arg_1) {
00061     return deg (arg_1);
00062   }
00063   
00064   static integer
00065   GLUE_8 (const polynomial<integer> &arg_1, const int &arg_2) {
00066     return arg_1[arg_2];
00067   }
00068   
00069   static polynomial<integer>
00070   GLUE_9 (const polynomial<integer> &arg_1) {
00071     return -arg_1;
00072   }
00073   
00074   static polynomial<integer>
00075   GLUE_10 (const polynomial<integer> &arg_1) {
00076     return square (arg_1);
00077   }
00078   
00079   static polynomial<integer>
00080   GLUE_11 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) {
00081     return arg_1 + arg_2;
00082   }
00083   
00084   static polynomial<integer>
00085   GLUE_12 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) {
00086     return arg_1 - arg_2;
00087   }
00088   
00089   static polynomial<integer>
00090   GLUE_13 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) {
00091     return arg_1 * arg_2;
00092   }
00093   
00094   static polynomial<integer>
00095   GLUE_14 (const integer &arg_1, const polynomial<integer> &arg_2) {
00096     return arg_1 + arg_2;
00097   }
00098   
00099   static polynomial<integer>
00100   GLUE_15 (const polynomial<integer> &arg_1, const integer &arg_2) {
00101     return arg_1 + arg_2;
00102   }
00103   
00104   static polynomial<integer>
00105   GLUE_16 (const integer &arg_1, const polynomial<integer> &arg_2) {
00106     return arg_1 - arg_2;
00107   }
00108   
00109   static polynomial<integer>
00110   GLUE_17 (const polynomial<integer> &arg_1, const integer &arg_2) {
00111     return arg_1 - arg_2;
00112   }
00113   
00114   static polynomial<integer>
00115   GLUE_18 (const integer &arg_1, const polynomial<integer> &arg_2) {
00116     return arg_1 * arg_2;
00117   }
00118   
00119   static polynomial<integer>
00120   GLUE_19 (const polynomial<integer> &arg_1, const integer &arg_2) {
00121     return arg_1 * arg_2;
00122   }
00123   
00124   static polynomial<integer>
00125   GLUE_20 (const polynomial<integer> &arg_1, const int &arg_2) {
00126     return binpow (arg_1, arg_2);
00127   }
00128   
00129   static polynomial<integer>
00130   GLUE_21 (const polynomial<integer> &arg_1, const int &arg_2) {
00131     return lshiftz (arg_1, arg_2);
00132   }
00133   
00134   static polynomial<integer>
00135   GLUE_22 (const polynomial<integer> &arg_1, const int &arg_2) {
00136     return rshiftz (arg_1, arg_2);
00137   }
00138   
00139   static polynomial<integer>
00140   GLUE_23 (const polynomial<integer> &arg_1) {
00141     return derive (arg_1);
00142   }
00143   
00144   static polynomial<integer>
00145   GLUE_24 (const polynomial<integer> &arg_1) {
00146     return xderive (arg_1);
00147   }
00148   
00149   static integer
00150   GLUE_25 (const polynomial<integer> &arg_1, const integer &arg_2) {
00151     return evaluate (arg_1, arg_2);
00152   }
00153   
00154   static vector<integer>
00155   GLUE_26 (const polynomial<integer> &arg_1, const vector<integer> &arg_2) {
00156     return evaluate (arg_1, arg_2);
00157   }
00158   
00159   static integer
00160   GLUE_27 (const polynomial<integer> &arg_1, const integer &arg_2) {
00161     return evaluate (arg_1, arg_2);
00162   }
00163   
00164   static vector<integer>
00165   GLUE_28 (const polynomial<integer> &arg_1, const vector<integer> &arg_2) {
00166     return evaluate (arg_1, arg_2);
00167   }
00168   
00169   static polynomial<generic>
00170   GLUE_29 (const polynomial<integer> &arg_1) {
00171     return as<polynomial<generic> > (arg_1);
00172   }
00173   
00174   void
00175   glue_polynomial_integer () {
00176     static bool done = false;
00177     if (done) return;
00178     done = true;
00179     call_glue (string ("glue_vector_integer"));
00180     call_glue (string ("glue_polynomial_generic"));
00181     define_type<polynomial<integer> > (gen (lit ("Polynomial"), lit ("Integer")));
00182     define ("poly", GLUE_1);
00183     define ("polynomial", GLUE_2);
00184     define ("set_variable_name", GLUE_3);
00185     define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION);
00186     define_converter (":>", GLUE_5, PENALTY_CAST);
00187     define ("#", GLUE_6);
00188     define ("deg", GLUE_7);
00189     define (".[]", GLUE_8);
00190     define ("-", GLUE_9);
00191     define ("square", GLUE_10);
00192     define ("+", GLUE_11);
00193     define ("-", GLUE_12);
00194     define ("*", GLUE_13);
00195     define ("+", GLUE_14);
00196     define ("+", GLUE_15);
00197     define ("-", GLUE_16);
00198     define ("-", GLUE_17);
00199     define ("*", GLUE_18);
00200     define ("*", GLUE_19);
00201     define ("^", GLUE_20);
00202     define ("<<", GLUE_21);
00203     define (">>", GLUE_22);
00204     define ("derive", GLUE_23);
00205     define ("xderive", GLUE_24);
00206     define ("eval", GLUE_25);
00207     define ("eval", GLUE_26);
00208     define ("evaluate", GLUE_27);
00209     define ("evaluate", GLUE_28);
00210     define_converter (":>", GLUE_29, PENALTY_PROMOTE_GENERIC);
00211   }
00212 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines