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 <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 integer 00025 GLUE_1 (const ring<integer, Sparse, DegRevLex> &arg_1) { 00026 return sample (arg_1); 00027 } 00028 00029 static ring<integer, Sparse, DegRevLex> 00030 GLUE_2 (const ring<integer, 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<integer, Sparse, DegRevLex> 00035 GLUE_3 (const scalar_set<integer> &arg_1, const tuple<generic> &arg_2) { 00036 return ring_sparse_generic (arg_1, as_vector (arg_2)); 00037 } 00038 00039 static ring<integer, Sparse, DegRevLex> 00040 GLUE_4 (const scalar_set<integer> &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<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00046 return size (arg_1); 00047 } 00048 00049 static int 00050 GLUE_6 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00051 return degree (arg_1); 00052 } 00053 00054 static int 00055 GLUE_7 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00056 return nbvar (arg_1); 00057 } 00058 00059 static ring<integer, Sparse, DegRevLex>::Polynomial 00060 GLUE_8 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00061 return -arg_1; 00062 } 00063 00064 static ring<integer, Sparse, DegRevLex>::Polynomial 00065 GLUE_9 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00066 return arg_1 + arg_2; 00067 } 00068 00069 static ring<integer, Sparse, DegRevLex>::Polynomial 00070 GLUE_10 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00071 return arg_1 - arg_2; 00072 } 00073 00074 static ring<integer, Sparse, DegRevLex>::Polynomial 00075 GLUE_11 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00076 return arg_1 * arg_2; 00077 } 00078 00079 static ring<integer, Sparse, DegRevLex>::Polynomial 00080 GLUE_12 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00081 return square (arg_1); 00082 } 00083 00084 static ring<integer, Sparse, DegRevLex>::Polynomial 00085 GLUE_13 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00086 return pow (arg_1, arg_2); 00087 } 00088 00089 static ring<integer, Sparse, DegRevLex>::Polynomial 00090 GLUE_14 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00091 return diff (arg_1, arg_2); 00092 } 00093 00094 static ring<integer, Sparse, DegRevLex>::Polynomial 00095 GLUE_15 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const generic &arg_2) { 00096 return diff (arg_1, arg_2); 00097 } 00098 00099 static ring<integer, Sparse, DegRevLex>::Polynomial 00100 GLUE_16 (const integer &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00101 return arg_1 + arg_2; 00102 } 00103 00104 static ring<integer, Sparse, DegRevLex>::Polynomial 00105 GLUE_17 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const integer &arg_2) { 00106 return arg_1 + arg_2; 00107 } 00108 00109 static ring<integer, Sparse, DegRevLex>::Polynomial 00110 GLUE_18 (const integer &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00111 return arg_1 - arg_2; 00112 } 00113 00114 static ring<integer, Sparse, DegRevLex>::Polynomial 00115 GLUE_19 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const integer &arg_2) { 00116 return arg_1 - arg_2; 00117 } 00118 00119 static ring<integer, Sparse, DegRevLex>::Polynomial 00120 GLUE_20 (const integer &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00121 return arg_1 * arg_2; 00122 } 00123 00124 static ring<integer, Sparse, DegRevLex>::Polynomial 00125 GLUE_21 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const integer &arg_2) { 00126 return arg_1 * arg_2; 00127 } 00128 00129 static ring<integer, Sparse, DegRevLex>::Polynomial 00130 GLUE_22 (const ring<integer, Sparse, DegRevLex> &arg_1, const integer &arg_2) { 00131 return polynomial_sparse (arg_1, arg_2); 00132 } 00133 00134 static ring<integer, Sparse, DegRevLex>::Polynomial 00135 GLUE_23 (const ring<integer, Sparse, DegRevLex> &arg_1, const integer &arg_2, const int &arg_3, const int &arg_4) { 00136 return polynomial_sparse (arg_1, arg_2, arg_3, arg_4); 00137 } 00138 00139 static ring<integer, Sparse, DegRevLex>::Polynomial 00140 GLUE_24 (const ring<integer, Sparse, DegRevLex> &arg_1, const string &arg_2) { 00141 return polynomial_sparse (arg_1, arg_2); 00142 } 00143 00144 static ring<integer, Sparse, DegRevLex>::Polynomial 00145 GLUE_25 (const ring<integer, Sparse, DegRevLex> &arg_1, const generic &arg_2) { 00146 return polynomial_sparse (arg_1, arg_2); 00147 } 00148 00149 static ring<integer, Sparse, DegRevLex>::Polynomial 00150 GLUE_26 (const ring<integer, Sparse, DegRevLex> &arg_1, const string &arg_2) { 00151 return polynomial_sparse (arg_1, arg_2); 00152 } 00153 00154 static ring<integer, Sparse, DegRevLex>::Polynomial 00155 GLUE_27 (const ring<integer, Sparse, DegRevLex> &arg_1, const generic &arg_2) { 00156 return polynomial_sparse (arg_1, arg_2); 00157 } 00158 00159 static vector<generic> 00160 GLUE_28 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00161 return polynomial_sparse_coefficients (arg_1, arg_2); 00162 } 00163 00164 static vector<generic> 00165 GLUE_29 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00166 return polynomial_sparse_coefficients (arg_1); 00167 } 00168 00169 static vector<generic> 00170 GLUE_30 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1) { 00171 return polynomial_sparse_monomials (arg_1); 00172 } 00173 00174 static ring<integer, Sparse, DegRevLex>::Polynomial 00175 GLUE_31 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2) { 00176 return homogenize (arg_1, arg_2); 00177 } 00178 00179 static ring<integer, Sparse, DegRevLex>::Polynomial 00180 GLUE_32 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_3) { 00181 return homogenize (arg_1, arg_2, arg_3); 00182 } 00183 00184 static generic 00185 GLUE_33 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const vector<generic> &arg_2) { 00186 return polynomial_sparse_eval_generic (arg_1, arg_2); 00187 } 00188 00189 static ring<integer, Sparse, DegRevLex>::Polynomial 00190 GLUE_34 (const ring<integer, Sparse, DegRevLex> &arg_1, const int &arg_2) { 00191 return arg_1[arg_2]; 00192 } 00193 00194 static vector<generic> 00195 GLUE_35 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) { 00196 return polynomial_sturm_sequence (arg_1, arg_2, arg_3); 00197 } 00198 00199 static ring<integer, Sparse, DegRevLex>::Polynomial 00200 GLUE_36 (const ring<integer, Sparse, DegRevLex>::Polynomial &arg_1, const ring<integer, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) { 00201 return polynomial_resultant (arg_1, arg_2, arg_3); 00202 } 00203 00204 void 00205 glue_polynomial_sparse_integer () { 00206 static bool done = false; 00207 if (done) return; 00208 done = true; 00209 call_glue (string ("glue_int")); 00210 call_glue (string ("glue_vector_generic")); 00211 call_glue (string ("glue_string")); 00212 call_glue (string ("glue_kernel")); 00213 define_type<ring<integer, Sparse, DegRevLex> > (gen (lit ("MonomialSparseRing"), lit ("Integer"))); 00214 define ("sample", GLUE_1); 00215 define (".[]", GLUE_2); 00216 define (".[]", GLUE_3); 00217 define ("ring", GLUE_4); 00218 define_type<ring<integer, Sparse, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialSparseRing"), lit ("Integer")))); 00219 define ("#", GLUE_5); 00220 define ("degree", GLUE_6); 00221 define ("nbvar", GLUE_7); 00222 define ("-", GLUE_8); 00223 define ("+", GLUE_9); 00224 define ("-", GLUE_10); 00225 define ("*", GLUE_11); 00226 define ("square", GLUE_12); 00227 define ("^", GLUE_13); 00228 define ("diff", GLUE_14); 00229 define ("diff", GLUE_15); 00230 define ("+", GLUE_16); 00231 define ("+", GLUE_17); 00232 define ("-", GLUE_18); 00233 define ("-", GLUE_19); 00234 define ("*", GLUE_20); 00235 define ("*", GLUE_21); 00236 define ("polynomial", GLUE_22); 00237 define ("polynomial", GLUE_23); 00238 define ("polynomial", GLUE_24); 00239 define ("polynomial", GLUE_25); 00240 define ("<<", GLUE_26); 00241 define ("<<", GLUE_27); 00242 define ("coefficients", GLUE_28); 00243 define ("coefficients", GLUE_29); 00244 define ("monomials", GLUE_30); 00245 define ("homogenize", GLUE_31); 00246 define ("homogenize", GLUE_32); 00247 define ("eval", GLUE_33); 00248 define (".[]", GLUE_34); 00249 define ("sturm_seq", GLUE_35); 00250 define ("resultant", GLUE_36); 00251 } 00252 }