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_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 }