realroot_doc 0.1.1
|
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_dual_glue.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, Dual, DegRevLex> &arg_1) { 00026 return sample (arg_1); 00027 } 00028 00029 static ring<rational, Dual, DegRevLex> 00030 GLUE_2 (const ring<rational, Sparse, DegRevLex> &arg_1) { 00031 return dual_of (arg_1); 00032 } 00033 00034 static int 00035 GLUE_3 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00036 return size (arg_1); 00037 } 00038 00039 static int 00040 GLUE_4 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00041 return degree (arg_1); 00042 } 00043 00044 static int 00045 GLUE_5 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00046 return nbvar (arg_1); 00047 } 00048 00049 static ring<rational, Dual, DegRevLex>::Polynomial 00050 GLUE_6 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00051 return -arg_1; 00052 } 00053 00054 static ring<rational, Dual, DegRevLex>::Polynomial 00055 GLUE_7 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00056 return arg_1 + arg_2; 00057 } 00058 00059 static ring<rational, Dual, DegRevLex>::Polynomial 00060 GLUE_8 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00061 return arg_1 - arg_2; 00062 } 00063 00064 static ring<rational, Dual, DegRevLex>::Polynomial 00065 GLUE_9 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00066 return arg_1 * arg_2; 00067 } 00068 00069 static ring<rational, Dual, DegRevLex>::Polynomial 00070 GLUE_10 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00071 return square (arg_1); 00072 } 00073 00074 static ring<rational, Dual, DegRevLex>::Polynomial 00075 GLUE_11 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00076 return pow (arg_1, arg_2); 00077 } 00078 00079 static ring<rational, Dual, DegRevLex>::Polynomial 00080 GLUE_12 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00081 return diff (arg_1, arg_2); 00082 } 00083 00084 static ring<rational, Dual, DegRevLex>::Polynomial 00085 GLUE_13 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const generic &arg_2) { 00086 return diff (arg_1, arg_2); 00087 } 00088 00089 static ring<rational, Dual, DegRevLex>::Polynomial 00090 GLUE_14 (const rational &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00091 return arg_1 + arg_2; 00092 } 00093 00094 static ring<rational, Dual, DegRevLex>::Polynomial 00095 GLUE_15 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00096 return arg_1 + arg_2; 00097 } 00098 00099 static ring<rational, Dual, DegRevLex>::Polynomial 00100 GLUE_16 (const rational &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00101 return arg_1 - arg_2; 00102 } 00103 00104 static ring<rational, Dual, DegRevLex>::Polynomial 00105 GLUE_17 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00106 return arg_1 - arg_2; 00107 } 00108 00109 static ring<rational, Dual, DegRevLex>::Polynomial 00110 GLUE_18 (const rational &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00111 return arg_1 * arg_2; 00112 } 00113 00114 static ring<rational, Dual, DegRevLex>::Polynomial 00115 GLUE_19 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00116 return arg_1 * arg_2; 00117 } 00118 00119 static ring<rational, Dual, DegRevLex>::Polynomial 00120 GLUE_20 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00121 return arg_1 / arg_2; 00122 } 00123 00124 static ring<rational, Dual, DegRevLex>::Polynomial 00125 GLUE_21 (const ring<rational, Dual, DegRevLex> &arg_1, const rational &arg_2) { 00126 return polynomial_dual (arg_1, arg_2); 00127 } 00128 00129 static ring<rational, Dual, DegRevLex>::Polynomial 00130 GLUE_22 (const ring<rational, Dual, DegRevLex> &arg_1, const rational &arg_2, const int &arg_3, const int &arg_4) { 00131 return polynomial_dual (arg_1, arg_2, arg_3, arg_4); 00132 } 00133 00134 static ring<rational, Dual, DegRevLex>::Polynomial 00135 GLUE_23 (const ring<rational, Dual, DegRevLex> &arg_1, const string &arg_2) { 00136 return polynomial_dual (arg_1, arg_2); 00137 } 00138 00139 static ring<rational, Dual, DegRevLex>::Polynomial 00140 GLUE_24 (const ring<rational, Dual, DegRevLex> &arg_1, const generic &arg_2) { 00141 return polynomial_dual (arg_1, arg_2); 00142 } 00143 00144 static ring<rational, Dual, DegRevLex>::Polynomial 00145 GLUE_25 (const ring<rational, Dual, DegRevLex> &arg_1, const string &arg_2) { 00146 return polynomial_dual (arg_1, arg_2); 00147 } 00148 00149 static ring<rational, Dual, DegRevLex>::Polynomial 00150 GLUE_26 (const ring<rational, Dual, DegRevLex> &arg_1, const generic &arg_2) { 00151 return polynomial_dual (arg_1, arg_2); 00152 } 00153 00154 static vector<generic> 00155 GLUE_27 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00156 return polynomial_dual_coefficients (arg_1, arg_2); 00157 } 00158 00159 static vector<generic> 00160 GLUE_28 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1) { 00161 return polynomial_dual_coefficients (arg_1); 00162 } 00163 00164 static ring<rational, Dual, DegRevLex>::Polynomial 00165 GLUE_29 (const ring<rational, Dual, DegRevLex> &arg_1, const int &arg_2) { 00166 return arg_1[arg_2]; 00167 } 00168 00169 static ring<rational, Sparse, DegRevLex>::Polynomial 00170 GLUE_30 (const ring<rational, Dual, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00171 return arg_1 * arg_2; 00172 } 00173 00174 static ring<rational, Dual, DegRevLex>::Polynomial 00175 GLUE_31 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Dual, DegRevLex>::Polynomial &arg_2) { 00176 return arg_1 * arg_2; 00177 } 00178 00179 void 00180 glue_polynomial_dual_rational () { 00181 static bool done = false; 00182 if (done) return; 00183 done = true; 00184 call_glue (string ("glue_int")); 00185 call_glue (string ("glue_vector_generic")); 00186 call_glue (string ("glue_string")); 00187 call_glue (string ("glue_kernel")); 00188 call_glue (string ("glue_polynomial_sparse_rational")); 00189 define_type<ring<rational, Dual, DegRevLex> > (gen (lit ("MonomialDualRing"), lit ("Rational"))); 00190 define ("sample", GLUE_1); 00191 define ("dual", GLUE_2); 00192 define_type<ring<rational, Dual, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialDualRing"), lit ("Rational")))); 00193 define ("#", GLUE_3); 00194 define ("degree", GLUE_4); 00195 define ("nbvar", GLUE_5); 00196 define ("-", GLUE_6); 00197 define ("+", GLUE_7); 00198 define ("-", GLUE_8); 00199 define ("*", GLUE_9); 00200 define ("square", GLUE_10); 00201 define ("^", GLUE_11); 00202 define ("diff", GLUE_12); 00203 define ("diff", GLUE_13); 00204 define ("+", GLUE_14); 00205 define ("+", GLUE_15); 00206 define ("-", GLUE_16); 00207 define ("-", GLUE_17); 00208 define ("*", GLUE_18); 00209 define ("*", GLUE_19); 00210 define ("/", GLUE_20); 00211 define ("polynomial", GLUE_21); 00212 define ("polynomial", GLUE_22); 00213 define ("polynomial", GLUE_23); 00214 define ("polynomial", GLUE_24); 00215 define ("<<", GLUE_25); 00216 define ("<<", GLUE_26); 00217 define ("coefficients", GLUE_27); 00218 define ("coefficients", GLUE_28); 00219 define (".[]", GLUE_29); 00220 define ("*", GLUE_30); 00221 define ("*", GLUE_31); 00222 } 00223 }