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 <basix/tuple.hpp>
00028 #include <basix/glue.hpp>
00029
00030 #define int_literal(x) as_int (as_string (x))
00031 #define is_generic_literal is<literal>
00032 #define gen_literal_apply(f,v) gen (as<generic> (f), v)
00033 #define gen_literal_access(f,v) access (as<generic> (f), v)
00034 #define is_generic_compound is<compound>
00035 #define compound_arguments(x) cdr (as_vector (x))
00036 #define gen_compound_apply(f,v) gen (as<generic> (f), v)
00037 namespace mmx {
00038 template<typename C> polynomial<C>
00039 polynomial_reverse (const vector<C>& v) {
00040 return polynomial<C> (reverse (v)); }
00041
00042 template<typename C> polynomial<modular<modulus<C>, modular_local> >
00043 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00044 modular<modulus<C>, modular_local>::set_modulus (p);
00045 return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00046
00047 template<typename C> vector<generic>
00048 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00049 return as<vector<generic> > (subresultants (f, g)); }
00050
00051 }
00052 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00053
00054 namespace mmx {
00055 static polynomial<rational>
00056 GLUE_1 (const tuple<rational> &arg_1) {
00057 return polynomial_reverse (as_vector (arg_1));
00058 }
00059
00060 static polynomial<rational>
00061 GLUE_2 (const tuple<rational> &arg_1) {
00062 return polynomial<rational > (as_vector (arg_1));
00063 }
00064
00065 static void
00066 GLUE_3 (const polynomial<rational> &arg_1, const generic &arg_2) {
00067 set_variable_name (arg_1, arg_2);
00068 }
00069
00070 static polynomial<rational>
00071 GLUE_4 (const rational &arg_1) {
00072 return polynomial<rational > (arg_1);
00073 }
00074
00075 static iterator<generic>
00076 GLUE_5 (const polynomial<rational> &arg_1) {
00077 return as<iterator<generic> > (iterate (arg_1));
00078 }
00079
00080 static int
00081 GLUE_6 (const polynomial<rational> &arg_1) {
00082 return N (arg_1);
00083 }
00084
00085 static int
00086 GLUE_7 (const polynomial<rational> &arg_1) {
00087 return deg (arg_1);
00088 }
00089
00090 static rational
00091 GLUE_8 (const polynomial<rational> &arg_1, const int &arg_2) {
00092 return arg_1[arg_2];
00093 }
00094
00095 static polynomial<rational>
00096 GLUE_9 (const polynomial<rational> &arg_1) {
00097 return -arg_1;
00098 }
00099
00100 static polynomial<rational>
00101 GLUE_10 (const polynomial<rational> &arg_1) {
00102 return square (arg_1);
00103 }
00104
00105 static polynomial<rational>
00106 GLUE_11 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00107 return arg_1 + arg_2;
00108 }
00109
00110 static polynomial<rational>
00111 GLUE_12 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00112 return arg_1 - arg_2;
00113 }
00114
00115 static polynomial<rational>
00116 GLUE_13 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00117 return arg_1 * arg_2;
00118 }
00119
00120 static polynomial<rational>
00121 GLUE_14 (const rational &arg_1, const polynomial<rational> &arg_2) {
00122 return arg_1 + arg_2;
00123 }
00124
00125 static polynomial<rational>
00126 GLUE_15 (const polynomial<rational> &arg_1, const rational &arg_2) {
00127 return arg_1 + arg_2;
00128 }
00129
00130 static polynomial<rational>
00131 GLUE_16 (const rational &arg_1, const polynomial<rational> &arg_2) {
00132 return arg_1 - arg_2;
00133 }
00134
00135 static polynomial<rational>
00136 GLUE_17 (const polynomial<rational> &arg_1, const rational &arg_2) {
00137 return arg_1 - arg_2;
00138 }
00139
00140 static polynomial<rational>
00141 GLUE_18 (const rational &arg_1, const polynomial<rational> &arg_2) {
00142 return arg_1 * arg_2;
00143 }
00144
00145 static polynomial<rational>
00146 GLUE_19 (const polynomial<rational> &arg_1, const rational &arg_2) {
00147 return arg_1 * arg_2;
00148 }
00149
00150 static polynomial<rational>
00151 GLUE_20 (const polynomial<rational> &arg_1, const int &arg_2) {
00152 return binpow (arg_1, arg_2);
00153 }
00154
00155 static polynomial<rational>
00156 GLUE_21 (const polynomial<rational> &arg_1, const int &arg_2) {
00157 return lshiftz (arg_1, arg_2);
00158 }
00159
00160 static polynomial<rational>
00161 GLUE_22 (const polynomial<rational> &arg_1, const int &arg_2) {
00162 return rshiftz (arg_1, arg_2);
00163 }
00164
00165 static bool
00166 GLUE_23 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00167 return arg_1 == arg_2;
00168 }
00169
00170 static bool
00171 GLUE_24 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00172 return arg_1 != arg_2;
00173 }
00174
00175 static bool
00176 GLUE_25 (const polynomial<rational> &arg_1, const rational &arg_2) {
00177 return arg_1 == arg_2;
00178 }
00179
00180 static bool
00181 GLUE_26 (const polynomial<rational> &arg_1, const rational &arg_2) {
00182 return arg_1 != arg_2;
00183 }
00184
00185 static bool
00186 GLUE_27 (const rational &arg_1, const polynomial<rational> &arg_2) {
00187 return arg_1 == arg_2;
00188 }
00189
00190 static bool
00191 GLUE_28 (const rational &arg_1, const polynomial<rational> &arg_2) {
00192 return arg_1 != arg_2;
00193 }
00194
00195 static polynomial<rational>
00196 GLUE_29 (const polynomial<rational> &arg_1) {
00197 return derive (arg_1);
00198 }
00199
00200 static polynomial<rational>
00201 GLUE_30 (const polynomial<rational> &arg_1) {
00202 return xderive (arg_1);
00203 }
00204
00205 static rational
00206 GLUE_31 (const polynomial<rational> &arg_1, const rational &arg_2) {
00207 return evaluate (arg_1, arg_2);
00208 }
00209
00210 static rational
00211 GLUE_32 (const polynomial<rational> &arg_1, const rational &arg_2) {
00212 return evaluate (arg_1, arg_2);
00213 }
00214
00215 static polynomial<rational>
00216 GLUE_33 (const polynomial<rational> &arg_1, const rational &arg_2) {
00217 return arg_1 / arg_2;
00218 }
00219
00220 static polynomial<rational>
00221 GLUE_34 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00222 return arg_1 / arg_2;
00223 }
00224
00225 static polynomial<rational>
00226 GLUE_35 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00227 return quo (arg_1, arg_2);
00228 }
00229
00230 static polynomial<rational>
00231 GLUE_36 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00232 return rem (arg_1, arg_2);
00233 }
00234
00235 static bool
00236 GLUE_37 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00237 return divides (arg_1, arg_2);
00238 }
00239
00240 static polynomial<rational>
00241 GLUE_38 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2, const int &arg_3) {
00242 return subresultant (arg_1, arg_2, arg_3);
00243 }
00244
00245 static vector<generic>
00246 GLUE_39 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00247 return wrap_subresultants (arg_1, arg_2);
00248 }
00249
00250 static rational
00251 GLUE_40 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00252 return resultant (arg_1, arg_2);
00253 }
00254
00255 static rational
00256 GLUE_41 (const polynomial<rational> &arg_1) {
00257 return discriminant (arg_1);
00258 }
00259
00260 static polynomial<rational>
00261 GLUE_42 (const polynomial<rational> &arg_1) {
00262 return integrate (arg_1);
00263 }
00264
00265 static polynomial<rational>
00266 GLUE_43 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00267 return compose (arg_1, arg_2);
00268 }
00269
00270 static polynomial<rational>
00271 GLUE_44 (const polynomial<rational> &arg_1, const rational &arg_2) {
00272 return q_difference (arg_1, arg_2);
00273 }
00274
00275 static polynomial<rational>
00276 GLUE_45 (const polynomial<rational> &arg_1, const int &arg_2) {
00277 return dilate (arg_1, arg_2);
00278 }
00279
00280 static polynomial<rational>
00281 GLUE_46 (const polynomial<rational> &arg_1, const rational &arg_2) {
00282 return shift (arg_1, arg_2);
00283 }
00284
00285 static polynomial<rational>
00286 GLUE_47 (const polynomial<rational> &arg_1) {
00287 return graeffe (arg_1);
00288 }
00289
00290 static rational
00291 GLUE_48 (const polynomial<rational> &arg_1) {
00292 return contents (arg_1);
00293 }
00294
00295 static polynomial<rational>
00296 GLUE_49 (const polynomial<rational> &arg_1) {
00297 return primitive_part (arg_1);
00298 }
00299
00300 static polynomial<rational>
00301 GLUE_50 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00302 return gcd (arg_1, arg_2);
00303 }
00304
00305 static polynomial<rational>
00306 GLUE_51 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) {
00307 return lcm (arg_1, arg_2);
00308 }
00309
00310 static polynomial<rational>
00311 GLUE_52 (const polynomial<integer> &arg_1) {
00312 return as<polynomial<rational> > (arg_1);
00313 }
00314
00315 static polynomial<generic>
00316 GLUE_53 (const polynomial<rational> &arg_1) {
00317 return as<polynomial<generic> > (arg_1);
00318 }
00319
00320 static vector<rational>
00321 GLUE_54 (const polynomial<rational> &arg_1, const vector<rational> &arg_2) {
00322 return evaluate (arg_1, arg_2);
00323 }
00324
00325 static vector<rational>
00326 GLUE_55 (const polynomial<rational> &arg_1, const vector<rational> &arg_2) {
00327 return evaluate (arg_1, arg_2);
00328 }
00329
00330 static polynomial<complex<rational> >
00331 GLUE_56 (const tuple<complex<rational> > &arg_1) {
00332 return polynomial_reverse (as_vector (arg_1));
00333 }
00334
00335 static polynomial<complex<rational> >
00336 GLUE_57 (const tuple<complex<rational> > &arg_1) {
00337 return polynomial<complex<rational> > (as_vector (arg_1));
00338 }
00339
00340 static void
00341 GLUE_58 (const polynomial<complex<rational> > &arg_1, const generic &arg_2) {
00342 set_variable_name (arg_1, arg_2);
00343 }
00344
00345 static polynomial<complex<rational> >
00346 GLUE_59 (const complex<rational> &arg_1) {
00347 return polynomial<complex<rational> > (arg_1);
00348 }
00349
00350 static iterator<generic>
00351 GLUE_60 (const polynomial<complex<rational> > &arg_1) {
00352 return as<iterator<generic> > (iterate (arg_1));
00353 }
00354
00355 static int
00356 GLUE_61 (const polynomial<complex<rational> > &arg_1) {
00357 return N (arg_1);
00358 }
00359
00360 static int
00361 GLUE_62 (const polynomial<complex<rational> > &arg_1) {
00362 return deg (arg_1);
00363 }
00364
00365 static complex<rational>
00366 GLUE_63 (const polynomial<complex<rational> > &arg_1, const int &arg_2) {
00367 return arg_1[arg_2];
00368 }
00369
00370 static polynomial<complex<rational> >
00371 GLUE_64 (const polynomial<complex<rational> > &arg_1) {
00372 return -arg_1;
00373 }
00374
00375 static polynomial<complex<rational> >
00376 GLUE_65 (const polynomial<complex<rational> > &arg_1) {
00377 return square (arg_1);
00378 }
00379
00380 static polynomial<complex<rational> >
00381 GLUE_66 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00382 return arg_1 + arg_2;
00383 }
00384
00385 static polynomial<complex<rational> >
00386 GLUE_67 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00387 return arg_1 - arg_2;
00388 }
00389
00390 static polynomial<complex<rational> >
00391 GLUE_68 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00392 return arg_1 * arg_2;
00393 }
00394
00395 static polynomial<complex<rational> >
00396 GLUE_69 (const complex<rational> &arg_1, const polynomial<complex<rational> > &arg_2) {
00397 return arg_1 + arg_2;
00398 }
00399
00400 static polynomial<complex<rational> >
00401 GLUE_70 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00402 return arg_1 + arg_2;
00403 }
00404
00405 static polynomial<complex<rational> >
00406 GLUE_71 (const complex<rational> &arg_1, const polynomial<complex<rational> > &arg_2) {
00407 return arg_1 - arg_2;
00408 }
00409
00410 static polynomial<complex<rational> >
00411 GLUE_72 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00412 return arg_1 - arg_2;
00413 }
00414
00415 static polynomial<complex<rational> >
00416 GLUE_73 (const complex<rational> &arg_1, const polynomial<complex<rational> > &arg_2) {
00417 return arg_1 * arg_2;
00418 }
00419
00420 static polynomial<complex<rational> >
00421 GLUE_74 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00422 return arg_1 * arg_2;
00423 }
00424
00425 static polynomial<complex<rational> >
00426 GLUE_75 (const polynomial<complex<rational> > &arg_1, const int &arg_2) {
00427 return binpow (arg_1, arg_2);
00428 }
00429
00430 static polynomial<complex<rational> >
00431 GLUE_76 (const polynomial<complex<rational> > &arg_1, const int &arg_2) {
00432 return lshiftz (arg_1, arg_2);
00433 }
00434
00435 static polynomial<complex<rational> >
00436 GLUE_77 (const polynomial<complex<rational> > &arg_1, const int &arg_2) {
00437 return rshiftz (arg_1, arg_2);
00438 }
00439
00440 static bool
00441 GLUE_78 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00442 return arg_1 == arg_2;
00443 }
00444
00445 static bool
00446 GLUE_79 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00447 return arg_1 != arg_2;
00448 }
00449
00450 static bool
00451 GLUE_80 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00452 return arg_1 == arg_2;
00453 }
00454
00455 static bool
00456 GLUE_81 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00457 return arg_1 != arg_2;
00458 }
00459
00460 static bool
00461 GLUE_82 (const complex<rational> &arg_1, const polynomial<complex<rational> > &arg_2) {
00462 return arg_1 == arg_2;
00463 }
00464
00465 static bool
00466 GLUE_83 (const complex<rational> &arg_1, const polynomial<complex<rational> > &arg_2) {
00467 return arg_1 != arg_2;
00468 }
00469
00470 static polynomial<complex<rational> >
00471 GLUE_84 (const polynomial<complex<rational> > &arg_1) {
00472 return derive (arg_1);
00473 }
00474
00475 static polynomial<complex<rational> >
00476 GLUE_85 (const polynomial<complex<rational> > &arg_1) {
00477 return xderive (arg_1);
00478 }
00479
00480 static complex<rational>
00481 GLUE_86 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00482 return evaluate (arg_1, arg_2);
00483 }
00484
00485 static vector<complex<rational> >
00486 GLUE_87 (const polynomial<complex<rational> > &arg_1, const vector<complex<rational> > &arg_2) {
00487 return evaluate (arg_1, arg_2);
00488 }
00489
00490 static complex<rational>
00491 GLUE_88 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00492 return evaluate (arg_1, arg_2);
00493 }
00494
00495 static vector<complex<rational> >
00496 GLUE_89 (const polynomial<complex<rational> > &arg_1, const vector<complex<rational> > &arg_2) {
00497 return evaluate (arg_1, arg_2);
00498 }
00499
00500 static polynomial<rational>
00501 GLUE_90 (const vector<rational> &arg_1) {
00502 return annulator (arg_1);
00503 }
00504
00505 static polynomial<rational>
00506 GLUE_91 (const vector<rational> &arg_1, const vector<rational> &arg_2) {
00507 return interpolate (arg_1, arg_2);
00508 }
00509
00510 static polynomial<complex<rational> >
00511 GLUE_92 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00512 return arg_1 / arg_2;
00513 }
00514
00515 static polynomial<complex<rational> >
00516 GLUE_93 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00517 return arg_1 / arg_2;
00518 }
00519
00520 static polynomial<complex<rational> >
00521 GLUE_94 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00522 return quo (arg_1, arg_2);
00523 }
00524
00525 static polynomial<complex<rational> >
00526 GLUE_95 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00527 return rem (arg_1, arg_2);
00528 }
00529
00530 static bool
00531 GLUE_96 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00532 return divides (arg_1, arg_2);
00533 }
00534
00535 static polynomial<complex<rational> >
00536 GLUE_97 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2, const int &arg_3) {
00537 return subresultant (arg_1, arg_2, arg_3);
00538 }
00539
00540 static vector<generic>
00541 GLUE_98 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00542 return wrap_subresultants (arg_1, arg_2);
00543 }
00544
00545 static complex<rational>
00546 GLUE_99 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00547 return resultant (arg_1, arg_2);
00548 }
00549
00550 static complex<rational>
00551 GLUE_100 (const polynomial<complex<rational> > &arg_1) {
00552 return discriminant (arg_1);
00553 }
00554
00555 static polynomial<complex<rational> >
00556 GLUE_101 (const polynomial<complex<rational> > &arg_1) {
00557 return integrate (arg_1);
00558 }
00559
00560 static polynomial<complex<rational> >
00561 GLUE_102 (const polynomial<complex<rational> > &arg_1, const polynomial<complex<rational> > &arg_2) {
00562 return compose (arg_1, arg_2);
00563 }
00564
00565 static polynomial<complex<rational> >
00566 GLUE_103 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00567 return q_difference (arg_1, arg_2);
00568 }
00569
00570 static polynomial<complex<rational> >
00571 GLUE_104 (const polynomial<complex<rational> > &arg_1, const int &arg_2) {
00572 return dilate (arg_1, arg_2);
00573 }
00574
00575 static polynomial<complex<rational> >
00576 GLUE_105 (const vector<complex<rational> > &arg_1) {
00577 return annulator (arg_1);
00578 }
00579
00580 static polynomial<complex<rational> >
00581 GLUE_106 (const vector<complex<rational> > &arg_1, const vector<complex<rational> > &arg_2) {
00582 return interpolate (arg_1, arg_2);
00583 }
00584
00585 static polynomial<complex<rational> >
00586 GLUE_107 (const polynomial<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00587 return shift (arg_1, arg_2);
00588 }
00589
00590 static polynomial<complex<rational> >
00591 GLUE_108 (const polynomial<complex<rational> > &arg_1) {
00592 return graeffe (arg_1);
00593 }
00594
00595 static polynomial<complex<rational> >
00596 GLUE_109 (const polynomial<integer> &arg_1) {
00597 return as<polynomial<complex<rational> > > (arg_1);
00598 }
00599
00600 static polynomial<complex<rational> >
00601 GLUE_110 (const polynomial<rational> &arg_1) {
00602 return as<polynomial<complex<rational> > > (arg_1);
00603 }
00604
00605 static polynomial<generic>
00606 GLUE_111 (const polynomial<complex<rational> > &arg_1) {
00607 return as<polynomial<generic> > (arg_1);
00608 }
00609
00610 void
00611 glue_polynomial_rational () {
00612 static bool done = false;
00613 if (done) return;
00614 done = true;
00615 call_glue (string ("glue_vector_rational"));
00616 call_glue (string ("glue_polynomial_integer"));
00617 define_type<polynomial<rational> > (gen (lit ("Polynomial"), lit ("Rational")));
00618 define ("poly", GLUE_1);
00619 define ("polynomial", GLUE_2);
00620 define ("set_variable_name", GLUE_3);
00621 define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION);
00622 define_converter (":>", GLUE_5, PENALTY_CAST);
00623 define ("#", GLUE_6);
00624 define ("deg", GLUE_7);
00625 define (".[]", GLUE_8);
00626 define ("-", GLUE_9);
00627 define ("square", GLUE_10);
00628 define ("+", GLUE_11);
00629 define ("-", GLUE_12);
00630 define ("*", GLUE_13);
00631 define ("+", GLUE_14);
00632 define ("+", GLUE_15);
00633 define ("-", GLUE_16);
00634 define ("-", GLUE_17);
00635 define ("*", GLUE_18);
00636 define ("*", GLUE_19);
00637 define ("^", GLUE_20);
00638 define ("<<", GLUE_21);
00639 define (">>", GLUE_22);
00640 define ("=", GLUE_23);
00641 define ("!=", GLUE_24);
00642 define ("=", GLUE_25);
00643 define ("!=", GLUE_26);
00644 define ("=", GLUE_27);
00645 define ("!=", GLUE_28);
00646 define ("derive", GLUE_29);
00647 define ("xderive", GLUE_30);
00648 define ("eval", GLUE_31);
00649 define ("evaluate", GLUE_32);
00650 define ("/", GLUE_33);
00651 define ("div", GLUE_34);
00652 define ("quo", GLUE_35);
00653 define ("rem", GLUE_36);
00654 define ("divides?", GLUE_37);
00655 define ("subresultant", GLUE_38);
00656 define ("subresultants", GLUE_39);
00657 define ("resultant", GLUE_40);
00658 define ("discriminant", GLUE_41);
00659 define ("integrate", GLUE_42);
00660 define ("@", GLUE_43);
00661 define ("q_difference", GLUE_44);
00662 define ("dilate", GLUE_45);
00663 define ("shift", GLUE_46);
00664 define ("graeffe", GLUE_47);
00665 define ("contents", GLUE_48);
00666 define ("primitive_part", GLUE_49);
00667 define ("gcd", GLUE_50);
00668 define ("lcm", GLUE_51);
00669 define_converter (":>", GLUE_52, PENALTY_INCLUSION);
00670 define_converter (":>", GLUE_53, PENALTY_PROMOTE_GENERIC);
00671 define_type<polynomial<complex<rational> > > (gen (lit ("Polynomial"), gen (lit ("Complex"), lit ("Rational"))));
00672 define ("eval", GLUE_54);
00673 define ("evaluate", GLUE_55);
00674 define ("poly", GLUE_56);
00675 define ("polynomial", GLUE_57);
00676 define ("set_variable_name", GLUE_58);
00677 define_converter ("upgrade", GLUE_59, PENALTY_INCLUSION);
00678 define_converter (":>", GLUE_60, PENALTY_CAST);
00679 define ("#", GLUE_61);
00680 define ("deg", GLUE_62);
00681 define (".[]", GLUE_63);
00682 define ("-", GLUE_64);
00683 define ("square", GLUE_65);
00684 define ("+", GLUE_66);
00685 define ("-", GLUE_67);
00686 define ("*", GLUE_68);
00687 define ("+", GLUE_69);
00688 define ("+", GLUE_70);
00689 define ("-", GLUE_71);
00690 define ("-", GLUE_72);
00691 define ("*", GLUE_73);
00692 define ("*", GLUE_74);
00693 define ("^", GLUE_75);
00694 define ("<<", GLUE_76);
00695 define (">>", GLUE_77);
00696 define ("=", GLUE_78);
00697 define ("!=", GLUE_79);
00698 define ("=", GLUE_80);
00699 define ("!=", GLUE_81);
00700 define ("=", GLUE_82);
00701 define ("!=", GLUE_83);
00702 define ("derive", GLUE_84);
00703 define ("xderive", GLUE_85);
00704 define ("eval", GLUE_86);
00705 define ("eval", GLUE_87);
00706 define ("evaluate", GLUE_88);
00707 define ("evaluate", GLUE_89);
00708 define ("annulator", GLUE_90);
00709 define ("interpolate", GLUE_91);
00710 define ("/", GLUE_92);
00711 define ("div", GLUE_93);
00712 define ("quo", GLUE_94);
00713 define ("rem", GLUE_95);
00714 define ("divides?", GLUE_96);
00715 define ("subresultant", GLUE_97);
00716 define ("subresultants", GLUE_98);
00717 define ("resultant", GLUE_99);
00718 define ("discriminant", GLUE_100);
00719 define ("integrate", GLUE_101);
00720 define ("@", GLUE_102);
00721 define ("q_difference", GLUE_103);
00722 define ("dilate", GLUE_104);
00723 define ("annulator", GLUE_105);
00724 define ("interpolate", GLUE_106);
00725 define ("shift", GLUE_107);
00726 define ("graeffe", GLUE_108);
00727 define_converter (":>", GLUE_109, PENALTY_INCLUSION);
00728 define_converter (":>", GLUE_110, PENALTY_HOMOMORPHISM);
00729 define_converter (":>", GLUE_111, PENALTY_PROMOTE_GENERIC);
00730 }
00731 }