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 <algebramix/permutation.hpp>
00015 #include <basix/row_tuple.hpp>
00016 #include <algebramix/matrix.hpp>
00017 #include <algebramix/matrix_ring_naive.hpp>
00018 #include <algebramix/matrix_integer.hpp>
00019 #include <algebramix/matrix_modular_integer.hpp>
00020 #include <algebramix/matrix_quotient.hpp>
00021 #include <algebramix/matrix_complex.hpp>
00022 #include <basix/tuple.hpp>
00023 #include <basix/alias.hpp>
00024 #include <basix/glue.hpp>
00025
00026 #define int_literal(x) as_int (as_string (x))
00027 #define is_generic_literal is<literal>
00028 #define gen_literal_apply(f,v) gen (as<generic> (f), v)
00029 #define gen_literal_access(f,v) access (as<generic> (f), v)
00030 #define identity_matrix_integer identity_matrix<integer>
00031 #define hilbert_matrix_rational hilbert_matrix<rational>
00032
00033 namespace mmx {
00034 template<typename C> matrix<C>
00035 matrix_new (const vector<row_tuple<C> >& t) {
00036 if (N(t) == 0) return matrix<C> ();
00037 nat i, j, rows= N(t), cols= N(t[0]);
00038 C dummy= zero_cst<C> ();
00039 matrix<C> r (dummy, rows, cols);
00040 for (i=0; i<rows; i++) {
00041 ASSERT (N(t[i]) == cols, "unequal row lengths");
00042 for (j=0; j<cols; j++)
00043 r(i,j)= t[i][j];
00044 }
00045 return r;
00046 }
00047
00048 template<typename C> matrix<C>
00049 matrix_new (const vector<C>& t) {
00050 nat j, rows= 1, cols= N(t);
00051 C dummy= zero_cst<C> ();
00052 matrix<C> r (dummy, rows, cols);
00053 for (j=0; j<cols; j++)
00054 r(0,j)= t[j];
00055 return r;
00056 }
00057
00058 template<typename C> vector<generic>
00059 wrap_column_reduced_echelon_with_permutation (const matrix<C>& m) {
00060 permutation permut;
00061 generic tp=as<generic> (column_reduced_echelon (m, permut));
00062 return vec (tp, as<generic> (permut));
00063 }
00064
00065 template<typename C> vector<generic>
00066 wrap_column_reduced_echelon_with_transform (const matrix<C>& m) {
00067 matrix<C> k;
00068 generic tp=as<generic> (column_reduced_echelon (m, k));
00069 return vec (tp, as<generic> (k));
00070 }
00071
00072 template<typename C> vector<generic>
00073 wrap_row_reduced_echelon_with_transform (const matrix<C>& m) {
00074 matrix<C> k;
00075 generic tp=as<generic> (row_reduced_echelon (m, k));
00076 return vec (tp, as<generic> (k));
00077 }
00078 }
00079
00080
00081 namespace mmx {
00082 static matrix<rational>
00083 GLUE_1 (const int &arg_1) {
00084 return hilbert_matrix_rational (arg_1);
00085 }
00086
00087 static row_tuple<rational>
00088 GLUE_2 (const tuple<rational> &arg_1) {
00089 return row_tuple<rational > (as_vector (arg_1));
00090 }
00091
00092 static matrix<rational>
00093 GLUE_3 (const tuple<rational> &arg_1) {
00094 return matrix_new (as_vector (arg_1));
00095 }
00096
00097 static matrix<rational>
00098 GLUE_4 (const tuple<row_tuple<rational> > &arg_1) {
00099 return matrix_new (as_vector (arg_1));
00100 }
00101
00102 static matrix<rational>
00103 GLUE_5 (const tuple<row_tuple<rational> > &arg_1) {
00104 return matrix_new (as_vector (arg_1));
00105 }
00106
00107 static int
00108 GLUE_6 (const matrix<rational> &arg_1) {
00109 return N (arg_1);
00110 }
00111
00112 static int
00113 GLUE_7 (const matrix<rational> &arg_1) {
00114 return rows (arg_1);
00115 }
00116
00117 static int
00118 GLUE_8 (const matrix<rational> &arg_1) {
00119 return cols (arg_1);
00120 }
00121
00122 static rational
00123 GLUE_9 (const matrix<rational> &arg_1, const int &arg_2, const int &arg_3) {
00124 return arg_1 (arg_2, arg_3);
00125 }
00126
00127 static alias<rational>
00128 GLUE_10 (const alias<matrix<rational> > &arg_1, const int &arg_2, const int &arg_3) {
00129 return alias_access<rational > (arg_1, arg_2, arg_3);
00130 }
00131
00132 static matrix<rational>
00133 GLUE_11 (const matrix<rational> &arg_1, const int &arg_2, const int &arg_3, const int &arg_4, const int &arg_5) {
00134 return range (arg_1, arg_2, arg_3, arg_4, arg_5);
00135 }
00136
00137 static matrix<rational>
00138 GLUE_12 (const matrix<rational> &arg_1) {
00139 return transpose (arg_1);
00140 }
00141
00142 static matrix<rational>
00143 GLUE_13 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00144 return horizontal_join (arg_1, arg_2);
00145 }
00146
00147 static matrix<rational>
00148 GLUE_14 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00149 return vertical_join (arg_1, arg_2);
00150 }
00151
00152 static matrix<rational>
00153 GLUE_15 (const matrix<rational> &arg_1, const permutation &arg_2) {
00154 return arg_1 * arg_2;
00155 }
00156
00157 static matrix<rational>
00158 GLUE_16 (const permutation &arg_1, const matrix<rational> &arg_2) {
00159 return arg_1 * arg_2;
00160 }
00161
00162 static matrix<rational>
00163 GLUE_17 (const rational &arg_1, const int &arg_2, const int &arg_3) {
00164 return fill_matrix (arg_1, arg_2, arg_3);
00165 }
00166
00167 static matrix<rational>
00168 GLUE_18 (const rational &arg_1, const int &arg_2) {
00169 return jordan_matrix (arg_1, arg_2);
00170 }
00171
00172 static matrix<rational>
00173 GLUE_19 (const matrix<rational> &arg_1) {
00174 return -arg_1;
00175 }
00176
00177 static matrix<rational>
00178 GLUE_20 (const matrix<rational> &arg_1) {
00179 return square (arg_1);
00180 }
00181
00182 static matrix<rational>
00183 GLUE_21 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00184 return arg_1 + arg_2;
00185 }
00186
00187 static matrix<rational>
00188 GLUE_22 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00189 return arg_1 - arg_2;
00190 }
00191
00192 static matrix<rational>
00193 GLUE_23 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00194 return arg_1 * arg_2;
00195 }
00196
00197 static matrix<rational>
00198 GLUE_24 (const rational &arg_1, const matrix<rational> &arg_2) {
00199 return arg_1 + arg_2;
00200 }
00201
00202 static matrix<rational>
00203 GLUE_25 (const matrix<rational> &arg_1, const rational &arg_2) {
00204 return arg_1 + arg_2;
00205 }
00206
00207 static matrix<rational>
00208 GLUE_26 (const rational &arg_1, const matrix<rational> &arg_2) {
00209 return arg_1 - arg_2;
00210 }
00211
00212 static matrix<rational>
00213 GLUE_27 (const matrix<rational> &arg_1, const rational &arg_2) {
00214 return arg_1 - arg_2;
00215 }
00216
00217 static matrix<rational>
00218 GLUE_28 (const rational &arg_1, const matrix<rational> &arg_2) {
00219 return arg_1 * arg_2;
00220 }
00221
00222 static matrix<rational>
00223 GLUE_29 (const matrix<rational> &arg_1, const rational &arg_2) {
00224 return arg_1 * arg_2;
00225 }
00226
00227 static bool
00228 GLUE_30 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00229 return arg_1 == arg_2;
00230 }
00231
00232 static bool
00233 GLUE_31 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00234 return arg_1 != arg_2;
00235 }
00236
00237 static bool
00238 GLUE_32 (const matrix<rational> &arg_1, const rational &arg_2) {
00239 return arg_1 == arg_2;
00240 }
00241
00242 static bool
00243 GLUE_33 (const matrix<rational> &arg_1, const rational &arg_2) {
00244 return arg_1 != arg_2;
00245 }
00246
00247 static bool
00248 GLUE_34 (const rational &arg_1, const matrix<rational> &arg_2) {
00249 return arg_1 == arg_2;
00250 }
00251
00252 static bool
00253 GLUE_35 (const rational &arg_1, const matrix<rational> &arg_2) {
00254 return arg_1 != arg_2;
00255 }
00256
00257 static matrix<rational>
00258 GLUE_36 (const rational &arg_1, const matrix<rational> &arg_2) {
00259 return arg_1 / arg_2;
00260 }
00261
00262 static matrix<rational>
00263 GLUE_37 (const matrix<rational> &arg_1, const rational &arg_2) {
00264 return arg_1 / arg_2;
00265 }
00266
00267 static matrix<rational>
00268 GLUE_38 (const matrix<rational> &arg_1, const matrix<rational> &arg_2) {
00269 return krylov (arg_1, arg_2);
00270 }
00271
00272 static rational
00273 GLUE_39 (const matrix<rational> &arg_1) {
00274 return det (arg_1);
00275 }
00276
00277 static matrix<rational>
00278 GLUE_40 (const matrix<rational> &arg_1) {
00279 return row_echelon (arg_1);
00280 }
00281
00282 static matrix<rational>
00283 GLUE_41 (const matrix<rational> &arg_1) {
00284 return column_echelon (arg_1);
00285 }
00286
00287 static matrix<rational>
00288 GLUE_42 (const matrix<rational> &arg_1) {
00289 return row_reduced_echelon (arg_1);
00290 }
00291
00292 static matrix<rational>
00293 GLUE_43 (const matrix<rational> &arg_1) {
00294 return column_reduced_echelon (arg_1);
00295 }
00296
00297 static vector<generic>
00298 GLUE_44 (const matrix<rational> &arg_1) {
00299 return wrap_row_reduced_echelon_with_transform (arg_1);
00300 }
00301
00302 static vector<generic>
00303 GLUE_45 (const matrix<rational> &arg_1) {
00304 return wrap_column_reduced_echelon_with_transform (arg_1);
00305 }
00306
00307 static vector<generic>
00308 GLUE_46 (const matrix<rational> &arg_1) {
00309 return wrap_column_reduced_echelon_with_permutation (arg_1);
00310 }
00311
00312 static matrix<rational>
00313 GLUE_47 (const matrix<rational> &arg_1) {
00314 return kernel (arg_1);
00315 }
00316
00317 static matrix<rational>
00318 GLUE_48 (const matrix<rational> &arg_1) {
00319 return image (arg_1);
00320 }
00321
00322 static int
00323 GLUE_49 (const matrix<rational> &arg_1) {
00324 return rank (arg_1);
00325 }
00326
00327 static matrix<rational>
00328 GLUE_50 (const matrix<rational> &arg_1) {
00329 return invert (arg_1);
00330 }
00331
00332 static row_tuple<rational>
00333 GLUE_51 (const row_tuple<integer> &arg_1) {
00334 return as<row_tuple<rational> > (arg_1);
00335 }
00336
00337 static matrix<rational>
00338 GLUE_52 (const matrix<integer> &arg_1) {
00339 return as<matrix<rational> > (arg_1);
00340 }
00341
00342 static row_tuple<complex<rational> >
00343 GLUE_53 (const row_tuple<integer> &arg_1) {
00344 return as<row_tuple<complex<rational> > > (arg_1);
00345 }
00346
00347 static matrix<complex<rational> >
00348 GLUE_54 (const matrix<integer> &arg_1) {
00349 return as<matrix<complex<rational> > > (arg_1);
00350 }
00351
00352 static row_tuple<generic>
00353 GLUE_55 (const row_tuple<rational> &arg_1) {
00354 return as<row_tuple<generic> > (arg_1);
00355 }
00356
00357 static matrix<generic>
00358 GLUE_56 (const matrix<rational> &arg_1) {
00359 return as<matrix<generic> > (arg_1);
00360 }
00361
00362 static row_tuple<generic>
00363 GLUE_57 (const row_tuple<complex<rational> > &arg_1) {
00364 return as<row_tuple<generic> > (arg_1);
00365 }
00366
00367 static matrix<generic>
00368 GLUE_58 (const matrix<complex<rational> > &arg_1) {
00369 return as<matrix<generic> > (arg_1);
00370 }
00371
00372 static vector<rational>
00373 GLUE_59 (const vector<int> &arg_1) {
00374 return as<vector<rational> > (arg_1);
00375 }
00376
00377 static vector<complex<rational> >
00378 GLUE_60 (const vector<int> &arg_1) {
00379 return as<vector<complex<rational> > > (arg_1);
00380 }
00381
00382 static vector<rational>
00383 GLUE_61 (const matrix<rational> &arg_1, const int &arg_2) {
00384 return row (arg_1, arg_2);
00385 }
00386
00387 static vector<rational>
00388 GLUE_62 (const matrix<rational> &arg_1, const int &arg_2) {
00389 return column (arg_1, arg_2);
00390 }
00391
00392 static row_tuple<complex<rational> >
00393 GLUE_63 (const tuple<complex<rational> > &arg_1) {
00394 return row_tuple<complex<rational> > (as_vector (arg_1));
00395 }
00396
00397 static matrix<complex<rational> >
00398 GLUE_64 (const tuple<complex<rational> > &arg_1) {
00399 return matrix_new (as_vector (arg_1));
00400 }
00401
00402 static matrix<complex<rational> >
00403 GLUE_65 (const tuple<row_tuple<complex<rational> > > &arg_1) {
00404 return matrix_new (as_vector (arg_1));
00405 }
00406
00407 static matrix<complex<rational> >
00408 GLUE_66 (const tuple<row_tuple<complex<rational> > > &arg_1) {
00409 return matrix_new (as_vector (arg_1));
00410 }
00411
00412 static int
00413 GLUE_67 (const matrix<complex<rational> > &arg_1) {
00414 return N (arg_1);
00415 }
00416
00417 static int
00418 GLUE_68 (const matrix<complex<rational> > &arg_1) {
00419 return rows (arg_1);
00420 }
00421
00422 static int
00423 GLUE_69 (const matrix<complex<rational> > &arg_1) {
00424 return cols (arg_1);
00425 }
00426
00427 static complex<rational>
00428 GLUE_70 (const matrix<complex<rational> > &arg_1, const int &arg_2, const int &arg_3) {
00429 return arg_1 (arg_2, arg_3);
00430 }
00431
00432 static alias<complex<rational> >
00433 GLUE_71 (const alias<matrix<complex<rational> > > &arg_1, const int &arg_2, const int &arg_3) {
00434 return alias_access<complex<rational> > (arg_1, arg_2, arg_3);
00435 }
00436
00437 static matrix<complex<rational> >
00438 GLUE_72 (const matrix<complex<rational> > &arg_1, const int &arg_2, const int &arg_3, const int &arg_4, const int &arg_5) {
00439 return range (arg_1, arg_2, arg_3, arg_4, arg_5);
00440 }
00441
00442 static vector<complex<rational> >
00443 GLUE_73 (const matrix<complex<rational> > &arg_1, const int &arg_2) {
00444 return row (arg_1, arg_2);
00445 }
00446
00447 static vector<complex<rational> >
00448 GLUE_74 (const matrix<complex<rational> > &arg_1, const int &arg_2) {
00449 return column (arg_1, arg_2);
00450 }
00451
00452 static matrix<complex<rational> >
00453 GLUE_75 (const matrix<complex<rational> > &arg_1) {
00454 return transpose (arg_1);
00455 }
00456
00457 static matrix<complex<rational> >
00458 GLUE_76 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00459 return horizontal_join (arg_1, arg_2);
00460 }
00461
00462 static matrix<complex<rational> >
00463 GLUE_77 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00464 return vertical_join (arg_1, arg_2);
00465 }
00466
00467 static matrix<complex<rational> >
00468 GLUE_78 (const matrix<complex<rational> > &arg_1, const permutation &arg_2) {
00469 return arg_1 * arg_2;
00470 }
00471
00472 static matrix<complex<rational> >
00473 GLUE_79 (const permutation &arg_1, const matrix<complex<rational> > &arg_2) {
00474 return arg_1 * arg_2;
00475 }
00476
00477 static matrix<rational>
00478 GLUE_80 (const vector<rational> &arg_1) {
00479 return toeplitz_matrix (arg_1);
00480 }
00481
00482 static matrix<rational>
00483 GLUE_81 (const vector<rational> &arg_1) {
00484 return hankel_matrix (arg_1);
00485 }
00486
00487 static matrix<rational>
00488 GLUE_82 (const vector<rational> &arg_1, const vector<rational> &arg_2) {
00489 return tensor_matrix (arg_1, arg_2);
00490 }
00491
00492 static matrix<rational>
00493 GLUE_83 (const vector<rational> &arg_1) {
00494 return vandermonde (arg_1);
00495 }
00496
00497 static vector<rational>
00498 GLUE_84 (const matrix<rational> &arg_1, const vector<rational> &arg_2) {
00499 return arg_1 * arg_2;
00500 }
00501
00502 static vector<rational>
00503 GLUE_85 (const vector<rational> &arg_1, const matrix<rational> &arg_2) {
00504 return arg_1 * arg_2;
00505 }
00506
00507 static matrix<complex<rational> >
00508 GLUE_86 (const complex<rational> &arg_1, const int &arg_2, const int &arg_3) {
00509 return fill_matrix (arg_1, arg_2, arg_3);
00510 }
00511
00512 static matrix<complex<rational> >
00513 GLUE_87 (const complex<rational> &arg_1, const int &arg_2) {
00514 return jordan_matrix (arg_1, arg_2);
00515 }
00516
00517 static matrix<complex<rational> >
00518 GLUE_88 (const vector<complex<rational> > &arg_1) {
00519 return toeplitz_matrix (arg_1);
00520 }
00521
00522 static matrix<complex<rational> >
00523 GLUE_89 (const vector<complex<rational> > &arg_1) {
00524 return hankel_matrix (arg_1);
00525 }
00526
00527 static matrix<complex<rational> >
00528 GLUE_90 (const vector<complex<rational> > &arg_1, const vector<complex<rational> > &arg_2) {
00529 return tensor_matrix (arg_1, arg_2);
00530 }
00531
00532 static matrix<complex<rational> >
00533 GLUE_91 (const vector<complex<rational> > &arg_1) {
00534 return vandermonde (arg_1);
00535 }
00536
00537 static matrix<complex<rational> >
00538 GLUE_92 (const matrix<complex<rational> > &arg_1) {
00539 return -arg_1;
00540 }
00541
00542 static matrix<complex<rational> >
00543 GLUE_93 (const matrix<complex<rational> > &arg_1) {
00544 return square (arg_1);
00545 }
00546
00547 static matrix<complex<rational> >
00548 GLUE_94 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00549 return arg_1 + arg_2;
00550 }
00551
00552 static matrix<complex<rational> >
00553 GLUE_95 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00554 return arg_1 - arg_2;
00555 }
00556
00557 static matrix<complex<rational> >
00558 GLUE_96 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00559 return arg_1 * arg_2;
00560 }
00561
00562 static matrix<complex<rational> >
00563 GLUE_97 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00564 return arg_1 + arg_2;
00565 }
00566
00567 static matrix<complex<rational> >
00568 GLUE_98 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00569 return arg_1 + arg_2;
00570 }
00571
00572 static matrix<complex<rational> >
00573 GLUE_99 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00574 return arg_1 - arg_2;
00575 }
00576
00577 static matrix<complex<rational> >
00578 GLUE_100 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00579 return arg_1 - arg_2;
00580 }
00581
00582 static matrix<complex<rational> >
00583 GLUE_101 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00584 return arg_1 * arg_2;
00585 }
00586
00587 static matrix<complex<rational> >
00588 GLUE_102 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00589 return arg_1 * arg_2;
00590 }
00591
00592 static vector<complex<rational> >
00593 GLUE_103 (const matrix<complex<rational> > &arg_1, const vector<complex<rational> > &arg_2) {
00594 return arg_1 * arg_2;
00595 }
00596
00597 static vector<complex<rational> >
00598 GLUE_104 (const vector<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00599 return arg_1 * arg_2;
00600 }
00601
00602 static bool
00603 GLUE_105 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00604 return arg_1 == arg_2;
00605 }
00606
00607 static bool
00608 GLUE_106 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00609 return arg_1 != arg_2;
00610 }
00611
00612 static bool
00613 GLUE_107 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00614 return arg_1 == arg_2;
00615 }
00616
00617 static bool
00618 GLUE_108 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00619 return arg_1 != arg_2;
00620 }
00621
00622 static bool
00623 GLUE_109 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00624 return arg_1 == arg_2;
00625 }
00626
00627 static bool
00628 GLUE_110 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00629 return arg_1 != arg_2;
00630 }
00631
00632 static matrix<complex<rational> >
00633 GLUE_111 (const complex<rational> &arg_1, const matrix<complex<rational> > &arg_2) {
00634 return arg_1 / arg_2;
00635 }
00636
00637 static matrix<complex<rational> >
00638 GLUE_112 (const matrix<complex<rational> > &arg_1, const complex<rational> &arg_2) {
00639 return arg_1 / arg_2;
00640 }
00641
00642 static matrix<complex<rational> >
00643 GLUE_113 (const matrix<complex<rational> > &arg_1, const matrix<complex<rational> > &arg_2) {
00644 return krylov (arg_1, arg_2);
00645 }
00646
00647 static complex<rational>
00648 GLUE_114 (const matrix<complex<rational> > &arg_1) {
00649 return det (arg_1);
00650 }
00651
00652 static matrix<complex<rational> >
00653 GLUE_115 (const matrix<complex<rational> > &arg_1) {
00654 return row_echelon (arg_1);
00655 }
00656
00657 static matrix<complex<rational> >
00658 GLUE_116 (const matrix<complex<rational> > &arg_1) {
00659 return column_echelon (arg_1);
00660 }
00661
00662 static matrix<complex<rational> >
00663 GLUE_117 (const matrix<complex<rational> > &arg_1) {
00664 return row_reduced_echelon (arg_1);
00665 }
00666
00667 static matrix<complex<rational> >
00668 GLUE_118 (const matrix<complex<rational> > &arg_1) {
00669 return column_reduced_echelon (arg_1);
00670 }
00671
00672 static vector<generic>
00673 GLUE_119 (const matrix<complex<rational> > &arg_1) {
00674 return wrap_row_reduced_echelon_with_transform (arg_1);
00675 }
00676
00677 static vector<generic>
00678 GLUE_120 (const matrix<complex<rational> > &arg_1) {
00679 return wrap_column_reduced_echelon_with_transform (arg_1);
00680 }
00681
00682 static vector<generic>
00683 GLUE_121 (const matrix<complex<rational> > &arg_1) {
00684 return wrap_column_reduced_echelon_with_permutation (arg_1);
00685 }
00686
00687 static matrix<complex<rational> >
00688 GLUE_122 (const matrix<complex<rational> > &arg_1) {
00689 return kernel (arg_1);
00690 }
00691
00692 static matrix<complex<rational> >
00693 GLUE_123 (const matrix<complex<rational> > &arg_1) {
00694 return image (arg_1);
00695 }
00696
00697 static int
00698 GLUE_124 (const matrix<complex<rational> > &arg_1) {
00699 return rank (arg_1);
00700 }
00701
00702 static matrix<complex<rational> >
00703 GLUE_125 (const matrix<complex<rational> > &arg_1) {
00704 return invert (arg_1);
00705 }
00706
00707 static matrix<rational>
00708 GLUE_126 (const matrix<rational> &arg_1) {
00709 return abs (arg_1);
00710 }
00711
00712 static row_tuple<complex<rational> >
00713 GLUE_127 (const row_tuple<rational> &arg_1) {
00714 return as<row_tuple<complex<rational> > > (arg_1);
00715 }
00716
00717 static matrix<complex<rational> >
00718 GLUE_128 (const matrix<rational> &arg_1) {
00719 return as<matrix<complex<rational> > > (arg_1);
00720 }
00721
00722 void
00723 glue_matrix_rational () {
00724 static bool done = false;
00725 if (done) return;
00726 done = true;
00727 call_glue (string ("glue_vector_rational"));
00728 call_glue (string ("glue_matrix_integer"));
00729 define_type<row_tuple<rational> > (gen (lit ("Row"), lit ("Rational")));
00730 define_type<row_tuple<complex<rational> > > (gen (lit ("Row"), gen (lit ("Complex"), lit ("Rational"))));
00731 define_type<matrix<rational> > (gen (lit ("Matrix"), lit ("Rational")));
00732 define_type<matrix<complex<rational> > > (gen (lit ("Matrix"), gen (lit ("Complex"), lit ("Rational"))));
00733 define ("hilbert_matrix", GLUE_1);
00734 define ("(.)", GLUE_2);
00735 define ("matrix", GLUE_3);
00736 define ("matrix", GLUE_4);
00737 define ("[]", GLUE_5);
00738 define ("#", GLUE_6);
00739 define ("rows", GLUE_7);
00740 define ("columns", GLUE_8);
00741 define (".[]", GLUE_9);
00742 define (".[]", GLUE_10);
00743 define (".[]", GLUE_11);
00744 define ("transpose", GLUE_12);
00745 define ("horizontal_join", GLUE_13);
00746 define ("vertical_join", GLUE_14);
00747 define ("*", GLUE_15);
00748 define ("*", GLUE_16);
00749 define ("fill_matrix", GLUE_17);
00750 define ("jordan_matrix", GLUE_18);
00751 define ("-", GLUE_19);
00752 define ("square", GLUE_20);
00753 define ("+", GLUE_21);
00754 define ("-", GLUE_22);
00755 define ("*", GLUE_23);
00756 define ("+", GLUE_24);
00757 define ("+", GLUE_25);
00758 define ("-", GLUE_26);
00759 define ("-", GLUE_27);
00760 define ("*", GLUE_28);
00761 define ("*", GLUE_29);
00762 define ("=", GLUE_30);
00763 define ("!=", GLUE_31);
00764 define ("=", GLUE_32);
00765 define ("!=", GLUE_33);
00766 define ("=", GLUE_34);
00767 define ("!=", GLUE_35);
00768 define ("/", GLUE_36);
00769 define ("/", GLUE_37);
00770 define ("krylov", GLUE_38);
00771 define ("det", GLUE_39);
00772 define ("row_echelon", GLUE_40);
00773 define ("column_echelon", GLUE_41);
00774 define ("row_reduced_echelon", GLUE_42);
00775 define ("column_reduced_echelon", GLUE_43);
00776 define ("row_reduced_echelon_with_transform", GLUE_44);
00777 define ("column_reduced_echelon_with_transform", GLUE_45);
00778 define ("column_reduced_echelon_with_permutation", GLUE_46);
00779 define ("ker", GLUE_47);
00780 define ("im", GLUE_48);
00781 define ("rank", GLUE_49);
00782 define ("invert", GLUE_50);
00783 define_converter (":>", GLUE_51, PENALTY_INCLUSION);
00784 define_converter (":>", GLUE_52, PENALTY_INCLUSION);
00785 define_converter (":>", GLUE_53, PENALTY_HOMOMORPHISM);
00786 define_converter (":>", GLUE_54, PENALTY_HOMOMORPHISM);
00787 define_converter (":>", GLUE_55, PENALTY_PROMOTE_GENERIC);
00788 define_converter (":>", GLUE_56, PENALTY_PROMOTE_GENERIC);
00789 define_converter (":>", GLUE_57, PENALTY_PROMOTE_GENERIC);
00790 define_converter (":>", GLUE_58, PENALTY_PROMOTE_GENERIC);
00791 define_converter (":>", GLUE_59, PENALTY_INCLUSION);
00792 define_converter (":>", GLUE_60, PENALTY_HOMOMORPHISM);
00793 define ("row", GLUE_61);
00794 define ("column", GLUE_62);
00795 define ("(.)", GLUE_63);
00796 define ("matrix", GLUE_64);
00797 define ("matrix", GLUE_65);
00798 define ("[]", GLUE_66);
00799 define ("#", GLUE_67);
00800 define ("rows", GLUE_68);
00801 define ("columns", GLUE_69);
00802 define (".[]", GLUE_70);
00803 define (".[]", GLUE_71);
00804 define (".[]", GLUE_72);
00805 define ("row", GLUE_73);
00806 define ("column", GLUE_74);
00807 define ("transpose", GLUE_75);
00808 define ("horizontal_join", GLUE_76);
00809 define ("vertical_join", GLUE_77);
00810 define ("*", GLUE_78);
00811 define ("*", GLUE_79);
00812 define ("toeplitz_matrix", GLUE_80);
00813 define ("hankel_matrix", GLUE_81);
00814 define ("tensor_matrix", GLUE_82);
00815 define ("vandermonde", GLUE_83);
00816 define ("*", GLUE_84);
00817 define ("*", GLUE_85);
00818 define ("fill_matrix", GLUE_86);
00819 define ("jordan_matrix", GLUE_87);
00820 define ("toeplitz_matrix", GLUE_88);
00821 define ("hankel_matrix", GLUE_89);
00822 define ("tensor_matrix", GLUE_90);
00823 define ("vandermonde", GLUE_91);
00824 define ("-", GLUE_92);
00825 define ("square", GLUE_93);
00826 define ("+", GLUE_94);
00827 define ("-", GLUE_95);
00828 define ("*", GLUE_96);
00829 define ("+", GLUE_97);
00830 define ("+", GLUE_98);
00831 define ("-", GLUE_99);
00832 define ("-", GLUE_100);
00833 define ("*", GLUE_101);
00834 define ("*", GLUE_102);
00835 define ("*", GLUE_103);
00836 define ("*", GLUE_104);
00837 define ("=", GLUE_105);
00838 define ("!=", GLUE_106);
00839 define ("=", GLUE_107);
00840 define ("!=", GLUE_108);
00841 define ("=", GLUE_109);
00842 define ("!=", GLUE_110);
00843 define ("/", GLUE_111);
00844 define ("/", GLUE_112);
00845 define ("krylov", GLUE_113);
00846 define ("det", GLUE_114);
00847 define ("row_echelon", GLUE_115);
00848 define ("column_echelon", GLUE_116);
00849 define ("row_reduced_echelon", GLUE_117);
00850 define ("column_reduced_echelon", GLUE_118);
00851 define ("row_reduced_echelon_with_transform", GLUE_119);
00852 define ("column_reduced_echelon_with_transform", GLUE_120);
00853 define ("column_reduced_echelon_with_permutation", GLUE_121);
00854 define ("ker", GLUE_122);
00855 define ("im", GLUE_123);
00856 define ("rank", GLUE_124);
00857 define ("invert", GLUE_125);
00858 define ("abs", GLUE_126);
00859 define_converter (":>", GLUE_127, PENALTY_HOMOMORPHISM);
00860 define_converter (":>", GLUE_128, PENALTY_HOMOMORPHISM);
00861 }
00862 }