algebramix_doc 0.3
|
00001 00002 #include <basix/vector.hpp> 00003 #include <algebramix/polynomial.hpp> 00004 #include <algebramix/polynomial_polynomial.hpp> 00005 #include <algebramix/polynomial_schonhage.hpp> 00006 #include <numerix/integer.hpp> 00007 #include <numerix/rational.hpp> 00008 #include <algebramix/series.hpp> 00009 #include <algebramix/series_elementary.hpp> 00010 #include <algebramix/series_integer.hpp> 00011 #include <algebramix/series_rational.hpp> 00012 #include <algebramix/series_sugar.hpp> 00013 #include <basix/tuple.hpp> 00014 #include <basix/routine.hpp> 00015 #include <basix/glue.hpp> 00016 00017 namespace mmx { 00018 template<typename C> polynomial<C> 00019 polynomial_reverse (const vector<C>& v) { 00020 return polynomial<C> (reverse (v)); } 00021 00022 template<typename C> polynomial<modular<modulus<C>, modular_local> > 00023 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) { 00024 modular<modulus<C>, modular_local>::set_modulus (p); 00025 return as<polynomial<modular<modulus<C>, modular_local> > > (f); } 00026 00027 template<typename C> vector<generic> 00028 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) { 00029 return as<vector<generic> > (subresultants (f, g)); } 00030 00031 } 00032 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE } 00033 #define series_shift_default(s,sh) shift (s, sh, mmx_bit_precision) 00034 00035 namespace mmx { 00036 static generic 00037 GLUE_1 (const int &arg_1) { 00038 return integer_construct (arg_1); 00039 } 00040 00041 static void 00042 GLUE_2 (const series<generic> &arg_1, const generic &arg_2) { 00043 set_variable_name (arg_1, arg_2); 00044 } 00045 00046 static void 00047 GLUE_3 (const series<generic> &arg_1, const int &arg_2) { 00048 set_output_order (arg_1, arg_2); 00049 } 00050 00051 static void 00052 GLUE_4 (const series<generic> &arg_1, const int &arg_2) { 00053 set_cancel_order (arg_1, arg_2); 00054 } 00055 00056 static void 00057 GLUE_5 (const series<generic> &arg_1, const bool &arg_2) { 00058 set_formula_output (arg_1, arg_2); 00059 } 00060 00061 static series<generic> 00062 GLUE_6 (const tuple<generic> &arg_1) { 00063 return series<generic > (as_vector (arg_1)); 00064 } 00065 00066 static series<generic> 00067 GLUE_7 (const polynomial<generic> &arg_1) { 00068 return series<generic > (arg_1); 00069 } 00070 00071 static iterator<generic> 00072 GLUE_8 (const series<generic> &arg_1) { 00073 return iterate (arg_1); 00074 } 00075 00076 static generic 00077 GLUE_9 (const series<generic> &arg_1, const int &arg_2) { 00078 return arg_1[arg_2]; 00079 } 00080 00081 static polynomial<generic> 00082 GLUE_10 (const series<generic> &arg_1, const int &arg_2, const int &arg_3) { 00083 return range (arg_1, arg_2, arg_3); 00084 } 00085 00086 static series<generic> 00087 GLUE_11 (const series<generic> &arg_1) { 00088 return -arg_1; 00089 } 00090 00091 static series<generic> 00092 GLUE_12 (const series<generic> &arg_1) { 00093 return square (arg_1); 00094 } 00095 00096 static series<generic> 00097 GLUE_13 (const series<generic> &arg_1, const series<generic> &arg_2) { 00098 return arg_1 + arg_2; 00099 } 00100 00101 static series<generic> 00102 GLUE_14 (const series<generic> &arg_1, const series<generic> &arg_2) { 00103 return arg_1 - arg_2; 00104 } 00105 00106 static series<generic> 00107 GLUE_15 (const series<generic> &arg_1, const series<generic> &arg_2) { 00108 return arg_1 * arg_2; 00109 } 00110 00111 static series<generic> 00112 GLUE_16 (const series<generic> &arg_1, const int &arg_2) { 00113 return binpow (arg_1, arg_2); 00114 } 00115 00116 static series<generic> 00117 GLUE_17 (const series<generic> &arg_1) { 00118 return derive (arg_1); 00119 } 00120 00121 static series<generic> 00122 GLUE_18 (const series<generic> &arg_1) { 00123 return xderive (arg_1); 00124 } 00125 00126 static series<generic> 00127 GLUE_19 (const series<generic> &arg_1, const int &arg_2) { 00128 return dilate (arg_1, arg_2); 00129 } 00130 00131 static series<generic> 00132 GLUE_20 (const series<generic> &arg_1, const int &arg_2) { 00133 return lshiftz (arg_1, arg_2); 00134 } 00135 00136 static series<generic> 00137 GLUE_21 (const series<generic> &arg_1, const int &arg_2) { 00138 return rshiftz (arg_1, arg_2); 00139 } 00140 00141 static series<generic> 00142 GLUE_22 (const series<generic> &arg_1, const series<generic> &arg_2) { 00143 return arg_1 / arg_2; 00144 } 00145 00146 static series<generic> 00147 GLUE_23 (const series<generic> &arg_1, const series<generic> &arg_2) { 00148 return arg_1 / arg_2; 00149 } 00150 00151 static bool 00152 GLUE_24 (const series<generic> &arg_1, const series<generic> &arg_2) { 00153 return divides (arg_1, arg_2); 00154 } 00155 00156 static series<generic> 00157 GLUE_25 (const series<generic> &arg_1, const series<generic> &arg_2) { 00158 return gcd (arg_1, arg_2); 00159 } 00160 00161 static series<generic> 00162 GLUE_26 (const series<generic> &arg_1, const series<generic> &arg_2) { 00163 return lcm (arg_1, arg_2); 00164 } 00165 00166 static series<generic> 00167 GLUE_27 (const series<generic> &arg_1) { 00168 return integrate (arg_1); 00169 } 00170 00171 static series<generic> 00172 GLUE_28 (const series<generic> &arg_1, const series<generic> &arg_2) { 00173 return compose (arg_1, arg_2); 00174 } 00175 00176 static series<generic> 00177 GLUE_29 (const series<generic> &arg_1) { 00178 return reverse (arg_1); 00179 } 00180 00181 static series<generic> 00182 GLUE_30 (const series<generic> &arg_1, const generic &arg_2) { 00183 return q_difference (arg_1, arg_2); 00184 } 00185 00186 static series<generic> 00187 GLUE_31 (const series<generic> &arg_1, const generic &arg_2) { 00188 return series_shift_default (arg_1, arg_2); 00189 } 00190 00191 static series<generic> 00192 GLUE_32 (const series<generic> &arg_1, const generic &arg_2, const int &arg_3) { 00193 return shift (arg_1, arg_2, arg_3); 00194 } 00195 00196 static series<generic> 00197 GLUE_33 (const series<generic> &arg_1, const series<generic> &arg_2) { 00198 return pow (arg_1, arg_2); 00199 } 00200 00201 static series<generic> 00202 GLUE_34 (const series<generic> &arg_1) { 00203 return sqrt (arg_1); 00204 } 00205 00206 static series<generic> 00207 GLUE_35 (const series<generic> &arg_1) { 00208 return exp (arg_1); 00209 } 00210 00211 static series<generic> 00212 GLUE_36 (const series<generic> &arg_1) { 00213 return log (arg_1); 00214 } 00215 00216 static series<generic> 00217 GLUE_37 (const series<generic> &arg_1) { 00218 return cos (arg_1); 00219 } 00220 00221 static series<generic> 00222 GLUE_38 (const series<generic> &arg_1) { 00223 return sin (arg_1); 00224 } 00225 00226 static series<generic> 00227 GLUE_39 (const series<generic> &arg_1) { 00228 return tan (arg_1); 00229 } 00230 00231 static series<generic> 00232 GLUE_40 (const series<generic> &arg_1) { 00233 return acos (arg_1); 00234 } 00235 00236 static series<generic> 00237 GLUE_41 (const series<generic> &arg_1) { 00238 return asin (arg_1); 00239 } 00240 00241 static series<generic> 00242 GLUE_42 (const series<generic> &arg_1) { 00243 return atan (arg_1); 00244 } 00245 00246 static bool 00247 GLUE_43 (const series<generic> &arg_1, const series<generic> &arg_2) { 00248 return arg_1 <= arg_2; 00249 } 00250 00251 static bool 00252 GLUE_44 (const series<generic> &arg_1, const series<generic> &arg_2) { 00253 return arg_1 >= arg_2; 00254 } 00255 00256 static bool 00257 GLUE_45 (const series<generic> &arg_1, const series<generic> &arg_2) { 00258 return arg_1 < arg_2; 00259 } 00260 00261 static bool 00262 GLUE_46 (const series<generic> &arg_1, const series<generic> &arg_2) { 00263 return arg_1 > arg_2; 00264 } 00265 00266 static series<generic> 00267 GLUE_47 (const routine &arg_1, const generic &arg_2) { 00268 return fixed_point_series (arg_1, arg_2); 00269 } 00270 00271 static vector<generic> 00272 GLUE_48 (const routine &arg_1, const vector<generic> &arg_2) { 00273 return gen_fixed_point_vector_series (arg_1, arg_2); 00274 } 00275 00276 static series<generic> 00277 GLUE_49 (const routine &arg_1, const generic &arg_2) { 00278 return integrate_series (arg_1, arg_2); 00279 } 00280 00281 static vector<generic> 00282 GLUE_50 (const routine &arg_1, const vector<generic> &arg_2) { 00283 return gen_integrate_vector_series (arg_1, arg_2); 00284 } 00285 00286 static series<generic> 00287 GLUE_51 (const routine &arg_1, const generic &arg_2) { 00288 return implicit_series (arg_1, arg_2); 00289 } 00290 00291 static vector<generic> 00292 GLUE_52 (const routine &arg_1, const vector<generic> &arg_2) { 00293 return gen_implicit_vector_series (arg_1, arg_2); 00294 } 00295 00296 void 00297 glue_series_generic () { 00298 static bool done = false; 00299 if (done) return; 00300 done = true; 00301 call_glue (string ("glue_polynomial_generic")); 00302 define_constructor<int > (GLUE_1); 00303 define_type<series<generic> > (gen (lit ("Series"), lit ("Generic"))); 00304 define ("set_variable_name", GLUE_2); 00305 define ("set_output_order", GLUE_3); 00306 define ("set_cancel_order", GLUE_4); 00307 define ("set_formula_output", GLUE_5); 00308 define ("series", GLUE_6); 00309 define_converter ("upgrade", GLUE_7, PENALTY_PROMOTE_GENERIC); 00310 define_converter (":>", GLUE_8, PENALTY_PROMOTE_GENERIC); 00311 define (".[]", GLUE_9); 00312 define (".[]", GLUE_10); 00313 define ("-", GLUE_11); 00314 define ("square", GLUE_12); 00315 define ("+", GLUE_13); 00316 define ("-", GLUE_14); 00317 define ("*", GLUE_15); 00318 define ("^", GLUE_16); 00319 define ("derive", GLUE_17); 00320 define ("xderive", GLUE_18); 00321 define ("dilate", GLUE_19); 00322 define ("<<", GLUE_20); 00323 define (">>", GLUE_21); 00324 define ("/", GLUE_22); 00325 define ("div", GLUE_23); 00326 define ("divides?", GLUE_24); 00327 define ("gcd", GLUE_25); 00328 define ("lcm", GLUE_26); 00329 define ("integrate", GLUE_27); 00330 define ("@", GLUE_28); 00331 define ("reverse", GLUE_29); 00332 define ("q_difference", GLUE_30); 00333 define ("shift", GLUE_31); 00334 define ("shift", GLUE_32); 00335 define ("^", GLUE_33); 00336 define ("sqrt", GLUE_34); 00337 define ("exp", GLUE_35); 00338 define ("log", GLUE_36); 00339 define ("cos", GLUE_37); 00340 define ("sin", GLUE_38); 00341 define ("tan", GLUE_39); 00342 define ("arccos", GLUE_40); 00343 define ("arcsin", GLUE_41); 00344 define ("arctan", GLUE_42); 00345 define ("<=", GLUE_43); 00346 define (">=", GLUE_44); 00347 define ("<", GLUE_45); 00348 define (">", GLUE_46); 00349 define ("fixed_point_series", GLUE_47); 00350 define ("fixed_point_series", GLUE_48); 00351 define ("integrate_series", GLUE_49); 00352 define ("integrate_series", GLUE_50); 00353 define ("implicit_series", GLUE_51); 00354 define ("implicit_series", GLUE_52); 00355 } 00356 }