algebramix_doc 0.3
|
00001 00002 #include <numerix/integer.hpp> 00003 #include <basix/vector.hpp> 00004 #include <algebramix/polynomial.hpp> 00005 #include <algebramix/polynomial_polynomial.hpp> 00006 #include <algebramix/polynomial_integer.hpp> 00007 #include <algebramix/polynomial_schonhage.hpp> 00008 #include <basix/tuple.hpp> 00009 #include <basix/glue.hpp> 00010 00011 namespace mmx { 00012 template<typename C> polynomial<C> 00013 polynomial_reverse (const vector<C>& v) { 00014 return polynomial<C> (reverse (v)); } 00015 00016 template<typename C> polynomial<modular<modulus<C>, modular_local> > 00017 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) { 00018 modular<modulus<C>, modular_local>::set_modulus (p); 00019 return as<polynomial<modular<modulus<C>, modular_local> > > (f); } 00020 00021 template<typename C> vector<generic> 00022 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) { 00023 return as<vector<generic> > (subresultants (f, g)); } 00024 00025 } 00026 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE } 00027 00028 namespace mmx { 00029 static polynomial<integer> 00030 GLUE_1 (const tuple<integer> &arg_1) { 00031 return polynomial_reverse (as_vector (arg_1)); 00032 } 00033 00034 static polynomial<integer> 00035 GLUE_2 (const tuple<integer> &arg_1) { 00036 return polynomial<integer > (as_vector (arg_1)); 00037 } 00038 00039 static void 00040 GLUE_3 (const polynomial<integer> &arg_1, const generic &arg_2) { 00041 set_variable_name (arg_1, arg_2); 00042 } 00043 00044 static polynomial<integer> 00045 GLUE_4 (const integer &arg_1) { 00046 return polynomial<integer > (arg_1); 00047 } 00048 00049 static iterator<generic> 00050 GLUE_5 (const polynomial<integer> &arg_1) { 00051 return as<iterator<generic> > (iterate (arg_1)); 00052 } 00053 00054 static int 00055 GLUE_6 (const polynomial<integer> &arg_1) { 00056 return N (arg_1); 00057 } 00058 00059 static int 00060 GLUE_7 (const polynomial<integer> &arg_1) { 00061 return deg (arg_1); 00062 } 00063 00064 static integer 00065 GLUE_8 (const polynomial<integer> &arg_1, const int &arg_2) { 00066 return arg_1[arg_2]; 00067 } 00068 00069 static polynomial<integer> 00070 GLUE_9 (const polynomial<integer> &arg_1) { 00071 return -arg_1; 00072 } 00073 00074 static polynomial<integer> 00075 GLUE_10 (const polynomial<integer> &arg_1) { 00076 return square (arg_1); 00077 } 00078 00079 static polynomial<integer> 00080 GLUE_11 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) { 00081 return arg_1 + arg_2; 00082 } 00083 00084 static polynomial<integer> 00085 GLUE_12 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) { 00086 return arg_1 - arg_2; 00087 } 00088 00089 static polynomial<integer> 00090 GLUE_13 (const polynomial<integer> &arg_1, const polynomial<integer> &arg_2) { 00091 return arg_1 * arg_2; 00092 } 00093 00094 static polynomial<integer> 00095 GLUE_14 (const integer &arg_1, const polynomial<integer> &arg_2) { 00096 return arg_1 + arg_2; 00097 } 00098 00099 static polynomial<integer> 00100 GLUE_15 (const polynomial<integer> &arg_1, const integer &arg_2) { 00101 return arg_1 + arg_2; 00102 } 00103 00104 static polynomial<integer> 00105 GLUE_16 (const integer &arg_1, const polynomial<integer> &arg_2) { 00106 return arg_1 - arg_2; 00107 } 00108 00109 static polynomial<integer> 00110 GLUE_17 (const polynomial<integer> &arg_1, const integer &arg_2) { 00111 return arg_1 - arg_2; 00112 } 00113 00114 static polynomial<integer> 00115 GLUE_18 (const integer &arg_1, const polynomial<integer> &arg_2) { 00116 return arg_1 * arg_2; 00117 } 00118 00119 static polynomial<integer> 00120 GLUE_19 (const polynomial<integer> &arg_1, const integer &arg_2) { 00121 return arg_1 * arg_2; 00122 } 00123 00124 static polynomial<integer> 00125 GLUE_20 (const polynomial<integer> &arg_1, const int &arg_2) { 00126 return binpow (arg_1, arg_2); 00127 } 00128 00129 static polynomial<integer> 00130 GLUE_21 (const polynomial<integer> &arg_1, const int &arg_2) { 00131 return lshiftz (arg_1, arg_2); 00132 } 00133 00134 static polynomial<integer> 00135 GLUE_22 (const polynomial<integer> &arg_1, const int &arg_2) { 00136 return rshiftz (arg_1, arg_2); 00137 } 00138 00139 static polynomial<integer> 00140 GLUE_23 (const polynomial<integer> &arg_1) { 00141 return derive (arg_1); 00142 } 00143 00144 static polynomial<integer> 00145 GLUE_24 (const polynomial<integer> &arg_1) { 00146 return xderive (arg_1); 00147 } 00148 00149 static integer 00150 GLUE_25 (const polynomial<integer> &arg_1, const integer &arg_2) { 00151 return evaluate (arg_1, arg_2); 00152 } 00153 00154 static vector<integer> 00155 GLUE_26 (const polynomial<integer> &arg_1, const vector<integer> &arg_2) { 00156 return evaluate (arg_1, arg_2); 00157 } 00158 00159 static integer 00160 GLUE_27 (const polynomial<integer> &arg_1, const integer &arg_2) { 00161 return evaluate (arg_1, arg_2); 00162 } 00163 00164 static vector<integer> 00165 GLUE_28 (const polynomial<integer> &arg_1, const vector<integer> &arg_2) { 00166 return evaluate (arg_1, arg_2); 00167 } 00168 00169 static polynomial<generic> 00170 GLUE_29 (const polynomial<integer> &arg_1) { 00171 return as<polynomial<generic> > (arg_1); 00172 } 00173 00174 void 00175 glue_polynomial_integer () { 00176 static bool done = false; 00177 if (done) return; 00178 done = true; 00179 call_glue (string ("glue_vector_integer")); 00180 call_glue (string ("glue_polynomial_generic")); 00181 define_type<polynomial<integer> > (gen (lit ("Polynomial"), lit ("Integer"))); 00182 define ("poly", GLUE_1); 00183 define ("polynomial", GLUE_2); 00184 define ("set_variable_name", GLUE_3); 00185 define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION); 00186 define_converter (":>", GLUE_5, PENALTY_CAST); 00187 define ("#", GLUE_6); 00188 define ("deg", GLUE_7); 00189 define (".[]", GLUE_8); 00190 define ("-", GLUE_9); 00191 define ("square", GLUE_10); 00192 define ("+", GLUE_11); 00193 define ("-", GLUE_12); 00194 define ("*", GLUE_13); 00195 define ("+", GLUE_14); 00196 define ("+", GLUE_15); 00197 define ("-", GLUE_16); 00198 define ("-", GLUE_17); 00199 define ("*", GLUE_18); 00200 define ("*", GLUE_19); 00201 define ("^", GLUE_20); 00202 define ("<<", GLUE_21); 00203 define (">>", GLUE_22); 00204 define ("derive", GLUE_23); 00205 define ("xderive", GLUE_24); 00206 define ("eval", GLUE_25); 00207 define ("eval", GLUE_26); 00208 define ("evaluate", GLUE_27); 00209 define ("evaluate", GLUE_28); 00210 define_converter (":>", GLUE_29, PENALTY_PROMOTE_GENERIC); 00211 } 00212 }