realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/glue/glue_polynomial_sparse_rational.cpp
Go to the documentation of this file.
00001 
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <basix/port.hpp>
00005 #include <numerix/integer.hpp>
00006 #include <numerix/rational.hpp>
00007 #include <numerix/floating.hpp>
00008 #include <numerix/kernel.hpp>
00009 #include <realroot/polynomial.hpp>
00010 #include <realroot/polynomial_glue.hpp>
00011 #include <realroot/polynomial_sparse_glue.hpp>
00012 #include <basix/tuple.hpp>
00013 #include <basix/glue.hpp>
00014 
00015 #define int_literal(x) as_int (as_string (x))
00016 #define set_of_generic set_of(generic)
00017 #define set_of_double set_of(double)
00018 #define set_of_integer set_of(integer)
00019 #define set_of_rational set_of(rational)
00020 #define set_of_bigfloat set_of(bigfloat)
00021 #define set_of_complex_bigfloat set_of(complex_bigfloat)
00022 
00023 namespace mmx {
00024   static rational
00025   GLUE_1 (const ring<rational, Sparse, DegRevLex> &arg_1) {
00026     return sample (arg_1);
00027   }
00028   
00029   static ring<rational, Sparse, DegRevLex>
00030   GLUE_2 (const ring<rational, Sparse, DegRevLex> &arg_1, const tuple<generic> &arg_2) {
00031     return ring_sparse_extend_generic (arg_1, as_vector (arg_2));
00032   }
00033   
00034   static ring<rational, Sparse, DegRevLex>
00035   GLUE_3 (const scalar_set<rational> &arg_1, const tuple<generic> &arg_2) {
00036     return ring_sparse_generic (arg_1, as_vector (arg_2));
00037   }
00038   
00039   static ring<rational, Sparse, DegRevLex>
00040   GLUE_4 (const scalar_set<rational> &arg_1, const tuple<generic> &arg_2) {
00041     return ring_sparse_generic (arg_1, as_vector (arg_2));
00042   }
00043   
00044   static int
00045   GLUE_5 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00046     return size (arg_1);
00047   }
00048   
00049   static int
00050   GLUE_6 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00051     return degree (arg_1);
00052   }
00053   
00054   static int
00055   GLUE_7 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00056     return nbvar (arg_1);
00057   }
00058   
00059   static ring<rational, Sparse, DegRevLex>::Polynomial
00060   GLUE_8 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00061     return -arg_1;
00062   }
00063   
00064   static ring<rational, Sparse, DegRevLex>::Polynomial
00065   GLUE_9 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00066     return arg_1 + arg_2;
00067   }
00068   
00069   static ring<rational, Sparse, DegRevLex>::Polynomial
00070   GLUE_10 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00071     return arg_1 - arg_2;
00072   }
00073   
00074   static ring<rational, Sparse, DegRevLex>::Polynomial
00075   GLUE_11 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00076     return arg_1 * arg_2;
00077   }
00078   
00079   static ring<rational, Sparse, DegRevLex>::Polynomial
00080   GLUE_12 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00081     return square (arg_1);
00082   }
00083   
00084   static ring<rational, Sparse, DegRevLex>::Polynomial
00085   GLUE_13 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) {
00086     return pow (arg_1, arg_2);
00087   }
00088   
00089   static ring<rational, Sparse, DegRevLex>::Polynomial
00090   GLUE_14 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) {
00091     return diff (arg_1, arg_2);
00092   }
00093   
00094   static ring<rational, Sparse, DegRevLex>::Polynomial
00095   GLUE_15 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const generic &arg_2) {
00096     return diff (arg_1, arg_2);
00097   }
00098   
00099   static ring<rational, Sparse, DegRevLex>::Polynomial
00100   GLUE_16 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00101     return arg_1 + arg_2;
00102   }
00103   
00104   static ring<rational, Sparse, DegRevLex>::Polynomial
00105   GLUE_17 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) {
00106     return arg_1 + arg_2;
00107   }
00108   
00109   static ring<rational, Sparse, DegRevLex>::Polynomial
00110   GLUE_18 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00111     return arg_1 - arg_2;
00112   }
00113   
00114   static ring<rational, Sparse, DegRevLex>::Polynomial
00115   GLUE_19 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) {
00116     return arg_1 - arg_2;
00117   }
00118   
00119   static ring<rational, Sparse, DegRevLex>::Polynomial
00120   GLUE_20 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00121     return arg_1 * arg_2;
00122   }
00123   
00124   static ring<rational, Sparse, DegRevLex>::Polynomial
00125   GLUE_21 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) {
00126     return arg_1 * arg_2;
00127   }
00128   
00129   static ring<rational, Sparse, DegRevLex>::Polynomial
00130   GLUE_22 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) {
00131     return arg_1 / arg_2;
00132   }
00133   
00134   static ring<rational, Sparse, DegRevLex>::Polynomial
00135   GLUE_23 (const ring<rational, Sparse, DegRevLex> &arg_1, const rational &arg_2) {
00136     return polynomial_sparse (arg_1, arg_2);
00137   }
00138   
00139   static ring<rational, Sparse, DegRevLex>::Polynomial
00140   GLUE_24 (const ring<rational, Sparse, DegRevLex> &arg_1, const rational &arg_2, const int &arg_3, const int &arg_4) {
00141     return polynomial_sparse (arg_1, arg_2, arg_3, arg_4);
00142   }
00143   
00144   static ring<rational, Sparse, DegRevLex>::Polynomial
00145   GLUE_25 (const ring<rational, Sparse, DegRevLex> &arg_1, const string &arg_2) {
00146     return polynomial_sparse (arg_1, arg_2);
00147   }
00148   
00149   static ring<rational, Sparse, DegRevLex>::Polynomial
00150   GLUE_26 (const ring<rational, Sparse, DegRevLex> &arg_1, const generic &arg_2) {
00151     return polynomial_sparse (arg_1, arg_2);
00152   }
00153   
00154   static ring<rational, Sparse, DegRevLex>::Polynomial
00155   GLUE_27 (const ring<rational, Sparse, DegRevLex> &arg_1, const string &arg_2) {
00156     return polynomial_sparse (arg_1, arg_2);
00157   }
00158   
00159   static ring<rational, Sparse, DegRevLex>::Polynomial
00160   GLUE_28 (const ring<rational, Sparse, DegRevLex> &arg_1, const generic &arg_2) {
00161     return polynomial_sparse (arg_1, arg_2);
00162   }
00163   
00164   static vector<generic>
00165   GLUE_29 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) {
00166     return polynomial_sparse_coefficients (arg_1, arg_2);
00167   }
00168   
00169   static vector<generic>
00170   GLUE_30 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00171     return polynomial_sparse_coefficients (arg_1);
00172   }
00173   
00174   static vector<generic>
00175   GLUE_31 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00176     return polynomial_sparse_monomials (arg_1);
00177   }
00178   
00179   static ring<rational, Sparse, DegRevLex>::Polynomial
00180   GLUE_32 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00181     return homogenize (arg_1, arg_2);
00182   }
00183   
00184   static ring<rational, Sparse, DegRevLex>::Polynomial
00185   GLUE_33 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3) {
00186     return homogenize (arg_1, arg_2, arg_3);
00187   }
00188   
00189   static generic
00190   GLUE_34 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const vector<generic> &arg_2) {
00191     return polynomial_sparse_eval_generic (arg_1, arg_2);
00192   }
00193   
00194   static ring<rational, Sparse, DegRevLex>::Polynomial
00195   GLUE_35 (const ring<rational, Sparse, DegRevLex> &arg_1, const int &arg_2) {
00196     return arg_1[arg_2];
00197   }
00198   
00199   static vector<generic>
00200   GLUE_36 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) {
00201     return polynomial_sturm_sequence (arg_1, arg_2, arg_3);
00202   }
00203   
00204   static ring<rational, Sparse, DegRevLex>::Polynomial
00205   GLUE_37 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) {
00206     return polynomial_resultant (arg_1, arg_2, arg_3);
00207   }
00208   
00209   static ring<rational, Sparse, DegRevLex>::Polynomial
00210   GLUE_38 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00211     return arg_1 / arg_2;
00212   }
00213   
00214   static ring<rational, Sparse, DegRevLex>::Polynomial
00215   GLUE_39 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00216     return arg_1 / arg_2;
00217   }
00218   
00219   static ring<rational, Sparse, DegRevLex>::Polynomial
00220   GLUE_40 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) {
00221     return arg_1 % arg_2;
00222   }
00223   
00224   void
00225   glue_polynomial_sparse_rational () {
00226     static bool done = false;
00227     if (done) return;
00228     done = true;
00229     call_glue (string ("glue_int"));
00230     call_glue (string ("glue_vector_generic"));
00231     call_glue (string ("glue_string"));
00232     call_glue (string ("glue_kernel"));
00233     define_type<ring<rational, Sparse, DegRevLex> > (gen (lit ("MonomialSparseRing"), lit ("Rational")));
00234     define ("sample", GLUE_1);
00235     define (".[]", GLUE_2);
00236     define (".[]", GLUE_3);
00237     define ("ring", GLUE_4);
00238     define_type<ring<rational, Sparse, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialSparseRing"), lit ("Rational"))));
00239     define ("#", GLUE_5);
00240     define ("degree", GLUE_6);
00241     define ("nbvar", GLUE_7);
00242     define ("-", GLUE_8);
00243     define ("+", GLUE_9);
00244     define ("-", GLUE_10);
00245     define ("*", GLUE_11);
00246     define ("square", GLUE_12);
00247     define ("^", GLUE_13);
00248     define ("diff", GLUE_14);
00249     define ("diff", GLUE_15);
00250     define ("+", GLUE_16);
00251     define ("+", GLUE_17);
00252     define ("-", GLUE_18);
00253     define ("-", GLUE_19);
00254     define ("*", GLUE_20);
00255     define ("*", GLUE_21);
00256     define ("/", GLUE_22);
00257     define ("polynomial", GLUE_23);
00258     define ("polynomial", GLUE_24);
00259     define ("polynomial", GLUE_25);
00260     define ("polynomial", GLUE_26);
00261     define ("<<", GLUE_27);
00262     define ("<<", GLUE_28);
00263     define ("coefficients", GLUE_29);
00264     define ("coefficients", GLUE_30);
00265     define ("monomials", GLUE_31);
00266     define ("homogenize", GLUE_32);
00267     define ("homogenize", GLUE_33);
00268     define ("eval", GLUE_34);
00269     define (".[]", GLUE_35);
00270     define ("sturm_seq", GLUE_36);
00271     define ("resultant", GLUE_37);
00272     define ("/", GLUE_38);
00273     define ("quo", GLUE_39);
00274     define ("rem", GLUE_40);
00275   }
00276 }