00001 00002 #include <basix/int.hpp> 00003 #include <basix/vector.hpp> 00004 #include <basix/port.hpp> 00005 #include <basix/literal.hpp> 00006 #include <numerix/integer.hpp> 00007 #include <numerix/modular.hpp> 00008 #include <numerix/modular_integer.hpp> 00009 #include <numerix/rational.hpp> 00010 #include <numerix/complex.hpp> 00011 #include <algebramix/vector_unrolled.hpp> 00012 #include <algebramix/vector_simd.hpp> 00013 #include <algebramix/vector_modular.hpp> 00014 #include <basix/compound.hpp> 00015 #include <basix/mmx_syntax.hpp> 00016 #include <basix/lisp_syntax.hpp> 00017 #include <basix/cpp_syntax.hpp> 00018 #include <basix/syntactic.hpp> 00019 #include <algebramix/polynomial.hpp> 00020 #include <algebramix/polynomial_polynomial.hpp> 00021 #include <algebramix/polynomial_integer.hpp> 00022 #include <algebramix/polynomial_rational.hpp> 00023 #include <algebramix/polynomial_modular.hpp> 00024 #include <algebramix/polynomial_modular_integer.hpp> 00025 #include <algebramix/polynomial_complex.hpp> 00026 #include <algebramix/polynomial_schonhage.hpp> 00027 #include <algebramix/series.hpp> 00028 #include <algebramix/series_elementary.hpp> 00029 #include <algebramix/series_integer.hpp> 00030 #include <algebramix/series_rational.hpp> 00031 #include <algebramix/series_modular_integer.hpp> 00032 #include <algebramix/series_complex.hpp> 00033 #include <algebramix/series_sugar.hpp> 00034 #include <basix/tuple.hpp> 00035 #include <basix/routine.hpp> 00036 #include <basix/glue.hpp> 00037 00038 #define int_literal(x) as_int (as_string (x)) 00039 #define is_generic_literal is<literal> 00040 #define gen_literal_apply(f,v) gen (as<generic> (f), v) 00041 #define gen_literal_access(f,v) access (as<generic> (f), v) 00042 #define is_generic_compound is<compound> 00043 #define compound_arguments(x) cdr (as_vector (x)) 00044 #define gen_compound_apply(f,v) gen (as<generic> (f), v) 00045 namespace mmx { 00046 template<typename C> polynomial<C> 00047 polynomial_reverse (const vector<C>& v) { 00048 return polynomial<C> (reverse (v)); } 00049 00050 template<typename C> polynomial<modular<modulus<C>, modular_local> > 00051 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) { 00052 modular<modulus<C>, modular_local>::set_modulus (p); 00053 return as<polynomial<modular<modulus<C>, modular_local> > > (f); } 00054 00055 template<typename C> vector<generic> 00056 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) { 00057 return as<vector<generic> > (subresultants (f, g)); } 00058 00059 } 00060 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE } 00061 00062 namespace mmx { 00063 static void 00064 GLUE_1 (const series<rational> &arg_1, const generic &arg_2) { 00065 set_variable_name (arg_1, arg_2); 00066 } 00067 00068 static void 00069 GLUE_2 (const series<rational> &arg_1, const int &arg_2) { 00070 set_output_order (arg_1, arg_2); 00071 } 00072 00073 static void 00074 GLUE_3 (const series<rational> &arg_1, const int &arg_2) { 00075 set_cancel_order (arg_1, arg_2); 00076 } 00077 00078 static void 00079 GLUE_4 (const series<rational> &arg_1, const bool &arg_2) { 00080 set_formula_output (arg_1, arg_2); 00081 } 00082 00083 static series<rational> 00084 GLUE_5 (const tuple<rational> &arg_1) { 00085 return series<rational > (as_vector (arg_1)); 00086 } 00087 00088 static series<rational> 00089 GLUE_6 (const rational &arg_1) { 00090 return series<rational > (arg_1); 00091 } 00092 00093 static series<rational> 00094 GLUE_7 (const polynomial<rational> &arg_1) { 00095 return series<rational > (arg_1); 00096 } 00097 00098 static iterator<generic> 00099 GLUE_8 (const series<rational> &arg_1) { 00100 return as<iterator<generic> > (iterate (arg_1)); 00101 } 00102 00103 static rational 00104 GLUE_9 (const series<rational> &arg_1, const int &arg_2) { 00105 return arg_1[arg_2]; 00106 } 00107 00108 static polynomial<rational> 00109 GLUE_10 (const series<rational> &arg_1, const int &arg_2, const int &arg_3) { 00110 return range (arg_1, arg_2, arg_3); 00111 } 00112 00113 static series<rational> 00114 GLUE_11 (const series<rational> &arg_1) { 00115 return -arg_1; 00116 } 00117 00118 static series<rational> 00119 GLUE_12 (const series<rational> &arg_1) { 00120 return square (arg_1); 00121 } 00122 00123 static series<rational> 00124 GLUE_13 (const series<rational> &arg_1, const series<rational> &arg_2) { 00125 return arg_1 + arg_2; 00126 } 00127 00128 static series<rational> 00129 GLUE_14 (const series<rational> &arg_1, const series<rational> &arg_2) { 00130 return arg_1 - arg_2; 00131 } 00132 00133 static series<rational> 00134 GLUE_15 (const series<rational> &arg_1, const series<rational> &arg_2) { 00135 return arg_1 * arg_2; 00136 } 00137 00138 static series<rational> 00139 GLUE_16 (const rational &arg_1, const series<rational> &arg_2) { 00140 return arg_1 + arg_2; 00141 } 00142 00143 static series<rational> 00144 GLUE_17 (const series<rational> &arg_1, const rational &arg_2) { 00145 return arg_1 + arg_2; 00146 } 00147 00148 static series<rational> 00149 GLUE_18 (const rational &arg_1, const series<rational> &arg_2) { 00150 return arg_1 - arg_2; 00151 } 00152 00153 static series<rational> 00154 GLUE_19 (const series<rational> &arg_1, const rational &arg_2) { 00155 return arg_1 - arg_2; 00156 } 00157 00158 static series<rational> 00159 GLUE_20 (const rational &arg_1, const series<rational> &arg_2) { 00160 return arg_1 * arg_2; 00161 } 00162 00163 static series<rational> 00164 GLUE_21 (const series<rational> &arg_1, const rational &arg_2) { 00165 return arg_1 * arg_2; 00166 } 00167 00168 static series<rational> 00169 GLUE_22 (const series<rational> &arg_1, const int &arg_2) { 00170 return binpow (arg_1, arg_2); 00171 } 00172 00173 static series<rational> 00174 GLUE_23 (const series<rational> &arg_1, const integer &arg_2) { 00175 return binpow (arg_1, arg_2); 00176 } 00177 00178 static bool 00179 GLUE_24 (const series<rational> &arg_1, const series<rational> &arg_2) { 00180 return arg_1 == arg_2; 00181 } 00182 00183 static bool 00184 GLUE_25 (const series<rational> &arg_1, const series<rational> &arg_2) { 00185 return arg_1 != arg_2; 00186 } 00187 00188 static bool 00189 GLUE_26 (const series<rational> &arg_1, const rational &arg_2) { 00190 return arg_1 == arg_2; 00191 } 00192 00193 static bool 00194 GLUE_27 (const series<rational> &arg_1, const rational &arg_2) { 00195 return arg_1 != arg_2; 00196 } 00197 00198 static bool 00199 GLUE_28 (const rational &arg_1, const series<rational> &arg_2) { 00200 return arg_1 == arg_2; 00201 } 00202 00203 static bool 00204 GLUE_29 (const rational &arg_1, const series<rational> &arg_2) { 00205 return arg_1 != arg_2; 00206 } 00207 00208 static series<rational> 00209 GLUE_30 (const series<rational> &arg_1) { 00210 return derive (arg_1); 00211 } 00212 00213 static series<rational> 00214 GLUE_31 (const series<rational> &arg_1) { 00215 return xderive (arg_1); 00216 } 00217 00218 static series<rational> 00219 GLUE_32 (const series<rational> &arg_1, const int &arg_2) { 00220 return dilate (arg_1, arg_2); 00221 } 00222 00223 static series<rational> 00224 GLUE_33 (const series<rational> &arg_1, const int &arg_2) { 00225 return lshiftz (arg_1, arg_2); 00226 } 00227 00228 static series<rational> 00229 GLUE_34 (const series<rational> &arg_1, const int &arg_2) { 00230 return rshiftz (arg_1, arg_2); 00231 } 00232 00233 static series<rational> 00234 GLUE_35 (const series<rational> &arg_1) { 00235 return invert (arg_1); 00236 } 00237 00238 static series<rational> 00239 GLUE_36 (const series<rational> &arg_1, const series<rational> &arg_2) { 00240 return arg_1 / arg_2; 00241 } 00242 00243 static series<rational> 00244 GLUE_37 (const rational &arg_1, const series<rational> &arg_2) { 00245 return arg_1 / arg_2; 00246 } 00247 00248 static series<rational> 00249 GLUE_38 (const series<rational> &arg_1, const rational &arg_2) { 00250 return arg_1 / arg_2; 00251 } 00252 00253 static series<rational> 00254 GLUE_39 (const series<rational> &arg_1, const series<rational> &arg_2) { 00255 return arg_1 / arg_2; 00256 } 00257 00258 static bool 00259 GLUE_40 (const series<rational> &arg_1, const series<rational> &arg_2) { 00260 return divides (arg_1, arg_2); 00261 } 00262 00263 static series<rational> 00264 GLUE_41 (const series<rational> &arg_1, const series<rational> &arg_2) { 00265 return gcd (arg_1, arg_2); 00266 } 00267 00268 static series<rational> 00269 GLUE_42 (const series<rational> &arg_1, const series<rational> &arg_2) { 00270 return lcm (arg_1, arg_2); 00271 } 00272 00273 static series<rational> 00274 GLUE_43 (const series<rational> &arg_1) { 00275 return integrate (arg_1); 00276 } 00277 00278 static series<rational> 00279 GLUE_44 (const series<rational> &arg_1, const series<rational> &arg_2) { 00280 return compose (arg_1, arg_2); 00281 } 00282 00283 static series<rational> 00284 GLUE_45 (const series<rational> &arg_1) { 00285 return reverse (arg_1); 00286 } 00287 00288 static series<rational> 00289 GLUE_46 (const series<rational> &arg_1, const rational &arg_2) { 00290 return q_difference (arg_1, arg_2); 00291 } 00292 00293 static series<rational> 00294 GLUE_47 (const series<rational> &arg_1, const rational &arg_2) { 00295 return series_shift_default (arg_1, arg_2); 00296 } 00297 00298 static series<rational> 00299 GLUE_48 (const series<rational> &arg_1, const rational &arg_2, const int &arg_3) { 00300 return shift (arg_1, arg_2, arg_3); 00301 } 00302 00303 static bool 00304 GLUE_49 (const series<rational> &arg_1, const series<rational> &arg_2) { 00305 return arg_1 < arg_2; 00306 } 00307 00308 static bool 00309 GLUE_50 (const series<rational> &arg_1, const series<rational> &arg_2) { 00310 return arg_1 > arg_2; 00311 } 00312 00313 static bool 00314 GLUE_51 (const series<rational> &arg_1, const series<rational> &arg_2) { 00315 return arg_1 <= arg_2; 00316 } 00317 00318 static bool 00319 GLUE_52 (const series<rational> &arg_1, const series<rational> &arg_2) { 00320 return arg_1 >= arg_2; 00321 } 00322 00323 static bool 00324 GLUE_53 (const series<rational> &arg_1, const rational &arg_2) { 00325 return arg_1 < arg_2; 00326 } 00327 00328 static bool 00329 GLUE_54 (const series<rational> &arg_1, const rational &arg_2) { 00330 return arg_1 > arg_2; 00331 } 00332 00333 static bool 00334 GLUE_55 (const series<rational> &arg_1, const rational &arg_2) { 00335 return arg_1 <= arg_2; 00336 } 00337 00338 static bool 00339 GLUE_56 (const series<rational> &arg_1, const rational &arg_2) { 00340 return arg_1 >= arg_2; 00341 } 00342 00343 static bool 00344 GLUE_57 (const rational &arg_1, const series<rational> &arg_2) { 00345 return arg_1 < arg_2; 00346 } 00347 00348 static bool 00349 GLUE_58 (const rational &arg_1, const series<rational> &arg_2) { 00350 return arg_1 > arg_2; 00351 } 00352 00353 static bool 00354 GLUE_59 (const rational &arg_1, const series<rational> &arg_2) { 00355 return arg_1 <= arg_2; 00356 } 00357 00358 static bool 00359 GLUE_60 (const rational &arg_1, const series<rational> &arg_2) { 00360 return arg_1 >= arg_2; 00361 } 00362 00363 static series<rational> 00364 GLUE_61 (const series<integer> &arg_1) { 00365 return as<series<rational> > (arg_1); 00366 } 00367 00368 static series<generic> 00369 GLUE_62 (const series<rational> &arg_1) { 00370 return as<series<generic> > (arg_1); 00371 } 00372 00373 static series<rational> 00374 GLUE_63 (const series<rational> &arg_1, const series<rational> &arg_2) { 00375 return pow (arg_1, arg_2); 00376 } 00377 00378 static series<rational> 00379 GLUE_64 (const series<rational> &arg_1) { 00380 return sqrt (arg_1); 00381 } 00382 00383 static series<rational> 00384 GLUE_65 (const series<rational> &arg_1) { 00385 return exp (arg_1); 00386 } 00387 00388 static series<rational> 00389 GLUE_66 (const series<rational> &arg_1) { 00390 return log (arg_1); 00391 } 00392 00393 static series<rational> 00394 GLUE_67 (const series<rational> &arg_1) { 00395 return cos (arg_1); 00396 } 00397 00398 static series<rational> 00399 GLUE_68 (const series<rational> &arg_1) { 00400 return sin (arg_1); 00401 } 00402 00403 static series<rational> 00404 GLUE_69 (const series<rational> &arg_1) { 00405 return tan (arg_1); 00406 } 00407 00408 static series<rational> 00409 GLUE_70 (const series<rational> &arg_1) { 00410 return acos (arg_1); 00411 } 00412 00413 static series<rational> 00414 GLUE_71 (const series<rational> &arg_1) { 00415 return asin (arg_1); 00416 } 00417 00418 static series<rational> 00419 GLUE_72 (const series<rational> &arg_1) { 00420 return atan (arg_1); 00421 } 00422 00423 static unknown<rational> 00424 GLUE_73 (const rational &arg_1) { 00425 return unknown<rational > (arg_1); 00426 } 00427 00428 static unknown<rational> 00429 GLUE_74 (const unknown<rational> &arg_1) { 00430 return -arg_1; 00431 } 00432 00433 static unknown<rational> 00434 GLUE_75 (const unknown<rational> &arg_1) { 00435 return square (arg_1); 00436 } 00437 00438 static unknown<rational> 00439 GLUE_76 (const unknown<rational> &arg_1, const unknown<rational> &arg_2) { 00440 return arg_1 + arg_2; 00441 } 00442 00443 static unknown<rational> 00444 GLUE_77 (const unknown<rational> &arg_1, const unknown<rational> &arg_2) { 00445 return arg_1 - arg_2; 00446 } 00447 00448 static unknown<rational> 00449 GLUE_78 (const rational &arg_1, const unknown<rational> &arg_2) { 00450 return arg_1 * arg_2; 00451 } 00452 00453 static unknown<rational> 00454 GLUE_79 (const unknown<rational> &arg_1, const rational &arg_2) { 00455 return arg_1 * arg_2; 00456 } 00457 00458 static unknown<rational> 00459 GLUE_80 (const unknown<rational> &arg_1, const unknown<rational> &arg_2) { 00460 return arg_1 * arg_2; 00461 } 00462 00463 static series<rational> 00464 GLUE_81 (const routine &arg_1, const rational &arg_2) { 00465 return fixed_point_series (arg_1, arg_2); 00466 } 00467 00468 static series<rational> 00469 GLUE_82 (const routine &arg_1, const rational &arg_2) { 00470 return integrate_series (arg_1, arg_2); 00471 } 00472 00473 static series<rational> 00474 GLUE_83 (const routine &arg_1, const rational &arg_2) { 00475 return implicit_series (arg_1, arg_2); 00476 } 00477 00478 static void 00479 GLUE_84 (const series<complex<rational> > &arg_1, const generic &arg_2) { 00480 set_variable_name (arg_1, arg_2); 00481 } 00482 00483 static void 00484 GLUE_85 (const series<complex<rational> > &arg_1, const int &arg_2) { 00485 set_output_order (arg_1, arg_2); 00486 } 00487 00488 static void 00489 GLUE_86 (const series<complex<rational> > &arg_1, const int &arg_2) { 00490 set_cancel_order (arg_1, arg_2); 00491 } 00492 00493 static void 00494 GLUE_87 (const series<complex<rational> > &arg_1, const bool &arg_2) { 00495 set_formula_output (arg_1, arg_2); 00496 } 00497 00498 static series<complex<rational> > 00499 GLUE_88 (const tuple<complex<rational> > &arg_1) { 00500 return series<complex<rational> > (as_vector (arg_1)); 00501 } 00502 00503 static series<complex<rational> > 00504 GLUE_89 (const complex<rational> &arg_1) { 00505 return series<complex<rational> > (arg_1); 00506 } 00507 00508 static series<complex<rational> > 00509 GLUE_90 (const polynomial<complex<rational> > &arg_1) { 00510 return series<complex<rational> > (arg_1); 00511 } 00512 00513 static iterator<generic> 00514 GLUE_91 (const series<complex<rational> > &arg_1) { 00515 return as<iterator<generic> > (iterate (arg_1)); 00516 } 00517 00518 static complex<rational> 00519 GLUE_92 (const series<complex<rational> > &arg_1, const int &arg_2) { 00520 return arg_1[arg_2]; 00521 } 00522 00523 static polynomial<complex<rational> > 00524 GLUE_93 (const series<complex<rational> > &arg_1, const int &arg_2, const int &arg_3) { 00525 return range (arg_1, arg_2, arg_3); 00526 } 00527 00528 static series<complex<rational> > 00529 GLUE_94 (const series<complex<rational> > &arg_1) { 00530 return -arg_1; 00531 } 00532 00533 static series<complex<rational> > 00534 GLUE_95 (const series<complex<rational> > &arg_1) { 00535 return square (arg_1); 00536 } 00537 00538 static series<complex<rational> > 00539 GLUE_96 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00540 return arg_1 + arg_2; 00541 } 00542 00543 static series<complex<rational> > 00544 GLUE_97 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00545 return arg_1 - arg_2; 00546 } 00547 00548 static series<complex<rational> > 00549 GLUE_98 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00550 return arg_1 * arg_2; 00551 } 00552 00553 static series<complex<rational> > 00554 GLUE_99 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00555 return arg_1 + arg_2; 00556 } 00557 00558 static series<complex<rational> > 00559 GLUE_100 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00560 return arg_1 + arg_2; 00561 } 00562 00563 static series<complex<rational> > 00564 GLUE_101 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00565 return arg_1 - arg_2; 00566 } 00567 00568 static series<complex<rational> > 00569 GLUE_102 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00570 return arg_1 - arg_2; 00571 } 00572 00573 static series<complex<rational> > 00574 GLUE_103 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00575 return arg_1 * arg_2; 00576 } 00577 00578 static series<complex<rational> > 00579 GLUE_104 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00580 return arg_1 * arg_2; 00581 } 00582 00583 static series<complex<rational> > 00584 GLUE_105 (const series<complex<rational> > &arg_1, const int &arg_2) { 00585 return binpow (arg_1, arg_2); 00586 } 00587 00588 static series<complex<rational> > 00589 GLUE_106 (const series<complex<rational> > &arg_1, const integer &arg_2) { 00590 return binpow (arg_1, arg_2); 00591 } 00592 00593 static bool 00594 GLUE_107 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00595 return arg_1 == arg_2; 00596 } 00597 00598 static bool 00599 GLUE_108 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00600 return arg_1 != arg_2; 00601 } 00602 00603 static bool 00604 GLUE_109 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00605 return arg_1 == arg_2; 00606 } 00607 00608 static bool 00609 GLUE_110 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00610 return arg_1 != arg_2; 00611 } 00612 00613 static bool 00614 GLUE_111 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00615 return arg_1 == arg_2; 00616 } 00617 00618 static bool 00619 GLUE_112 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00620 return arg_1 != arg_2; 00621 } 00622 00623 static series<complex<rational> > 00624 GLUE_113 (const series<complex<rational> > &arg_1) { 00625 return derive (arg_1); 00626 } 00627 00628 static series<complex<rational> > 00629 GLUE_114 (const series<complex<rational> > &arg_1) { 00630 return xderive (arg_1); 00631 } 00632 00633 static series<complex<rational> > 00634 GLUE_115 (const series<complex<rational> > &arg_1, const int &arg_2) { 00635 return dilate (arg_1, arg_2); 00636 } 00637 00638 static series<complex<rational> > 00639 GLUE_116 (const series<complex<rational> > &arg_1, const int &arg_2) { 00640 return lshiftz (arg_1, arg_2); 00641 } 00642 00643 static series<complex<rational> > 00644 GLUE_117 (const series<complex<rational> > &arg_1, const int &arg_2) { 00645 return rshiftz (arg_1, arg_2); 00646 } 00647 00648 static void 00649 GLUE_118 (const series<unknown<rational> > &arg_1, const generic &arg_2) { 00650 set_variable_name (arg_1, arg_2); 00651 } 00652 00653 static void 00654 GLUE_119 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00655 set_output_order (arg_1, arg_2); 00656 } 00657 00658 static void 00659 GLUE_120 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00660 set_cancel_order (arg_1, arg_2); 00661 } 00662 00663 static void 00664 GLUE_121 (const series<unknown<rational> > &arg_1, const bool &arg_2) { 00665 set_formula_output (arg_1, arg_2); 00666 } 00667 00668 static series<unknown<rational> > 00669 GLUE_122 (const tuple<unknown<rational> > &arg_1) { 00670 return series<unknown<rational> > (as_vector (arg_1)); 00671 } 00672 00673 static series<unknown<rational> > 00674 GLUE_123 (const unknown<rational> &arg_1) { 00675 return series<unknown<rational> > (arg_1); 00676 } 00677 00678 static iterator<generic> 00679 GLUE_124 (const series<unknown<rational> > &arg_1) { 00680 return as<iterator<generic> > (iterate (arg_1)); 00681 } 00682 00683 static unknown<rational> 00684 GLUE_125 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00685 return arg_1[arg_2]; 00686 } 00687 00688 static series<unknown<rational> > 00689 GLUE_126 (const series<unknown<rational> > &arg_1) { 00690 return -arg_1; 00691 } 00692 00693 static series<unknown<rational> > 00694 GLUE_127 (const series<unknown<rational> > &arg_1) { 00695 return square (arg_1); 00696 } 00697 00698 static series<unknown<rational> > 00699 GLUE_128 (const series<unknown<rational> > &arg_1, const series<unknown<rational> > &arg_2) { 00700 return arg_1 + arg_2; 00701 } 00702 00703 static series<unknown<rational> > 00704 GLUE_129 (const series<unknown<rational> > &arg_1, const series<unknown<rational> > &arg_2) { 00705 return arg_1 - arg_2; 00706 } 00707 00708 static series<unknown<rational> > 00709 GLUE_130 (const series<unknown<rational> > &arg_1, const series<unknown<rational> > &arg_2) { 00710 return arg_1 * arg_2; 00711 } 00712 00713 static series<unknown<rational> > 00714 GLUE_131 (const unknown<rational> &arg_1, const series<unknown<rational> > &arg_2) { 00715 return arg_1 + arg_2; 00716 } 00717 00718 static series<unknown<rational> > 00719 GLUE_132 (const series<unknown<rational> > &arg_1, const unknown<rational> &arg_2) { 00720 return arg_1 + arg_2; 00721 } 00722 00723 static series<unknown<rational> > 00724 GLUE_133 (const unknown<rational> &arg_1, const series<unknown<rational> > &arg_2) { 00725 return arg_1 - arg_2; 00726 } 00727 00728 static series<unknown<rational> > 00729 GLUE_134 (const series<unknown<rational> > &arg_1, const unknown<rational> &arg_2) { 00730 return arg_1 - arg_2; 00731 } 00732 00733 static series<unknown<rational> > 00734 GLUE_135 (const unknown<rational> &arg_1, const series<unknown<rational> > &arg_2) { 00735 return arg_1 * arg_2; 00736 } 00737 00738 static series<unknown<rational> > 00739 GLUE_136 (const series<unknown<rational> > &arg_1, const unknown<rational> &arg_2) { 00740 return arg_1 * arg_2; 00741 } 00742 00743 static series<unknown<rational> > 00744 GLUE_137 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00745 return binpow (arg_1, arg_2); 00746 } 00747 00748 static series<unknown<rational> > 00749 GLUE_138 (const series<unknown<rational> > &arg_1, const integer &arg_2) { 00750 return binpow (arg_1, arg_2); 00751 } 00752 00753 static bool 00754 GLUE_139 (const series<unknown<rational> > &arg_1, const series<unknown<rational> > &arg_2) { 00755 return arg_1 == arg_2; 00756 } 00757 00758 static bool 00759 GLUE_140 (const series<unknown<rational> > &arg_1, const series<unknown<rational> > &arg_2) { 00760 return arg_1 != arg_2; 00761 } 00762 00763 static bool 00764 GLUE_141 (const series<unknown<rational> > &arg_1, const unknown<rational> &arg_2) { 00765 return arg_1 == arg_2; 00766 } 00767 00768 static bool 00769 GLUE_142 (const series<unknown<rational> > &arg_1, const unknown<rational> &arg_2) { 00770 return arg_1 != arg_2; 00771 } 00772 00773 static bool 00774 GLUE_143 (const unknown<rational> &arg_1, const series<unknown<rational> > &arg_2) { 00775 return arg_1 == arg_2; 00776 } 00777 00778 static bool 00779 GLUE_144 (const unknown<rational> &arg_1, const series<unknown<rational> > &arg_2) { 00780 return arg_1 != arg_2; 00781 } 00782 00783 static series<unknown<rational> > 00784 GLUE_145 (const series<unknown<rational> > &arg_1) { 00785 return derive (arg_1); 00786 } 00787 00788 static series<unknown<rational> > 00789 GLUE_146 (const series<unknown<rational> > &arg_1) { 00790 return xderive (arg_1); 00791 } 00792 00793 static series<unknown<rational> > 00794 GLUE_147 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00795 return dilate (arg_1, arg_2); 00796 } 00797 00798 static series<unknown<rational> > 00799 GLUE_148 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00800 return lshiftz (arg_1, arg_2); 00801 } 00802 00803 static series<unknown<rational> > 00804 GLUE_149 (const series<unknown<rational> > &arg_1, const int &arg_2) { 00805 return rshiftz (arg_1, arg_2); 00806 } 00807 00808 static series<complex<rational> > 00809 GLUE_150 (const series<complex<rational> > &arg_1) { 00810 return invert (arg_1); 00811 } 00812 00813 static series<complex<rational> > 00814 GLUE_151 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00815 return arg_1 / arg_2; 00816 } 00817 00818 static series<complex<rational> > 00819 GLUE_152 (const complex<rational> &arg_1, const series<complex<rational> > &arg_2) { 00820 return arg_1 / arg_2; 00821 } 00822 00823 static series<complex<rational> > 00824 GLUE_153 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00825 return arg_1 / arg_2; 00826 } 00827 00828 static series<complex<rational> > 00829 GLUE_154 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00830 return arg_1 / arg_2; 00831 } 00832 00833 static bool 00834 GLUE_155 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00835 return divides (arg_1, arg_2); 00836 } 00837 00838 static series<complex<rational> > 00839 GLUE_156 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00840 return gcd (arg_1, arg_2); 00841 } 00842 00843 static series<complex<rational> > 00844 GLUE_157 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00845 return lcm (arg_1, arg_2); 00846 } 00847 00848 static series<complex<rational> > 00849 GLUE_158 (const series<complex<rational> > &arg_1) { 00850 return integrate (arg_1); 00851 } 00852 00853 static series<complex<rational> > 00854 GLUE_159 (const series<complex<rational> > &arg_1, const series<complex<rational> > &arg_2) { 00855 return compose (arg_1, arg_2); 00856 } 00857 00858 static series<complex<rational> > 00859 GLUE_160 (const series<complex<rational> > &arg_1) { 00860 return reverse (arg_1); 00861 } 00862 00863 static series<complex<rational> > 00864 GLUE_161 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00865 return q_difference (arg_1, arg_2); 00866 } 00867 00868 static series<complex<rational> > 00869 GLUE_162 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2) { 00870 return series_shift_default (arg_1, arg_2); 00871 } 00872 00873 static series<complex<rational> > 00874 GLUE_163 (const series<complex<rational> > &arg_1, const complex<rational> &arg_2, const int &arg_3) { 00875 return shift (arg_1, arg_2, arg_3); 00876 } 00877 00878 static series<complex<rational> > 00879 GLUE_164 (const series<integer> &arg_1) { 00880 return as<series<complex<rational> > > (arg_1); 00881 } 00882 00883 static series<unknown<rational> > 00884 GLUE_165 (const series<integer> &arg_1) { 00885 return as<series<unknown<rational> > > (arg_1); 00886 } 00887 00888 static series<complex<rational> > 00889 GLUE_166 (const series<rational> &arg_1) { 00890 return as<series<complex<rational> > > (arg_1); 00891 } 00892 00893 static series<unknown<rational> > 00894 GLUE_167 (const series<rational> &arg_1) { 00895 return as<series<unknown<rational> > > (arg_1); 00896 } 00897 00898 static series<generic> 00899 GLUE_168 (const series<complex<rational> > &arg_1) { 00900 return as<series<generic> > (arg_1); 00901 } 00902 00903 static series<generic> 00904 GLUE_169 (const series<unknown<rational> > &arg_1) { 00905 return as<series<generic> > (arg_1); 00906 } 00907 00908 static vector<generic> 00909 GLUE_170 (const routine &arg_1, const vector<rational> &arg_2) { 00910 return gen_fixed_point_vector_series (arg_1, arg_2); 00911 } 00912 00913 static vector<generic> 00914 GLUE_171 (const routine &arg_1, const vector<rational> &arg_2) { 00915 return gen_integrate_vector_series (arg_1, arg_2); 00916 } 00917 00918 static vector<generic> 00919 GLUE_172 (const routine &arg_1, const vector<rational> &arg_2) { 00920 return gen_implicit_vector_series (arg_1, arg_2); 00921 } 00922 00923 static series<complex<rational> > 00924 GLUE_173 (const routine &arg_1, const complex<rational> &arg_2) { 00925 return fixed_point_series (arg_1, arg_2); 00926 } 00927 00928 static vector<generic> 00929 GLUE_174 (const routine &arg_1, const vector<complex<rational> > &arg_2) { 00930 return gen_fixed_point_vector_series (arg_1, arg_2); 00931 } 00932 00933 static series<complex<rational> > 00934 GLUE_175 (const routine &arg_1, const complex<rational> &arg_2) { 00935 return integrate_series (arg_1, arg_2); 00936 } 00937 00938 static vector<generic> 00939 GLUE_176 (const routine &arg_1, const vector<complex<rational> > &arg_2) { 00940 return gen_integrate_vector_series (arg_1, arg_2); 00941 } 00942 00943 static series<complex<rational> > 00944 GLUE_177 (const routine &arg_1, const complex<rational> &arg_2) { 00945 return implicit_series (arg_1, arg_2); 00946 } 00947 00948 static vector<generic> 00949 GLUE_178 (const routine &arg_1, const vector<complex<rational> > &arg_2) { 00950 return gen_implicit_vector_series (arg_1, arg_2); 00951 } 00952 00953 void 00954 glue_series_rational () { 00955 static bool done = false; 00956 if (done) return; 00957 done = true; 00958 call_glue (string ("glue_polynomial_rational")); 00959 call_glue (string ("glue_series_integer")); 00960 define_type<series<rational> > (gen (lit ("Series"), lit ("Rational"))); 00961 define ("set_variable_name", GLUE_1); 00962 define ("set_output_order", GLUE_2); 00963 define ("set_cancel_order", GLUE_3); 00964 define ("set_formula_output", GLUE_4); 00965 define ("series", GLUE_5); 00966 define_converter ("upgrade", GLUE_6, PENALTY_INCLUSION); 00967 define_converter ("upgrade", GLUE_7, PENALTY_INCLUSION); 00968 define_converter (":>", GLUE_8, PENALTY_CAST); 00969 define (".[]", GLUE_9); 00970 define (".[]", GLUE_10); 00971 define ("-", GLUE_11); 00972 define ("square", GLUE_12); 00973 define ("+", GLUE_13); 00974 define ("-", GLUE_14); 00975 define ("*", GLUE_15); 00976 define ("+", GLUE_16); 00977 define ("+", GLUE_17); 00978 define ("-", GLUE_18); 00979 define ("-", GLUE_19); 00980 define ("*", GLUE_20); 00981 define ("*", GLUE_21); 00982 define ("^", GLUE_22); 00983 define ("^", GLUE_23); 00984 define ("=", GLUE_24); 00985 define ("!=", GLUE_25); 00986 define ("=", GLUE_26); 00987 define ("!=", GLUE_27); 00988 define ("=", GLUE_28); 00989 define ("!=", GLUE_29); 00990 define ("derive", GLUE_30); 00991 define ("xderive", GLUE_31); 00992 define ("dilate", GLUE_32); 00993 define ("<<", GLUE_33); 00994 define (">>", GLUE_34); 00995 define ("invert", GLUE_35); 00996 define ("/", GLUE_36); 00997 define ("/", GLUE_37); 00998 define ("/", GLUE_38); 00999 define ("div", GLUE_39); 01000 define ("divides?", GLUE_40); 01001 define ("gcd", GLUE_41); 01002 define ("lcm", GLUE_42); 01003 define ("integrate", GLUE_43); 01004 define ("@", GLUE_44); 01005 define ("reverse", GLUE_45); 01006 define ("q_difference", GLUE_46); 01007 define ("shift", GLUE_47); 01008 define ("shift", GLUE_48); 01009 define ("<", GLUE_49); 01010 define (">", GLUE_50); 01011 define ("<=", GLUE_51); 01012 define (">=", GLUE_52); 01013 define ("<", GLUE_53); 01014 define (">", GLUE_54); 01015 define ("<=", GLUE_55); 01016 define (">=", GLUE_56); 01017 define ("<", GLUE_57); 01018 define (">", GLUE_58); 01019 define ("<=", GLUE_59); 01020 define (">=", GLUE_60); 01021 define_converter (":>", GLUE_61, PENALTY_INCLUSION); 01022 define_converter (":>", GLUE_62, PENALTY_PROMOTE_GENERIC); 01023 define ("^", GLUE_63); 01024 define ("sqrt", GLUE_64); 01025 define ("exp", GLUE_65); 01026 define ("log", GLUE_66); 01027 define ("cos", GLUE_67); 01028 define ("sin", GLUE_68); 01029 define ("tan", GLUE_69); 01030 define ("arccos", GLUE_70); 01031 define ("arcsin", GLUE_71); 01032 define ("arctan", GLUE_72); 01033 define_type<unknown<rational> > (gen (lit ("Unknown"), lit ("Rational"))); 01034 define_converter ("upgrade", GLUE_73, PENALTY_INCLUSION); 01035 define ("-", GLUE_74); 01036 define ("square", GLUE_75); 01037 define ("+", GLUE_76); 01038 define ("-", GLUE_77); 01039 define ("*", GLUE_78); 01040 define ("*", GLUE_79); 01041 define ("*", GLUE_80); 01042 define ("fixed_point_series", GLUE_81); 01043 define ("integrate_series", GLUE_82); 01044 define ("implicit_series", GLUE_83); 01045 define_type<series<complex<rational> > > (gen (lit ("Series"), gen (lit ("Complex"), lit ("Rational")))); 01046 define_type<series<unknown<rational> > > (gen (lit ("Series"), gen (lit ("Unknown"), lit ("Rational")))); 01047 define ("set_variable_name", GLUE_84); 01048 define ("set_output_order", GLUE_85); 01049 define ("set_cancel_order", GLUE_86); 01050 define ("set_formula_output", GLUE_87); 01051 define ("series", GLUE_88); 01052 define_converter ("upgrade", GLUE_89, PENALTY_INCLUSION); 01053 define_converter ("upgrade", GLUE_90, PENALTY_INCLUSION); 01054 define_converter (":>", GLUE_91, PENALTY_CAST); 01055 define (".[]", GLUE_92); 01056 define (".[]", GLUE_93); 01057 define ("-", GLUE_94); 01058 define ("square", GLUE_95); 01059 define ("+", GLUE_96); 01060 define ("-", GLUE_97); 01061 define ("*", GLUE_98); 01062 define ("+", GLUE_99); 01063 define ("+", GLUE_100); 01064 define ("-", GLUE_101); 01065 define ("-", GLUE_102); 01066 define ("*", GLUE_103); 01067 define ("*", GLUE_104); 01068 define ("^", GLUE_105); 01069 define ("^", GLUE_106); 01070 define ("=", GLUE_107); 01071 define ("!=", GLUE_108); 01072 define ("=", GLUE_109); 01073 define ("!=", GLUE_110); 01074 define ("=", GLUE_111); 01075 define ("!=", GLUE_112); 01076 define ("derive", GLUE_113); 01077 define ("xderive", GLUE_114); 01078 define ("dilate", GLUE_115); 01079 define ("<<", GLUE_116); 01080 define (">>", GLUE_117); 01081 define ("set_variable_name", GLUE_118); 01082 define ("set_output_order", GLUE_119); 01083 define ("set_cancel_order", GLUE_120); 01084 define ("set_formula_output", GLUE_121); 01085 define ("series", GLUE_122); 01086 define_converter ("upgrade", GLUE_123, PENALTY_INCLUSION); 01087 define_converter (":>", GLUE_124, PENALTY_CAST); 01088 define (".[]", GLUE_125); 01089 define ("-", GLUE_126); 01090 define ("square", GLUE_127); 01091 define ("+", GLUE_128); 01092 define ("-", GLUE_129); 01093 define ("*", GLUE_130); 01094 define ("+", GLUE_131); 01095 define ("+", GLUE_132); 01096 define ("-", GLUE_133); 01097 define ("-", GLUE_134); 01098 define ("*", GLUE_135); 01099 define ("*", GLUE_136); 01100 define ("^", GLUE_137); 01101 define ("^", GLUE_138); 01102 define ("=", GLUE_139); 01103 define ("!=", GLUE_140); 01104 define ("=", GLUE_141); 01105 define ("!=", GLUE_142); 01106 define ("=", GLUE_143); 01107 define ("!=", GLUE_144); 01108 define ("derive", GLUE_145); 01109 define ("xderive", GLUE_146); 01110 define ("dilate", GLUE_147); 01111 define ("<<", GLUE_148); 01112 define (">>", GLUE_149); 01113 define ("invert", GLUE_150); 01114 define ("/", GLUE_151); 01115 define ("/", GLUE_152); 01116 define ("/", GLUE_153); 01117 define ("div", GLUE_154); 01118 define ("divides?", GLUE_155); 01119 define ("gcd", GLUE_156); 01120 define ("lcm", GLUE_157); 01121 define ("integrate", GLUE_158); 01122 define ("@", GLUE_159); 01123 define ("reverse", GLUE_160); 01124 define ("q_difference", GLUE_161); 01125 define ("shift", GLUE_162); 01126 define ("shift", GLUE_163); 01127 define_converter (":>", GLUE_164, PENALTY_INCLUSION); 01128 define_converter (":>", GLUE_165, PENALTY_INCLUSION); 01129 define_converter (":>", GLUE_166, PENALTY_INCLUSION); 01130 define_converter (":>", GLUE_167, PENALTY_INCLUSION); 01131 define_converter (":>", GLUE_168, PENALTY_PROMOTE_GENERIC); 01132 define_converter (":>", GLUE_169, PENALTY_PROMOTE_GENERIC); 01133 define ("fixed_point_series", GLUE_170); 01134 define ("integrate_series", GLUE_171); 01135 define ("implicit_series", GLUE_172); 01136 define ("fixed_point_series", GLUE_173); 01137 define ("fixed_point_series", GLUE_174); 01138 define ("integrate_series", GLUE_175); 01139 define ("integrate_series", GLUE_176); 01140 define ("implicit_series", GLUE_177); 01141 define ("implicit_series", GLUE_178); 01142 } 01143 }