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 }