realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/glue/glue_polynomial_tensor_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 <realroot/polynomial_tensor_glue.hpp>
00013 #include <basix/tuple.hpp>
00014 #include <basix/glue.hpp>
00015 
00016 #define int_literal(x) as_int (as_string (x))
00017 #define set_of_generic set_of(generic)
00018 #define set_of_double set_of(double)
00019 #define set_of_integer set_of(integer)
00020 #define set_of_rational set_of(rational)
00021 #define set_of_bigfloat set_of(bigfloat)
00022 #define set_of_complex_bigfloat set_of(complex_bigfloat)
00023 
00024 namespace mmx {
00025   static rational
00026   GLUE_1 (const ring<rational, MonomialTensor> &arg_1) {
00027     return sample (arg_1);
00028   }
00029   
00030   static ring<rational, MonomialTensor>
00031   GLUE_2 (const ring<rational, Sparse, DegRevLex> &arg_1) {
00032     return ring_tensor_of (arg_1);
00033   }
00034   
00035   static ring<rational, MonomialTensor>
00036   GLUE_3 (const ring<rational, MonomialTensor> &arg_1, const tuple<generic> &arg_2) {
00037     return ring_tensor_extend_generic (arg_1, as_vector (arg_2));
00038   }
00039   
00040   static ring<rational, MonomialTensor>
00041   GLUE_4 (const scalar_set<rational> &arg_1, const MonomialTensor &arg_2, const tuple<generic> &arg_3) {
00042     return ring_tensor_generic (arg_1, arg_2, as_vector (arg_3));
00043   }
00044   
00045   static int
00046   GLUE_5 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00047     return size (arg_1);
00048   }
00049   
00050   static int
00051   GLUE_6 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00052     return degree (arg_1);
00053   }
00054   
00055   static int
00056   GLUE_7 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00057     return nbvar (arg_1);
00058   }
00059   
00060   static ring<rational, MonomialTensor>::Polynomial
00061   GLUE_8 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00062     return -arg_1;
00063   }
00064   
00065   static ring<rational, MonomialTensor>::Polynomial
00066   GLUE_9 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00067     return arg_1 + arg_2;
00068   }
00069   
00070   static ring<rational, MonomialTensor>::Polynomial
00071   GLUE_10 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00072     return arg_1 - arg_2;
00073   }
00074   
00075   static ring<rational, MonomialTensor>::Polynomial
00076   GLUE_11 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00077     return arg_1 * arg_2;
00078   }
00079   
00080   static ring<rational, MonomialTensor>::Polynomial
00081   GLUE_12 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00082     return square (arg_1);
00083   }
00084   
00085   static ring<rational, MonomialTensor>::Polynomial
00086   GLUE_13 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const int &arg_2) {
00087     return pow (arg_1, arg_2);
00088   }
00089   
00090   static ring<rational, MonomialTensor>::Polynomial
00091   GLUE_14 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const int &arg_2) {
00092     return diff (arg_1, arg_2);
00093   }
00094   
00095   static ring<rational, MonomialTensor>::Polynomial
00096   GLUE_15 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const generic &arg_2) {
00097     return diff (arg_1, arg_2);
00098   }
00099   
00100   static ring<rational, MonomialTensor>::Polynomial
00101   GLUE_16 (const rational &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00102     return arg_1 + arg_2;
00103   }
00104   
00105   static ring<rational, MonomialTensor>::Polynomial
00106   GLUE_17 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const rational &arg_2) {
00107     return arg_1 + arg_2;
00108   }
00109   
00110   static ring<rational, MonomialTensor>::Polynomial
00111   GLUE_18 (const rational &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00112     return arg_1 - arg_2;
00113   }
00114   
00115   static ring<rational, MonomialTensor>::Polynomial
00116   GLUE_19 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const rational &arg_2) {
00117     return arg_1 - arg_2;
00118   }
00119   
00120   static ring<rational, MonomialTensor>::Polynomial
00121   GLUE_20 (const rational &arg_1, const ring<rational, MonomialTensor>::Polynomial &arg_2) {
00122     return arg_1 * arg_2;
00123   }
00124   
00125   static ring<rational, MonomialTensor>::Polynomial
00126   GLUE_21 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const rational &arg_2) {
00127     return arg_1 * arg_2;
00128   }
00129   
00130   static ring<rational, MonomialTensor>::Polynomial
00131   GLUE_22 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const rational &arg_2) {
00132     return arg_1 / arg_2;
00133   }
00134   
00135   static ring<rational, MonomialTensor>::Polynomial
00136   GLUE_23 (const ring<rational, MonomialTensor> &arg_1, const rational &arg_2) {
00137     return polynomial_tensor (arg_1, arg_2);
00138   }
00139   
00140   static ring<rational, MonomialTensor>::Polynomial
00141   GLUE_24 (const ring<rational, MonomialTensor> &arg_1, const rational &arg_2, const int &arg_3, const int &arg_4) {
00142     return polynomial_tensor (arg_1, arg_2, arg_3, arg_4);
00143   }
00144   
00145   static ring<rational, MonomialTensor>::Polynomial
00146   GLUE_25 (const ring<rational, MonomialTensor> &arg_1, const string &arg_2) {
00147     return polynomial_tensor (arg_1, arg_2);
00148   }
00149   
00150   static ring<rational, MonomialTensor>::Polynomial
00151   GLUE_26 (const ring<rational, MonomialTensor> &arg_1, const generic &arg_2) {
00152     return polynomial_tensor (arg_1, arg_2);
00153   }
00154   
00155   static ring<rational, MonomialTensor>::Polynomial
00156   GLUE_27 (const ring<rational, MonomialTensor> &arg_1, const string &arg_2) {
00157     return polynomial_tensor (arg_1, arg_2);
00158   }
00159   
00160   static ring<rational, MonomialTensor>::Polynomial
00161   GLUE_28 (const ring<rational, MonomialTensor> &arg_1, const generic &arg_2) {
00162     return polynomial_tensor (arg_1, arg_2);
00163   }
00164   
00165   static vector<generic>
00166   GLUE_29 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const int &arg_2) {
00167     return polynomial_tensor_coefficients (arg_1, arg_2);
00168   }
00169   
00170   static vector<generic>
00171   GLUE_30 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00172     return polynomial_tensor_coefficients (arg_1);
00173   }
00174   
00175   static ring<rational, MonomialTensor>::Polynomial
00176   GLUE_31 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) {
00177     return polynomial_tensor_of (arg_1);
00178   }
00179   
00180   static ring<rational, MonomialTensor>::Polynomial
00181   GLUE_32 (const ring<rational, MonomialTensor> &arg_1, const int &arg_2) {
00182     return arg_1[arg_2];
00183   }
00184   
00185   void
00186   glue_polynomial_tensor_rational () {
00187     static bool done = false;
00188     if (done) return;
00189     done = true;
00190     call_glue (string ("glue_int"));
00191     call_glue (string ("glue_vector_generic"));
00192     call_glue (string ("glue_string"));
00193     call_glue (string ("glue_kernel"));
00194     define_type<ring<rational, Sparse, DegRevLex> > (gen (lit ("MonomialSparseRing"), lit ("Rational")));
00195     define_type<MonomialTensor > (lit ("MonomialBasis"));
00196     define_constant<MonomialTensor > ("Monomials", MonomialTensor ());
00197     define_type<ring<rational, MonomialTensor> > (gen (lit ("MonomialTensorRing"), lit ("Rational")));
00198     define ("sample", GLUE_1);
00199     define ("tensor", GLUE_2);
00200     define (".[]", GLUE_3);
00201     define ("ring", GLUE_4);
00202     define_type<ring<rational, MonomialTensor>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialTensorRing"), lit ("Rational"))));
00203     define_type<ring<rational, Sparse, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialSparseRing"), lit ("Rational"))));
00204     define ("#", GLUE_5);
00205     define ("degree", GLUE_6);
00206     define ("nbvar", GLUE_7);
00207     define ("-", GLUE_8);
00208     define ("+", GLUE_9);
00209     define ("-", GLUE_10);
00210     define ("*", GLUE_11);
00211     define ("square", GLUE_12);
00212     define ("^", GLUE_13);
00213     define ("diff", GLUE_14);
00214     define ("diff", GLUE_15);
00215     define ("+", GLUE_16);
00216     define ("+", GLUE_17);
00217     define ("-", GLUE_18);
00218     define ("-", GLUE_19);
00219     define ("*", GLUE_20);
00220     define ("*", GLUE_21);
00221     define ("/", GLUE_22);
00222     define ("polynomial", GLUE_23);
00223     define ("polynomial", GLUE_24);
00224     define ("polynomial", GLUE_25);
00225     define ("polynomial", GLUE_26);
00226     define ("<<", GLUE_27);
00227     define ("<<", GLUE_28);
00228     define ("coefficients", GLUE_29);
00229     define ("coefficients", GLUE_30);
00230     define ("tensor", GLUE_31);
00231     define (".[]", GLUE_32);
00232   }
00233 }