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 }