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