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 }