algebramix_doc 0.3
|
00001 00002 #include <basix/vector.hpp> 00003 #include <algebramix/polynomial.hpp> 00004 #include <algebramix/polynomial_polynomial.hpp> 00005 #include <algebramix/polynomial_schonhage.hpp> 00006 #include <algebramix/algebraic.hpp> 00007 #include <basix/glue.hpp> 00008 00009 namespace mmx { 00010 template<typename C> polynomial<C> 00011 polynomial_reverse (const vector<C>& v) { 00012 return polynomial<C> (reverse (v)); } 00013 00014 template<typename C> polynomial<modular<modulus<C>, modular_local> > 00015 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) { 00016 modular<modulus<C>, modular_local>::set_modulus (p); 00017 return as<polynomial<modular<modulus<C>, modular_local> > > (f); } 00018 00019 template<typename C> vector<generic> 00020 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) { 00021 return as<vector<generic> > (subresultants (f, g)); } 00022 00023 } 00024 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE } 00025 00026 namespace mmx { 00027 static algebraic<generic> 00028 GLUE_1 (const polynomial<generic> &arg_1) { 00029 return algebraic<generic > (arg_1); 00030 } 00031 00032 static algebraic<generic> 00033 GLUE_2 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) { 00034 return algebraic<generic > (arg_1, arg_2); 00035 } 00036 00037 static polynomial<generic> 00038 GLUE_3 (const algebraic<generic> &arg_1) { 00039 return annihilator (arg_1); 00040 } 00041 00042 static algebraic<generic> 00043 GLUE_4 (const algebraic<generic> &arg_1) { 00044 return normalize (arg_1); 00045 } 00046 00047 static algebraic<generic> 00048 GLUE_5 (const algebraic<generic> &arg_1) { 00049 return -arg_1; 00050 } 00051 00052 static algebraic<generic> 00053 GLUE_6 (const algebraic<generic> &arg_1) { 00054 return square (arg_1); 00055 } 00056 00057 static algebraic<generic> 00058 GLUE_7 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) { 00059 return arg_1 + arg_2; 00060 } 00061 00062 static algebraic<generic> 00063 GLUE_8 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) { 00064 return arg_1 - arg_2; 00065 } 00066 00067 static algebraic<generic> 00068 GLUE_9 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) { 00069 return arg_1 * arg_2; 00070 } 00071 00072 static algebraic<generic> 00073 GLUE_10 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) { 00074 return arg_1 / arg_2; 00075 } 00076 00077 void 00078 glue_algebraic_generic () { 00079 static bool done = false; 00080 if (done) return; 00081 done = true; 00082 call_glue (string ("glue_polynomial_generic")); 00083 define_type<algebraic<generic> > (gen (lit ("Algebraic"), lit ("Generic"))); 00084 define ("algebraic", GLUE_1); 00085 define ("algebraic", GLUE_2); 00086 define ("annihilator", GLUE_3); 00087 define ("normalize", GLUE_4); 00088 define ("-", GLUE_5); 00089 define ("square", GLUE_6); 00090 define ("+", GLUE_7); 00091 define ("-", GLUE_8); 00092 define ("*", GLUE_9); 00093 define ("/", GLUE_10); 00094 } 00095 }