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 <basix/compound.hpp> 00008 #include <basix/mmx_syntax.hpp> 00009 #include <basix/lisp_syntax.hpp> 00010 #include <basix/cpp_syntax.hpp> 00011 #include <basix/syntactic.hpp> 00012 #include <algebramix/vector_unrolled.hpp> 00013 #include <algebramix/vector_simd.hpp> 00014 #include <lacunaryx/lpolynomial.hpp> 00015 #include <basix/tuple.hpp> 00016 #include <basix/alias.hpp> 00017 #include <basix/glue.hpp> 00018 00019 #define int_literal(x) as_int (as_string (x)) 00020 #define is_generic_literal is<literal> 00021 #define gen_literal_apply(f,v) gen (as<generic> (f), v) 00022 #define gen_literal_access(f,v) access (as<generic> (f), v) 00023 #define is_generic_compound is<compound> 00024 #define compound_arguments(x) cdr (as_vector (x)) 00025 #define gen_compound_apply(f,v) gen (as<generic> (f), v) 00026 00027 namespace mmx { 00028 static lpolynomial<integer> 00029 GLUE_1 (const integer &arg_1) { 00030 return lpolynomial<integer > (arg_1); 00031 } 00032 00033 static lpolynomial<integer> 00034 GLUE_2 (const integer &arg_1, const integer &arg_2) { 00035 return lpolynomial<integer > (arg_1, arg_2); 00036 } 00037 00038 static void 00039 GLUE_3 (const lpolynomial<integer> &arg_1, const generic &arg_2) { 00040 set_variable_name (arg_1, arg_2); 00041 } 00042 00043 static lpolynomial<integer> 00044 GLUE_4 (const integer &arg_1) { 00045 return lpolynomial<integer > (arg_1); 00046 } 00047 00048 static int 00049 GLUE_5 (const lpolynomial<integer> &arg_1) { 00050 return N (arg_1); 00051 } 00052 00053 static integer 00054 GLUE_6 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00055 return arg_1[arg_2]; 00056 } 00057 00058 static integer 00059 GLUE_7 (const lpolynomial<integer> &arg_1) { 00060 return deg (arg_1); 00061 } 00062 00063 static integer 00064 GLUE_8 (const lpolynomial<integer> &arg_1) { 00065 return val (arg_1); 00066 } 00067 00068 static lpolynomial<integer> 00069 GLUE_9 (const lpolynomial<integer> &arg_1) { 00070 return -arg_1; 00071 } 00072 00073 static lpolynomial<integer> 00074 GLUE_10 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00075 return arg_1 + arg_2; 00076 } 00077 00078 static lpolynomial<integer> 00079 GLUE_11 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00080 return arg_1 - arg_2; 00081 } 00082 00083 static lpolynomial<integer> 00084 GLUE_12 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00085 return arg_1 * arg_2; 00086 } 00087 00088 static lpolynomial<integer> 00089 GLUE_13 (const lpolynomial<integer> &arg_1) { 00090 return square (arg_1); 00091 } 00092 00093 static lpolynomial<integer> 00094 GLUE_14 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00095 return binpow (arg_1, arg_2); 00096 } 00097 00098 static lpolynomial<integer> 00099 GLUE_15 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00100 return arg_1 + arg_2; 00101 } 00102 00103 static lpolynomial<integer> 00104 GLUE_16 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00105 return arg_1 - arg_2; 00106 } 00107 00108 static lpolynomial<integer> 00109 GLUE_17 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00110 return arg_1 * arg_2; 00111 } 00112 00113 static lpolynomial<integer> 00114 GLUE_18 (const integer &arg_1, const lpolynomial<integer> &arg_2) { 00115 return arg_1 + arg_2; 00116 } 00117 00118 static lpolynomial<integer> 00119 GLUE_19 (const integer &arg_1, const lpolynomial<integer> &arg_2) { 00120 return arg_1 - arg_2; 00121 } 00122 00123 static lpolynomial<integer> 00124 GLUE_20 (const integer &arg_1, const lpolynomial<integer> &arg_2) { 00125 return arg_1 * arg_2; 00126 } 00127 00128 static bool 00129 GLUE_21 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00130 return arg_1 == arg_2; 00131 } 00132 00133 static bool 00134 GLUE_22 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00135 return arg_1 != arg_2; 00136 } 00137 00138 static bool 00139 GLUE_23 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00140 return arg_1 == arg_2; 00141 } 00142 00143 static bool 00144 GLUE_24 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00145 return arg_1 != arg_2; 00146 } 00147 00148 static bool 00149 GLUE_25 (const integer &arg_1, const lpolynomial<integer> &arg_2) { 00150 return arg_1 == arg_2; 00151 } 00152 00153 static bool 00154 GLUE_26 (const integer &arg_1, const lpolynomial<integer> &arg_2) { 00155 return arg_1 != arg_2; 00156 } 00157 00158 static lpolynomial<integer> 00159 GLUE_27 (const lpolynomial<integer> &arg_1) { 00160 return derive (arg_1); 00161 } 00162 00163 static lpolynomial<integer> 00164 GLUE_28 (const lpolynomial<integer> &arg_1) { 00165 return xderive (arg_1); 00166 } 00167 00168 static integer 00169 GLUE_29 (const lpolynomial<integer> &arg_1, const integer &arg_2) { 00170 return eval (arg_1, arg_2); 00171 } 00172 00173 static lpolynomial<generic> 00174 GLUE_30 (const lpolynomial<integer> &arg_1) { 00175 return as<lpolynomial<generic> > (arg_1); 00176 } 00177 00178 static int 00179 GLUE_31 (const lpolynomial<integer> &arg_1) { 00180 return pr_hash (arg_1); 00181 } 00182 00183 static bool 00184 GLUE_32 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00185 return pr_eq (arg_1, arg_2); 00186 } 00187 00188 static bool 00189 GLUE_33 (const lpolynomial<integer> &arg_1, const lpolynomial<integer> &arg_2) { 00190 return pr_neq (arg_1, arg_2); 00191 } 00192 00193 static vector<lpolynomial<integer> > 00194 GLUE_34 (const tuple<lpolynomial<integer> > &arg_1) { 00195 return vector<lpolynomial<integer> > (as_vector (arg_1)); 00196 } 00197 00198 static vector<lpolynomial<integer> > 00199 GLUE_35 (const tuple<lpolynomial<integer> > &arg_1) { 00200 return vector<lpolynomial<integer> > (as_vector (arg_1)); 00201 } 00202 00203 static iterator<generic> 00204 GLUE_36 (const vector<lpolynomial<integer> > &arg_1) { 00205 return as<iterator<generic> > (iterate (arg_1)); 00206 } 00207 00208 static int 00209 GLUE_37 (const vector<lpolynomial<integer> > &arg_1) { 00210 return N (arg_1); 00211 } 00212 00213 static lpolynomial<integer> 00214 GLUE_38 (const vector<lpolynomial<integer> > &arg_1, const int &arg_2) { 00215 return arg_1[arg_2]; 00216 } 00217 00218 static alias<lpolynomial<integer> > 00219 GLUE_39 (const alias<vector<lpolynomial<integer> > > &arg_1, const int &arg_2) { 00220 return alias_access<lpolynomial<integer> > (arg_1, arg_2); 00221 } 00222 00223 static vector<lpolynomial<integer> > 00224 GLUE_40 (const vector<lpolynomial<integer> > &arg_1, const int &arg_2, const int &arg_3) { 00225 return range (arg_1, arg_2, arg_3); 00226 } 00227 00228 static vector<lpolynomial<integer> > 00229 GLUE_41 (const vector<lpolynomial<integer> > &arg_1) { 00230 return reverse (arg_1); 00231 } 00232 00233 static vector<lpolynomial<integer> > 00234 GLUE_42 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00235 return append (arg_1, arg_2); 00236 } 00237 00238 static alias<vector<lpolynomial<integer> > > 00239 GLUE_43 (const alias<vector<lpolynomial<integer> > > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00240 return alias_write (arg_1, arg_2); 00241 } 00242 00243 static void 00244 GLUE_44 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00245 inside_append (arg_1, arg_2); 00246 } 00247 00248 static vector<lpolynomial<integer> > 00249 GLUE_45 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00250 return cons (arg_1, arg_2); 00251 } 00252 00253 static lpolynomial<integer> 00254 GLUE_46 (const vector<lpolynomial<integer> > &arg_1) { 00255 return car (arg_1); 00256 } 00257 00258 static vector<lpolynomial<integer> > 00259 GLUE_47 (const vector<lpolynomial<integer> > &arg_1) { 00260 return cdr (arg_1); 00261 } 00262 00263 static bool 00264 GLUE_48 (const vector<lpolynomial<integer> > &arg_1) { 00265 return is_nil (arg_1); 00266 } 00267 00268 static bool 00269 GLUE_49 (const vector<lpolynomial<integer> > &arg_1) { 00270 return is_atom (arg_1); 00271 } 00272 00273 static vector<lpolynomial<integer> > 00274 GLUE_50 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00275 return insert (arg_1, arg_2); 00276 } 00277 00278 static int 00279 GLUE_51 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00280 return find (arg_1, arg_2); 00281 } 00282 00283 static bool 00284 GLUE_52 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00285 return contains (arg_1, arg_2); 00286 } 00287 00288 static vector<generic> 00289 GLUE_53 (const vector<lpolynomial<integer> > &arg_1) { 00290 return as<vector<generic> > (arg_1); 00291 } 00292 00293 static vector<lpolynomial<integer> > 00294 GLUE_54 (const vector<lpolynomial<integer> > &arg_1) { 00295 return -arg_1; 00296 } 00297 00298 static vector<lpolynomial<integer> > 00299 GLUE_55 (const vector<lpolynomial<integer> > &arg_1) { 00300 return square (arg_1); 00301 } 00302 00303 static vector<lpolynomial<integer> > 00304 GLUE_56 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00305 return arg_1 + arg_2; 00306 } 00307 00308 static vector<lpolynomial<integer> > 00309 GLUE_57 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00310 return arg_1 - arg_2; 00311 } 00312 00313 static vector<lpolynomial<integer> > 00314 GLUE_58 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00315 return arg_1 * arg_2; 00316 } 00317 00318 static vector<lpolynomial<integer> > 00319 GLUE_59 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00320 return arg_1 + arg_2; 00321 } 00322 00323 static vector<lpolynomial<integer> > 00324 GLUE_60 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00325 return arg_1 + arg_2; 00326 } 00327 00328 static vector<lpolynomial<integer> > 00329 GLUE_61 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00330 return arg_1 - arg_2; 00331 } 00332 00333 static vector<lpolynomial<integer> > 00334 GLUE_62 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00335 return arg_1 - arg_2; 00336 } 00337 00338 static vector<lpolynomial<integer> > 00339 GLUE_63 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00340 return arg_1 * arg_2; 00341 } 00342 00343 static vector<lpolynomial<integer> > 00344 GLUE_64 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00345 return arg_1 * arg_2; 00346 } 00347 00348 static lpolynomial<integer> 00349 GLUE_65 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00350 return dot (arg_1, arg_2); 00351 } 00352 00353 static lpolynomial<integer> 00354 GLUE_66 (const vector<lpolynomial<integer> > &arg_1) { 00355 return big_mul (arg_1); 00356 } 00357 00358 static lpolynomial<integer> 00359 GLUE_67 (const vector<lpolynomial<integer> > &arg_1) { 00360 return big_add (arg_1); 00361 } 00362 00363 static bool 00364 GLUE_68 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00365 return arg_1 == arg_2; 00366 } 00367 00368 static bool 00369 GLUE_69 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00370 return arg_1 != arg_2; 00371 } 00372 00373 static bool 00374 GLUE_70 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00375 return arg_1 == arg_2; 00376 } 00377 00378 static bool 00379 GLUE_71 (const vector<lpolynomial<integer> > &arg_1, const lpolynomial<integer> &arg_2) { 00380 return arg_1 != arg_2; 00381 } 00382 00383 static bool 00384 GLUE_72 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00385 return arg_1 == arg_2; 00386 } 00387 00388 static bool 00389 GLUE_73 (const lpolynomial<integer> &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00390 return arg_1 != arg_2; 00391 } 00392 00393 static vector<lpolynomial<integer> > 00394 GLUE_74 (const vector<lpolynomial<integer> > &arg_1) { 00395 return derive (arg_1); 00396 } 00397 00398 static int 00399 GLUE_75 (const vector<lpolynomial<integer> > &arg_1) { 00400 return pr_hash (arg_1); 00401 } 00402 00403 static bool 00404 GLUE_76 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00405 return pr_eq (arg_1, arg_2); 00406 } 00407 00408 static bool 00409 GLUE_77 (const vector<lpolynomial<integer> > &arg_1, const vector<lpolynomial<integer> > &arg_2) { 00410 return pr_neq (arg_1, arg_2); 00411 } 00412 00413 static vector<lpolynomial<generic> > 00414 GLUE_78 (const vector<lpolynomial<integer> > &arg_1) { 00415 return as<vector<lpolynomial<generic> > > (arg_1); 00416 } 00417 00418 void 00419 glue_lpolynomial_integer () { 00420 static bool done = false; 00421 if (done) return; 00422 done = true; 00423 call_glue (string ("glue_integer")); 00424 call_glue (string ("glue_basix_vector_generic")); 00425 call_glue (string ("glue_lpolynomial_generic")); 00426 define_type<lpolynomial<integer> > (gen (lit ("LPolynomial"), lit ("Integer"))); 00427 define ("lpolynomial", GLUE_1); 00428 define ("lpolynomial", GLUE_2); 00429 define ("set_variable_name", GLUE_3); 00430 define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION); 00431 define ("#", GLUE_5); 00432 define (".[]", GLUE_6); 00433 define ("deg", GLUE_7); 00434 define ("val", GLUE_8); 00435 define ("-", GLUE_9); 00436 define ("+", GLUE_10); 00437 define ("-", GLUE_11); 00438 define ("*", GLUE_12); 00439 define ("square", GLUE_13); 00440 define ("^", GLUE_14); 00441 define ("+", GLUE_15); 00442 define ("-", GLUE_16); 00443 define ("*", GLUE_17); 00444 define ("+", GLUE_18); 00445 define ("-", GLUE_19); 00446 define ("*", GLUE_20); 00447 define ("=", GLUE_21); 00448 define ("!=", GLUE_22); 00449 define ("=", GLUE_23); 00450 define ("!=", GLUE_24); 00451 define ("=", GLUE_25); 00452 define ("!=", GLUE_26); 00453 define ("derive", GLUE_27); 00454 define ("xderive", GLUE_28); 00455 define ("eval", GLUE_29); 00456 define_converter (":>", GLUE_30, PENALTY_PROMOTE_GENERIC); 00457 define ("hash%", GLUE_31); 00458 define ("=%", GLUE_32); 00459 define ("!=%", GLUE_33); 00460 define_type<vector<lpolynomial<integer> > > (gen (lit ("Vector"), gen (lit ("LPolynomial"), lit ("Integer")))); 00461 define ("vector", GLUE_34); 00462 define ("[]", GLUE_35); 00463 define_converter (":>", GLUE_36, PENALTY_CAST); 00464 define ("#", GLUE_37); 00465 define (".[]", GLUE_38); 00466 define (".[]", GLUE_39); 00467 define (".[]", GLUE_40); 00468 define ("reverse", GLUE_41); 00469 define ("><", GLUE_42); 00470 define ("<<", GLUE_43); 00471 define ("append", GLUE_44); 00472 define ("cons", GLUE_45); 00473 define ("car", GLUE_46); 00474 define ("cdr", GLUE_47); 00475 define ("nil?", GLUE_48); 00476 define ("atom?", GLUE_49); 00477 define ("insert", GLUE_50); 00478 define ("find", GLUE_51); 00479 define ("contains?", GLUE_52); 00480 define_converter (":>", GLUE_53, PENALTY_PROMOTE_GENERIC); 00481 define ("-", GLUE_54); 00482 define ("square", GLUE_55); 00483 define ("+", GLUE_56); 00484 define ("-", GLUE_57); 00485 define ("*", GLUE_58); 00486 define ("+", GLUE_59); 00487 define ("+", GLUE_60); 00488 define ("-", GLUE_61); 00489 define ("-", GLUE_62); 00490 define ("*", GLUE_63); 00491 define ("*", GLUE_64); 00492 define ("dot", GLUE_65); 00493 define ("big_mul", GLUE_66); 00494 define ("big_add", GLUE_67); 00495 define ("=", GLUE_68); 00496 define ("!=", GLUE_69); 00497 define ("=", GLUE_70); 00498 define ("!=", GLUE_71); 00499 define ("=", GLUE_72); 00500 define ("!=", GLUE_73); 00501 define ("derive", GLUE_74); 00502 define ("hash%", GLUE_75); 00503 define ("=%", GLUE_76); 00504 define ("!=%", GLUE_77); 00505 define_converter (":>", GLUE_78, PENALTY_PROMOTE_GENERIC); 00506 } 00507 }