00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _CXSC_SCIMATRIX_HPP_INCLUDED
00027 #define _CXSC_SCIMATRIX_HPP_INCLUDED
00028
00029 #include <cinterval.hpp>
00030 #include <cimatrix.hpp>
00031 #include <civector.hpp>
00032 #include <cidot.hpp>
00033 #include <vector>
00034 #include <algorithm>
00035 #include <iostream>
00036 #include <sparsecidot.hpp>
00037 #include <sparsematrix.hpp>
00038 #include <srmatrix.hpp>
00039 #include <scmatrix.hpp>
00040 #include <simatrix.hpp>
00041 #include <srvector.hpp>
00042 #include <sivector.hpp>
00043 #include <scvector.hpp>
00044 #include <scivector.hpp>
00045
00046 namespace cxsc {
00047
00048
00049
00050
00051 class scimatrix_slice;
00052 class scimatrix_subv;
00053
00054 inline bool comp_pair_ci(std::pair<int,cinterval> p1, std::pair<int,cinterval> p2) {
00055 return p1.first < p2.first;
00056 }
00057
00058 class scimatrix {
00059
00060 private:
00061 std::vector<int> p;
00062 std::vector<int> ind;
00063 std::vector<cinterval> x;
00064 int m;
00065 int n;
00066 int lb1,ub1,lb2,ub2;
00067
00068 public:
00069
00070 std::vector<int>& column_pointers() {
00071 return p;
00072 }
00073
00074 std::vector<int>& row_indices() {
00075 return ind;
00076 }
00077
00078 std::vector<cinterval>& values() {
00079 return x;
00080 }
00081
00082 const std::vector<int>& column_pointers() const {
00083 return p;
00084 }
00085
00086 const std::vector<int>& row_indices() const {
00087 return ind;
00088 }
00089
00090 const std::vector<cinterval>& values() const {
00091 return x;
00092 }
00093
00094 scimatrix() {
00095 p.push_back(0);
00096 m = n = 0;
00097 lb1 = lb2 = ub1 = ub2 = 0;
00098 }
00099
00100 scimatrix(const int r, const int c) : m(r),n(c),lb1(1),ub1(r),lb2(1),ub2(c) {
00101 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00102 ind.reserve(2*(m+n));
00103 x.reserve(2*(m+n));
00104
00105 p[0] = 0;
00106 }
00107
00108 scimatrix(const int r, const int c, const int e) : m(r),n(c),lb1(1),ub1(r),lb2(1),ub2(c) {
00109 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00110 ind.reserve(e);
00111 x.reserve(e);
00112
00113 p[0] = 0;
00114 }
00115
00116 scimatrix(const int m, const int n, const int nnz, const intvector& rows, const intvector& cols, const civector& values, const enum STORAGE_TYPE t = triplet) {
00117 if(t == triplet) {
00118 this->m = m;
00119 this->n = n;
00120 p = std::vector<int>(n+1,0);
00121 ind.reserve(nnz);
00122 x.reserve(nnz);
00123 lb1 = lb2 = 1;
00124 ub1 = m; ub2 = n;
00125
00126 std::vector<triplet_store<cinterval> > work;
00127 work.reserve(nnz);
00128
00129 for(int k=0 ; k<nnz ; k++) {
00130 work.push_back(triplet_store<cinterval>(rows[Lb(rows)+k],cols[Lb(cols)+k],values[Lb(values)+k]));
00131 }
00132
00133 sort(work.begin(), work.end());
00134
00135 int i=0;
00136
00137 for(int j=0 ; j<n ; j++) {
00138
00139 while((unsigned int)i < work.size() && work[i].col == j ) {
00140 ind.push_back(work[i].row);
00141 x.push_back(work[i].val);
00142 i++;
00143 }
00144
00145 p[j+1] = i;
00146 }
00147
00148 } else if(t == compressed_row) {
00149
00150 this->m = m;
00151 this->n = n;
00152 p = std::vector<int>(n+1,0);
00153 ind.reserve(nnz);
00154 x.reserve(nnz);
00155 lb1 = lb2 = 1;
00156 ub1 = m; ub2 = n;
00157
00158 for(int i=0 ; i<n+1 ; i++)
00159 p[i] = rows[Lb(rows)+i];
00160
00161 std::vector<triplet_store<cinterval> > work;
00162 work.reserve(nnz);
00163
00164 for(int j=0 ; j<n ; j++) {
00165 for(int k=p[j] ; k<p[j+1] ; k++) {
00166 work.push_back(triplet_store<cinterval>(j,cols[Lb(cols)+k],values[Lb(values)+k]));
00167 }
00168 }
00169
00170 sort(work.begin(), work.end());
00171
00172 int i=0;
00173
00174 for(int j=0 ; j<n ; j++) {
00175
00176 while((unsigned int)i < work.size() && work[i].col == j ) {
00177 ind.push_back(work[i].row);
00178 x.push_back(work[i].val);
00179 i++;
00180 }
00181
00182 p[j+1] = i;
00183 }
00184
00185 } else if(t == compressed_column) {
00186 this->m = m;
00187 this->n = n;
00188 p = std::vector<int>(n+1,0);
00189 ind.reserve(nnz);
00190 x.reserve(nnz);
00191 lb1 = lb2 = 1;
00192 ub1 = m; ub2 = n;
00193
00194 for(int i=0 ; i<n+1 ; i++)
00195 p[i] = rows[Lb(rows)+i];
00196
00197 std::vector<std::pair<int,cinterval> > work;
00198 work.reserve(n);
00199
00200 for(int j=0 ; j<n ; j++) {
00201 work.clear();
00202
00203 for(int k=p[j] ; k<p[j+1] ; k++) {
00204 work.push_back(std::make_pair(cols[Lb(cols)+k],values[Lb(values)+k]));
00205 }
00206
00207 std::sort(work.begin(),work.end(),comp_pair_ci);
00208
00209 for(unsigned int i=0 ; i<work.size() ; i++) {
00210 ind.push_back(work[i].first);
00211 x.push_back(work[i].second);
00212 }
00213 }
00214
00215 }
00216
00217 }
00218
00219 scimatrix(const int m, const int n, const int nnz, const int* rows, const int* cols, const cinterval* values, const enum STORAGE_TYPE t = triplet) {
00220 if(t == triplet) {
00221 this->m = m;
00222 this->n = n;
00223 p = std::vector<int>(n+1,0);
00224 ind.reserve(nnz);
00225 x.reserve(nnz);
00226 lb1 = lb2 = 1;
00227 ub1 = m; ub2 = n;
00228
00229 std::vector<triplet_store<cinterval> > work;
00230 work.reserve(nnz);
00231
00232 for(int k=0 ; k<nnz ; k++) {
00233 work.push_back(triplet_store<cinterval>(rows[k],cols[k],values[k]));
00234 }
00235
00236 sort(work.begin(), work.end());
00237
00238 int i=0;
00239
00240 for(int j=0 ; j<n ; j++) {
00241
00242 while((unsigned int)i < work.size() && work[i].col == j ) {
00243 ind.push_back(work[i].row);
00244 x.push_back(work[i].val);
00245 i++;
00246 }
00247
00248 p[j+1] = i;
00249 }
00250
00251 } else if(t == compressed_row) {
00252
00253 this->m = m;
00254 this->n = n;
00255 p = std::vector<int>(n+1,0);
00256 ind.reserve(nnz);
00257 x.reserve(nnz);
00258 lb1 = lb2 = 1;
00259 ub1 = m; ub2 = n;
00260
00261 for(int i=0 ; i<n+1 ; i++)
00262 p[i] = rows[i];
00263
00264 std::vector<triplet_store<cinterval> > work;
00265 work.reserve(nnz);
00266
00267 for(int j=0 ; j<n ; j++) {
00268 for(int k=p[j] ; k<p[j+1] ; k++) {
00269 work.push_back(triplet_store<cinterval>(j,cols[k],values[k]));
00270 }
00271 }
00272
00273 sort(work.begin(), work.end());
00274
00275 int i=0;
00276
00277 for(int j=0 ; j<n ; j++) {
00278
00279 while((unsigned int)i < work.size() && work[i].col == j ) {
00280 ind.push_back(work[i].row);
00281 x.push_back(work[i].val);
00282 i++;
00283 }
00284
00285 p[j+1] = i;
00286 }
00287
00288 } else if(t == compressed_column) {
00289 this->m = m;
00290 this->n = n;
00291 p = std::vector<int>(n+1,0);
00292 ind.reserve(nnz);
00293 x.reserve(nnz);
00294 lb1 = lb2 = 1;
00295 ub1 = m; ub2 = n;
00296
00297 for(int i=0 ; i<n+1 ; i++)
00298 p[i] = rows[i];
00299
00300 std::vector<std::pair<int,cinterval> > work;
00301 work.reserve(n);
00302
00303 for(int j=0 ; j<n ; j++) {
00304 work.clear();
00305
00306 for(int k=p[j] ; k<p[j+1] ; k++) {
00307 work.push_back(std::make_pair(cols[k],values[k]));
00308 }
00309
00310 std::sort(work.begin(),work.end(),comp_pair_ci);
00311
00312 for(unsigned int i=0 ; i<work.size() ; i++) {
00313 ind.push_back(work[i].first);
00314 x.push_back(work[i].second);
00315 }
00316 }
00317
00318 }
00319
00320 }
00321
00322 scimatrix(const srmatrix& A) : p(A.p), ind(A.ind), m(A.m), n(A.n), lb1(A.lb1), ub1(A.ub1), lb2(A.lb2), ub2(A.ub2) {
00323 x.reserve(A.get_nnz());
00324 for(unsigned int i=0 ; i<A.x.size() ; i++)
00325 x.push_back(cinterval(A.x[i]));
00326 }
00327
00328 scimatrix(const scmatrix& A) : p(A.p), ind(A.ind), m(A.m), n(A.n), lb1(A.lb1), ub1(A.ub1), lb2(A.lb2), ub2(A.ub2) {
00329 x.reserve(A.get_nnz());
00330 for(unsigned int i=0 ; i<A.x.size() ; i++)
00331 x.push_back(cinterval(A.x[i]));
00332 }
00333
00334 scimatrix(const simatrix& A) : p(A.p), ind(A.ind), m(A.m), n(A.n), lb1(A.lb1), ub1(A.ub1), lb2(A.lb2), ub2(A.ub2) {
00335 x.reserve(A.get_nnz());
00336 for(unsigned int i=0 ; i<A.x.size() ; i++)
00337 x.push_back(cinterval(A.x[i]));
00338 }
00339
00340 scimatrix(const rmatrix& A) : m(ColLen(A)),n(RowLen(A)),lb1(Lb(A,1)),ub1(Ub(A,1)),lb2(Lb(A,2)),ub2(Ub(A,2)) {
00341 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00342 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00343 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00344
00345 p[0] = 0;
00346 int nnz = 0;
00347
00348 for(int j=0 ; j<n ; j++) {
00349 for(int i=0 ; i<m ; i++) {
00350 if(A[i+lb1][j+lb2] != 0.0) {
00351 ind.push_back(i);
00352 x.push_back(cinterval(A[i+lb1][j+lb2]));
00353 nnz++;
00354 }
00355 }
00356
00357 p[j+1] = nnz;
00358 }
00359
00360 }
00361
00362 scimatrix(const cmatrix& A) : m(ColLen(A)),n(RowLen(A)),lb1(Lb(A,1)),ub1(Ub(A,1)),lb2(Lb(A,2)),ub2(Ub(A,2)) {
00363 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00364 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00365 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00366
00367 p[0] = 0;
00368 int nnz = 0;
00369
00370 for(int j=0 ; j<n ; j++) {
00371 for(int i=0 ; i<m ; i++) {
00372 if(A[i+lb1][j+lb2] != 0.0) {
00373 ind.push_back(i);
00374 x.push_back(cinterval(A[i+lb1][j+lb2]));
00375 nnz++;
00376 }
00377 }
00378
00379 p[j+1] = nnz;
00380 }
00381
00382 }
00383
00384 scimatrix(const imatrix& A) : m(ColLen(A)),n(RowLen(A)),lb1(Lb(A,1)),ub1(Ub(A,1)),lb2(Lb(A,2)),ub2(Ub(A,2)) {
00385 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00386 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00387 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00388
00389 p[0] = 0;
00390 int nnz = 0;
00391
00392 for(int j=0 ; j<n ; j++) {
00393 for(int i=0 ; i<m ; i++) {
00394 if(A[i+lb1][j+lb2] != 0.0) {
00395 ind.push_back(i);
00396 x.push_back(cinterval(A[i+lb1][j+lb2]));
00397 nnz++;
00398 }
00399 }
00400
00401 p[j+1] = nnz;
00402 }
00403
00404 }
00405
00406 scimatrix(const cimatrix& A) : m(ColLen(A)),n(RowLen(A)),lb1(Lb(A,1)),ub1(Ub(A,1)),lb2(Lb(A,2)),ub2(Ub(A,2)) {
00407 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00408 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00409 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m);
00410
00411 p[0] = 0;
00412 int nnz = 0;
00413
00414 for(int j=0 ; j<n ; j++) {
00415 for(int i=0 ; i<m ; i++) {
00416 if(A[i+lb1][j+lb2] != 0.0) {
00417 ind.push_back(i);
00418 x.push_back(A[i+lb1][j+lb2]);
00419 nnz++;
00420 }
00421 }
00422
00423 p[j+1] = nnz;
00424 }
00425
00426 }
00427
00428 scimatrix(const int ms, const int ns, const cimatrix& A) : m(ms), n(ns), lb1(1), ub1(ms), lb2(1), ub2(ns) {
00429
00430 int nnz = RowLen(A)*ColLen(A);
00431 p = std::vector<int>((n>0) ? n+1 : 1, 0);
00432 ind.reserve(nnz);
00433 x.reserve(nnz);
00434
00435 std::vector<triplet_store<cinterval> > work;
00436 work.reserve(nnz);
00437
00438
00439 for(int i=0 ; i<ColLen(A) ; i++) {
00440 for(int j=Lb(A,2) ; j<=Ub(A,2) ; j++) {
00441 if(i+j >=0 && i+j < n) {
00442 work.push_back(triplet_store<cinterval>(i,i+j,A[i+Lb(A,1)][j]));
00443 }
00444 }
00445 }
00446
00447 sort(work.begin(), work.end());
00448
00449 int i=0;
00450
00451 for(int j=0 ; j<n ; j++) {
00452
00453 while((unsigned int)i < work.size() && work[i].col == j ) {
00454 ind.push_back(work[i].row);
00455 x.push_back(work[i].val);
00456 i++;
00457 }
00458
00459 p[j+1] = i;
00460 }
00461
00462 }
00463
00464 scimatrix(const srmatrix_slice&);
00465 scimatrix(const scmatrix_slice&);
00466 scimatrix(const simatrix_slice&);
00467 scimatrix(const scimatrix_slice&);
00468
00469 void full(cimatrix& A) const {
00470 A = cimatrix(lb1,ub1,lb2,ub2);
00471 A = 0.0;
00472 for(int j=0 ; j<n ; j++) {
00473 for(int k=p[j] ; k<p[j+1] ; k++) {
00474 A[ind[k]+lb1][j+lb2] = x[k];
00475 }
00476 }
00477 }
00478
00479 void dropzeros() {
00480 std::vector<int> pnew(n+1,0);
00481 std::vector<int> indnew;
00482 std::vector<cinterval> xnew;
00483 int nnznew = 0;
00484
00485 for(int j=0 ; j<n ; j++) {
00486 for(int k=p[j] ; k<p[j+1] ; k++) {
00487 if(x[k] != 0.0) {
00488 xnew.push_back(x[k]);
00489 indnew.push_back(ind[k]);
00490 nnznew++;
00491 }
00492 }
00493 pnew[j+1] = nnznew;
00494 }
00495
00496 p = pnew;
00497 ind = indnew;
00498 x = xnew;
00499 }
00500
00501
00502 scimatrix& operator=(const real& A) {
00503 return sp_ms_assign<scimatrix,real,cinterval>(*this,A);
00504 }
00505
00506 scimatrix& operator=(const interval& A) {
00507 return sp_ms_assign<scimatrix,interval,cinterval>(*this,A);
00508 }
00509
00510 scimatrix& operator=(const complex& A) {
00511 return sp_ms_assign<scimatrix,complex,cinterval>(*this,A);
00512 }
00513
00514 scimatrix& operator=(const cinterval& A) {
00515 return sp_ms_assign<scimatrix,cinterval,cinterval>(*this,A);
00516 }
00517
00518 scimatrix& operator=(const rmatrix& A) {
00519 return spf_mm_assign<scimatrix,rmatrix,cinterval>(*this,A);
00520 }
00521
00522 scimatrix& operator=(const cmatrix& A) {
00523 return spf_mm_assign<scimatrix,cmatrix,cinterval>(*this,A);
00524 }
00525
00526 scimatrix& operator=(const imatrix& A) {
00527 return spf_mm_assign<scimatrix,imatrix,cinterval>(*this,A);
00528 }
00529
00530 scimatrix& operator=(const cimatrix& A) {
00531 return spf_mm_assign<scimatrix,cimatrix,cinterval>(*this,A);
00532 }
00533
00534 scimatrix& operator=(const rmatrix_slice& A) {
00535 return spf_mm_assign<scimatrix,rmatrix_slice,cinterval>(*this,A);
00536 }
00537
00538 scimatrix& operator=(const cmatrix_slice& A) {
00539 return spf_mm_assign<scimatrix,cmatrix_slice,cinterval>(*this,A);
00540 }
00541
00542 scimatrix& operator=(const imatrix_slice& A) {
00543 return spf_mm_assign<scimatrix,imatrix_slice,cinterval>(*this,A);
00544 }
00545
00546 scimatrix& operator=(const cimatrix_slice& A) {
00547 return spf_mm_assign<scimatrix,cimatrix_slice,cinterval>(*this,A);
00548 }
00549
00550 scimatrix& operator=(const srmatrix& A) {
00551 m = A.m;
00552 n = A.n;
00553 p = A.p;
00554 ind = A.ind;
00555 x.clear();
00556 x.reserve(A.get_nnz());
00557 for(unsigned int i=0 ; i<A.x.size() ; i++)
00558 x.push_back(cinterval(A.x[i]));
00559 return *this;
00560 }
00561
00562 scimatrix& operator=(const scmatrix& A) {
00563 m = A.m;
00564 n = A.n;
00565 p = A.p;
00566 ind = A.ind;
00567 x.clear();
00568 x.reserve(A.get_nnz());
00569 for(unsigned int i=0 ; i<A.x.size() ; i++)
00570 x.push_back(cinterval(A.x[i]));
00571 return *this;
00572 }
00573
00574 scimatrix& operator=(const simatrix& A) {
00575 m = A.m;
00576 n = A.n;
00577 p = A.p;
00578 ind = A.ind;
00579 x.clear();
00580 x.reserve(A.get_nnz());
00581 for(unsigned int i=0 ; i<A.x.size() ; i++)
00582 x.push_back(cinterval(A.x[i]));
00583 return *this;
00584 }
00585
00586
00587
00588
00589
00590
00591
00592
00593 scimatrix& operator=(const srmatrix_slice&);
00594 scimatrix& operator=(const scmatrix_slice&);
00595 scimatrix& operator=(const simatrix_slice&);
00596 scimatrix& operator=(const scimatrix_slice&);
00597
00598 const cinterval operator()(int i, int j) const {
00599 #if(CXSC_INDEX_CHECK)
00600 if(i<lb1 || i>ub1 || j<lb2 || j>ub2)
00601 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix::operator()(int, int)"));
00602 #endif
00603 cinterval r(0.0);
00604 for(int k=p[j-lb2] ; k<p[j-lb2+1] && ind[k]<=i-lb1 ; k++) {
00605 if(ind[k] == i-lb1) r = x[k];
00606 }
00607 return r;
00608 }
00609
00610 cinterval& element(int i, int j) {
00611 #if(CXSC_INDEX_CHECK)
00612 if(i<lb1 || i>ub1 || j<lb2 || j>ub2)
00613 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix::element(int, int)"));
00614 #endif
00615 int k;
00616 for(k=p[j-lb2] ; k<p[j-lb2+1] && ind[k]<=i-lb1 ; k++) {
00617 if(ind[k] == i-lb1) return x[k];
00618 }
00619
00620
00621 std::vector<int>::iterator ind_it = ind.begin() + k;
00622 std::vector<cinterval>::iterator x_it = x.begin() + k;
00623 ind.insert(ind_it, i-lb1);
00624 x_it = x.insert(x_it, cinterval(0.0));
00625 for(k=j-lb2+1 ; k<(int)p.size() ; k++)
00626 p[k]++;
00627
00628 return *x_it;
00629 }
00630
00631 scimatrix_subv operator[](const cxscmatrix_column&);
00632 scimatrix_subv operator[](const int);
00633 const scimatrix_subv operator[](const cxscmatrix_column&) const;
00634 const scimatrix_subv operator[](const int) const;
00635
00636 scimatrix_slice operator()(const int, const int , const int, const int);
00637
00638 scimatrix operator()(const intvector& pervec, const intvector& q) {
00639 scimatrix A(m,n,get_nnz());
00640 intvector per = perminv(pervec);
00641
00642 int nnz=0;
00643 for(int k=0 ; k<n ; k++) {
00644 A.p[k] = nnz;
00645
00646 std::map<int,cinterval> work;
00647 for(int j=p[q[Lb(q)+k]] ; j<p[q[Lb(q)+k]+1] ; j++)
00648 work.insert(std::make_pair(per[Lb(per)+ind[j]], x[j]));
00649
00650 for(std::map<int,cinterval>::iterator it = work.begin() ; it != work.end() ; it++) {
00651 A.ind.push_back(it->first);
00652 A.x.push_back(it->second);
00653 }
00654
00655 nnz += work.size();
00656
00657 }
00658
00659 A.p[n] = nnz;
00660
00661 return A;
00662 }
00663
00664 scimatrix operator()(const intvector& pervec) {
00665 scimatrix A(m,n,get_nnz());
00666 intvector per = perminv(pervec);
00667
00668 for(int k=0 ; k<n ; k++) {
00669 A.p[k] = p[k];
00670
00671 std::map<int,cinterval> work;
00672 for(int j=p[k] ; j<p[k+1] ; j++)
00673 work.insert(std::make_pair(per[Lb(per)+ind[j]], x[j]));
00674
00675 for(std::map<int,cinterval>::iterator it = work.begin() ; it != work.end() ; it++) {
00676 A.ind.push_back(it->first);
00677 A.x.push_back(it->second);
00678 }
00679
00680 }
00681
00682 A.p[n] = p[n];
00683
00684 return A;
00685 }
00686
00687 scimatrix operator()(const intmatrix& P, const intmatrix& Q) {
00688 intvector p = permvec(P);
00689 intvector q = perminv(permvec(Q));
00690 return (*this)(p,q);
00691 }
00692
00693 scimatrix operator()(const intmatrix& P) {
00694 intvector p = permvec(P);
00695 return (*this)(p);
00696 }
00697
00698 real density() const {
00699 return p[n]/((double)m*n);
00700 }
00701
00702 int get_nnz() const {
00703 return p[n];
00704 }
00705
00706 scimatrix& operator+=(const rmatrix& B) {
00707 return spf_mm_addassign<scimatrix,rmatrix,cimatrix>(*this,B);
00708 }
00709
00710 scimatrix& operator+=(const cmatrix& B) {
00711 return spf_mm_addassign<scimatrix,cmatrix,cimatrix>(*this,B);
00712 }
00713
00714 scimatrix& operator+=(const imatrix& B) {
00715 return spf_mm_addassign<scimatrix,imatrix,cimatrix>(*this,B);
00716 }
00717
00718 scimatrix& operator+=(const cimatrix& B) {
00719 return spf_mm_addassign<scimatrix,cimatrix,cimatrix>(*this,B);
00720 }
00721
00722 scimatrix& operator+=(const rmatrix_slice& B) {
00723 return spf_mm_addassign<scimatrix,rmatrix_slice,cimatrix>(*this,B);
00724 }
00725
00726 scimatrix& operator+=(const cmatrix_slice& B) {
00727 return spf_mm_addassign<scimatrix,cmatrix_slice,cimatrix>(*this,B);
00728 }
00729
00730 scimatrix& operator+=(const imatrix_slice& B) {
00731 return spf_mm_addassign<scimatrix,imatrix_slice,cimatrix>(*this,B);
00732 }
00733
00734 scimatrix& operator+=(const cimatrix_slice& B) {
00735 return spf_mm_addassign<scimatrix,cimatrix_slice,cimatrix>(*this,B);
00736 }
00737
00738 scimatrix& operator+=(const srmatrix& B) {
00739 return spsp_mm_addassign<scimatrix,srmatrix,cinterval>(*this,B);
00740 }
00741
00742 scimatrix& operator+=(const scmatrix& B) {
00743 return spsp_mm_addassign<scimatrix,scmatrix,cinterval>(*this,B);
00744 }
00745
00746 scimatrix& operator+=(const simatrix& B) {
00747 return spsp_mm_addassign<scimatrix,simatrix,cinterval>(*this,B);
00748 }
00749
00750 scimatrix& operator+=(const scimatrix& B) {
00751 return spsp_mm_addassign<scimatrix,scimatrix,cinterval>(*this,B);
00752 }
00753
00754 scimatrix& operator-=(const rmatrix& B) {
00755 return spf_mm_subassign<scimatrix,rmatrix,cimatrix>(*this,B);
00756 }
00757
00758 scimatrix& operator-=(const cmatrix& B) {
00759 return spf_mm_subassign<scimatrix,cmatrix,cimatrix>(*this,B);
00760 }
00761
00762 scimatrix& operator-=(const imatrix& B) {
00763 return spf_mm_subassign<scimatrix,imatrix,cimatrix>(*this,B);
00764 }
00765
00766 scimatrix& operator-=(const cimatrix& B) {
00767 return spf_mm_subassign<scimatrix,cimatrix,cimatrix>(*this,B);
00768 }
00769
00770 scimatrix& operator-=(const rmatrix_slice& B) {
00771 return spf_mm_subassign<scimatrix,rmatrix_slice,cimatrix>(*this,B);
00772 }
00773
00774 scimatrix& operator-=(const cmatrix_slice& B) {
00775 return spf_mm_subassign<scimatrix,cmatrix_slice,cimatrix>(*this,B);
00776 }
00777
00778 scimatrix& operator-=(const imatrix_slice& B) {
00779 return spf_mm_subassign<scimatrix,imatrix_slice,cimatrix>(*this,B);
00780 }
00781
00782 scimatrix& operator-=(const cimatrix_slice& B) {
00783 return spf_mm_subassign<scimatrix,cimatrix_slice,cimatrix>(*this,B);
00784 }
00785
00786 scimatrix& operator-=(const srmatrix& B) {
00787 return spsp_mm_subassign<scimatrix,srmatrix,cinterval>(*this,B);
00788 }
00789
00790 scimatrix& operator-=(const scmatrix& B) {
00791 return spsp_mm_subassign<scimatrix,scmatrix,cinterval>(*this,B);
00792 }
00793
00794 scimatrix& operator-=(const simatrix& B) {
00795 return spsp_mm_subassign<scimatrix,simatrix,cinterval>(*this,B);
00796 }
00797
00798 scimatrix& operator-=(const scimatrix& B) {
00799 return spsp_mm_subassign<scimatrix,scimatrix,cinterval>(*this,B);
00800 }
00801
00802 scimatrix& operator|=(const rmatrix& B) {
00803 return spf_mm_hullassign<scimatrix,rmatrix,cimatrix>(*this,B);
00804 }
00805
00806 scimatrix& operator|=(const cmatrix& B) {
00807 return spf_mm_hullassign<scimatrix,cmatrix,cimatrix>(*this,B);
00808 }
00809
00810 scimatrix& operator|=(const imatrix& B) {
00811 return spf_mm_hullassign<scimatrix,imatrix,cimatrix>(*this,B);
00812 }
00813
00814 scimatrix& operator|=(const cimatrix& B) {
00815 return spf_mm_hullassign<scimatrix,cimatrix,cimatrix>(*this,B);
00816 }
00817
00818 scimatrix& operator|=(const rmatrix_slice& B) {
00819 return spf_mm_hullassign<scimatrix,rmatrix_slice,cimatrix>(*this,B);
00820 }
00821
00822 scimatrix& operator|=(const cmatrix_slice& B) {
00823 return spf_mm_hullassign<scimatrix,cmatrix_slice,cimatrix>(*this,B);
00824 }
00825
00826 scimatrix& operator|=(const imatrix_slice& B) {
00827 return spf_mm_hullassign<scimatrix,imatrix_slice,cimatrix>(*this,B);
00828 }
00829
00830 scimatrix& operator|=(const cimatrix_slice& B) {
00831 return spf_mm_hullassign<scimatrix,cimatrix_slice,cimatrix>(*this,B);
00832 }
00833
00834 scimatrix& operator|=(const srmatrix& B) {
00835 return spsp_mm_hullassign<scimatrix,srmatrix,cinterval>(*this,B);
00836 }
00837
00838 scimatrix& operator|=(const scmatrix& B) {
00839 return spsp_mm_hullassign<scimatrix,scmatrix,cinterval>(*this,B);
00840 }
00841
00842 scimatrix& operator|=(const simatrix& B) {
00843 return spsp_mm_hullassign<scimatrix,simatrix,cinterval>(*this,B);
00844 }
00845
00846 scimatrix& operator|=(const scimatrix& B) {
00847 return spsp_mm_hullassign<scimatrix,scimatrix,cinterval>(*this,B);
00848 }
00849
00850 scimatrix& operator&=(const imatrix& B) {
00851 return spf_mm_intersectassign<scimatrix,imatrix,cimatrix>(*this,B);
00852 }
00853
00854 scimatrix& operator&=(const cimatrix& B) {
00855 return spf_mm_intersectassign<scimatrix,cimatrix,cimatrix>(*this,B);
00856 }
00857
00858 scimatrix& operator&=(const imatrix_slice& B) {
00859 return spf_mm_intersectassign<scimatrix,imatrix_slice,cimatrix>(*this,B);
00860 }
00861
00862 scimatrix& operator&=(const cimatrix_slice& B) {
00863 return spf_mm_intersectassign<scimatrix,cimatrix_slice,cimatrix>(*this,B);
00864 }
00865
00866 scimatrix& operator&=(const simatrix& B) {
00867 return spsp_mm_intersectassign<scimatrix,simatrix,cinterval>(*this,B);
00868 }
00869
00870 scimatrix& operator&=(const scimatrix& B) {
00871 return spsp_mm_intersectassign<scimatrix,scimatrix,cinterval>(*this,B);
00872 }
00873
00874 scimatrix& operator*=(const cmatrix& B) {
00875 return spf_mm_multassign<scimatrix,cmatrix,sparse_cidot,cimatrix>(*this,B);
00876 }
00877
00878 scimatrix& operator*=(const rmatrix& B) {
00879 return spf_mm_multassign<scimatrix,rmatrix,sparse_cidot,cimatrix>(*this,B);
00880 }
00881
00882 scimatrix& operator*=(const imatrix& B) {
00883 return spf_mm_multassign<scimatrix,imatrix,sparse_cidot,cimatrix>(*this,B);
00884 }
00885
00886 scimatrix& operator*=(const cimatrix& B) {
00887 return spf_mm_multassign<scimatrix,cimatrix,sparse_cidot,cimatrix>(*this,B);
00888 }
00889
00890 scimatrix& operator*=(const rmatrix_slice& B) {
00891 return spf_mm_multassign<scimatrix,rmatrix_slice,sparse_cidot,cimatrix>(*this,B);
00892 }
00893
00894 scimatrix& operator*=(const cmatrix_slice& B) {
00895 return spf_mm_multassign<scimatrix,cmatrix_slice,sparse_cidot,cimatrix>(*this,B);
00896 }
00897
00898 scimatrix& operator*=(const imatrix_slice& B) {
00899 return spf_mm_multassign<scimatrix,imatrix_slice,sparse_cidot,cimatrix>(*this,B);
00900 }
00901
00902 scimatrix& operator*=(const cimatrix_slice& B) {
00903 return spf_mm_multassign<scimatrix,cimatrix_slice,sparse_cidot,cimatrix>(*this,B);
00904 }
00905
00906 scimatrix& operator*=(const srmatrix& B) {
00907 return spsp_mm_multassign<scimatrix,srmatrix,sparse_cidot,cinterval>(*this,B);
00908 }
00909
00910 scimatrix& operator*=(const scmatrix& B) {
00911 return spsp_mm_multassign<scimatrix,scmatrix,sparse_cidot,cinterval>(*this,B);
00912 }
00913
00914 scimatrix& operator*=(const simatrix& B) {
00915 return spsp_mm_multassign<scimatrix,simatrix,sparse_cidot,cinterval>(*this,B);
00916 }
00917
00918 scimatrix& operator*=(const scimatrix& B) {
00919 return spsp_mm_multassign<scimatrix,scimatrix,sparse_cidot,cinterval>(*this,B);
00920 }
00921
00922 scimatrix& operator*=(const real& r) {
00923 return sp_ms_multassign(*this,r);
00924 }
00925
00926 scimatrix& operator*=(const complex& r) {
00927 return sp_ms_multassign(*this,r);
00928 }
00929
00930 scimatrix& operator*=(const interval& r) {
00931 return sp_ms_multassign(*this,r);
00932 }
00933
00934 scimatrix& operator*=(const cinterval& r) {
00935 return sp_ms_multassign(*this,r);
00936 }
00937
00938 scimatrix& operator/=(const real& r) {
00939 return sp_ms_divassign(*this,r);
00940 }
00941
00942 scimatrix& operator/=(const complex& r) {
00943 return sp_ms_divassign(*this,r);
00944 }
00945
00946 scimatrix& operator/=(const interval& r) {
00947 return sp_ms_divassign(*this,r);
00948 }
00949
00950 scimatrix& operator/=(const cinterval& r) {
00951 return sp_ms_divassign(*this,r);
00952 }
00953
00954 friend void SetLb(scimatrix&, const int, const int);
00955 friend void SetUb(scimatrix&, const int, const int);
00956 friend int Lb(const scimatrix&, int);
00957 friend int Ub(const scimatrix&, int);
00958 friend int RowLen(const scimatrix&);
00959 friend int ColLen(const scimatrix&);
00960 friend simatrix Re(const scimatrix&);
00961 friend simatrix Im(const scimatrix&);
00962 friend scmatrix Sup(const scimatrix&);
00963 friend scmatrix Inf(const scimatrix&);
00964 friend srmatrix InfRe(const scimatrix&);
00965 friend srmatrix InfIm(const scimatrix&);
00966 friend srmatrix SupRe(const scimatrix&);
00967 friend srmatrix SupIm(const scimatrix&);
00968 friend scimatrix conj(const scimatrix&);
00969 friend simatrix abs(const scimatrix&);
00970 friend scmatrix mid(const scimatrix&);
00971 friend scmatrix diam(const scimatrix&);
00972
00973 friend scimatrix transp(const scimatrix&);
00974 friend scimatrix Id(const scimatrix&);
00975
00976 friend std::istream& operator>>(std::istream&, scimatrix_slice&);
00977 friend std::istream& operator>>(std::istream&, scimatrix_subv&);
00978
00979 friend class srmatrix_slice;
00980 friend class srmatrix_subv;
00981 friend class srvector;
00982 friend class scmatrix_slice;
00983 friend class scmatrix_subv;
00984 friend class scvector;
00985 friend class simatrix_slice;
00986 friend class simatrix_subv;
00987 friend class sivector;
00988 friend class scimatrix_slice;
00989 friend class scimatrix_subv;
00990 friend class scivector;
00991 friend class cimatrix;
00992
00993 #include "matrix_friend_declarations.inl"
00994 };
00995
00996 inline cimatrix::cimatrix(const srmatrix& A) {
00997 dat = new cinterval[A.m*A.n];
00998 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2;
00999 xsize = A.n;
01000 ysize = A.m;
01001 *this = 0.0;
01002 for(int j=0 ; j<A.n ; j++) {
01003 for(int k=A.p[j] ; k<A.p[j+1] ; k++) {
01004 dat[A.ind[k]*A.n+j] = A.x[k];
01005 }
01006 }
01007 }
01008
01009 inline cimatrix::cimatrix(const simatrix& A) {
01010 dat = new cinterval[A.m*A.n];
01011 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2;
01012 xsize = A.n;
01013 ysize = A.m;
01014 *this = 0.0;
01015 for(int j=0 ; j<A.n ; j++) {
01016 for(int k=A.p[j] ; k<A.p[j+1] ; k++) {
01017 dat[A.ind[k]*A.n+j] = A.x[k];
01018 }
01019 }
01020 }
01021
01022 inline cimatrix::cimatrix(const scmatrix& A) {
01023 dat = new cinterval[A.m*A.n];
01024 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2;
01025 xsize = A.n;
01026 ysize = A.m;
01027 *this = 0.0;
01028 for(int j=0 ; j<A.n ; j++) {
01029 for(int k=A.p[j] ; k<A.p[j+1] ; k++) {
01030 dat[A.ind[k]*A.n+j] = A.x[k];
01031 }
01032 }
01033 }
01034
01035 inline cimatrix::cimatrix(const scimatrix& A) {
01036 dat = new cinterval[A.m*A.n];
01037 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2;
01038 xsize = A.n;
01039 ysize = A.m;
01040 *this = 0.0;
01041 for(int j=0 ; j<A.n ; j++) {
01042 for(int k=A.p[j] ; k<A.p[j+1] ; k++) {
01043 dat[A.ind[k]*A.n+j] = A.x[k];
01044 }
01045 }
01046 }
01047
01048 inline scimatrix Id(const scimatrix& A) {
01049 scimatrix I(A.m, A.n, (A.m>A.n) ? A.m : A.n);
01050 I.lb1 = A.lb1; I.lb2 = A.lb2;
01051 I.ub1 = A.ub1; I.ub2 = A.ub2;
01052
01053 if(A.m < A.n) {
01054 for(int i=0 ; i<A.m ; i++) {
01055 I.p[i+1] = I.p[i] + 1;
01056 I.ind.push_back(i);
01057 I.x.push_back(cinterval(1.0));
01058 }
01059 } else {
01060 for(int i=0 ; i<A.n ; i++) {
01061 I.p[i+1] = I.p[i] + 1;
01062 I.ind.push_back(i);
01063 I.x.push_back(cinterval(1.0));
01064 }
01065 }
01066
01067 return I;
01068 }
01069
01070 inline scimatrix transp(const scimatrix& A) {
01071 scimatrix B(A.n, A.m, A.get_nnz());
01072
01073
01074 std::vector<int> w(A.m,0);
01075 for(unsigned int i=0 ; i<A.ind.size() ; i++)
01076 w[A.ind[i]]++;
01077
01078
01079 B.p.resize(A.m+1);
01080 B.p[0] = 0;
01081 for(unsigned int i=1 ; i<B.p.size() ; i++)
01082 B.p[i] = w[i-1] + B.p[i-1];
01083
01084
01085 w.insert(w.begin(), 0);
01086 for(unsigned int i=1 ; i<w.size() ; i++) {
01087 w[i] += w[i-1];
01088 }
01089
01090
01091 int q;
01092 B.ind.resize(A.get_nnz());
01093 B.x.resize(A.get_nnz());
01094 for(int j=0 ; j<A.n ; j++) {
01095 for(int k=A.p[j] ; k<A.p[j+1] ; k++) {
01096 q = w[A.ind[k]]++;
01097 B.ind[q] = j;
01098 B.x[q] = A.x[k];
01099 }
01100 }
01101
01102 return B;
01103 }
01104
01105 inline void SetLb(scimatrix& A, const int i, const int j) {
01106 if(i==1) {
01107 A.lb1 = j;
01108 A.ub1 = j + A.m - 1;
01109 } else if(i==2) {
01110 A.lb2 = j;
01111 A.ub2 = j + A.n - 1;
01112 }
01113 }
01114
01115 inline void SetUb(scimatrix& A, const int i, const int j) {
01116 if(i==1) {
01117 A.ub1 = j;
01118 A.lb1 = j - A.m + 1;
01119 } else if(i==2) {
01120 A.ub2 = j;
01121 A.lb2 = j - A.n + 1;
01122 }
01123 }
01124
01125
01126 inline int Lb(const scimatrix& A, int i) {
01127 if(i==1)
01128 return A.lb1;
01129 else if(i==2)
01130 return A.lb2;
01131 else
01132 return 1;
01133 }
01134
01135 inline int Ub(const scimatrix& A, int i) {
01136 if(i==1)
01137 return A.ub1;
01138 else if(i==2)
01139 return A.ub2;
01140 else
01141 return 1;
01142 }
01143
01144 inline int RowLen(const scimatrix& A) {
01145 return A.n;
01146 }
01147
01148 inline int ColLen(const scimatrix& A) {
01149 return A.m;
01150 }
01151
01152 inline void Resize(scimatrix& A) {
01153 sp_m_resize(A);
01154 }
01155
01156 inline void Resize(scimatrix& A, const int m, const int n) {
01157 sp_m_resize(A,m,n);
01158 }
01159
01160 inline void Resize(scimatrix& A, const int l1, const int u1, const int l2, const int u2) {
01161 sp_m_resize(A,l1,u1,l2,u2);
01162 }
01163
01164 inline simatrix Re(const scimatrix& A) {
01165 simatrix res(A.m,A.n,A.get_nnz());
01166 res.lb1 = A.lb1;
01167 res.lb2 = A.lb2;
01168 res.ub1 = A.ub1;
01169 res.ub2 = A.ub2;
01170 res.p = A.p;
01171 res.ind = A.ind;
01172
01173 for(int i=0 ; i<res.get_nnz() ; i++)
01174 res.x.push_back(Re(A.x[i]));
01175
01176 res.dropzeros();
01177
01178 return res;
01179 }
01180
01181 inline simatrix Im(const scimatrix& A) {
01182 simatrix res(A.m,A.n,A.get_nnz());
01183 res.lb1 = A.lb1;
01184 res.lb2 = A.lb2;
01185 res.ub1 = A.ub1;
01186 res.ub2 = A.ub2;
01187 res.p = A.p;
01188 res.ind = A.ind;
01189
01190 for(int i=0 ; i<res.get_nnz() ; i++)
01191 res.x.push_back(Im(A.x[i]));
01192
01193 res.dropzeros();
01194
01195 return res;
01196 }
01197
01198 inline scmatrix Inf(const scimatrix& A) {
01199 scmatrix res(A.m,A.n,A.get_nnz());
01200 res.lb1 = A.lb1;
01201 res.lb2 = A.lb2;
01202 res.ub1 = A.ub1;
01203 res.ub2 = A.ub2;
01204 res.p = A.p;
01205 res.ind = A.ind;
01206
01207 for(int i=0 ; i<res.get_nnz() ; i++)
01208 res.x.push_back(Inf(A.x[i]));
01209
01210 res.dropzeros();
01211
01212 return res;
01213 }
01214
01215 inline scmatrix Sup(const scimatrix& A) {
01216 scmatrix res(A.m,A.n,A.get_nnz());
01217 res.lb1 = A.lb1;
01218 res.lb2 = A.lb2;
01219 res.ub1 = A.ub1;
01220 res.ub2 = A.ub2;
01221 res.p = A.p;
01222 res.ind = A.ind;
01223
01224 for(int i=0 ; i<res.get_nnz() ; i++)
01225 res.x.push_back(Sup(A.x[i]));
01226
01227 res.dropzeros();
01228
01229 return res;
01230 }
01231
01232 inline scimatrix conj(const scimatrix& A) {
01233 scimatrix res(A.m,A.n,A.get_nnz());
01234 res.lb1 = A.lb1;
01235 res.lb2 = A.lb2;
01236 res.ub1 = A.ub1;
01237 res.ub2 = A.ub2;
01238 res.p = A.p;
01239 res.ind = A.ind;
01240
01241 for(int i=0 ; i<res.get_nnz() ; i++)
01242 res.x.push_back(conj(A.x[i]));
01243
01244 res.dropzeros();
01245
01246 return res;
01247 }
01248
01249 inline simatrix abs(const scimatrix& A) {
01250 simatrix res(A.m,A.n,A.get_nnz());
01251 res.lb1 = A.lb1;
01252 res.lb2 = A.lb2;
01253 res.ub1 = A.ub1;
01254 res.ub2 = A.ub2;
01255 res.p = A.p;
01256 res.ind = A.ind;
01257
01258 for(int i=0 ; i<res.get_nnz() ; i++)
01259 res.x.push_back(abs(A.x[i]));
01260
01261 res.dropzeros();
01262
01263 return res;
01264 }
01265
01266 inline scmatrix mid(const scimatrix& A) {
01267 scmatrix res(A.m,A.n,A.get_nnz());
01268 res.lb1 = A.lb1;
01269 res.lb2 = A.lb2;
01270 res.ub1 = A.ub1;
01271 res.ub2 = A.ub2;
01272 res.p = A.p;
01273 res.ind = A.ind;
01274
01275 for(int i=0 ; i<res.get_nnz() ; i++)
01276 res.x.push_back(mid(A.x[i]));
01277
01278 res.dropzeros();
01279
01280 return res;
01281 }
01282
01283 inline scmatrix diam(const scimatrix& A) {
01284 scmatrix res(A.m,A.n,A.get_nnz());
01285 res.lb1 = A.lb1;
01286 res.lb2 = A.lb2;
01287 res.ub1 = A.ub1;
01288 res.ub2 = A.ub2;
01289 res.p = A.p;
01290 res.ind = A.ind;
01291
01292 for(int i=0 ; i<res.get_nnz() ; i++)
01293 res.x.push_back(diam(A.x[i]));
01294
01295 res.dropzeros();
01296
01297 return res;
01298 }
01299
01300 inline srmatrix InfRe(const scimatrix& A) {
01301 srmatrix res(A.m,A.n,A.get_nnz());
01302 res.lb1 = A.lb1;
01303 res.lb2 = A.lb2;
01304 res.ub1 = A.ub1;
01305 res.ub2 = A.ub2;
01306 res.p = A.p;
01307 res.ind = A.ind;
01308
01309 for(int i=0 ; i<res.get_nnz() ; i++)
01310 res.x.push_back(InfRe(A.x[i]));
01311
01312 res.dropzeros();
01313
01314 return res;
01315 }
01316
01317 inline srmatrix InfIm(const scimatrix& A) {
01318 srmatrix res(A.m,A.n,A.get_nnz());
01319 res.lb1 = A.lb1;
01320 res.lb2 = A.lb2;
01321 res.ub1 = A.ub1;
01322 res.ub2 = A.ub2;
01323 res.p = A.p;
01324 res.ind = A.ind;
01325
01326 for(int i=0 ; i<res.get_nnz() ; i++)
01327 res.x.push_back(InfIm(A.x[i]));
01328
01329 res.dropzeros();
01330
01331 return res;
01332 }
01333
01334 inline srmatrix SupRe(const scimatrix& A) {
01335 srmatrix res(A.m,A.n,A.get_nnz());
01336 res.lb1 = A.lb1;
01337 res.lb2 = A.lb2;
01338 res.ub1 = A.ub1;
01339 res.ub2 = A.ub2;
01340 res.p = A.p;
01341 res.ind = A.ind;
01342
01343 for(int i=0 ; i<res.get_nnz() ; i++)
01344 res.x.push_back(SupRe(A.x[i]));
01345
01346 res.dropzeros();
01347
01348 return res;
01349 }
01350
01351 inline srmatrix SupIm(const scimatrix& A) {
01352 srmatrix res(A.m,A.n,A.get_nnz());
01353 res.lb1 = A.lb1;
01354 res.lb2 = A.lb2;
01355 res.ub1 = A.ub1;
01356 res.ub2 = A.ub2;
01357 res.p = A.p;
01358 res.ind = A.ind;
01359
01360 for(int i=0 ; i<res.get_nnz() ; i++)
01361 res.x.push_back(SupIm(A.x[i]));
01362
01363 res.dropzeros();
01364
01365 return res;
01366 }
01367
01368 inline cimatrix operator*(const cimatrix& A, const srmatrix& B) {
01369 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(A,B);
01370 }
01371
01372 inline cimatrix operator*(const cimatrix& A, const scmatrix& B) {
01373 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(A,B);
01374 }
01375
01376 inline cimatrix operator*(const cimatrix& A, const simatrix& B) {
01377 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(A,B);
01378 }
01379
01380 inline cimatrix operator*(const cimatrix& A, const scimatrix& B) {
01381 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(A,B);
01382 }
01383
01384 inline cimatrix operator*(const rmatrix& A, const scimatrix& B) {
01385 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(A,B);
01386 }
01387
01388 inline cimatrix operator*(const cmatrix& A, const scimatrix& B) {
01389 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(A,B);
01390 }
01391
01392 inline cimatrix operator*(const imatrix& A, const scimatrix& B) {
01393 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(A,B);
01394 }
01395
01396 inline cimatrix operator*(const cmatrix& A, const simatrix& B) {
01397 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(A,B);
01398 }
01399
01400 inline cimatrix operator*(const imatrix& A, const scmatrix& B) {
01401 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(A,B);
01402 }
01403
01404 inline cimatrix operator*(const scimatrix& A, const rmatrix& B) {
01405 return spf_mm_mult<scimatrix,rmatrix,cimatrix,sparse_cidot>(A,B);
01406 }
01407
01408 inline cimatrix operator*(const scimatrix& A, const cmatrix& B) {
01409 return spf_mm_mult<scimatrix,cmatrix,cimatrix,sparse_cidot>(A,B);
01410 }
01411
01412 inline cimatrix operator*(const scimatrix& A, const imatrix& B) {
01413 return spf_mm_mult<scimatrix,imatrix,cimatrix,sparse_cidot>(A,B);
01414 }
01415
01416 inline cimatrix operator*(const scimatrix& A, const cimatrix& B) {
01417 return spf_mm_mult<scimatrix,cimatrix,cimatrix,sparse_cidot>(A,B);
01418 }
01419
01420 inline cimatrix operator*(const srmatrix& A, const cimatrix& B) {
01421 return spf_mm_mult<srmatrix,cimatrix,cimatrix,sparse_cidot>(A,B);
01422 }
01423
01424 inline cimatrix operator*(const scmatrix& A, const cimatrix& B) {
01425 return spf_mm_mult<scmatrix,cimatrix,cimatrix,sparse_cidot>(A,B);
01426 }
01427
01428 inline cimatrix operator*(const simatrix& A, const cimatrix& B) {
01429 return spf_mm_mult<simatrix,cimatrix,cimatrix,sparse_cidot>(A,B);
01430 }
01431
01432 inline cimatrix operator*(const scmatrix& A, const imatrix& B) {
01433 return spf_mm_mult<scmatrix,imatrix,cimatrix,sparse_cidot>(A,B);
01434 }
01435
01436 inline cimatrix operator*(const simatrix& A, const cmatrix& B) {
01437 return spf_mm_mult<simatrix,cmatrix,cimatrix,sparse_cidot>(A,B);
01438 }
01439
01440 inline cimatrix operator*(const cimatrix_slice& A, const srmatrix& B) {
01441 return fsp_mm_mult<cimatrix_slice,srmatrix,cimatrix,sparse_cidot>(A,B);
01442 }
01443
01444 inline cimatrix operator*(const cimatrix_slice& A, const scmatrix& B) {
01445 return fsp_mm_mult<cimatrix_slice,scmatrix,cimatrix,sparse_cidot>(A,B);
01446 }
01447
01448 inline cimatrix operator*(const cimatrix_slice& A, const simatrix& B) {
01449 return fsp_mm_mult<cimatrix_slice,simatrix,cimatrix,sparse_cidot>(A,B);
01450 }
01451
01452 inline cimatrix operator*(const cimatrix_slice& A, const scimatrix& B) {
01453 return fsp_mm_mult<cimatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B);
01454 }
01455
01456 inline cimatrix operator*(const rmatrix_slice& A, const scimatrix& B) {
01457 return fsp_mm_mult<rmatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B);
01458 }
01459
01460 inline cimatrix operator*(const imatrix_slice& A, const scimatrix& B) {
01461 return fsp_mm_mult<imatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B);
01462 }
01463
01464 inline cimatrix operator*(const cmatrix_slice& A, const scimatrix& B) {
01465 return fsp_mm_mult<cmatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B);
01466 }
01467
01468 inline cimatrix operator*(const cmatrix_slice& A, const simatrix& B) {
01469 return fsp_mm_mult<cmatrix_slice,simatrix,cimatrix,sparse_cidot>(A,B);
01470 }
01471
01472 inline cimatrix operator*(const imatrix_slice& A, const scmatrix& B) {
01473 return fsp_mm_mult<imatrix_slice,scmatrix,cimatrix,sparse_cidot>(A,B);
01474 }
01475
01476 inline cimatrix operator*(const scimatrix& A, const rmatrix_slice& B) {
01477 return spf_mm_mult<scimatrix,rmatrix_slice,cimatrix,sparse_cidot>(A,B);
01478 }
01479
01480 inline cimatrix operator*(const scimatrix& A, const cmatrix_slice& B) {
01481 return spf_mm_mult<scimatrix,cmatrix_slice,cimatrix,sparse_cidot>(A,B);
01482 }
01483
01484 inline cimatrix operator*(const scimatrix& A, const imatrix_slice& B) {
01485 return spf_mm_mult<scimatrix,imatrix_slice,cimatrix,sparse_cidot>(A,B);
01486 }
01487
01488 inline cimatrix operator*(const scimatrix& A, const cimatrix_slice& B) {
01489 return spf_mm_mult<scimatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B);
01490 }
01491
01492 inline cimatrix operator*(const srmatrix& A, const cimatrix_slice& B) {
01493 return spf_mm_mult<srmatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B);
01494 }
01495
01496 inline cimatrix operator*(const scmatrix& A, const cimatrix_slice& B) {
01497 return spf_mm_mult<scmatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B);
01498 }
01499
01500 inline cimatrix operator*(const simatrix& A, const cimatrix_slice& B) {
01501 return spf_mm_mult<simatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B);
01502 }
01503
01504 inline cimatrix operator*(const scmatrix& A, const imatrix_slice& B) {
01505 return spf_mm_mult<scmatrix,imatrix_slice,cimatrix,sparse_cidot>(A,B);
01506 }
01507
01508 inline cimatrix operator*(const simatrix& A, const cmatrix_slice& B) {
01509 return spf_mm_mult<simatrix,cmatrix_slice,cimatrix,sparse_cidot>(A,B);
01510 }
01511
01512 inline scimatrix operator*(const scimatrix& A, const srmatrix& B) {
01513 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01514 }
01515
01516 inline scimatrix operator*(const scimatrix& A, const scmatrix& B) {
01517 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01518 }
01519
01520 inline scimatrix operator*(const scimatrix& A, const simatrix& B) {
01521 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01522 }
01523
01524 inline scimatrix operator*(const scimatrix& A, const scimatrix& B) {
01525 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01526 }
01527
01528 inline scimatrix operator*(const srmatrix& A, const scimatrix& B) {
01529 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01530 }
01531
01532 inline scimatrix operator*(const scmatrix& A, const scimatrix& B) {
01533 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01534 }
01535
01536 inline scimatrix operator*(const simatrix& A, const scimatrix& B) {
01537 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01538 }
01539
01540 inline scimatrix operator*(const scmatrix& A, const simatrix& B) {
01541 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01542 }
01543
01544 inline scimatrix operator*(const simatrix& A, const scmatrix& B) {
01545 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(A,B);
01546 }
01547
01548 inline scimatrix operator/(const scimatrix& A, const real& r) {
01549 return sp_ms_div<scimatrix,real,scimatrix>(A,r);
01550 }
01551
01552 inline scimatrix operator/(const scimatrix& A, const complex& r) {
01553 return sp_ms_div<scimatrix,complex,scimatrix>(A,r);
01554 }
01555
01556 inline scimatrix operator/(const scimatrix& A, const interval& r) {
01557 return sp_ms_div<scimatrix,interval,scimatrix>(A,r);
01558 }
01559
01560 inline scimatrix operator/(const scimatrix& A, const cinterval& r) {
01561 return sp_ms_div<scimatrix,cinterval,scimatrix>(A,r);
01562 }
01563
01564 inline scimatrix operator/(const srmatrix& A, const cinterval& r) {
01565 return sp_ms_div<srmatrix,cinterval,scimatrix>(A,r);
01566 }
01567
01568 inline scimatrix operator/(const simatrix& A, const cinterval& r) {
01569 return sp_ms_div<simatrix,cinterval,scimatrix>(A,r);
01570 }
01571
01572 inline scimatrix operator/(const scmatrix& A, const cinterval& r) {
01573 return sp_ms_div<scmatrix,cinterval,scimatrix>(A,r);
01574 }
01575
01576 inline scimatrix operator/(const scmatrix& A, const interval& r) {
01577 return sp_ms_div<scmatrix,interval,scimatrix>(A,r);
01578 }
01579
01580 inline scimatrix operator/(const simatrix& A, const complex& r) {
01581 return sp_ms_div<simatrix,complex,scimatrix>(A,r);
01582 }
01583
01584
01585 inline scimatrix operator*(const scimatrix& A, const real& r) {
01586 return sp_ms_mult<scimatrix,real,scimatrix>(A,r);
01587 }
01588
01589 inline scimatrix operator*(const scimatrix& A, const complex& r) {
01590 return sp_ms_mult<scimatrix,complex,scimatrix>(A,r);
01591 }
01592
01593 inline scimatrix operator*(const scimatrix& A, const interval& r) {
01594 return sp_ms_mult<scimatrix,interval,scimatrix>(A,r);
01595 }
01596
01597 inline scimatrix operator*(const scimatrix& A, const cinterval& r) {
01598 return sp_ms_mult<scimatrix,cinterval,scimatrix>(A,r);
01599 }
01600
01601 inline scimatrix operator*(const srmatrix& A, const cinterval& r) {
01602 return sp_ms_mult<srmatrix,cinterval,scimatrix>(A,r);
01603 }
01604
01605 inline scimatrix operator*(const simatrix& A, const cinterval& r) {
01606 return sp_ms_mult<simatrix,cinterval,scimatrix>(A,r);
01607 }
01608
01609 inline scimatrix operator*(const scmatrix& A, const cinterval& r) {
01610 return sp_ms_mult<scmatrix,cinterval,scimatrix>(A,r);
01611 }
01612
01613 inline scimatrix operator*(const scmatrix& A, const interval& r) {
01614 return sp_ms_mult<scmatrix,interval,scimatrix>(A,r);
01615 }
01616
01617 inline scimatrix operator*(const simatrix& A, const complex& r) {
01618 return sp_ms_mult<simatrix,complex,scimatrix>(A,r);
01619 }
01620
01621 inline scimatrix operator*(const real& r, const scimatrix& A) {
01622 return sp_sm_mult<real,scimatrix,scimatrix>(r,A);
01623 }
01624
01625 inline scimatrix operator*(const complex& r, const scimatrix& A) {
01626 return sp_sm_mult<complex,scimatrix,scimatrix>(r,A);
01627 }
01628
01629 inline scimatrix operator*(const interval& r, const scimatrix& A) {
01630 return sp_sm_mult<interval,scimatrix,scimatrix>(r,A);
01631 }
01632
01633 inline scimatrix operator*(const cinterval& r, const scimatrix& A) {
01634 return sp_sm_mult<cinterval,scimatrix,scimatrix>(r,A);
01635 }
01636
01637 inline scimatrix operator*(const cinterval& r, const srmatrix& A) {
01638 return sp_sm_mult<cinterval,srmatrix,scimatrix>(r,A);
01639 }
01640
01641 inline scimatrix operator*(const cinterval& r, const simatrix& A) {
01642 return sp_sm_mult<cinterval,simatrix,scimatrix>(r,A);
01643 }
01644
01645 inline scimatrix operator*(const cinterval& r, const scmatrix& A) {
01646 return sp_sm_mult<cinterval,scmatrix,scimatrix>(r,A);
01647 }
01648
01649 inline scimatrix operator*(const complex& r, const simatrix& A) {
01650 return sp_sm_mult<complex,simatrix,scimatrix>(r,A);
01651 }
01652
01653 inline scimatrix operator*(const interval& r, const scmatrix& A) {
01654 return sp_sm_mult<interval,scmatrix,scimatrix>(r,A);
01655 }
01656
01657 inline civector operator*(const scimatrix& A, const rvector& v) {
01658 return spf_mv_mult<scimatrix,rvector,civector,sparse_cidot>(A,v);
01659 }
01660
01661 inline civector operator*(const scimatrix& A, const cvector& v) {
01662 return spf_mv_mult<scimatrix,cvector,civector,sparse_cidot>(A,v);
01663 }
01664
01665 inline civector operator*(const scimatrix& A, const ivector& v) {
01666 return spf_mv_mult<scimatrix,ivector,civector,sparse_cidot>(A,v);
01667 }
01668
01669 inline civector operator*(const scimatrix& A, const civector& v) {
01670 return spf_mv_mult<scimatrix,civector,civector,sparse_cidot>(A,v);
01671 }
01672
01673 inline civector operator*(const srmatrix& A, const civector& v) {
01674 return spf_mv_mult<srmatrix,civector,civector,sparse_cidot>(A,v);
01675 }
01676
01677 inline civector operator*(const scmatrix& A, const civector& v) {
01678 return spf_mv_mult<scmatrix,civector,civector,sparse_cidot>(A,v);
01679 }
01680
01681 inline civector operator*(const simatrix& A, const civector& v) {
01682 return spf_mv_mult<simatrix,civector,civector,sparse_cidot>(A,v);
01683 }
01684
01685 inline civector operator*(const scmatrix& A, const ivector& v) {
01686 return spf_mv_mult<scmatrix,ivector,civector,sparse_cidot>(A,v);
01687 }
01688
01689 inline civector operator*(const simatrix& A, const cvector& v) {
01690 return spf_mv_mult<simatrix,cvector,civector,sparse_cidot>(A,v);
01691 }
01692
01693 inline civector operator*(const scimatrix& A, const rvector_slice& v) {
01694 return spf_mv_mult<scimatrix,rvector_slice,civector,sparse_cidot>(A,v);
01695 }
01696
01697 inline civector operator*(const scimatrix& A, const ivector_slice& v) {
01698 return spf_mv_mult<scimatrix,ivector_slice,civector,sparse_cidot>(A,v);
01699 }
01700
01701 inline civector operator*(const scimatrix& A, const cvector_slice& v) {
01702 return spf_mv_mult<scimatrix,cvector_slice,civector,sparse_cidot>(A,v);
01703 }
01704
01705 inline civector operator*(const scimatrix& A, const civector_slice& v) {
01706 return spf_mv_mult<scimatrix,civector_slice,civector,sparse_cidot>(A,v);
01707 }
01708
01709 inline civector operator*(const srmatrix& A, const civector_slice& v) {
01710 return spf_mv_mult<srmatrix,civector_slice,civector,sparse_cidot>(A,v);
01711 }
01712
01713 inline civector operator*(const scmatrix& A, const civector_slice& v) {
01714 return spf_mv_mult<scmatrix,civector_slice,civector,sparse_cidot>(A,v);
01715 }
01716
01717 inline civector operator*(const simatrix& A, const civector_slice& v) {
01718 return spf_mv_mult<simatrix,civector_slice,civector,sparse_cidot>(A,v);
01719 }
01720
01721 inline civector operator*(const simatrix& A, const cvector_slice& v) {
01722 return spf_mv_mult<simatrix,cvector_slice,civector,sparse_cidot>(A,v);
01723 }
01724
01725 inline civector operator*(const scmatrix& A, const ivector_slice& v) {
01726 return spf_mv_mult<scmatrix,ivector_slice,civector,sparse_cidot>(A,v);
01727 }
01728
01729 inline scivector operator*(const scimatrix& A, const srvector& v) {
01730 return spsp_mv_mult<scimatrix,srvector,scivector,sparse_cidot,cinterval>(A,v);
01731 }
01732
01733 inline scivector operator*(const scimatrix& A, const sivector& v) {
01734 return spsp_mv_mult<scimatrix,sivector,scivector,sparse_cidot,cinterval>(A,v);
01735 }
01736
01737 inline scivector operator*(const scimatrix& A, const scvector& v) {
01738 return spsp_mv_mult<scimatrix,scvector,scivector,sparse_cidot,cinterval>(A,v);
01739 }
01740
01741 inline scivector operator*(const scimatrix& A, const scivector& v) {
01742 return spsp_mv_mult<scimatrix,scivector,scivector,sparse_cidot,cinterval>(A,v);
01743 }
01744
01745 inline scivector operator*(const srmatrix& A, const scivector& v) {
01746 return spsp_mv_mult<srmatrix,scivector,scivector,sparse_cidot,cinterval>(A,v);
01747 }
01748
01749 inline scivector operator*(const scmatrix& A, const scivector& v) {
01750 return spsp_mv_mult<scmatrix,scivector,scivector,sparse_cidot,cinterval>(A,v);
01751 }
01752
01753 inline scivector operator*(const simatrix& A, const scivector& v) {
01754 return spsp_mv_mult<simatrix,scivector,scivector,sparse_cidot,cinterval>(A,v);
01755 }
01756
01757 inline scivector operator*(const scmatrix& A, const sivector& v) {
01758 return spsp_mv_mult<scmatrix,sivector,scivector,sparse_cidot,cinterval>(A,v);
01759 }
01760
01761 inline scivector operator*(const simatrix& A, const scvector& v) {
01762 return spsp_mv_mult<simatrix,scvector,scivector,sparse_cidot,cinterval>(A,v);
01763 }
01764
01765 inline scivector operator*(const scimatrix& A, const srvector_slice& v) {
01766 return spsl_mv_mult<scimatrix,srvector_slice,scivector,sparse_cidot,cinterval>(A,v);
01767 }
01768
01769 inline scivector operator*(const scimatrix& A, const scvector_slice& v) {
01770 return spsl_mv_mult<scimatrix,scvector_slice,scivector,sparse_cidot,cinterval>(A,v);
01771 }
01772
01773 inline scivector operator*(const scimatrix& A, const sivector_slice& v) {
01774 return spsl_mv_mult<scimatrix,sivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01775 }
01776
01777 inline scivector operator*(const scimatrix& A, const scivector_slice& v) {
01778 return spsl_mv_mult<scimatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01779 }
01780
01781 inline scivector operator*(const srmatrix& A, const scivector_slice& v) {
01782 return spsl_mv_mult<srmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01783 }
01784
01785 inline scivector operator*(const scmatrix& A, const scivector_slice& v) {
01786 return spsl_mv_mult<scmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01787 }
01788
01789 inline scivector operator*(const simatrix& A, const scivector_slice& v) {
01790 return spsl_mv_mult<simatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01791 }
01792
01793 inline scivector operator*(const simatrix& A, const scvector_slice& v) {
01794 return spsl_mv_mult<simatrix,scvector_slice,scivector,sparse_cidot,cinterval>(A,v);
01795 }
01796
01797 inline scivector operator*(const scmatrix& A, const sivector_slice& v) {
01798 return spsl_mv_mult<scmatrix,sivector_slice,scivector,sparse_cidot,cinterval>(A,v);
01799 }
01800
01801 inline civector operator*(const cimatrix& A, const srvector& v) {
01802 return fsp_mv_mult<cimatrix,srvector,civector,sparse_cidot>(A,v);
01803 }
01804
01805 inline civector operator*(const cimatrix& A, const sivector& v) {
01806 return fsp_mv_mult<cimatrix,sivector,civector,sparse_cidot>(A,v);
01807 }
01808
01809 inline civector operator*(const cimatrix& A, const scvector& v) {
01810 return fsp_mv_mult<cimatrix,scvector,civector,sparse_cidot>(A,v);
01811 }
01812
01813 inline civector operator*(const cimatrix& A, const scivector& v) {
01814 return fsp_mv_mult<cimatrix,scivector,civector,sparse_cidot>(A,v);
01815 }
01816
01817 inline civector operator*(const rmatrix& A, const scivector& v) {
01818 return fsp_mv_mult<rmatrix,scivector,civector,sparse_cidot>(A,v);
01819 }
01820
01821 inline civector operator*(const cmatrix& A, const scivector& v) {
01822 return fsp_mv_mult<cmatrix,scivector,civector,sparse_cidot>(A,v);
01823 }
01824
01825 inline civector operator*(const imatrix& A, const scivector& v) {
01826 return fsp_mv_mult<imatrix,scivector,civector,sparse_cidot>(A,v);
01827 }
01828
01829 inline civector operator*(const cmatrix& A, const sivector& v) {
01830 return fsp_mv_mult<cmatrix,sivector,civector,sparse_cidot>(A,v);
01831 }
01832
01833 inline civector operator*(const imatrix& A, const scvector& v) {
01834 return fsp_mv_mult<imatrix,scvector,civector,sparse_cidot>(A,v);
01835 }
01836
01837 inline civector operator*(const cimatrix_slice& A, const srvector& v) {
01838 return fsp_mv_mult<cimatrix_slice,srvector,civector,sparse_cidot>(A,v);
01839 }
01840
01841 inline civector operator*(const cimatrix_slice& A, const scvector& v) {
01842 return fsp_mv_mult<cimatrix_slice,scvector,civector,sparse_cidot>(A,v);
01843 }
01844
01845 inline civector operator*(const cimatrix_slice& A, const sivector& v) {
01846 return fsp_mv_mult<cimatrix_slice,sivector,civector,sparse_cidot>(A,v);
01847 }
01848
01849 inline civector operator*(const cimatrix_slice& A, const scivector& v) {
01850 return fsp_mv_mult<cimatrix_slice,scivector,civector,sparse_cidot>(A,v);
01851 }
01852
01853 inline civector operator*(const rmatrix_slice& A, const scivector& v) {
01854 return fsp_mv_mult<rmatrix_slice,scivector,civector,sparse_cidot>(A,v);
01855 }
01856
01857 inline civector operator*(const cmatrix_slice& A, const scivector& v) {
01858 return fsp_mv_mult<cmatrix_slice,scivector,civector,sparse_cidot>(A,v);
01859 }
01860
01861 inline civector operator*(const imatrix_slice& A, const scivector& v) {
01862 return fsp_mv_mult<imatrix_slice,scivector,civector,sparse_cidot>(A,v);
01863 }
01864
01865 inline civector operator*(const cmatrix_slice& A, const sivector& v) {
01866 return fsp_mv_mult<cmatrix_slice,sivector,civector,sparse_cidot>(A,v);
01867 }
01868
01869 inline civector operator*(const imatrix_slice& A, const scvector& v) {
01870 return fsp_mv_mult<imatrix_slice,scvector,civector,sparse_cidot>(A,v);
01871 }
01872
01873 inline civector operator*(const cimatrix& A, const srvector_slice& v) {
01874 return fsl_mv_mult<cimatrix,srvector_slice,civector,sparse_cidot>(A,v);
01875 }
01876
01877 inline civector operator*(const cimatrix& A, const scvector_slice& v) {
01878 return fsl_mv_mult<cimatrix,scvector_slice,civector,sparse_cidot>(A,v);
01879 }
01880
01881 inline civector operator*(const cimatrix& A, const sivector_slice& v) {
01882 return fsl_mv_mult<cimatrix,sivector_slice,civector,sparse_cidot>(A,v);
01883 }
01884
01885 inline civector operator*(const cimatrix& A, const scivector_slice& v) {
01886 return fsl_mv_mult<cimatrix,scivector_slice,civector,sparse_cidot>(A,v);
01887 }
01888
01889 inline civector operator*(const rmatrix& A, const scivector_slice& v) {
01890 return fsl_mv_mult<rmatrix,scivector_slice,civector,sparse_cidot>(A,v);
01891 }
01892
01893 inline civector operator*(const cmatrix& A, const scivector_slice& v) {
01894 return fsl_mv_mult<cmatrix,scivector_slice,civector,sparse_cidot>(A,v);
01895 }
01896
01897 inline civector operator*(const imatrix& A, const scivector_slice& v) {
01898 return fsl_mv_mult<imatrix,scivector_slice,civector,sparse_cidot>(A,v);
01899 }
01900
01901 inline civector operator*(const cmatrix& A, const sivector_slice& v) {
01902 return fsl_mv_mult<cmatrix,sivector_slice,civector,sparse_cidot>(A,v);
01903 }
01904
01905 inline civector operator*(const imatrix& A, const scvector_slice& v) {
01906 return fsl_mv_mult<imatrix,scvector_slice,civector,sparse_cidot>(A,v);
01907 }
01908
01909 inline civector operator*(const cimatrix_slice& A, const srvector_slice& v) {
01910 return fsl_mv_mult<cimatrix_slice,srvector_slice,civector,sparse_cidot>(A,v);
01911 }
01912
01913 inline civector operator*(const cimatrix_slice& A, const scvector_slice& v) {
01914 return fsl_mv_mult<cimatrix_slice,scvector_slice,civector,sparse_cidot>(A,v);
01915 }
01916
01917 inline civector operator*(const cimatrix_slice& A, const sivector_slice& v) {
01918 return fsl_mv_mult<cimatrix_slice,sivector_slice,civector,sparse_cidot>(A,v);
01919 }
01920
01921 inline civector operator*(const cimatrix_slice& A, const scivector_slice& v) {
01922 return fsl_mv_mult<cimatrix_slice,scivector_slice,civector,sparse_cidot>(A,v);
01923 }
01924
01925 inline civector operator*(const rmatrix_slice& A, const scivector_slice& v) {
01926 return fsl_mv_mult<rmatrix_slice,scivector_slice,civector,sparse_cidot>(A,v);
01927 }
01928
01929 inline civector operator*(const imatrix_slice& A, const scivector_slice& v) {
01930 return fsl_mv_mult<imatrix_slice,scivector_slice,civector,sparse_cidot>(A,v);
01931 }
01932
01933 inline civector operator*(const cmatrix_slice& A, const scivector_slice& v) {
01934 return fsl_mv_mult<cmatrix_slice,scivector_slice,civector,sparse_cidot>(A,v);
01935 }
01936
01937 inline civector operator*(const cmatrix_slice& A, const sivector_slice& v) {
01938 return fsl_mv_mult<cmatrix_slice,sivector_slice,civector,sparse_cidot>(A,v);
01939 }
01940
01941 inline civector operator*(const imatrix_slice& A, const scvector_slice& v) {
01942 return fsl_mv_mult<imatrix_slice,scvector_slice,civector,sparse_cidot>(A,v);
01943 }
01944
01945 inline cimatrix operator+(const cimatrix& A, const srmatrix& B) {
01946 return fsp_mm_add<cimatrix,srmatrix,cimatrix>(A,B);
01947 }
01948
01949 inline cimatrix operator+(const cimatrix& A, const scmatrix& B) {
01950 return fsp_mm_add<cimatrix,scmatrix,cimatrix>(A,B);
01951 }
01952
01953 inline cimatrix operator+(const cimatrix& A, const simatrix& B) {
01954 return fsp_mm_add<cimatrix,simatrix,cimatrix>(A,B);
01955 }
01956
01957 inline cimatrix operator+(const cimatrix& A, const scimatrix& B) {
01958 return fsp_mm_add<cimatrix,scimatrix,cimatrix>(A,B);
01959 }
01960
01961 inline cimatrix operator+(const rmatrix& A, const scimatrix& B) {
01962 return fsp_mm_add<rmatrix,scimatrix,cimatrix>(A,B);
01963 }
01964
01965 inline cimatrix operator+(const cmatrix& A, const scimatrix& B) {
01966 return fsp_mm_add<cmatrix,scimatrix,cimatrix>(A,B);
01967 }
01968
01969 inline cimatrix operator+(const imatrix& A, const scimatrix& B) {
01970 return fsp_mm_add<imatrix,scimatrix,cimatrix>(A,B);
01971 }
01972
01973 inline cimatrix operator+(const imatrix& A, const scmatrix& B) {
01974 return fsp_mm_add<imatrix,scmatrix,cimatrix>(A,B);
01975 }
01976
01977 inline cimatrix operator+(const cmatrix& A, const simatrix& B) {
01978 return fsp_mm_add<cmatrix,simatrix,cimatrix>(A,B);
01979 }
01980
01981 inline cimatrix operator+(const scimatrix& A, const rmatrix& B) {
01982 return spf_mm_add<scimatrix,rmatrix,cimatrix>(A,B);
01983 }
01984
01985 inline cimatrix operator+(const scimatrix& A, const cmatrix& B) {
01986 return spf_mm_add<scimatrix,cmatrix,cimatrix>(A,B);
01987 }
01988
01989 inline cimatrix operator+(const scimatrix& A, const imatrix& B) {
01990 return spf_mm_add<scimatrix,imatrix,cimatrix>(A,B);
01991 }
01992
01993 inline cimatrix operator+(const scimatrix& A, const cimatrix& B) {
01994 return spf_mm_add<scimatrix,cimatrix,cimatrix>(A,B);
01995 }
01996
01997 inline cimatrix operator+(const srmatrix& A, const cimatrix& B) {
01998 return spf_mm_add<srmatrix,cimatrix,cimatrix>(A,B);
01999 }
02000
02001 inline cimatrix operator+(const scmatrix& A, const cimatrix& B) {
02002 return spf_mm_add<scmatrix,cimatrix,cimatrix>(A,B);
02003 }
02004
02005 inline cimatrix operator+(const simatrix& A, const cimatrix& B) {
02006 return spf_mm_add<simatrix,cimatrix,cimatrix>(A,B);
02007 }
02008
02009 inline cimatrix operator+(const simatrix& A, const cmatrix& B) {
02010 return spf_mm_add<simatrix,cmatrix,cimatrix>(A,B);
02011 }
02012
02013 inline cimatrix operator+(const scmatrix& A, const imatrix& B) {
02014 return spf_mm_add<scmatrix,imatrix,cimatrix>(A,B);
02015 }
02016
02017 inline cimatrix operator+(const cimatrix_slice& A, const srmatrix& B) {
02018 return fsp_mm_add<cimatrix_slice,srmatrix,cimatrix>(A,B);
02019 }
02020
02021 inline cimatrix operator+(const cimatrix_slice& A, const simatrix& B) {
02022 return fsp_mm_add<cimatrix_slice,simatrix,cimatrix>(A,B);
02023 }
02024
02025 inline cimatrix operator+(const cimatrix_slice& A, const scmatrix& B) {
02026 return fsp_mm_add<cimatrix_slice,scmatrix,cimatrix>(A,B);
02027 }
02028
02029 inline cimatrix operator+(const cimatrix_slice& A, const scimatrix& B) {
02030 return fsp_mm_add<cimatrix_slice,scimatrix,cimatrix>(A,B);
02031 }
02032
02033 inline cimatrix operator+(const rmatrix_slice& A, const scimatrix& B) {
02034 return fsp_mm_add<rmatrix_slice,scimatrix,cimatrix>(A,B);
02035 }
02036
02037 inline cimatrix operator+(const imatrix_slice& A, const scimatrix& B) {
02038 return fsp_mm_add<imatrix_slice,scimatrix,cimatrix>(A,B);
02039 }
02040
02041 inline cimatrix operator+(const cmatrix_slice& A, const scimatrix& B) {
02042 return fsp_mm_add<cmatrix_slice,scimatrix,cimatrix>(A,B);
02043 }
02044
02045 inline cimatrix operator+(const cmatrix_slice& A, const simatrix& B) {
02046 return fsp_mm_add<cmatrix_slice,simatrix,cimatrix>(A,B);
02047 }
02048
02049 inline cimatrix operator+(const imatrix_slice& A, const scmatrix& B) {
02050 return fsp_mm_add<imatrix_slice,scmatrix,cimatrix>(A,B);
02051 }
02052
02053 inline cimatrix operator+(const scimatrix& A, const rmatrix_slice& B) {
02054 return spf_mm_add<scimatrix,rmatrix_slice,cimatrix>(A,B);
02055 }
02056
02057 inline cimatrix operator+(const scimatrix& A, const cmatrix_slice& B) {
02058 return spf_mm_add<scimatrix,cmatrix_slice,cimatrix>(A,B);
02059 }
02060
02061 inline cimatrix operator+(const scimatrix& A, const imatrix_slice& B) {
02062 return spf_mm_add<scimatrix,imatrix_slice,cimatrix>(A,B);
02063 }
02064
02065 inline cimatrix operator+(const scimatrix& A, const cimatrix_slice& B) {
02066 return spf_mm_add<scimatrix,cimatrix_slice,cimatrix>(A,B);
02067 }
02068
02069 inline cimatrix operator+(const srmatrix& A, const cimatrix_slice& B) {
02070 return spf_mm_add<srmatrix,cimatrix_slice,cimatrix>(A,B);
02071 }
02072
02073 inline cimatrix operator+(const scmatrix& A, const cimatrix_slice& B) {
02074 return spf_mm_add<scmatrix,cimatrix_slice,cimatrix>(A,B);
02075 }
02076
02077 inline cimatrix operator+(const simatrix& A, const cimatrix_slice& B) {
02078 return spf_mm_add<simatrix,cimatrix_slice,cimatrix>(A,B);
02079 }
02080
02081 inline cimatrix operator+(const simatrix& A, const cmatrix_slice& B) {
02082 return spf_mm_add<simatrix,cmatrix_slice,cimatrix>(A,B);
02083 }
02084
02085 inline cimatrix operator+(const scmatrix& A, const imatrix_slice& B) {
02086 return spf_mm_add<scmatrix,imatrix_slice,cimatrix>(A,B);
02087 }
02088
02089 inline scimatrix operator+(const scimatrix& A, const srmatrix& B) {
02090 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(A,B);
02091 }
02092
02093 inline scimatrix operator+(const scimatrix& A, const scmatrix& B) {
02094 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(A,B);
02095 }
02096
02097 inline scimatrix operator+(const scimatrix& A, const simatrix& B) {
02098 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(A,B);
02099 }
02100
02101 inline scimatrix operator+(const scimatrix& A, const scimatrix& B) {
02102 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(A,B);
02103 }
02104
02105 inline scimatrix operator+(const srmatrix& A, const scimatrix& B) {
02106 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(A,B);
02107 }
02108
02109 inline scimatrix operator+(const scmatrix& A, const scimatrix& B) {
02110 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(A,B);
02111 }
02112
02113 inline scimatrix operator+(const simatrix& A, const scimatrix& B) {
02114 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(A,B);
02115 }
02116
02117 inline scimatrix operator+(const simatrix& A, const scmatrix& B) {
02118 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(A,B);
02119 }
02120
02121 inline scimatrix operator+(const scmatrix& A, const simatrix& B) {
02122 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(A,B);
02123 }
02124
02125 inline cimatrix operator-(const cimatrix& A, const srmatrix& B) {
02126 return fsp_mm_sub<cimatrix,srmatrix,cimatrix>(A,B);
02127 }
02128
02129 inline cimatrix operator-(const cimatrix& A, const scmatrix& B) {
02130 return fsp_mm_sub<cimatrix,scmatrix,cimatrix>(A,B);
02131 }
02132
02133 inline cimatrix operator-(const cimatrix& A, const simatrix& B) {
02134 return fsp_mm_sub<cimatrix,simatrix,cimatrix>(A,B);
02135 }
02136
02137 inline cimatrix operator-(const cimatrix& A, const scimatrix& B) {
02138 return fsp_mm_sub<cimatrix,scimatrix,cimatrix>(A,B);
02139 }
02140
02141 inline cimatrix operator-(const rmatrix& A, const scimatrix& B) {
02142 return fsp_mm_sub<rmatrix,scimatrix,cimatrix>(A,B);
02143 }
02144
02145 inline cimatrix operator-(const cmatrix& A, const scimatrix& B) {
02146 return fsp_mm_sub<cmatrix,scimatrix,cimatrix>(A,B);
02147 }
02148
02149 inline cimatrix operator-(const imatrix& A, const scimatrix& B) {
02150 return fsp_mm_sub<imatrix,scimatrix,cimatrix>(A,B);
02151 }
02152
02153 inline cimatrix operator-(const imatrix& A, const scmatrix& B) {
02154 return fsp_mm_sub<imatrix,scmatrix,cimatrix>(A,B);
02155 }
02156
02157 inline cimatrix operator-(const cmatrix& A, const simatrix& B) {
02158 return fsp_mm_sub<cmatrix,simatrix,cimatrix>(A,B);
02159 }
02160
02161 inline cimatrix operator-(const scimatrix& A, const rmatrix& B) {
02162 return spf_mm_sub<scimatrix,rmatrix,cimatrix>(A,B);
02163 }
02164
02165 inline cimatrix operator-(const scimatrix& A, const cmatrix& B) {
02166 return spf_mm_sub<scimatrix,cmatrix,cimatrix>(A,B);
02167 }
02168
02169 inline cimatrix operator-(const scimatrix& A, const imatrix& B) {
02170 return spf_mm_sub<scimatrix,imatrix,cimatrix>(A,B);
02171 }
02172
02173 inline cimatrix operator-(const scimatrix& A, const cimatrix& B) {
02174 return spf_mm_sub<scimatrix,cimatrix,cimatrix>(A,B);
02175 }
02176
02177 inline cimatrix operator-(const srmatrix& A, const cimatrix& B) {
02178 return spf_mm_sub<srmatrix,cimatrix,cimatrix>(A,B);
02179 }
02180
02181 inline cimatrix operator-(const scmatrix& A, const cimatrix& B) {
02182 return spf_mm_sub<scmatrix,cimatrix,cimatrix>(A,B);
02183 }
02184
02185 inline cimatrix operator-(const simatrix& A, const cimatrix& B) {
02186 return spf_mm_sub<simatrix,cimatrix,cimatrix>(A,B);
02187 }
02188
02189 inline cimatrix operator-(const simatrix& A, const cmatrix& B) {
02190 return spf_mm_sub<simatrix,cmatrix,cimatrix>(A,B);
02191 }
02192
02193 inline cimatrix operator-(const scmatrix& A, const imatrix& B) {
02194 return spf_mm_sub<scmatrix,imatrix,cimatrix>(A,B);
02195 }
02196
02197 inline cimatrix operator-(const cimatrix_slice& A, const srmatrix& B) {
02198 return fsp_mm_sub<cimatrix_slice,srmatrix,cimatrix>(A,B);
02199 }
02200
02201 inline cimatrix operator-(const cimatrix_slice& A, const simatrix& B) {
02202 return fsp_mm_sub<cimatrix_slice,simatrix,cimatrix>(A,B);
02203 }
02204
02205 inline cimatrix operator-(const cimatrix_slice& A, const scmatrix& B) {
02206 return fsp_mm_sub<cimatrix_slice,scmatrix,cimatrix>(A,B);
02207 }
02208
02209 inline cimatrix operator-(const cimatrix_slice& A, const scimatrix& B) {
02210 return fsp_mm_sub<cimatrix_slice,scimatrix,cimatrix>(A,B);
02211 }
02212
02213 inline cimatrix operator-(const rmatrix_slice& A, const scimatrix& B) {
02214 return fsp_mm_sub<rmatrix_slice,scimatrix,cimatrix>(A,B);
02215 }
02216
02217 inline cimatrix operator-(const imatrix_slice& A, const scimatrix& B) {
02218 return fsp_mm_sub<imatrix_slice,scimatrix,cimatrix>(A,B);
02219 }
02220
02221 inline cimatrix operator-(const cmatrix_slice& A, const scimatrix& B) {
02222 return fsp_mm_sub<cmatrix_slice,scimatrix,cimatrix>(A,B);
02223 }
02224
02225 inline cimatrix operator-(const cmatrix_slice& A, const simatrix& B) {
02226 return fsp_mm_sub<cmatrix_slice,simatrix,cimatrix>(A,B);
02227 }
02228
02229 inline cimatrix operator-(const imatrix_slice& A, const scmatrix& B) {
02230 return fsp_mm_sub<imatrix_slice,scmatrix,cimatrix>(A,B);
02231 }
02232
02233 inline cimatrix operator-(const scimatrix& A, const rmatrix_slice& B) {
02234 return spf_mm_sub<scimatrix,rmatrix_slice,cimatrix>(A,B);
02235 }
02236
02237 inline cimatrix operator-(const scimatrix& A, const cmatrix_slice& B) {
02238 return spf_mm_sub<scimatrix,cmatrix_slice,cimatrix>(A,B);
02239 }
02240
02241 inline cimatrix operator-(const scimatrix& A, const imatrix_slice& B) {
02242 return spf_mm_sub<scimatrix,imatrix_slice,cimatrix>(A,B);
02243 }
02244
02245 inline cimatrix operator-(const scimatrix& A, const cimatrix_slice& B) {
02246 return spf_mm_sub<scimatrix,cimatrix_slice,cimatrix>(A,B);
02247 }
02248
02249 inline cimatrix operator-(const srmatrix& A, const cimatrix_slice& B) {
02250 return spf_mm_sub<srmatrix,cimatrix_slice,cimatrix>(A,B);
02251 }
02252
02253 inline cimatrix operator-(const scmatrix& A, const cimatrix_slice& B) {
02254 return spf_mm_sub<scmatrix,cimatrix_slice,cimatrix>(A,B);
02255 }
02256
02257 inline cimatrix operator-(const simatrix& A, const cimatrix_slice& B) {
02258 return spf_mm_sub<simatrix,cimatrix_slice,cimatrix>(A,B);
02259 }
02260
02261 inline cimatrix operator-(const simatrix& A, const cmatrix_slice& B) {
02262 return spf_mm_sub<simatrix,cmatrix_slice,cimatrix>(A,B);
02263 }
02264
02265 inline cimatrix operator-(const scmatrix& A, const imatrix_slice& B) {
02266 return spf_mm_sub<scmatrix,imatrix_slice,cimatrix>(A,B);
02267 }
02268
02269 inline scimatrix operator-(const scimatrix& A, const srmatrix& B) {
02270 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(A,B);
02271 }
02272
02273 inline scimatrix operator-(const scimatrix& A, const scmatrix& B) {
02274 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(A,B);
02275 }
02276
02277 inline scimatrix operator-(const scimatrix& A, const simatrix& B) {
02278 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(A,B);
02279 }
02280
02281 inline scimatrix operator-(const scimatrix& A, const scimatrix& B) {
02282 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(A,B);
02283 }
02284
02285 inline scimatrix operator-(const srmatrix& A, const scimatrix& B) {
02286 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(A,B);
02287 }
02288
02289 inline scimatrix operator-(const scmatrix& A, const scimatrix& B) {
02290 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(A,B);
02291 }
02292
02293 inline scimatrix operator-(const simatrix& A, const scimatrix& B) {
02294 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(A,B);
02295 }
02296
02297 inline scimatrix operator-(const simatrix& A, const scmatrix& B) {
02298 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(A,B);
02299 }
02300
02301 inline scimatrix operator-(const scmatrix& A, const simatrix& B) {
02302 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(A,B);
02303 }
02304
02305 inline cimatrix operator|(const cimatrix& A, const srmatrix& B) {
02306 return fsp_mm_hull<cimatrix,srmatrix,cimatrix>(A,B);
02307 }
02308
02309 inline cimatrix operator|(const cimatrix& A, const scmatrix& B) {
02310 return fsp_mm_hull<cimatrix,scmatrix,cimatrix>(A,B);
02311 }
02312
02313 inline cimatrix operator|(const cimatrix& A, const simatrix& B) {
02314 return fsp_mm_hull<cimatrix,simatrix,cimatrix>(A,B);
02315 }
02316
02317 inline cimatrix operator|(const cimatrix& A, const scimatrix& B) {
02318 return fsp_mm_hull<cimatrix,scimatrix,cimatrix>(A,B);
02319 }
02320
02321 inline cimatrix operator|(const rmatrix& A, const scimatrix& B) {
02322 return fsp_mm_hull<rmatrix,scimatrix,cimatrix>(A,B);
02323 }
02324
02325 inline cimatrix operator|(const cmatrix& A, const scimatrix& B) {
02326 return fsp_mm_hull<cmatrix,scimatrix,cimatrix>(A,B);
02327 }
02328
02329 inline cimatrix operator|(const imatrix& A, const scimatrix& B) {
02330 return fsp_mm_hull<imatrix,scimatrix,cimatrix>(A,B);
02331 }
02332
02333 inline cimatrix operator|(const imatrix& A, const scmatrix& B) {
02334 return fsp_mm_hull<imatrix,scmatrix,cimatrix>(A,B);
02335 }
02336
02337 inline cimatrix operator|(const cmatrix& A, const simatrix& B) {
02338 return fsp_mm_hull<cmatrix,simatrix,cimatrix>(A,B);
02339 }
02340
02341 inline cimatrix operator|(const scimatrix& A, const rmatrix& B) {
02342 return spf_mm_hull<scimatrix,rmatrix,cimatrix>(A,B);
02343 }
02344
02345 inline cimatrix operator|(const scimatrix& A, const cmatrix& B) {
02346 return spf_mm_hull<scimatrix,cmatrix,cimatrix>(A,B);
02347 }
02348
02349 inline cimatrix operator|(const scimatrix& A, const imatrix& B) {
02350 return spf_mm_hull<scimatrix,imatrix,cimatrix>(A,B);
02351 }
02352
02353 inline cimatrix operator|(const scimatrix& A, const cimatrix& B) {
02354 return spf_mm_hull<scimatrix,cimatrix,cimatrix>(A,B);
02355 }
02356
02357 inline cimatrix operator|(const srmatrix& A, const cimatrix& B) {
02358 return spf_mm_hull<srmatrix,cimatrix,cimatrix>(A,B);
02359 }
02360
02361 inline cimatrix operator|(const scmatrix& A, const cimatrix& B) {
02362 return spf_mm_hull<scmatrix,cimatrix,cimatrix>(A,B);
02363 }
02364
02365 inline cimatrix operator|(const simatrix& A, const cimatrix& B) {
02366 return spf_mm_hull<simatrix,cimatrix,cimatrix>(A,B);
02367 }
02368
02369 inline cimatrix operator|(const simatrix& A, const cmatrix& B) {
02370 return spf_mm_hull<simatrix,cmatrix,cimatrix>(A,B);
02371 }
02372
02373 inline cimatrix operator|(const scmatrix& A, const imatrix& B) {
02374 return spf_mm_hull<scmatrix,imatrix,cimatrix>(A,B);
02375 }
02376
02377 inline cimatrix operator|(const cimatrix_slice& A, const srmatrix& B) {
02378 return fsp_mm_hull<cimatrix_slice,srmatrix,cimatrix>(A,B);
02379 }
02380
02381 inline cimatrix operator|(const cimatrix_slice& A, const simatrix& B) {
02382 return fsp_mm_hull<cimatrix_slice,simatrix,cimatrix>(A,B);
02383 }
02384
02385 inline cimatrix operator|(const cimatrix_slice& A, const scmatrix& B) {
02386 return fsp_mm_hull<cimatrix_slice,scmatrix,cimatrix>(A,B);
02387 }
02388
02389 inline cimatrix operator|(const cimatrix_slice& A, const scimatrix& B) {
02390 return fsp_mm_hull<cimatrix_slice,scimatrix,cimatrix>(A,B);
02391 }
02392
02393 inline cimatrix operator|(const rmatrix_slice& A, const scimatrix& B) {
02394 return fsp_mm_hull<rmatrix_slice,scimatrix,cimatrix>(A,B);
02395 }
02396
02397 inline cimatrix operator|(const imatrix_slice& A, const scimatrix& B) {
02398 return fsp_mm_hull<imatrix_slice,scimatrix,cimatrix>(A,B);
02399 }
02400
02401 inline cimatrix operator|(const cmatrix_slice& A, const scimatrix& B) {
02402 return fsp_mm_hull<cmatrix_slice,scimatrix,cimatrix>(A,B);
02403 }
02404
02405 inline cimatrix operator|(const cmatrix_slice& A, const simatrix& B) {
02406 return fsp_mm_hull<cmatrix_slice,simatrix,cimatrix>(A,B);
02407 }
02408
02409 inline cimatrix operator|(const imatrix_slice& A, const scmatrix& B) {
02410 return fsp_mm_hull<imatrix_slice,scmatrix,cimatrix>(A,B);
02411 }
02412
02413 inline cimatrix operator|(const scimatrix& A, const rmatrix_slice& B) {
02414 return spf_mm_hull<scimatrix,rmatrix_slice,cimatrix>(A,B);
02415 }
02416
02417 inline cimatrix operator|(const scimatrix& A, const cmatrix_slice& B) {
02418 return spf_mm_hull<scimatrix,cmatrix_slice,cimatrix>(A,B);
02419 }
02420
02421 inline cimatrix operator|(const scimatrix& A, const imatrix_slice& B) {
02422 return spf_mm_hull<scimatrix,imatrix_slice,cimatrix>(A,B);
02423 }
02424
02425 inline cimatrix operator|(const scimatrix& A, const cimatrix_slice& B) {
02426 return spf_mm_hull<scimatrix,cimatrix_slice,cimatrix>(A,B);
02427 }
02428
02429 inline cimatrix operator|(const srmatrix& A, const cimatrix_slice& B) {
02430 return spf_mm_hull<srmatrix,cimatrix_slice,cimatrix>(A,B);
02431 }
02432
02433 inline cimatrix operator|(const scmatrix& A, const cimatrix_slice& B) {
02434 return spf_mm_hull<scmatrix,cimatrix_slice,cimatrix>(A,B);
02435 }
02436
02437 inline cimatrix operator|(const simatrix& A, const cimatrix_slice& B) {
02438 return spf_mm_hull<simatrix,cimatrix_slice,cimatrix>(A,B);
02439 }
02440
02441 inline cimatrix operator|(const simatrix& A, const cmatrix_slice& B) {
02442 return spf_mm_hull<simatrix,cmatrix_slice,cimatrix>(A,B);
02443 }
02444
02445 inline cimatrix operator|(const scmatrix& A, const imatrix_slice& B) {
02446 return spf_mm_hull<scmatrix,imatrix_slice,cimatrix>(A,B);
02447 }
02448
02449 inline scimatrix operator|(const scimatrix& A, const srmatrix& B) {
02450 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(A,B);
02451 }
02452
02453 inline scimatrix operator|(const scimatrix& A, const scmatrix& B) {
02454 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(A,B);
02455 }
02456
02457 inline scimatrix operator|(const scimatrix& A, const simatrix& B) {
02458 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(A,B);
02459 }
02460
02461 inline scimatrix operator|(const scimatrix& A, const scimatrix& B) {
02462 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(A,B);
02463 }
02464
02465 inline scimatrix operator|(const srmatrix& A, const scimatrix& B) {
02466 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(A,B);
02467 }
02468
02469 inline scimatrix operator|(const scmatrix& A, const scimatrix& B) {
02470 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(A,B);
02471 }
02472
02473 inline scimatrix operator|(const simatrix& A, const scimatrix& B) {
02474 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(A,B);
02475 }
02476
02477 inline scimatrix operator|(const simatrix& A, const scmatrix& B) {
02478 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(A,B);
02479 }
02480
02481 inline scimatrix operator|(const scmatrix& A, const simatrix& B) {
02482 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(A,B);
02483 }
02484
02485 inline cimatrix operator|(const cmatrix& A, const srmatrix& B) {
02486 return fsp_mm_hull<cmatrix,srmatrix,cimatrix>(A,B);
02487 }
02488
02489 inline cimatrix operator|(const rmatrix& A, const scmatrix& B) {
02490 return fsp_mm_hull<rmatrix,scmatrix,cimatrix>(A,B);
02491 }
02492
02493 inline cimatrix operator|(const cmatrix& A, const scmatrix& B) {
02494 return fsp_mm_hull<cmatrix,scmatrix,cimatrix>(A,B);
02495 }
02496
02497 inline cimatrix operator|(const scmatrix& A, const rmatrix& B) {
02498 return spf_mm_hull<scmatrix,rmatrix,cimatrix>(A,B);
02499 }
02500
02501 inline cimatrix operator|(const srmatrix& A, const cmatrix& B) {
02502 return spf_mm_hull<srmatrix,cmatrix,cimatrix>(A,B);
02503 }
02504
02505 inline cimatrix operator|(const scmatrix& A, const cmatrix& B) {
02506 return spf_mm_hull<scmatrix,cmatrix,cimatrix>(A,B);
02507 }
02508
02509 inline cimatrix operator|(const cmatrix_slice& A, const srmatrix& B) {
02510 return fsp_mm_hull<cmatrix_slice,srmatrix,cimatrix>(A,B);
02511 }
02512
02513 inline cimatrix operator|(const rmatrix_slice& A, const scmatrix& B) {
02514 return fsp_mm_hull<rmatrix_slice,scmatrix,cimatrix>(A,B);
02515 }
02516
02517 inline cimatrix operator|(const cmatrix_slice& A, const scmatrix& B) {
02518 return fsp_mm_hull<cmatrix_slice,scmatrix,cimatrix>(A,B);
02519 }
02520
02521 inline cimatrix operator|(const scmatrix& A, const rmatrix_slice& B) {
02522 return spf_mm_hull<scmatrix,rmatrix_slice,cimatrix>(A,B);
02523 }
02524
02525 inline cimatrix operator|(const srmatrix& A, const cmatrix_slice& B) {
02526 return spf_mm_hull<srmatrix,cmatrix_slice,cimatrix>(A,B);
02527 }
02528
02529 inline cimatrix operator|(const scmatrix& A, const cmatrix_slice& B) {
02530 return spf_mm_hull<scmatrix,cmatrix_slice,cimatrix>(A,B);
02531 }
02532
02533 inline scimatrix operator|(const scmatrix& A, const srmatrix& B) {
02534 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(A,B);
02535 }
02536
02537 inline scimatrix operator|(const srmatrix& A, const scmatrix& B) {
02538 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(A,B);
02539 }
02540
02541 inline scimatrix operator|(const scmatrix& A, const scmatrix& B) {
02542 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(A,B);
02543 }
02544
02545 inline cimatrix operator&(const cimatrix& A, const simatrix& B) {
02546 return fsp_mm_intersect<cimatrix,simatrix,cimatrix>(A,B);
02547 }
02548
02549 inline cimatrix operator&(const cimatrix& A, const scimatrix& B) {
02550 return fsp_mm_intersect<cimatrix,scimatrix,cimatrix>(A,B);
02551 }
02552
02553 inline cimatrix operator&(const imatrix& A, const scimatrix& B) {
02554 return fsp_mm_intersect<imatrix,scimatrix,cimatrix>(A,B);
02555 }
02556
02557 inline cimatrix operator&(const scimatrix& A, const imatrix& B) {
02558 return spf_mm_intersect<scimatrix,imatrix,cimatrix>(A,B);
02559 }
02560
02561 inline cimatrix operator&(const scimatrix& A, const cimatrix& B) {
02562 return spf_mm_intersect<scimatrix,cimatrix,cimatrix>(A,B);
02563 }
02564
02565 inline cimatrix operator&(const simatrix& A, const cimatrix& B) {
02566 return spf_mm_intersect<simatrix,cimatrix,cimatrix>(A,B);
02567 }
02568
02569 inline cimatrix operator&(const cimatrix_slice& A, const simatrix& B) {
02570 return fsp_mm_intersect<cimatrix_slice,simatrix,cimatrix>(A,B);
02571 }
02572
02573 inline cimatrix operator&(const cimatrix_slice& A, const scimatrix& B) {
02574 return fsp_mm_intersect<cimatrix_slice,scimatrix,cimatrix>(A,B);
02575 }
02576
02577 inline cimatrix operator&(const imatrix_slice& A, const scimatrix& B) {
02578 return fsp_mm_intersect<imatrix_slice,scimatrix,cimatrix>(A,B);
02579 }
02580
02581 inline cimatrix operator&(const scimatrix& A, const imatrix_slice& B) {
02582 return spf_mm_intersect<scimatrix,imatrix_slice,cimatrix>(A,B);
02583 }
02584
02585 inline cimatrix operator&(const scimatrix& A, const cimatrix_slice& B) {
02586 return spf_mm_intersect<scimatrix,cimatrix_slice,cimatrix>(A,B);
02587 }
02588
02589 inline cimatrix operator&(const simatrix& A, const cimatrix_slice& B) {
02590 return spf_mm_intersect<simatrix,cimatrix_slice,cimatrix>(A,B);
02591 }
02592
02593 inline scimatrix operator&(const scimatrix& A, const simatrix& B) {
02594 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(A,B);
02595 }
02596
02597 inline scimatrix operator&(const scimatrix& A, const scimatrix& B) {
02598 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(A,B);
02599 }
02600
02601 inline scimatrix operator&(const simatrix& A, const scimatrix& B) {
02602 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(A,B);
02603 }
02604
02605 inline scimatrix operator-(const scimatrix& M) {
02606 return sp_m_negative<scimatrix,scimatrix>(M);
02607 }
02608
02609 inline scimatrix& operator+(scimatrix& A) {
02610 return A;
02611 }
02612
02613 inline cimatrix& cimatrix::operator=(const srmatrix& B) {
02614 *this = rmatrix(B);
02615 return *this;
02616 }
02617
02618 inline cimatrix& cimatrix::operator=(const scmatrix& B) {
02619 *this = cmatrix(B);
02620 return *this;
02621 }
02622
02623 inline cimatrix& cimatrix::operator=(const simatrix& B) {
02624 *this = imatrix(B);
02625 return *this;
02626 }
02627
02628 inline cimatrix& cimatrix::operator=(const scimatrix& B) {
02629 *this = cimatrix(B);
02630 return *this;
02631 }
02632
02633 inline cimatrix_slice& cimatrix_slice::operator=(const srmatrix& B) {
02634 *this = rmatrix(B);
02635 return *this;
02636 }
02637
02638 inline cimatrix_slice& cimatrix_slice::operator=(const scmatrix& B) {
02639 *this = cmatrix(B);
02640 return *this;
02641 }
02642
02643 inline cimatrix_slice& cimatrix_slice::operator=(const simatrix& B) {
02644 *this = imatrix(B);
02645 return *this;
02646 }
02647
02648 inline cimatrix_slice& cimatrix_slice::operator=(const scimatrix& B) {
02649 *this = cimatrix(B);
02650 return *this;
02651 }
02652
02653 inline cimatrix& cimatrix::operator+=(const srmatrix& B) {
02654 return fsp_mm_addassign(*this,B);
02655 }
02656
02657 inline cimatrix& cimatrix::operator+=(const scmatrix& B) {
02658 return fsp_mm_addassign(*this,B);
02659 }
02660
02661 inline cimatrix& cimatrix::operator+=(const simatrix& B) {
02662 return fsp_mm_addassign(*this,B);
02663 }
02664
02665 inline cimatrix& cimatrix::operator+=(const scimatrix& B) {
02666 return fsp_mm_addassign(*this,B);
02667 }
02668
02669 inline cimatrix_slice& cimatrix_slice::operator+=(const srmatrix& B) {
02670 return fsp_mm_addassign(*this,B);
02671 }
02672
02673 inline cimatrix_slice& cimatrix_slice::operator+=(const scmatrix& B) {
02674 return fsp_mm_addassign(*this,B);
02675 }
02676
02677 inline cimatrix_slice& cimatrix_slice::operator+=(const simatrix& B) {
02678 return fsp_mm_addassign(*this,B);
02679 }
02680
02681 inline cimatrix_slice& cimatrix_slice::operator+=(const scimatrix& B) {
02682 return fsp_mm_addassign(*this,B);
02683 }
02684
02685 inline cimatrix& cimatrix::operator-=(const srmatrix& B) {
02686 return fsp_mm_subassign(*this,B);
02687 }
02688
02689 inline cimatrix& cimatrix::operator-=(const scmatrix& B) {
02690 return fsp_mm_subassign(*this,B);
02691 }
02692
02693 inline cimatrix& cimatrix::operator-=(const scimatrix& B) {
02694 return fsp_mm_subassign(*this,B);
02695 }
02696
02697 inline cimatrix& cimatrix::operator-=(const simatrix& B) {
02698 return fsp_mm_subassign(*this,B);
02699 }
02700
02701 inline cimatrix_slice& cimatrix_slice::operator-=(const srmatrix& B) {
02702 return fsp_mm_subassign(*this,B);
02703 }
02704
02705 inline cimatrix_slice& cimatrix_slice::operator-=(const scmatrix& B) {
02706 return fsp_mm_subassign(*this,B);
02707 }
02708
02709 inline cimatrix_slice& cimatrix_slice::operator-=(const simatrix& B) {
02710 return fsp_mm_subassign(*this,B);
02711 }
02712
02713 inline cimatrix_slice& cimatrix_slice::operator-=(const scimatrix& B) {
02714 return fsp_mm_subassign(*this,B);
02715 }
02716
02717 inline cimatrix& cimatrix::operator|=(const srmatrix& B) {
02718 return fsp_mm_hullassign(*this,B);
02719 }
02720
02721 inline cimatrix& cimatrix::operator|=(const scmatrix& B) {
02722 return fsp_mm_hullassign(*this,B);
02723 }
02724
02725 inline cimatrix& cimatrix::operator|=(const simatrix& B) {
02726 return fsp_mm_hullassign(*this,B);
02727 }
02728
02729 inline cimatrix& cimatrix::operator|=(const scimatrix& B) {
02730 return fsp_mm_hullassign(*this,B);
02731 }
02732
02733 inline cimatrix_slice& cimatrix_slice::operator|=(const srmatrix& B) {
02734 return fsp_mm_hullassign(*this,B);
02735 }
02736
02737 inline cimatrix_slice& cimatrix_slice::operator|=(const scmatrix& B) {
02738 return fsp_mm_hullassign(*this,B);
02739 }
02740
02741 inline cimatrix_slice& cimatrix_slice::operator|=(const simatrix& B) {
02742 return fsp_mm_hullassign(*this,B);
02743 }
02744
02745 inline cimatrix_slice& cimatrix_slice::operator|=(const scimatrix& B) {
02746 return fsp_mm_hullassign(*this,B);
02747 }
02748
02749 inline cimatrix& cimatrix::operator&=(const simatrix& B) {
02750 return fsp_mm_intersectassign(*this,B);
02751 }
02752
02753 inline cimatrix& cimatrix::operator&=(const scimatrix& B) {
02754 return fsp_mm_intersectassign(*this,B);
02755 }
02756
02757 inline cimatrix_slice& cimatrix_slice::operator&=(const simatrix& B) {
02758 return fsp_mm_intersectassign(*this,B);
02759 }
02760
02761 inline cimatrix_slice& cimatrix_slice::operator&=(const scimatrix& B) {
02762 return fsp_mm_intersectassign(*this,B);
02763 }
02764
02765 inline cimatrix& cimatrix::operator*=(const srmatrix& B) {
02766 return fsp_mm_multassign<cimatrix,srmatrix,sparse_cidot,cimatrix>(*this,B);
02767 }
02768
02769 inline cimatrix& cimatrix::operator*=(const scmatrix& B) {
02770 return fsp_mm_multassign<cimatrix,scmatrix,sparse_cidot,cimatrix>(*this,B);
02771 }
02772
02773 inline cimatrix& cimatrix::operator*=(const simatrix& B) {
02774 return fsp_mm_multassign<cimatrix,simatrix,sparse_cidot,cimatrix>(*this,B);
02775 }
02776
02777 inline cimatrix& cimatrix::operator*=(const scimatrix& B) {
02778 return fsp_mm_multassign<cimatrix,scimatrix,sparse_cidot,cimatrix>(*this,B);
02779 }
02780
02781 inline cimatrix_slice& cimatrix_slice::operator*=(const srmatrix& B) {
02782 return fsp_mm_multassign<cimatrix_slice,srmatrix,sparse_cidot,cimatrix>(*this,B);
02783 }
02784
02785 inline cimatrix_slice& cimatrix_slice::operator*=(const scmatrix& B) {
02786 return fsp_mm_multassign<cimatrix_slice,scmatrix,sparse_cidot,cimatrix>(*this,B);
02787 }
02788
02789 inline cimatrix_slice& cimatrix_slice::operator*=(const simatrix& B) {
02790 return fsp_mm_multassign<cimatrix_slice,simatrix,sparse_cidot,cimatrix>(*this,B);
02791 }
02792
02793 inline cimatrix_slice& cimatrix_slice::operator*=(const scimatrix& B) {
02794 return fsp_mm_multassign<cimatrix_slice,scimatrix,sparse_cidot,cimatrix>(*this,B);
02795 }
02796
02797 inline bool operator==(const scimatrix& A, const srmatrix& B) {
02798 return spsp_mm_comp(A,B);
02799 }
02800
02801 inline bool operator==(const scimatrix& A, const scmatrix& B) {
02802 return spsp_mm_comp(A,B);
02803 }
02804
02805 inline bool operator==(const scimatrix& A, const simatrix& B) {
02806 return spsp_mm_comp(A,B);
02807 }
02808
02809 inline bool operator==(const scimatrix& A, const scimatrix& B) {
02810 return spsp_mm_comp(A,B);
02811 }
02812
02813 inline bool operator==(const srmatrix& A, const scimatrix& B) {
02814 return spsp_mm_comp(A,B);
02815 }
02816
02817 inline bool operator==(const scmatrix& A, const scimatrix& B) {
02818 return spsp_mm_comp(A,B);
02819 }
02820
02821 inline bool operator==(const simatrix& A, const scimatrix& B) {
02822 return spsp_mm_comp(A,B);
02823 }
02824
02825 inline bool operator==(const scimatrix& A, const rmatrix& B) {
02826 return spf_mm_comp(A,B);
02827 }
02828
02829 inline bool operator==(const scimatrix& A, const imatrix& B) {
02830 return spf_mm_comp(A,B);
02831 }
02832
02833 inline bool operator==(const scimatrix& A, const cmatrix& B) {
02834 return spf_mm_comp(A,B);
02835 }
02836
02837 inline bool operator==(const scimatrix& A, const cimatrix& B) {
02838 return spf_mm_comp(A,B);
02839 }
02840
02841 inline bool operator==(const srmatrix& A, const cimatrix& B) {
02842 return spf_mm_comp(A,B);
02843 }
02844
02845 inline bool operator==(const scmatrix& A, const cimatrix& B) {
02846 return spf_mm_comp(A,B);
02847 }
02848
02849 inline bool operator==(const simatrix& A, const cimatrix& B) {
02850 return spf_mm_comp(A,B);
02851 }
02852
02853 inline bool operator==(const cimatrix& A, const srmatrix& B) {
02854 return fsp_mm_comp(A,B);
02855 }
02856
02857 inline bool operator==(const cimatrix& A, const simatrix& B) {
02858 return fsp_mm_comp(A,B);
02859 }
02860
02861 inline bool operator==(const cimatrix& A, const scmatrix& B) {
02862 return fsp_mm_comp(A,B);
02863 }
02864
02865 inline bool operator==(const cimatrix& A, const scimatrix& B) {
02866 return fsp_mm_comp(A,B);
02867 }
02868
02869 inline bool operator==(const rmatrix& A, const scimatrix& B) {
02870 return fsp_mm_comp(A,B);
02871 }
02872
02873 inline bool operator==(const cmatrix& A, const scimatrix& B) {
02874 return fsp_mm_comp(A,B);
02875 }
02876
02877 inline bool operator==(const imatrix& A, const scimatrix& B) {
02878 return fsp_mm_comp(A,B);
02879 }
02880
02881 inline bool operator==(const cimatrix_slice& A, const srmatrix& B) {
02882 return fsp_mm_comp(A,B);
02883 }
02884
02885 inline bool operator==(const cimatrix_slice& A, const scmatrix& B) {
02886 return fsp_mm_comp(A,B);
02887 }
02888
02889 inline bool operator==(const cimatrix_slice& A, const simatrix& B) {
02890 return fsp_mm_comp(A,B);
02891 }
02892
02893 inline bool operator==(const cimatrix_slice& A, const scimatrix& B) {
02894 return fsp_mm_comp(A,B);
02895 }
02896
02897 inline bool operator==(const rmatrix_slice& A, const scimatrix& B) {
02898 return fsp_mm_comp(A,B);
02899 }
02900
02901 inline bool operator==(const cmatrix_slice& A, const scimatrix& B) {
02902 return fsp_mm_comp(A,B);
02903 }
02904
02905 inline bool operator==(const imatrix_slice& A, const scimatrix& B) {
02906 return fsp_mm_comp(A,B);
02907 }
02908
02909 inline bool operator==(const scimatrix& A, const rmatrix_slice& B) {
02910 return spf_mm_comp(A,B);
02911 }
02912
02913 inline bool operator==(const scimatrix& A, const imatrix_slice& B) {
02914 return spf_mm_comp(A,B);
02915 }
02916
02917 inline bool operator==(const scimatrix& A, const cmatrix_slice& B) {
02918 return spf_mm_comp(A,B);
02919 }
02920
02921 inline bool operator==(const scimatrix& A, const cimatrix_slice& B) {
02922 return spf_mm_comp(A,B);
02923 }
02924
02925 inline bool operator==(const srmatrix& A, const cimatrix_slice& B) {
02926 return spf_mm_comp(A,B);
02927 }
02928
02929 inline bool operator==(const scmatrix& A, const cimatrix_slice& B) {
02930 return spf_mm_comp(A,B);
02931 }
02932
02933 inline bool operator==(const simatrix& A, const cimatrix_slice& B) {
02934 return spf_mm_comp(A,B);
02935 }
02936
02937 inline bool operator!=(const scimatrix& A, const srmatrix& B) {
02938 return !spsp_mm_comp(A,B);
02939 }
02940
02941 inline bool operator!=(const scimatrix& A, const scmatrix& B) {
02942 return !spsp_mm_comp(A,B);
02943 }
02944
02945 inline bool operator!=(const scimatrix& A, const simatrix& B) {
02946 return !spsp_mm_comp(A,B);
02947 }
02948
02949 inline bool operator!=(const scimatrix& A, const scimatrix& B) {
02950 return !spsp_mm_comp(A,B);
02951 }
02952
02953 inline bool operator!=(const srmatrix& A, const scimatrix& B) {
02954 return !spsp_mm_comp(A,B);
02955 }
02956
02957 inline bool operator!=(const scmatrix& A, const scimatrix& B) {
02958 return !spsp_mm_comp(A,B);
02959 }
02960
02961 inline bool operator!=(const simatrix& A, const scimatrix& B) {
02962 return !spsp_mm_comp(A,B);
02963 }
02964
02965 inline bool operator!=(const scimatrix& A, const rmatrix& B) {
02966 return !spf_mm_comp(A,B);
02967 }
02968
02969 inline bool operator!=(const scimatrix& A, const imatrix& B) {
02970 return !spf_mm_comp(A,B);
02971 }
02972
02973 inline bool operator!=(const scimatrix& A, const cmatrix& B) {
02974 return !spf_mm_comp(A,B);
02975 }
02976
02977 inline bool operator!=(const scimatrix& A, const cimatrix& B) {
02978 return !spf_mm_comp(A,B);
02979 }
02980
02981 inline bool operator!=(const srmatrix& A, const cimatrix& B) {
02982 return !spf_mm_comp(A,B);
02983 }
02984
02985 inline bool operator!=(const scmatrix& A, const cimatrix& B) {
02986 return !spf_mm_comp(A,B);
02987 }
02988
02989 inline bool operator!=(const simatrix& A, const cimatrix& B) {
02990 return !spf_mm_comp(A,B);
02991 }
02992
02993 inline bool operator!=(const cimatrix& A, const srmatrix& B) {
02994 return !fsp_mm_comp(A,B);
02995 }
02996
02997 inline bool operator!=(const cimatrix& A, const simatrix& B) {
02998 return !fsp_mm_comp(A,B);
02999 }
03000
03001 inline bool operator!=(const cimatrix& A, const scmatrix& B) {
03002 return !fsp_mm_comp(A,B);
03003 }
03004
03005 inline bool operator!=(const cimatrix& A, const scimatrix& B) {
03006 return !fsp_mm_comp(A,B);
03007 }
03008
03009 inline bool operator!=(const rmatrix& A, const scimatrix& B) {
03010 return !fsp_mm_comp(A,B);
03011 }
03012
03013 inline bool operator!=(const cmatrix& A, const scimatrix& B) {
03014 return !fsp_mm_comp(A,B);
03015 }
03016
03017 inline bool operator!=(const imatrix& A, const scimatrix& B) {
03018 return !fsp_mm_comp(A,B);
03019 }
03020
03021 inline bool operator!=(const cimatrix_slice& A, const srmatrix& B) {
03022 return !fsp_mm_comp(A,B);
03023 }
03024
03025 inline bool operator!=(const cimatrix_slice& A, const scmatrix& B) {
03026 return !fsp_mm_comp(A,B);
03027 }
03028
03029 inline bool operator!=(const cimatrix_slice& A, const simatrix& B) {
03030 return !fsp_mm_comp(A,B);
03031 }
03032
03033 inline bool operator!=(const cimatrix_slice& A, const scimatrix& B) {
03034 return !fsp_mm_comp(A,B);
03035 }
03036
03037 inline bool operator!=(const rmatrix_slice& A, const scimatrix& B) {
03038 return !fsp_mm_comp(A,B);
03039 }
03040
03041 inline bool operator!=(const cmatrix_slice& A, const scimatrix& B) {
03042 return !fsp_mm_comp(A,B);
03043 }
03044
03045 inline bool operator!=(const imatrix_slice& A, const scimatrix& B) {
03046 return !fsp_mm_comp(A,B);
03047 }
03048
03049 inline bool operator!=(const scimatrix& A, const rmatrix_slice& B) {
03050 return !spf_mm_comp(A,B);
03051 }
03052
03053 inline bool operator!=(const scimatrix& A, const imatrix_slice& B) {
03054 return !spf_mm_comp(A,B);
03055 }
03056
03057 inline bool operator!=(const scimatrix& A, const cmatrix_slice& B) {
03058 return !spf_mm_comp(A,B);
03059 }
03060
03061 inline bool operator!=(const scimatrix& A, const cimatrix_slice& B) {
03062 return !spf_mm_comp(A,B);
03063 }
03064
03065 inline bool operator!=(const srmatrix& A, const cimatrix_slice& B) {
03066 return !spf_mm_comp(A,B);
03067 }
03068
03069 inline bool operator!=(const scmatrix& A, const cimatrix_slice& B) {
03070 return !spf_mm_comp(A,B);
03071 }
03072
03073 inline bool operator!=(const simatrix& A, const cimatrix_slice& B) {
03074 return !spf_mm_comp(A,B);
03075 }
03076
03077 inline bool operator<(const scimatrix& A, const simatrix& B) {
03078 return spsp_mm_less<scimatrix,simatrix,cinterval>(A,B);
03079 }
03080
03081 inline bool operator<(const scimatrix& A, const scimatrix& B) {
03082 return spsp_mm_less<scimatrix,scimatrix,cinterval>(A,B);
03083 }
03084
03085 inline bool operator<(const srmatrix& A, const scimatrix& B) {
03086 return spsp_mm_less<srmatrix,scimatrix,cinterval>(A,B);
03087 }
03088
03089 inline bool operator<(const scmatrix& A, const scimatrix& B) {
03090 return spsp_mm_less<scmatrix,scimatrix,cinterval>(A,B);
03091 }
03092
03093 inline bool operator<(const simatrix& A, const scimatrix& B) {
03094 return spsp_mm_less<simatrix,scimatrix,cinterval>(A,B);
03095 }
03096
03097 inline bool operator<(const scimatrix& A, const imatrix& B) {
03098 return spf_mm_less<scimatrix,imatrix,cinterval>(A,B);
03099 }
03100
03101 inline bool operator<(const scimatrix& A, const cimatrix& B) {
03102 return spf_mm_less<scimatrix,cimatrix,cinterval>(A,B);
03103 }
03104
03105 inline bool operator<(const srmatrix& A, const cimatrix& B) {
03106 return spf_mm_less<srmatrix,cimatrix,cinterval>(A,B);
03107 }
03108
03109 inline bool operator<(const scmatrix& A, const cimatrix& B) {
03110 return spf_mm_less<scmatrix,cimatrix,cinterval>(A,B);
03111 }
03112
03113 inline bool operator<(const simatrix& A, const cimatrix& B) {
03114 return spf_mm_less<simatrix,cimatrix,cinterval>(A,B);
03115 }
03116
03117 inline bool operator<(const cimatrix& A, const simatrix& B) {
03118 return fsp_mm_less<cimatrix,simatrix,cinterval>(A,B);
03119 }
03120
03121 inline bool operator<(const cimatrix& A, const scimatrix& B) {
03122 return fsp_mm_less<cimatrix,scimatrix,cinterval>(A,B);
03123 }
03124
03125 inline bool operator<(const rmatrix& A, const scimatrix& B) {
03126 return fsp_mm_less<rmatrix,scimatrix,cinterval>(A,B);
03127 }
03128
03129 inline bool operator<(const cmatrix& A, const scimatrix& B) {
03130 return fsp_mm_less<cmatrix,scimatrix,cinterval>(A,B);
03131 }
03132
03133 inline bool operator<(const imatrix& A, const scimatrix& B) {
03134 return fsp_mm_less<imatrix,scimatrix,cinterval>(A,B);
03135 }
03136
03137 inline bool operator<(const cimatrix_slice& A, const simatrix& B) {
03138 return fsp_mm_less<cimatrix_slice,simatrix,cinterval>(A,B);
03139 }
03140
03141 inline bool operator<(const cimatrix_slice& A, const scimatrix& B) {
03142 return fsp_mm_less<cimatrix_slice,scimatrix,cinterval>(A,B);
03143 }
03144
03145 inline bool operator<(const rmatrix_slice& A, const scimatrix& B) {
03146 return fsp_mm_less<rmatrix_slice,scimatrix,cinterval>(A,B);
03147 }
03148
03149 inline bool operator<(const cmatrix_slice& A, const scimatrix& B) {
03150 return fsp_mm_less<cmatrix_slice,scimatrix,cinterval>(A,B);
03151 }
03152
03153 inline bool operator<(const imatrix_slice& A, const scimatrix& B) {
03154 return fsp_mm_less<imatrix_slice,scimatrix,cinterval>(A,B);
03155 }
03156
03157 inline bool operator<(const scimatrix& A, const imatrix_slice& B) {
03158 return spf_mm_less<scimatrix,imatrix_slice,cinterval>(A,B);
03159 }
03160
03161 inline bool operator<(const scimatrix& A, const cimatrix_slice& B) {
03162 return spf_mm_less<scimatrix,cimatrix_slice,cinterval>(A,B);
03163 }
03164
03165 inline bool operator<(const srmatrix& A, const cimatrix_slice& B) {
03166 return spf_mm_less<srmatrix,cimatrix_slice,cinterval>(A,B);
03167 }
03168
03169 inline bool operator<(const scmatrix& A, const cimatrix_slice& B) {
03170 return spf_mm_less<scmatrix,cimatrix_slice,cinterval>(A,B);
03171 }
03172
03173 inline bool operator<(const simatrix& A, const cimatrix_slice& B) {
03174 return spf_mm_less<simatrix,cimatrix_slice,cinterval>(A,B);
03175 }
03176
03177 inline bool operator<=(const scimatrix& A, const simatrix& B) {
03178 return spsp_mm_leq<scimatrix,simatrix,cinterval>(A,B);
03179 }
03180
03181 inline bool operator<=(const scimatrix& A, const scimatrix& B) {
03182 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(A,B);
03183 }
03184
03185 inline bool operator<=(const srmatrix& A, const scimatrix& B) {
03186 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(A,B);
03187 }
03188
03189 inline bool operator<=(const scmatrix& A, const scimatrix& B) {
03190 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(A,B);
03191 }
03192
03193 inline bool operator<=(const simatrix& A, const scimatrix& B) {
03194 return spsp_mm_leq<simatrix,scimatrix,cinterval>(A,B);
03195 }
03196
03197 inline bool operator<=(const scimatrix& A, const imatrix& B) {
03198 return spf_mm_leq<scimatrix,imatrix,cinterval>(A,B);
03199 }
03200
03201 inline bool operator<=(const scimatrix& A, const cimatrix& B) {
03202 return spf_mm_leq<scimatrix,cimatrix,cinterval>(A,B);
03203 }
03204
03205 inline bool operator<=(const srmatrix& A, const cimatrix& B) {
03206 return spf_mm_leq<srmatrix,cimatrix,cinterval>(A,B);
03207 }
03208
03209 inline bool operator<=(const scmatrix& A, const cimatrix& B) {
03210 return spf_mm_leq<scmatrix,cimatrix,cinterval>(A,B);
03211 }
03212
03213 inline bool operator<=(const simatrix& A, const cimatrix& B) {
03214 return spf_mm_leq<simatrix,cimatrix,cinterval>(A,B);
03215 }
03216
03217 inline bool operator<=(const cimatrix& A, const simatrix& B) {
03218 return fsp_mm_leq<cimatrix,simatrix,cinterval>(A,B);
03219 }
03220
03221 inline bool operator<=(const cimatrix& A, const scimatrix& B) {
03222 return fsp_mm_leq<cimatrix,scimatrix,cinterval>(A,B);
03223 }
03224
03225 inline bool operator<=(const rmatrix& A, const scimatrix& B) {
03226 return fsp_mm_leq<rmatrix,scimatrix,cinterval>(A,B);
03227 }
03228
03229 inline bool operator<=(const cmatrix& A, const scimatrix& B) {
03230 return fsp_mm_leq<cmatrix,scimatrix,cinterval>(A,B);
03231 }
03232
03233 inline bool operator<=(const imatrix& A, const scimatrix& B) {
03234 return fsp_mm_leq<imatrix,scimatrix,cinterval>(A,B);
03235 }
03236
03237 inline bool operator<=(const cimatrix_slice& A, const simatrix& B) {
03238 return fsp_mm_leq<cimatrix_slice,simatrix,cinterval>(A,B);
03239 }
03240
03241 inline bool operator<=(const cimatrix_slice& A, const scimatrix& B) {
03242 return fsp_mm_leq<cimatrix_slice,scimatrix,cinterval>(A,B);
03243 }
03244
03245 inline bool operator<=(const rmatrix_slice& A, const scimatrix& B) {
03246 return fsp_mm_leq<rmatrix_slice,scimatrix,cinterval>(A,B);
03247 }
03248
03249 inline bool operator<=(const cmatrix_slice& A, const scimatrix& B) {
03250 return fsp_mm_leq<cmatrix_slice,scimatrix,cinterval>(A,B);
03251 }
03252
03253 inline bool operator<=(const imatrix_slice& A, const scimatrix& B) {
03254 return fsp_mm_leq<imatrix_slice,scimatrix,cinterval>(A,B);
03255 }
03256
03257 inline bool operator<=(const scimatrix& A, const imatrix_slice& B) {
03258 return spf_mm_leq<scimatrix,imatrix_slice,cinterval>(A,B);
03259 }
03260
03261 inline bool operator<=(const scimatrix& A, const cimatrix_slice& B) {
03262 return spf_mm_leq<scimatrix,cimatrix_slice,cinterval>(A,B);
03263 }
03264
03265 inline bool operator<=(const srmatrix& A, const cimatrix_slice& B) {
03266 return spf_mm_leq<srmatrix,cimatrix_slice,cinterval>(A,B);
03267 }
03268
03269 inline bool operator<=(const scmatrix& A, const cimatrix_slice& B) {
03270 return spf_mm_leq<scmatrix,cimatrix_slice,cinterval>(A,B);
03271 }
03272
03273 inline bool operator<=(const simatrix& A, const cimatrix_slice& B) {
03274 return spf_mm_leq<simatrix,cimatrix_slice,cinterval>(A,B);
03275 }
03276
03277 inline bool operator>(const scimatrix& A, const srmatrix& B) {
03278 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(A,B);
03279 }
03280
03281 inline bool operator>(const scimatrix& A, const scmatrix& B) {
03282 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(A,B);
03283 }
03284
03285 inline bool operator>(const scimatrix& A, const simatrix& B) {
03286 return spsp_mm_greater<scimatrix,simatrix,cinterval>(A,B);
03287 }
03288
03289 inline bool operator>(const scimatrix& A, const scimatrix& B) {
03290 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(A,B);
03291 }
03292
03293 inline bool operator>(const simatrix& A, const scimatrix& B) {
03294 return spsp_mm_greater<simatrix,scimatrix,cinterval>(A,B);
03295 }
03296
03297 inline bool operator>(const scimatrix& A, const rmatrix& B) {
03298 return spf_mm_greater<scimatrix,rmatrix,cinterval>(A,B);
03299 }
03300
03301 inline bool operator>(const scimatrix& A, const imatrix& B) {
03302 return spf_mm_greater<scimatrix,imatrix,cinterval>(A,B);
03303 }
03304
03305 inline bool operator>(const scimatrix& A, const cmatrix& B) {
03306 return spf_mm_greater<scimatrix,cmatrix,cinterval>(A,B);
03307 }
03308
03309 inline bool operator>(const scimatrix& A, const cimatrix& B) {
03310 return spf_mm_greater<scimatrix,cimatrix,cinterval>(A,B);
03311 }
03312
03313 inline bool operator>(const simatrix& A, const cimatrix& B) {
03314 return spf_mm_greater<simatrix,cimatrix,cinterval>(A,B);
03315 }
03316
03317 inline bool operator>(const cimatrix& A, const srmatrix& B) {
03318 return fsp_mm_greater<cimatrix,srmatrix,cinterval>(A,B);
03319 }
03320
03321 inline bool operator>(const cimatrix& A, const simatrix& B) {
03322 return fsp_mm_greater<cimatrix,simatrix,cinterval>(A,B);
03323 }
03324
03325 inline bool operator>(const cimatrix& A, const scmatrix& B) {
03326 return fsp_mm_greater<cimatrix,scmatrix,cinterval>(A,B);
03327 }
03328
03329 inline bool operator>(const cimatrix& A, const scimatrix& B) {
03330 return fsp_mm_greater<cimatrix,scimatrix,cinterval>(A,B);
03331 }
03332
03333 inline bool operator>(const imatrix& A, const scimatrix& B) {
03334 return fsp_mm_greater<imatrix,scimatrix,cinterval>(A,B);
03335 }
03336
03337 inline bool operator>(const cimatrix_slice& A, const srmatrix& B) {
03338 return fsp_mm_greater<cimatrix_slice,srmatrix,cinterval>(A,B);
03339 }
03340
03341 inline bool operator>(const cimatrix_slice& A, const scmatrix& B) {
03342 return fsp_mm_greater<cimatrix_slice,scmatrix,cinterval>(A,B);
03343 }
03344
03345 inline bool operator>(const cimatrix_slice& A, const simatrix& B) {
03346 return fsp_mm_greater<cimatrix_slice,simatrix,cinterval>(A,B);
03347 }
03348
03349 inline bool operator>(const cimatrix_slice& A, const scimatrix& B) {
03350 return fsp_mm_greater<cimatrix_slice,scimatrix,cinterval>(A,B);
03351 }
03352
03353 inline bool operator>(const imatrix_slice& A, const scimatrix& B) {
03354 return fsp_mm_greater<imatrix_slice,scimatrix,cinterval>(A,B);
03355 }
03356
03357 inline bool operator>(const scimatrix& A, const rmatrix_slice& B) {
03358 return spf_mm_greater<scimatrix,rmatrix_slice,cinterval>(A,B);
03359 }
03360
03361 inline bool operator>(const scimatrix& A, const imatrix_slice& B) {
03362 return spf_mm_greater<scimatrix,imatrix_slice,cinterval>(A,B);
03363 }
03364
03365 inline bool operator>(const scimatrix& A, const cmatrix_slice& B) {
03366 return spf_mm_greater<scimatrix,cmatrix_slice,cinterval>(A,B);
03367 }
03368
03369 inline bool operator>(const scimatrix& A, const cimatrix_slice& B) {
03370 return spf_mm_greater<scimatrix,cimatrix_slice,cinterval>(A,B);
03371 }
03372
03373 inline bool operator>(const simatrix& A, const cimatrix_slice& B) {
03374 return spf_mm_greater<simatrix,cimatrix_slice,cinterval>(A,B);
03375 }
03376
03377 inline bool operator>=(const scimatrix& A, const srmatrix& B) {
03378 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(A,B);
03379 }
03380
03381 inline bool operator>=(const scimatrix& A, const scmatrix& B) {
03382 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(A,B);
03383 }
03384
03385 inline bool operator>=(const scimatrix& A, const simatrix& B) {
03386 return spsp_mm_geq<scimatrix,simatrix,cinterval>(A,B);
03387 }
03388
03389 inline bool operator>=(const scimatrix& A, const scimatrix& B) {
03390 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(A,B);
03391 }
03392
03393 inline bool operator>=(const simatrix& A, const scimatrix& B) {
03394 return spsp_mm_geq<simatrix,scimatrix,cinterval>(A,B);
03395 }
03396
03397 inline bool operator>=(const scimatrix& A, const rmatrix& B) {
03398 return spf_mm_geq<scimatrix,rmatrix,cinterval>(A,B);
03399 }
03400
03401 inline bool operator>=(const scimatrix& A, const imatrix& B) {
03402 return spf_mm_geq<scimatrix,imatrix,cinterval>(A,B);
03403 }
03404
03405 inline bool operator>=(const scimatrix& A, const cmatrix& B) {
03406 return spf_mm_geq<scimatrix,cmatrix,cinterval>(A,B);
03407 }
03408
03409 inline bool operator>=(const scimatrix& A, const cimatrix& B) {
03410 return spf_mm_geq<scimatrix,cimatrix,cinterval>(A,B);
03411 }
03412
03413 inline bool operator>=(const simatrix& A, const cimatrix& B) {
03414 return spf_mm_geq<simatrix,cimatrix,cinterval>(A,B);
03415 }
03416
03417 inline bool operator>=(const cimatrix& A, const srmatrix& B) {
03418 return fsp_mm_geq<cimatrix,srmatrix,cinterval>(A,B);
03419 }
03420
03421 inline bool operator>=(const cimatrix& A, const simatrix& B) {
03422 return fsp_mm_geq<cimatrix,simatrix,cinterval>(A,B);
03423 }
03424
03425 inline bool operator>=(const cimatrix& A, const scmatrix& B) {
03426 return fsp_mm_geq<cimatrix,scmatrix,cinterval>(A,B);
03427 }
03428
03429 inline bool operator>=(const cimatrix& A, const scimatrix& B) {
03430 return fsp_mm_geq<cimatrix,scimatrix,cinterval>(A,B);
03431 }
03432
03433 inline bool operator>=(const imatrix& A, const scimatrix& B) {
03434 return fsp_mm_geq<imatrix,scimatrix,cinterval>(A,B);
03435 }
03436
03437 inline bool operator>=(const cimatrix_slice& A, const srmatrix& B) {
03438 return fsp_mm_geq<cimatrix_slice,srmatrix,cinterval>(A,B);
03439 }
03440
03441 inline bool operator>=(const cimatrix_slice& A, const scmatrix& B) {
03442 return fsp_mm_geq<cimatrix_slice,scmatrix,cinterval>(A,B);
03443 }
03444
03445 inline bool operator>=(const cimatrix_slice& A, const simatrix& B) {
03446 return fsp_mm_geq<cimatrix_slice,simatrix,cinterval>(A,B);
03447 }
03448
03449 inline bool operator>=(const cimatrix_slice& A, const scimatrix& B) {
03450 return fsp_mm_geq<cimatrix_slice,scimatrix,cinterval>(A,B);
03451 }
03452
03453 inline bool operator>=(const imatrix_slice& A, const scimatrix& B) {
03454 return fsp_mm_geq<imatrix_slice,scimatrix,cinterval>(A,B);
03455 }
03456
03457 inline bool operator>=(const scimatrix& A, const rmatrix_slice& B) {
03458 return spf_mm_geq<scimatrix,rmatrix_slice,cinterval>(A,B);
03459 }
03460
03461 inline bool operator>=(const scimatrix& A, const imatrix_slice& B) {
03462 return spf_mm_geq<scimatrix,imatrix_slice,cinterval>(A,B);
03463 }
03464
03465 inline bool operator>=(const scimatrix& A, const cmatrix_slice& B) {
03466 return spf_mm_geq<scimatrix,cmatrix_slice,cinterval>(A,B);
03467 }
03468
03469 inline bool operator>=(const scimatrix& A, const cimatrix_slice& B) {
03470 return spf_mm_geq<scimatrix,cimatrix_slice,cinterval>(A,B);
03471 }
03472
03473 inline bool operator>=(const simatrix& A, const cimatrix_slice& B) {
03474 return spf_mm_geq<simatrix,cimatrix_slice,cinterval>(A,B);
03475 }
03476
03477 inline bool operator!(const scimatrix& A) {
03478 return sp_m_not(A);
03479 }
03480
03481 inline std::ostream& operator<<(std::ostream& os, const scimatrix& A) {
03482 return sp_m_output<scimatrix,cinterval>(os,A);
03483 }
03484
03485 inline std::istream& operator>>(std::istream& is, scimatrix& A) {
03486 return sp_m_input<scimatrix,cinterval>(is,A);
03487 }
03488
03489 class scimatrix_slice {
03490 public:
03491 scimatrix A;
03492 scimatrix* M;
03493
03494 private:
03495 scimatrix_slice(scimatrix& Mat, int sl1l, int sl1u, int sl2l, int sl2u) {
03496 A.lb1 = sl1l;
03497 A.lb2 = sl2l;
03498 A.ub1 = sl1u;
03499 A.ub2 = sl2u;
03500 A.m = sl1u-sl1l+1;
03501 A.n = sl2u-sl2l+1;
03502
03503
03504 A.p = std::vector<int>(A.n+1, 0);
03505 A.ind.reserve(A.m + A.n);
03506 A.x.reserve(A.m + A.n);
03507
03508 for(int i=0 ; i<A.n ; i++) {
03509 A.p[i+1] = A.p[i];
03510 for(int j=Mat.p[sl2l-Mat.lb2+i] ; j<Mat.p[sl2l-Mat.lb2+i+1] ; j++) {
03511 if(Mat.ind[j] >= sl1l-Mat.lb1 && Mat.ind[j] <= sl1u-Mat.lb1) {
03512 A.ind.push_back(Mat.ind[j]-(sl1l-Mat.lb1));
03513 A.x.push_back(Mat.x[j]);
03514 A.p[i+1]++;
03515 }
03516 }
03517 }
03518
03519
03520 M = &Mat;
03521 }
03522
03523 scimatrix_slice(const scimatrix& Mat, int sl1l, int sl1u, int sl2l, int sl2u) {
03524 A.lb1 = sl1l;
03525 A.lb2 = sl2l;
03526 A.ub1 = sl1u;
03527 A.ub2 = sl2u;
03528 A.m = sl1u-sl1l+1;
03529 A.n = sl2u-sl2l+1;
03530
03531
03532 A.p = std::vector<int>(A.n+1, 0);
03533 A.ind.reserve(A.m + A.n);
03534 A.x.reserve(A.m + A.n);
03535
03536 for(int i=0 ; i<A.n ; i++) {
03537 A.p[i+1] = A.p[i];
03538 for(int j=Mat.p[sl2l-Mat.lb2+i] ; j<Mat.p[sl2l-Mat.lb2+i+1] ; j++) {
03539 if(Mat.ind[j] >= sl1l-Mat.lb1 && Mat.ind[j] <= sl1u-Mat.lb1) {
03540 A.ind.push_back(Mat.ind[j]-(sl1l-Mat.lb1));
03541 A.x.push_back(Mat.x[j]);
03542 A.p[i+1]++;
03543 }
03544 }
03545 }
03546
03547
03548 M = const_cast<scimatrix*>(&Mat);
03549 }
03550
03551
03552 public:
03553 scimatrix_slice& operator=(const real& C) {
03554 return sl_ms_assign<scimatrix_slice, real, std::vector<cinterval>::iterator, cinterval>(*this,C);
03555 }
03556
03557 scimatrix_slice& operator=(const interval& C) {
03558 return sl_ms_assign<scimatrix_slice, interval, std::vector<cinterval>::iterator, cinterval>(*this,C);
03559 }
03560
03561 scimatrix_slice& operator=(const complex& C) {
03562 return sl_ms_assign<scimatrix_slice, complex, std::vector<cinterval>::iterator, cinterval>(*this,C);
03563 }
03564
03565 scimatrix_slice& operator=(const cinterval& C) {
03566 return sl_ms_assign<scimatrix_slice, cinterval, std::vector<cinterval>::iterator, cinterval>(*this,C);
03567 }
03568
03569 scimatrix_slice& operator=(const srmatrix& C) {
03570 return slsp_mm_assign<scimatrix_slice, srmatrix, std::vector<cinterval>::iterator>(*this,C);
03571 }
03572
03573 scimatrix_slice& operator=(const scmatrix& C) {
03574 return slsp_mm_assign<scimatrix_slice, scmatrix, std::vector<cinterval>::iterator>(*this,C);
03575 }
03576
03577 scimatrix_slice& operator=(const simatrix& C) {
03578 return slsp_mm_assign<scimatrix_slice, simatrix, std::vector<cinterval>::iterator>(*this,C);
03579 }
03580
03581 scimatrix_slice& operator=(const scimatrix& C) {
03582 return slsp_mm_assign<scimatrix_slice, scimatrix, std::vector<cinterval>::iterator>(*this,C);
03583 }
03584
03585 scimatrix_slice& operator=(const rmatrix& C) {
03586 return slf_mm_assign<scimatrix_slice, rmatrix, std::vector<cinterval>::iterator, cinterval>(*this,C);
03587 }
03588
03589 scimatrix_slice& operator=(const cmatrix& C) {
03590 return slf_mm_assign<scimatrix_slice, cmatrix, std::vector<cinterval>::iterator, cinterval>(*this,C);
03591 }
03592
03593 scimatrix_slice& operator=(const imatrix& C) {
03594 return slf_mm_assign<scimatrix_slice, imatrix, std::vector<cinterval>::iterator, cinterval>(*this,C);
03595 }
03596
03597 scimatrix_slice& operator=(const cimatrix& C) {
03598 return slf_mm_assign<scimatrix_slice, cimatrix, std::vector<cinterval>::iterator, cinterval>(*this,C);
03599 }
03600
03601 scimatrix_slice& operator=(const rmatrix_slice& C) {
03602 return slf_mm_assign<scimatrix_slice, rmatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C);
03603 }
03604
03605 scimatrix_slice& operator=(const cmatrix_slice& C) {
03606 return slf_mm_assign<scimatrix_slice, cmatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C);
03607 }
03608
03609 scimatrix_slice& operator=(const imatrix_slice& C) {
03610 return slf_mm_assign<scimatrix_slice, imatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C);
03611 }
03612
03613 scimatrix_slice& operator=(const cimatrix_slice& C) {
03614 return slf_mm_assign<scimatrix_slice, cimatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C);
03615 }
03616
03617 scimatrix_slice& operator=(const srmatrix_slice& C) {
03618 *this = C.A;
03619 return *this;
03620 }
03621
03622 scimatrix_slice& operator=(const scmatrix_slice& C) {
03623 *this = C.A;
03624 return *this;
03625 }
03626
03627 scimatrix_slice& operator=(const simatrix_slice& C) {
03628 *this = C.A;
03629 return *this;
03630 }
03631
03632 scimatrix_slice& operator=(const scimatrix_slice& C) {
03633 *this = C.A;
03634 return *this;
03635 }
03636
03637 scimatrix_slice& operator*=(const srmatrix_slice& M) {
03638 *this = A*M.A;
03639 return *this;
03640 }
03641
03642 scimatrix_slice& operator*=(const scmatrix_slice& M) {
03643 *this = A*M.A;
03644 return *this;
03645 }
03646
03647 scimatrix_slice& operator*=(const simatrix_slice& M) {
03648 *this = A*M.A;
03649 return *this;
03650 }
03651
03652 scimatrix_slice& operator*=(const scimatrix_slice& M) {
03653 *this = A*M.A;
03654 return *this;
03655 }
03656
03657 scimatrix_slice& operator*=(const srmatrix& M) {
03658 *this = A*M;
03659 return *this;
03660 }
03661
03662 scimatrix_slice& operator*=(const scmatrix& M) {
03663 *this = A*M;
03664 return *this;
03665 }
03666
03667 scimatrix_slice& operator*=(const simatrix& M) {
03668 *this = A*M;
03669 return *this;
03670 }
03671
03672 scimatrix_slice& operator*=(const scimatrix& M) {
03673 *this = A*M;
03674 return *this;
03675 }
03676
03677 scimatrix_slice& operator*=(const rmatrix& M) {
03678 *this = A*M;
03679 return *this;
03680 }
03681
03682 scimatrix_slice& operator*=(const cmatrix& M) {
03683 *this = A*M;
03684 return *this;
03685 }
03686
03687 scimatrix_slice& operator*=(const imatrix& M) {
03688 *this = A*M;
03689 return *this;
03690 }
03691
03692 scimatrix_slice& operator*=(const cimatrix& M) {
03693 *this = A*M;
03694 return *this;
03695 }
03696
03697 scimatrix_slice& operator*=(const rmatrix_slice& M) {
03698 *this = A*M;
03699 return *this;
03700 }
03701
03702 scimatrix_slice& operator*=(const cmatrix_slice& M) {
03703 *this = A*M;
03704 return *this;
03705 }
03706
03707 scimatrix_slice& operator*=(const imatrix_slice& M) {
03708 *this = A*M;
03709 return *this;
03710 }
03711
03712 scimatrix_slice& operator*=(const cimatrix_slice& M) {
03713 *this = A*M;
03714 return *this;
03715 }
03716
03717 scimatrix_slice& operator*=(const real& r) {
03718 *this = A*r;
03719 return *this;
03720 }
03721
03722 scimatrix_slice& operator*=(const complex& r) {
03723 *this = A*r;
03724 return *this;
03725 }
03726
03727 scimatrix_slice& operator*=(const interval& r) {
03728 *this = A*r;
03729 return *this;
03730 }
03731
03732 scimatrix_slice& operator*=(const cinterval& r) {
03733 *this = A*r;
03734 return *this;
03735 }
03736
03737 scimatrix_slice& operator/=(const real& r) {
03738 *this = A/r;
03739 return *this;
03740 }
03741
03742 scimatrix_slice& operator/=(const complex& r) {
03743 *this = A/r;
03744 return *this;
03745 }
03746
03747 scimatrix_slice& operator/=(const interval& r) {
03748 *this = A/r;
03749 return *this;
03750 }
03751
03752 scimatrix_slice& operator/=(const cinterval& r) {
03753 *this = A/r;
03754 return *this;
03755 }
03756
03757 scimatrix_slice& operator+=(const srmatrix_slice& M) {
03758 *this = A+M.A;
03759 return *this;
03760 }
03761
03762 scimatrix_slice& operator+=(const scmatrix_slice& M) {
03763 *this = A+M.A;
03764 return *this;
03765 }
03766
03767 scimatrix_slice& operator+=(const simatrix_slice& M) {
03768 *this = A+M.A;
03769 return *this;
03770 }
03771
03772 scimatrix_slice& operator+=(const scimatrix_slice& M) {
03773 *this = A+M.A;
03774 return *this;
03775 }
03776
03777 scimatrix_slice& operator+=(const srmatrix& M) {
03778 *this = A+M;
03779 return *this;
03780 }
03781
03782 scimatrix_slice& operator+=(const scmatrix& M) {
03783 *this = A+M;
03784 return *this;
03785 }
03786
03787 scimatrix_slice& operator+=(const simatrix& M) {
03788 *this = A+M;
03789 return *this;
03790 }
03791
03792 scimatrix_slice& operator+=(const scimatrix& M) {
03793 *this = A+M;
03794 return *this;
03795 }
03796
03797 scimatrix_slice& operator+=(const rmatrix& M) {
03798 *this = A+M;
03799 return *this;
03800 }
03801
03802 scimatrix_slice& operator+=(const cmatrix& M) {
03803 *this = A+M;
03804 return *this;
03805 }
03806
03807 scimatrix_slice& operator+=(const imatrix& M) {
03808 *this = A+M;
03809 return *this;
03810 }
03811
03812 scimatrix_slice& operator+=(const cimatrix& M) {
03813 *this = A+M;
03814 return *this;
03815 }
03816
03817 scimatrix_slice& operator+=(const rmatrix_slice& M) {
03818 *this = A+M;
03819 return *this;
03820 }
03821
03822 scimatrix_slice& operator+=(const cmatrix_slice& M) {
03823 *this = A+M;
03824 return *this;
03825 }
03826
03827 scimatrix_slice& operator+=(const imatrix_slice& M) {
03828 *this = A+M;
03829 return *this;
03830 }
03831
03832 scimatrix_slice& operator+=(const cimatrix_slice& M) {
03833 *this = A+M;
03834 return *this;
03835 }
03836
03837 scimatrix_slice& operator-=(const srmatrix_slice& M) {
03838 *this = A-M.A;
03839 return *this;
03840 }
03841
03842 scimatrix_slice& operator-=(const scmatrix_slice& M) {
03843 *this = A-M.A;
03844 return *this;
03845 }
03846
03847 scimatrix_slice& operator-=(const simatrix_slice& M) {
03848 *this = A-M.A;
03849 return *this;
03850 }
03851
03852 scimatrix_slice& operator-=(const scimatrix_slice& M) {
03853 *this = A-M.A;
03854 return *this;
03855 }
03856
03857 scimatrix_slice& operator-=(const srmatrix& M) {
03858 *this = A-M;
03859 return *this;
03860 }
03861
03862 scimatrix_slice& operator-=(const scmatrix& M) {
03863 *this = A-M;
03864 return *this;
03865 }
03866
03867 scimatrix_slice& operator-=(const simatrix& M) {
03868 *this = A-M;
03869 return *this;
03870 }
03871
03872 scimatrix_slice& operator-=(const scimatrix& M) {
03873 *this = A-M;
03874 return *this;
03875 }
03876
03877 scimatrix_slice& operator-=(const rmatrix& M) {
03878 *this = A-M;
03879 return *this;
03880 }
03881
03882 scimatrix_slice& operator-=(const cmatrix& M) {
03883 *this = A-M;
03884 return *this;
03885 }
03886
03887 scimatrix_slice& operator-=(const imatrix& M) {
03888 *this = A-M;
03889 return *this;
03890 }
03891
03892 scimatrix_slice& operator-=(const cimatrix& M) {
03893 *this = A-M;
03894 return *this;
03895 }
03896
03897 scimatrix_slice& operator-=(const rmatrix_slice& M) {
03898 *this = A-M;
03899 return *this;
03900 }
03901
03902 scimatrix_slice& operator-=(const cmatrix_slice& M) {
03903 *this = A-M;
03904 return *this;
03905 }
03906
03907 scimatrix_slice& operator-=(const imatrix_slice& M) {
03908 *this = A-M;
03909 return *this;
03910 }
03911
03912 scimatrix_slice& operator-=(const cimatrix_slice& M) {
03913 *this = A-M;
03914 return *this;
03915 }
03916
03917 scimatrix_slice& operator|=(const srmatrix_slice& M) {
03918 *this = A|M.A;
03919 return *this;
03920 }
03921
03922 scimatrix_slice& operator|=(const scmatrix_slice& M) {
03923 *this = A|M.A;
03924 return *this;
03925 }
03926
03927 scimatrix_slice& operator|=(const simatrix_slice& M) {
03928 *this = A|M.A;
03929 return *this;
03930 }
03931
03932 scimatrix_slice& operator|=(const scimatrix_slice& M) {
03933 *this = A|M.A;
03934 return *this;
03935 }
03936
03937 scimatrix_slice& operator|=(const srmatrix& M) {
03938 *this = A|M;
03939 return *this;
03940 }
03941
03942 scimatrix_slice& operator|=(const scmatrix& M) {
03943 *this = A|M;
03944 return *this;
03945 }
03946
03947 scimatrix_slice& operator|=(const simatrix& M) {
03948 *this = A|M;
03949 return *this;
03950 }
03951
03952 scimatrix_slice& operator|=(const scimatrix& M) {
03953 *this = A|M;
03954 return *this;
03955 }
03956
03957 scimatrix_slice& operator|=(const rmatrix& M) {
03958 *this = A|M;
03959 return *this;
03960 }
03961
03962 scimatrix_slice& operator|=(const cmatrix& M) {
03963 *this = A|M;
03964 return *this;
03965 }
03966
03967 scimatrix_slice& operator|=(const imatrix& M) {
03968 *this = A|M;
03969 return *this;
03970 }
03971
03972 scimatrix_slice& operator|=(const cimatrix& M) {
03973 *this = A|M;
03974 return *this;
03975 }
03976
03977 scimatrix_slice& operator|=(const rmatrix_slice& M) {
03978 *this = A|M;
03979 return *this;
03980 }
03981
03982 scimatrix_slice& operator|=(const cmatrix_slice& M) {
03983 *this = A|M;
03984 return *this;
03985 }
03986
03987 scimatrix_slice& operator|=(const imatrix_slice& M) {
03988 *this = A|M;
03989 return *this;
03990 }
03991
03992 scimatrix_slice& operator|=(const cimatrix_slice& M) {
03993 *this = A|M;
03994 return *this;
03995 }
03996
03997 const cinterval operator()(const int i, const int j) const {
03998 #if(CXSC_INDEX_CHECK)
03999 if(i<A.lb1 || i>A.ub1 || j<A.lb2 || j>A.ub2)
04000 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_slice::operator()(int, int)"));
04001 #endif
04002 cinterval r = A(i,j);
04003 return r;
04004 }
04005
04006 cinterval& element(const int i, const int j) {
04007 #if(CXSC_INDEX_CHECK)
04008 if(i<A.lb1 || i>A.ub1 || j<A.lb2 || j>A.ub2)
04009 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_slice::element(int, int)"));
04010 #endif
04011 return M->element(i,j);
04012 }
04013
04014 scimatrix_subv operator[](const int);
04015 scimatrix_subv operator[](const cxscmatrix_column&);
04016 const scimatrix_subv operator[](const int) const;
04017 const scimatrix_subv operator[](const cxscmatrix_column&) const;
04018
04019 friend std::ostream& operator<<(std::ostream&, const scimatrix_slice&);
04020
04021 friend int Lb(const scimatrix_slice&, const int);
04022 friend int Ub(const scimatrix_slice&, const int);
04023 friend simatrix Re(const scimatrix_slice&);
04024 friend simatrix Im(const scimatrix_slice&);
04025 friend scmatrix Inf(const scimatrix_slice&);
04026 friend scmatrix Sup(const scimatrix_slice&);
04027 friend srmatrix InfRe(const scimatrix_slice&);
04028 friend srmatrix InfIm(const scimatrix_slice&);
04029 friend srmatrix SupRe(const scimatrix_slice&);
04030 friend srmatrix SupIm(const scimatrix_slice&);
04031 friend int RowLen(const scimatrix_slice&);
04032 friend int ColLen(const scimatrix_slice&);
04033
04034 friend class srmatrix;
04035 friend class srmatrix_subv;
04036 friend class srvector;
04037 friend class scmatrix;
04038 friend class scmatrix_subv;
04039 friend class scvector;
04040 friend class simatrix;
04041 friend class simatrix_subv;
04042 friend class sivector;
04043 friend class scimatrix;
04044 friend class scimatrix_subv;
04045 friend class scivector;
04046
04047 #include "matrix_friend_declarations.inl"
04048 };
04049
04050 inline cimatrix::cimatrix(const srmatrix_slice& A) {
04051 dat = new cinterval[A.A.m*A.A.n];
04052 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2;
04053 xsize = A.A.n;
04054 ysize = A.A.m;
04055 *this = 0.0;
04056 for(int j=0 ; j<A.A.n ; j++) {
04057 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) {
04058 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k];
04059 }
04060 }
04061 }
04062
04063 inline cimatrix::cimatrix(const scmatrix_slice& A) {
04064 dat = new cinterval[A.A.m*A.A.n];
04065 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2;
04066 xsize = A.A.n;
04067 ysize = A.A.m;
04068 *this = 0.0;
04069 for(int j=0 ; j<A.A.n ; j++) {
04070 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) {
04071 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k];
04072 }
04073 }
04074 }
04075
04076 inline cimatrix::cimatrix(const simatrix_slice& A) {
04077 dat = new cinterval[A.A.m*A.A.n];
04078 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2;
04079 xsize = A.A.n;
04080 ysize = A.A.m;
04081 *this = 0.0;
04082 for(int j=0 ; j<A.A.n ; j++) {
04083 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) {
04084 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k];
04085 }
04086 }
04087 }
04088
04089 inline cimatrix::cimatrix(const scimatrix_slice& A) {
04090 dat = new cinterval[A.A.m*A.A.n];
04091 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2;
04092 xsize = A.A.n;
04093 ysize = A.A.m;
04094 *this = 0.0;
04095 for(int j=0 ; j<A.A.n ; j++) {
04096 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) {
04097 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k];
04098 }
04099 }
04100 }
04101
04102 inline int RowLen(const scimatrix_slice& S) {
04103 return RowLen(S.A);
04104 }
04105
04106 inline int ColLen(const scimatrix_slice& S) {
04107 return ColLen(S.A);
04108 }
04109
04110 inline scimatrix_slice scimatrix::operator()(const int i, const int j, const int k, const int l) {
04111 #if(CXSC_INDEX_CHECK)
04112 if(i<lb1 || j>ub1 || k<lb2 || l>ub2)
04113 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator()(int, int)"));
04114 #endif
04115 return scimatrix_slice(*this, i, j, k, l);
04116 }
04117
04118 inline scimatrix& scimatrix::operator=(const srmatrix_slice& S) {
04119 *this = S.A;
04120 return *this;
04121 }
04122
04123 inline scimatrix& scimatrix::operator=(const scmatrix_slice& S) {
04124 *this = S.A;
04125 return *this;
04126 }
04127
04128 inline scimatrix& scimatrix::operator=(const simatrix_slice& S) {
04129 *this = S.A;
04130 return *this;
04131 }
04132
04133 inline scimatrix& scimatrix::operator=(const scimatrix_slice& S) {
04134 *this = S.A;
04135 return *this;
04136 }
04137
04138 inline int Lb(const scimatrix_slice& S, const int i) {
04139 return Lb(S.A, i);
04140 }
04141
04142 inline int Ub(const scimatrix_slice& S, const int i) {
04143 return Ub(S.A, i);
04144 }
04145
04146 inline simatrix Re(const scimatrix_slice& S) {
04147 return Re(S.A);
04148 }
04149
04150 inline simatrix Im(const scimatrix_slice& S) {
04151 return Im(S.A);
04152 }
04153
04154 inline scimatrix conj(const scimatrix_slice& S) {
04155 return conj(S.A);
04156 }
04157
04158 inline simatrix abs(const scimatrix_slice& S) {
04159 return abs(S.A);
04160 }
04161
04162 inline scmatrix mid(const scimatrix_slice& S) {
04163 return mid(S.A);
04164 }
04165
04166 inline scmatrix diam(const scimatrix_slice& S) {
04167 return diam(S.A);
04168 }
04169
04170 inline scmatrix Inf(const scimatrix_slice& S) {
04171 return Inf(S.A);
04172 }
04173
04174 inline scmatrix Sup(const scimatrix_slice& S) {
04175 return Sup(S.A);
04176 }
04177
04178 inline srmatrix InfRe(const scimatrix_slice& S) {
04179 return InfRe(S.A);
04180 }
04181
04182 inline srmatrix InfIm(const scimatrix_slice& S) {
04183 return InfIm(S.A);
04184 }
04185
04186 inline srmatrix SupRe(const scimatrix_slice& S) {
04187 return SupRe(S.A);
04188 }
04189
04190 inline srmatrix SupIm(const scimatrix_slice& S) {
04191 return SupIm(S.A);
04192 }
04193
04194 inline scimatrix::scimatrix(const srmatrix_slice& S) {
04195 m = S.A.m;
04196 n = S.A.n;
04197 lb1 = S.A.lb1;
04198 ub1 = S.A.ub1;
04199 lb2 = S.A.lb2;
04200 ub2 = S.A.ub2;
04201 *this = S.A;
04202 }
04203
04204 inline scimatrix::scimatrix(const scmatrix_slice& S) {
04205 m = S.A.m;
04206 n = S.A.n;
04207 lb1 = S.A.lb1;
04208 ub1 = S.A.ub1;
04209 lb2 = S.A.lb2;
04210 ub2 = S.A.ub2;
04211 *this = S.A;
04212 }
04213
04214 inline scimatrix::scimatrix(const simatrix_slice& S) {
04215 m = S.A.m;
04216 n = S.A.n;
04217 lb1 = S.A.lb1;
04218 ub1 = S.A.ub1;
04219 lb2 = S.A.lb2;
04220 ub2 = S.A.ub2;
04221 *this = S.A;
04222 }
04223
04224 inline scimatrix::scimatrix(const scimatrix_slice& S) {
04225 m = S.A.m;
04226 n = S.A.n;
04227 lb1 = S.A.lb1;
04228 ub1 = S.A.ub1;
04229 lb2 = S.A.lb2;
04230 ub2 = S.A.ub2;
04231 *this = S.A;
04232 }
04233
04234 inline scimatrix operator-(const scimatrix_slice& M) {
04235 return sp_m_negative<scimatrix,scimatrix>(M.A);
04236 }
04237
04238 inline scimatrix operator+(const scimatrix_slice& M) {
04239 return M.A;
04240 }
04241
04242 inline scimatrix operator*(const scimatrix_slice& M1, const srmatrix_slice& M2) {
04243 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04244 }
04245
04246 inline scimatrix operator*(const scimatrix_slice& M1, const simatrix_slice& M2) {
04247 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04248 }
04249
04250 inline scimatrix operator*(const scimatrix_slice& M1, const scmatrix_slice& M2) {
04251 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04252 }
04253
04254 inline scimatrix operator*(const scimatrix_slice& M1, const scimatrix_slice& M2) {
04255 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04256 }
04257
04258 inline scimatrix operator*(const srmatrix_slice& M1, const scimatrix_slice& M2) {
04259 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04260 }
04261
04262 inline scimatrix operator*(const scmatrix_slice& M1, const scimatrix_slice& M2) {
04263 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04264 }
04265
04266 inline scimatrix operator*(const simatrix_slice& M1, const scimatrix_slice& M2) {
04267 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04268 }
04269
04270 inline scimatrix operator*(const simatrix_slice& M1, const scmatrix_slice& M2) {
04271 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04272 }
04273
04274 inline scimatrix operator*(const scmatrix_slice& M1, const simatrix_slice& M2) {
04275 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A);
04276 }
04277
04278 inline scimatrix operator*(const scimatrix_slice& M1, const srmatrix& M2) {
04279 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04280 }
04281
04282 inline scimatrix operator*(const scimatrix_slice& M1, const scmatrix& M2) {
04283 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04284 }
04285
04286 inline scimatrix operator*(const scimatrix_slice& M1, const simatrix& M2) {
04287 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04288 }
04289
04290 inline scimatrix operator*(const scimatrix_slice& M1, const scimatrix& M2) {
04291 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04292 }
04293
04294 inline scimatrix operator*(const srmatrix_slice& M1, const scimatrix& M2) {
04295 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04296 }
04297
04298 inline scimatrix operator*(const simatrix_slice& M1, const scimatrix& M2) {
04299 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04300 }
04301
04302 inline scimatrix operator*(const scmatrix_slice& M1, const scimatrix& M2) {
04303 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04304 }
04305
04306 inline scimatrix operator*(const simatrix_slice& M1, const scmatrix& M2) {
04307 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04308 }
04309
04310 inline scimatrix operator*(const scmatrix_slice& M1, const simatrix& M2) {
04311 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2);
04312 }
04313
04314 inline scimatrix operator*(const scimatrix& M1, const srmatrix_slice& M2) {
04315 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04316 }
04317
04318 inline scimatrix operator*(const scimatrix& M1, const scmatrix_slice& M2) {
04319 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04320 }
04321
04322 inline scimatrix operator*(const scimatrix& M1, const simatrix_slice& M2) {
04323 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04324 }
04325
04326 inline scimatrix operator*(const scimatrix& M1, const scimatrix_slice& M2) {
04327 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04328 }
04329
04330 inline scimatrix operator*(const srmatrix& M1, const scimatrix_slice& M2) {
04331 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04332 }
04333
04334 inline scimatrix operator*(const scmatrix& M1, const scimatrix_slice& M2) {
04335 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04336 }
04337
04338 inline scimatrix operator*(const simatrix& M1, const scimatrix_slice& M2) {
04339 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04340 }
04341
04342 inline scimatrix operator*(const simatrix& M1, const scmatrix_slice& M2) {
04343 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04344 }
04345
04346 inline scimatrix operator*(const scmatrix& M1, const simatrix_slice& M2) {
04347 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A);
04348 }
04349
04350 inline cimatrix operator*(const scimatrix_slice& M1, const rmatrix& M2) {
04351 return spf_mm_mult<scimatrix,rmatrix,cimatrix,sparse_cidot>(M1.A,M2);
04352 }
04353
04354 inline cimatrix operator*(const scimatrix_slice& M1, const imatrix& M2) {
04355 return spf_mm_mult<scimatrix,imatrix,cimatrix,sparse_cidot>(M1.A,M2);
04356 }
04357
04358 inline cimatrix operator*(const scimatrix_slice& M1, const cmatrix& M2) {
04359 return spf_mm_mult<scimatrix,cmatrix,cimatrix,sparse_cidot>(M1.A,M2);
04360 }
04361
04362 inline cimatrix operator*(const scimatrix_slice& M1, const cimatrix& M2) {
04363 return spf_mm_mult<scimatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2);
04364 }
04365
04366 inline cimatrix operator*(const srmatrix_slice& M1, const cimatrix& M2) {
04367 return spf_mm_mult<srmatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2);
04368 }
04369
04370 inline cimatrix operator*(const simatrix_slice& M1, const cimatrix& M2) {
04371 return spf_mm_mult<simatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2);
04372 }
04373
04374 inline cimatrix operator*(const scmatrix_slice& M1, const cimatrix& M2) {
04375 return spf_mm_mult<scmatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2);
04376 }
04377
04378 inline cimatrix operator*(const simatrix_slice& M1, const cmatrix& M2) {
04379 return spf_mm_mult<simatrix,cmatrix,cimatrix,sparse_cidot>(M1.A,M2);
04380 }
04381
04382 inline cimatrix operator*(const scmatrix_slice& M1, const imatrix& M2) {
04383 return spf_mm_mult<scmatrix,imatrix,cimatrix,sparse_cidot>(M1.A,M2);
04384 }
04385
04386 inline cimatrix operator*(const cimatrix& M1, const srmatrix_slice& M2) {
04387 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04388 }
04389
04390 inline cimatrix operator*(const cimatrix& M1, const scmatrix_slice& M2) {
04391 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04392 }
04393
04394 inline cimatrix operator*(const cimatrix& M1, const simatrix_slice& M2) {
04395 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A);
04396 }
04397
04398 inline cimatrix operator*(const cimatrix& M1, const scimatrix_slice& M2) {
04399 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04400 }
04401
04402 inline cimatrix operator*(const rmatrix& M1, const scimatrix_slice& M2) {
04403 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04404 }
04405
04406 inline cimatrix operator*(const cmatrix& M1, const scimatrix_slice& M2) {
04407 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04408 }
04409
04410 inline cimatrix operator*(const imatrix& M1, const scimatrix_slice& M2) {
04411 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04412 }
04413
04414 inline cimatrix operator*(const imatrix& M1, const scmatrix_slice& M2) {
04415 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04416 }
04417
04418 inline cimatrix operator*(const cmatrix& M1, const simatrix_slice& M2) {
04419 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A);
04420 }
04421
04422 inline cimatrix operator*(const scimatrix_slice& M1, const rmatrix_slice& M2) {
04423 return spf_mm_mult<scimatrix,rmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04424 }
04425
04426 inline cimatrix operator*(const scimatrix_slice& M1, const cmatrix_slice& M2) {
04427 return spf_mm_mult<scimatrix,cmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04428 }
04429
04430 inline cimatrix operator*(const scimatrix_slice& M1, const imatrix_slice& M2) {
04431 return spf_mm_mult<scimatrix,imatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04432 }
04433
04434 inline cimatrix operator*(const scimatrix_slice& M1, const cimatrix_slice& M2) {
04435 return spf_mm_mult<scimatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04436 }
04437
04438 inline cimatrix operator*(const srmatrix_slice& M1, const cimatrix_slice& M2) {
04439 return spf_mm_mult<srmatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04440 }
04441
04442 inline cimatrix operator*(const simatrix_slice& M1, const cimatrix_slice& M2) {
04443 return spf_mm_mult<simatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04444 }
04445
04446 inline cimatrix operator*(const scmatrix_slice& M1, const cimatrix_slice& M2) {
04447 return spf_mm_mult<scmatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04448 }
04449
04450 inline cimatrix operator*(const simatrix_slice& M1, const cmatrix_slice& M2) {
04451 return spf_mm_mult<simatrix,cmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04452 }
04453
04454 inline cimatrix operator*(const scmatrix_slice& M1, const imatrix_slice& M2) {
04455 return spf_mm_mult<scmatrix,imatrix_slice,cimatrix,sparse_cidot>(M1.A,M2);
04456 }
04457
04458 inline cimatrix operator*(const cimatrix_slice& M1, const srmatrix_slice& M2) {
04459 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04460 }
04461
04462 inline cimatrix operator*(const cimatrix_slice& M1, const scmatrix_slice& M2) {
04463 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04464 }
04465
04466 inline cimatrix operator*(const cimatrix_slice& M1, const simatrix_slice& M2) {
04467 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A);
04468 }
04469
04470 inline cimatrix operator*(const cimatrix_slice& M1, const scimatrix_slice& M2) {
04471 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04472 }
04473
04474 inline cimatrix operator*(const rmatrix_slice& M1, const scimatrix_slice& M2) {
04475 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04476 }
04477
04478 inline cimatrix operator*(const imatrix_slice& M1, const scimatrix_slice& M2) {
04479 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04480 }
04481
04482 inline cimatrix operator*(const cmatrix_slice& M1, const scimatrix_slice& M2) {
04483 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A);
04484 }
04485
04486 inline cimatrix operator*(const imatrix_slice& M1, const scmatrix_slice& M2) {
04487 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A);
04488 }
04489
04490 inline cimatrix operator*(const cmatrix_slice& M1, const simatrix_slice& M2) {
04491 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A);
04492 }
04493
04494 inline scivector operator*(const scimatrix_slice& M, const srvector& v) {
04495 return spsp_mv_mult<scimatrix,srvector,scivector,sparse_cidot,cinterval>(M.A,v);
04496 }
04497
04498 inline scivector operator*(const scimatrix_slice& M, const sivector& v) {
04499 return spsp_mv_mult<scimatrix,sivector,scivector,sparse_cidot,cinterval>(M.A,v);
04500 }
04501
04502 inline scivector operator*(const scimatrix_slice& M, const scvector& v) {
04503 return spsp_mv_mult<scimatrix,scvector,scivector,sparse_cidot,cinterval>(M.A,v);
04504 }
04505
04506 inline scivector operator*(const scimatrix_slice& M, const scivector& v) {
04507 return spsp_mv_mult<scimatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v);
04508 }
04509
04510 inline scivector operator*(const srmatrix_slice& M, const scivector& v) {
04511 return spsp_mv_mult<srmatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v);
04512 }
04513
04514 inline scivector operator*(const simatrix_slice& M, const scivector& v) {
04515 return spsp_mv_mult<simatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v);
04516 }
04517
04518 inline scivector operator*(const scmatrix_slice& M, const scivector& v) {
04519 return spsp_mv_mult<scmatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v);
04520 }
04521
04522 inline scivector operator*(const simatrix_slice& M, const scvector& v) {
04523 return spsp_mv_mult<simatrix,scvector,scivector,sparse_cidot,cinterval>(M.A,v);
04524 }
04525
04526 inline scivector operator*(const scmatrix_slice& M, const sivector& v) {
04527 return spsp_mv_mult<scmatrix,sivector,scivector,sparse_cidot,cinterval>(M.A,v);
04528 }
04529
04530 inline scivector operator*(const scimatrix_slice& M, const srvector_slice& v) {
04531 return spsl_mv_mult<scimatrix,srvector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04532 }
04533
04534 inline scivector operator*(const scimatrix_slice& M, const sivector_slice& v) {
04535 return spsl_mv_mult<scimatrix,sivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04536 }
04537
04538 inline scivector operator*(const scimatrix_slice& M, const scvector_slice& v) {
04539 return spsl_mv_mult<scimatrix,scvector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04540 }
04541
04542 inline scivector operator*(const scimatrix_slice& M, const scivector_slice& v) {
04543 return spsl_mv_mult<scimatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04544 }
04545
04546 inline scivector operator*(const srmatrix_slice& M, const scivector_slice& v) {
04547 return spsl_mv_mult<srmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04548 }
04549
04550 inline scivector operator*(const scmatrix_slice& M, const scivector_slice& v) {
04551 return spsl_mv_mult<scmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04552 }
04553
04554 inline scivector operator*(const simatrix_slice& M, const scivector_slice& v) {
04555 return spsl_mv_mult<simatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04556 }
04557
04558 inline scivector operator*(const simatrix_slice& M, const scvector_slice& v) {
04559 return spsl_mv_mult<simatrix,scvector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04560 }
04561
04562 inline scivector operator*(const scmatrix_slice& M, const sivector_slice& v) {
04563 return spsl_mv_mult<scmatrix,sivector_slice,scivector,sparse_cidot,cinterval>(M.A,v);
04564 }
04565
04566 inline civector operator*(const scimatrix_slice& M, const rvector& v) {
04567 return spf_mv_mult<scimatrix,rvector,civector,sparse_cidot>(M.A,v);
04568 }
04569
04570 inline civector operator*(const scimatrix_slice& M, const ivector& v) {
04571 return spf_mv_mult<scimatrix,ivector,civector,sparse_cidot>(M.A,v);
04572 }
04573
04574 inline civector operator*(const scimatrix_slice& M, const cvector& v) {
04575 return spf_mv_mult<scimatrix,cvector,civector,sparse_cidot>(M.A,v);
04576 }
04577
04578 inline civector operator*(const scimatrix_slice& M, const civector& v) {
04579 return spf_mv_mult<scimatrix,civector,civector,sparse_cidot>(M.A,v);
04580 }
04581
04582 inline civector operator*(const srmatrix_slice& M, const civector& v) {
04583 return spf_mv_mult<srmatrix,civector,civector,sparse_cidot>(M.A,v);
04584 }
04585
04586 inline civector operator*(const simatrix_slice& M, const civector& v) {
04587 return spf_mv_mult<simatrix,civector,civector,sparse_cidot>(M.A,v);
04588 }
04589
04590 inline civector operator*(const scmatrix_slice& M, const civector& v) {
04591 return spf_mv_mult<scmatrix,civector,civector,sparse_cidot>(M.A,v);
04592 }
04593
04594 inline civector operator*(const simatrix_slice& M, const cvector& v) {
04595 return spf_mv_mult<simatrix,cvector,civector,sparse_cidot>(M.A,v);
04596 }
04597
04598 inline civector operator*(const scmatrix_slice& M, const ivector& v) {
04599 return spf_mv_mult<scmatrix,ivector,civector,sparse_cidot>(M.A,v);
04600 }
04601
04602 inline civector operator*(const scimatrix_slice& M, const rvector_slice& v) {
04603 return spf_mv_mult<scimatrix,rvector_slice,civector,sparse_cidot>(M.A,v);
04604 }
04605
04606 inline civector operator*(const scimatrix_slice& M, const ivector_slice& v) {
04607 return spf_mv_mult<scimatrix,ivector_slice,civector,sparse_cidot>(M.A,v);
04608 }
04609
04610 inline civector operator*(const scimatrix_slice& M, const cvector_slice& v) {
04611 return spf_mv_mult<scimatrix,cvector_slice,civector,sparse_cidot>(M.A,v);
04612 }
04613
04614 inline civector operator*(const scimatrix_slice& M, const civector_slice& v) {
04615 return spf_mv_mult<scimatrix,civector_slice,civector,sparse_cidot>(M.A,v);
04616 }
04617
04618 inline civector operator*(const srmatrix_slice& M, const civector_slice& v) {
04619 return spf_mv_mult<srmatrix,civector_slice,civector,sparse_cidot>(M.A,v);
04620 }
04621
04622 inline civector operator*(const scmatrix_slice& M, const civector_slice& v) {
04623 return spf_mv_mult<scmatrix,civector_slice,civector,sparse_cidot>(M.A,v);
04624 }
04625
04626 inline civector operator*(const simatrix_slice& M, const civector_slice& v) {
04627 return spf_mv_mult<simatrix,civector_slice,civector,sparse_cidot>(M.A,v);
04628 }
04629
04630 inline civector operator*(const simatrix_slice& M, const cvector_slice& v) {
04631 return spf_mv_mult<simatrix,cvector_slice,civector,sparse_cidot>(M.A,v);
04632 }
04633
04634 inline civector operator*(const scmatrix_slice& M, const ivector_slice& v) {
04635 return spf_mv_mult<scmatrix,ivector_slice,civector,sparse_cidot>(M.A,v);
04636 }
04637
04638 inline scimatrix operator/(const scimatrix_slice& M, const real& r) {
04639 return sp_ms_div<scimatrix,real,scimatrix>(M.A,r);
04640 }
04641
04642 inline scimatrix operator/(const scimatrix_slice& M, const complex& r) {
04643 return sp_ms_div<scimatrix,complex,scimatrix>(M.A,r);
04644 }
04645
04646 inline scimatrix operator/(const scimatrix_slice& M, const interval& r) {
04647 return sp_ms_div<scimatrix,interval,scimatrix>(M.A,r);
04648 }
04649
04650 inline scimatrix operator/(const scimatrix_slice& M, const cinterval& r) {
04651 return sp_ms_div<scimatrix,cinterval,scimatrix>(M.A,r);
04652 }
04653
04654 inline scimatrix operator/(const srmatrix_slice& M, const cinterval& r) {
04655 return sp_ms_div<srmatrix,cinterval,scimatrix>(M.A,r);
04656 }
04657
04658 inline scimatrix operator/(const simatrix_slice& M, const cinterval& r) {
04659 return sp_ms_div<simatrix,cinterval,scimatrix>(M.A,r);
04660 }
04661
04662 inline scimatrix operator/(const scmatrix_slice& M, const cinterval& r) {
04663 return sp_ms_div<scmatrix,cinterval,scimatrix>(M.A,r);
04664 }
04665
04666 inline scimatrix operator/(const simatrix_slice& M, const complex& r) {
04667 return sp_ms_div<simatrix,complex,scimatrix>(M.A,r);
04668 }
04669
04670 inline scimatrix operator/(const scmatrix_slice& M, const interval& r) {
04671 return sp_ms_div<scmatrix,interval,scimatrix>(M.A,r);
04672 }
04673
04674 inline scimatrix operator*(const scimatrix_slice& M, const real& r) {
04675 return sp_ms_mult<scimatrix,real,scimatrix>(M.A,r);
04676 }
04677
04678 inline scimatrix operator*(const scimatrix_slice& M, const complex& r) {
04679 return sp_ms_mult<scimatrix,complex,scimatrix>(M.A,r);
04680 }
04681
04682 inline scimatrix operator*(const scimatrix_slice& M, const interval& r) {
04683 return sp_ms_mult<scimatrix,interval,scimatrix>(M.A,r);
04684 }
04685
04686 inline scimatrix operator*(const scimatrix_slice& M, const cinterval& r) {
04687 return sp_ms_mult<scimatrix,cinterval,scimatrix>(M.A,r);
04688 }
04689
04690 inline scimatrix operator*(const srmatrix_slice& M, const cinterval& r) {
04691 return sp_ms_mult<srmatrix,cinterval,scimatrix>(M.A,r);
04692 }
04693
04694 inline scimatrix operator*(const simatrix_slice& M, const cinterval& r) {
04695 return sp_ms_mult<simatrix,cinterval,scimatrix>(M.A,r);
04696 }
04697
04698 inline scimatrix operator*(const scmatrix_slice& M, const cinterval& r) {
04699 return sp_ms_mult<scmatrix,cinterval,scimatrix>(M.A,r);
04700 }
04701
04702 inline scimatrix operator*(const simatrix_slice& M, const complex& r) {
04703 return sp_ms_mult<simatrix,complex,scimatrix>(M.A,r);
04704 }
04705
04706 inline scimatrix operator*(const scmatrix_slice& M, const interval& r) {
04707 return sp_ms_mult<scmatrix,interval,scimatrix>(M.A,r);
04708 }
04709
04710 inline scimatrix operator*(const real& r, const scimatrix_slice& M) {
04711 return sp_sm_mult<real,scimatrix,scimatrix>(r,M.A);
04712 }
04713
04714 inline scimatrix operator*(const complex& r, const scimatrix_slice& M) {
04715 return sp_sm_mult<complex,scimatrix,scimatrix>(r,M.A);
04716 }
04717
04718 inline scimatrix operator*(const interval& r, const scimatrix_slice& M) {
04719 return sp_sm_mult<interval,scimatrix,scimatrix>(r,M.A);
04720 }
04721
04722 inline scimatrix operator*(const cinterval& r, const scimatrix_slice& M) {
04723 return sp_sm_mult<cinterval,scimatrix,scimatrix>(r,M.A);
04724 }
04725
04726 inline scimatrix operator*(const cinterval& r, const srmatrix_slice& M) {
04727 return sp_sm_mult<cinterval,srmatrix,scimatrix>(r,M.A);
04728 }
04729
04730 inline scimatrix operator*(const cinterval& r, const simatrix_slice& M) {
04731 return sp_sm_mult<cinterval,simatrix,scimatrix>(r,M.A);
04732 }
04733
04734 inline scimatrix operator*(const cinterval& r, const scmatrix_slice& M) {
04735 return sp_sm_mult<cinterval,scmatrix,scimatrix>(r,M.A);
04736 }
04737
04738 inline scimatrix operator*(const complex& r, const simatrix_slice& M) {
04739 return sp_sm_mult<complex,simatrix,scimatrix>(r,M.A);
04740 }
04741
04742 inline scimatrix operator*(const interval& r, const scmatrix_slice& M) {
04743 return sp_sm_mult<interval,scmatrix,scimatrix>(r,M.A);
04744 }
04745
04746 inline scimatrix operator+(const scimatrix_slice& M1, const srmatrix_slice& M2) {
04747 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A);
04748 }
04749
04750 inline scimatrix operator+(const scimatrix_slice& M1, const scmatrix_slice& M2) {
04751 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
04752 }
04753
04754 inline scimatrix operator+(const scimatrix_slice& M1, const simatrix_slice& M2) {
04755 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
04756 }
04757
04758 inline scimatrix operator+(const scimatrix_slice& M1, const scimatrix_slice& M2) {
04759 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
04760 }
04761
04762 inline scimatrix operator+(const srmatrix_slice& M1, const scimatrix_slice& M2) {
04763 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
04764 }
04765
04766 inline scimatrix operator+(const scmatrix_slice& M1, const scimatrix_slice& M2) {
04767 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
04768 }
04769
04770 inline scimatrix operator+(const simatrix_slice& M1, const scimatrix_slice& M2) {
04771 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
04772 }
04773
04774 inline scimatrix operator+(const scmatrix_slice& M1, const simatrix_slice& M2) {
04775 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
04776 }
04777
04778 inline scimatrix operator+(const simatrix_slice& M1, const scmatrix_slice& M2) {
04779 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
04780 }
04781
04782 inline scimatrix operator+(const scimatrix_slice& M1, const srmatrix& M2) {
04783 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2);
04784 }
04785
04786 inline scimatrix operator+(const scimatrix_slice& M1, const scmatrix& M2) {
04787 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
04788 }
04789
04790 inline scimatrix operator+(const scimatrix_slice& M1, const simatrix& M2) {
04791 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
04792 }
04793
04794 inline scimatrix operator+(const scimatrix_slice& M1, const scimatrix& M2) {
04795 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
04796 }
04797
04798 inline scimatrix operator+(const srmatrix_slice& M1, const scimatrix& M2) {
04799 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
04800 }
04801
04802 inline scimatrix operator+(const simatrix_slice& M1, const scimatrix& M2) {
04803 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
04804 }
04805
04806 inline scimatrix operator+(const scmatrix_slice& M1, const scimatrix& M2) {
04807 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
04808 }
04809
04810 inline scimatrix operator+(const simatrix_slice& M1, const scmatrix& M2) {
04811 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
04812 }
04813
04814 inline scimatrix operator+(const scmatrix_slice& M1, const simatrix& M2) {
04815 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
04816 }
04817
04818 inline scimatrix operator+(const scimatrix& M1, const srmatrix_slice& M2) {
04819 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A);
04820 }
04821
04822 inline scimatrix operator+(const scimatrix& M1, const scmatrix_slice& M2) {
04823 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
04824 }
04825
04826 inline scimatrix operator+(const scimatrix& M1, const simatrix_slice& M2) {
04827 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
04828 }
04829
04830 inline scimatrix operator+(const scimatrix& M1, const scimatrix_slice& M2) {
04831 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
04832 }
04833
04834 inline scimatrix operator+(const srmatrix& M1, const scimatrix_slice& M2) {
04835 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
04836 }
04837
04838 inline scimatrix operator+(const simatrix& M1, const scimatrix_slice& M2) {
04839 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
04840 }
04841
04842 inline scimatrix operator+(const scmatrix& M1, const scimatrix_slice& M2) {
04843 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
04844 }
04845
04846 inline scimatrix operator+(const simatrix& M1, const scmatrix_slice& M2) {
04847 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
04848 }
04849
04850 inline scimatrix operator+(const scmatrix& M1, const simatrix_slice& M2) {
04851 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
04852 }
04853
04854 inline cimatrix operator+(const scimatrix_slice& M1, const rmatrix& M2) {
04855 return spf_mm_add<scimatrix,rmatrix,cimatrix>(M1.A,M2);
04856 }
04857
04858 inline cimatrix operator+(const scimatrix_slice& M1, const imatrix& M2) {
04859 return spf_mm_add<scimatrix,imatrix,cimatrix>(M1.A,M2);
04860 }
04861
04862 inline cimatrix operator+(const scimatrix_slice& M1, const cmatrix& M2) {
04863 return spf_mm_add<scimatrix,cmatrix,cimatrix>(M1.A,M2);
04864 }
04865
04866 inline cimatrix operator+(const scimatrix_slice& M1, const cimatrix& M2) {
04867 return spf_mm_add<scimatrix,cimatrix,cimatrix>(M1.A,M2);
04868 }
04869
04870 inline cimatrix operator+(const srmatrix_slice& M1, const cimatrix& M2) {
04871 return spf_mm_add<srmatrix,cimatrix,cimatrix>(M1.A,M2);
04872 }
04873
04874 inline cimatrix operator+(const simatrix_slice& M1, const cimatrix& M2) {
04875 return spf_mm_add<simatrix,cimatrix,cimatrix>(M1.A,M2);
04876 }
04877
04878 inline cimatrix operator+(const scmatrix_slice& M1, const cimatrix& M2) {
04879 return spf_mm_add<scmatrix,cimatrix,cimatrix>(M1.A,M2);
04880 }
04881
04882 inline cimatrix operator+(const simatrix_slice& M1, const cmatrix& M2) {
04883 return spf_mm_add<simatrix,cmatrix,cimatrix>(M1.A,M2);
04884 }
04885
04886 inline cimatrix operator+(const scmatrix_slice& M1, const imatrix& M2) {
04887 return spf_mm_add<scmatrix,imatrix,cimatrix>(M1.A,M2);
04888 }
04889
04890 inline cimatrix operator+(const cimatrix& M1, const srmatrix_slice& M2) {
04891 return fsp_mm_add<cimatrix,srmatrix,cimatrix>(M1,M2.A);
04892 }
04893
04894 inline cimatrix operator+(const cimatrix& M1, const simatrix_slice& M2) {
04895 return fsp_mm_add<cimatrix,simatrix,cimatrix>(M1,M2.A);
04896 }
04897
04898 inline cimatrix operator+(const cimatrix& M1, const scmatrix_slice& M2) {
04899 return fsp_mm_add<cimatrix,scmatrix,cimatrix>(M1,M2.A);
04900 }
04901
04902 inline cimatrix operator+(const cimatrix& M1, const scimatrix_slice& M2) {
04903 return fsp_mm_add<cimatrix,scimatrix,cimatrix>(M1,M2.A);
04904 }
04905
04906 inline cimatrix operator+(const rmatrix& M1, const scimatrix_slice& M2) {
04907 return fsp_mm_add<rmatrix,scimatrix,cimatrix>(M1,M2.A);
04908 }
04909
04910 inline cimatrix operator+(const imatrix& M1, const scimatrix_slice& M2) {
04911 return fsp_mm_add<imatrix,scimatrix,cimatrix>(M1,M2.A);
04912 }
04913
04914 inline cimatrix operator+(const cmatrix& M1, const scimatrix_slice& M2) {
04915 return fsp_mm_add<cmatrix,scimatrix,cimatrix>(M1,M2.A);
04916 }
04917
04918 inline cimatrix operator+(const imatrix& M1, const scmatrix_slice& M2) {
04919 return fsp_mm_add<imatrix,scmatrix,cimatrix>(M1,M2.A);
04920 }
04921
04922 inline cimatrix operator+(const cmatrix& M1, const simatrix_slice& M2) {
04923 return fsp_mm_add<cmatrix,simatrix,cimatrix>(M1,M2.A);
04924 }
04925
04926 inline cimatrix operator+(const scimatrix_slice& M1, const rmatrix_slice& M2) {
04927 return spf_mm_add<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2);
04928 }
04929
04930 inline cimatrix operator+(const scimatrix_slice& M1, const cmatrix_slice& M2) {
04931 return spf_mm_add<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2);
04932 }
04933
04934 inline cimatrix operator+(const scimatrix_slice& M1, const imatrix_slice& M2) {
04935 return spf_mm_add<scimatrix,imatrix_slice,cimatrix>(M1.A,M2);
04936 }
04937
04938 inline cimatrix operator+(const scimatrix_slice& M1, const cimatrix_slice& M2) {
04939 return spf_mm_add<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2);
04940 }
04941
04942 inline cimatrix operator+(const srmatrix_slice& M1, const cimatrix_slice& M2) {
04943 return spf_mm_add<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
04944 }
04945
04946 inline cimatrix operator+(const simatrix_slice& M1, const cimatrix_slice& M2) {
04947 return spf_mm_add<simatrix,cimatrix_slice,cimatrix>(M1.A,M2);
04948 }
04949
04950 inline cimatrix operator+(const scmatrix_slice& M1, const cimatrix_slice& M2) {
04951 return spf_mm_add<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
04952 }
04953
04954 inline cimatrix operator+(const simatrix_slice& M1, const cmatrix_slice& M2) {
04955 return spf_mm_add<simatrix,cmatrix_slice,cimatrix>(M1.A,M2);
04956 }
04957
04958 inline cimatrix operator+(const scmatrix_slice& M1, const imatrix_slice& M2) {
04959 return spf_mm_add<scmatrix,imatrix_slice,cimatrix>(M1.A,M2);
04960 }
04961
04962 inline cimatrix operator+(const cimatrix_slice& M1, const srmatrix_slice& M2) {
04963 return fsp_mm_add<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A);
04964 }
04965
04966 inline cimatrix operator+(const cimatrix_slice& M1, const simatrix_slice& M2) {
04967 return fsp_mm_add<cimatrix_slice,simatrix,cimatrix>(M1,M2.A);
04968 }
04969
04970 inline cimatrix operator+(const cimatrix_slice& M1, const scmatrix_slice& M2) {
04971 return fsp_mm_add<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A);
04972 }
04973
04974 inline cimatrix operator+(const cimatrix_slice& M1, const scimatrix_slice& M2) {
04975 return fsp_mm_add<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A);
04976 }
04977
04978 inline cimatrix operator+(const rmatrix_slice& M1, const scimatrix_slice& M2) {
04979 return fsp_mm_add<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
04980 }
04981
04982 inline cimatrix operator+(const imatrix_slice& M1, const scimatrix_slice& M2) {
04983 return fsp_mm_add<imatrix_slice,scimatrix,cimatrix>(M1,M2.A);
04984 }
04985
04986 inline cimatrix operator+(const cmatrix_slice& M1, const scimatrix_slice& M2) {
04987 return fsp_mm_add<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
04988 }
04989
04990 inline cimatrix operator+(const imatrix_slice& M1, const scmatrix_slice& M2) {
04991 return fsp_mm_add<imatrix_slice,scmatrix,cimatrix>(M1,M2.A);
04992 }
04993
04994 inline cimatrix operator+(const cmatrix_slice& M1, const simatrix_slice& M2) {
04995 return fsp_mm_add<cmatrix_slice,simatrix,cimatrix>(M1,M2.A);
04996 }
04997
04998 inline scimatrix operator-(const scimatrix_slice& M1, const srmatrix_slice& M2) {
04999 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A);
05000 }
05001
05002 inline scimatrix operator-(const scimatrix_slice& M1, const scmatrix_slice& M2) {
05003 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05004 }
05005
05006 inline scimatrix operator-(const scimatrix_slice& M1, const simatrix_slice& M2) {
05007 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
05008 }
05009
05010 inline scimatrix operator-(const scimatrix_slice& M1, const scimatrix_slice& M2) {
05011 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05012 }
05013
05014 inline scimatrix operator-(const srmatrix_slice& M1, const scimatrix_slice& M2) {
05015 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05016 }
05017
05018 inline scimatrix operator-(const scmatrix_slice& M1, const scimatrix_slice& M2) {
05019 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05020 }
05021
05022 inline scimatrix operator-(const simatrix_slice& M1, const scimatrix_slice& M2) {
05023 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05024 }
05025
05026 inline scimatrix operator-(const scmatrix_slice& M1, const simatrix_slice& M2) {
05027 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
05028 }
05029
05030 inline scimatrix operator-(const simatrix_slice& M1, const scmatrix_slice& M2) {
05031 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05032 }
05033
05034 inline scimatrix operator-(const scimatrix_slice& M1, const srmatrix& M2) {
05035 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2);
05036 }
05037
05038 inline scimatrix operator-(const scimatrix_slice& M1, const scmatrix& M2) {
05039 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05040 }
05041
05042 inline scimatrix operator-(const scimatrix_slice& M1, const simatrix& M2) {
05043 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
05044 }
05045
05046 inline scimatrix operator-(const scimatrix_slice& M1, const scimatrix& M2) {
05047 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05048 }
05049
05050 inline scimatrix operator-(const srmatrix_slice& M1, const scimatrix& M2) {
05051 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05052 }
05053
05054 inline scimatrix operator-(const simatrix_slice& M1, const scimatrix& M2) {
05055 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05056 }
05057
05058 inline scimatrix operator-(const scmatrix_slice& M1, const scimatrix& M2) {
05059 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05060 }
05061
05062 inline scimatrix operator-(const simatrix_slice& M1, const scmatrix& M2) {
05063 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05064 }
05065
05066 inline scimatrix operator-(const scmatrix_slice& M1, const simatrix& M2) {
05067 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
05068 }
05069
05070 inline scimatrix operator-(const scimatrix& M1, const srmatrix_slice& M2) {
05071 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A);
05072 }
05073
05074 inline scimatrix operator-(const scimatrix& M1, const scmatrix_slice& M2) {
05075 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05076 }
05077
05078 inline scimatrix operator-(const scimatrix& M1, const simatrix_slice& M2) {
05079 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
05080 }
05081
05082 inline scimatrix operator-(const scimatrix& M1, const scimatrix_slice& M2) {
05083 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05084 }
05085
05086 inline scimatrix operator-(const srmatrix& M1, const scimatrix_slice& M2) {
05087 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05088 }
05089
05090 inline scimatrix operator-(const simatrix& M1, const scimatrix_slice& M2) {
05091 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05092 }
05093
05094 inline scimatrix operator-(const scmatrix& M1, const scimatrix_slice& M2) {
05095 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05096 }
05097
05098 inline scimatrix operator-(const simatrix& M1, const scmatrix_slice& M2) {
05099 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05100 }
05101
05102 inline scimatrix operator-(const scmatrix& M1, const simatrix_slice& M2) {
05103 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
05104 }
05105
05106 inline cimatrix operator-(const scimatrix_slice& M1, const rmatrix& M2) {
05107 return spf_mm_sub<scimatrix,rmatrix,cimatrix>(M1.A,M2);
05108 }
05109
05110 inline cimatrix operator-(const scimatrix_slice& M1, const imatrix& M2) {
05111 return spf_mm_sub<scimatrix,imatrix,cimatrix>(M1.A,M2);
05112 }
05113
05114 inline cimatrix operator-(const scimatrix_slice& M1, const cmatrix& M2) {
05115 return spf_mm_sub<scimatrix,cmatrix,cimatrix>(M1.A,M2);
05116 }
05117
05118 inline cimatrix operator-(const scimatrix_slice& M1, const cimatrix& M2) {
05119 return spf_mm_sub<scimatrix,cimatrix,cimatrix>(M1.A,M2);
05120 }
05121
05122 inline cimatrix operator-(const srmatrix_slice& M1, const cimatrix& M2) {
05123 return spf_mm_sub<srmatrix,cimatrix,cimatrix>(M1.A,M2);
05124 }
05125
05126 inline cimatrix operator-(const simatrix_slice& M1, const cimatrix& M2) {
05127 return spf_mm_sub<simatrix,cimatrix,cimatrix>(M1.A,M2);
05128 }
05129
05130 inline cimatrix operator-(const scmatrix_slice& M1, const cimatrix& M2) {
05131 return spf_mm_sub<scmatrix,cimatrix,cimatrix>(M1.A,M2);
05132 }
05133
05134 inline cimatrix operator-(const simatrix_slice& M1, const cmatrix& M2) {
05135 return spf_mm_sub<simatrix,cmatrix,cimatrix>(M1.A,M2);
05136 }
05137
05138 inline cimatrix operator-(const scmatrix_slice& M1, const imatrix& M2) {
05139 return spf_mm_sub<scmatrix,imatrix,cimatrix>(M1.A,M2);
05140 }
05141
05142 inline cimatrix operator-(const cimatrix& M1, const srmatrix_slice& M2) {
05143 return fsp_mm_sub<cimatrix,srmatrix,cimatrix>(M1,M2.A);
05144 }
05145
05146 inline cimatrix operator-(const cimatrix& M1, const simatrix_slice& M2) {
05147 return fsp_mm_sub<cimatrix,simatrix,cimatrix>(M1,M2.A);
05148 }
05149
05150 inline cimatrix operator-(const cimatrix& M1, const scmatrix_slice& M2) {
05151 return fsp_mm_sub<cimatrix,scmatrix,cimatrix>(M1,M2.A);
05152 }
05153
05154 inline cimatrix operator-(const cimatrix& M1, const scimatrix_slice& M2) {
05155 return fsp_mm_sub<cimatrix,scimatrix,cimatrix>(M1,M2.A);
05156 }
05157
05158 inline cimatrix operator-(const rmatrix& M1, const scimatrix_slice& M2) {
05159 return fsp_mm_sub<rmatrix,scimatrix,cimatrix>(M1,M2.A);
05160 }
05161
05162 inline cimatrix operator-(const imatrix& M1, const scimatrix_slice& M2) {
05163 return fsp_mm_sub<imatrix,scimatrix,cimatrix>(M1,M2.A);
05164 }
05165
05166 inline cimatrix operator-(const cmatrix& M1, const scimatrix_slice& M2) {
05167 return fsp_mm_sub<cmatrix,scimatrix,cimatrix>(M1,M2.A);
05168 }
05169
05170 inline cimatrix operator-(const imatrix& M1, const scmatrix_slice& M2) {
05171 return fsp_mm_sub<imatrix,scmatrix,cimatrix>(M1,M2.A);
05172 }
05173
05174 inline cimatrix operator-(const cmatrix& M1, const simatrix_slice& M2) {
05175 return fsp_mm_sub<cmatrix,simatrix,cimatrix>(M1,M2.A);
05176 }
05177
05178 inline cimatrix operator-(const scimatrix_slice& M1, const rmatrix_slice& M2) {
05179 return spf_mm_sub<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2);
05180 }
05181
05182 inline cimatrix operator-(const scimatrix_slice& M1, const cmatrix_slice& M2) {
05183 return spf_mm_sub<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05184 }
05185
05186 inline cimatrix operator-(const scimatrix_slice& M1, const imatrix_slice& M2) {
05187 return spf_mm_sub<scimatrix,imatrix_slice,cimatrix>(M1.A,M2);
05188 }
05189
05190 inline cimatrix operator-(const scimatrix_slice& M1, const cimatrix_slice& M2) {
05191 return spf_mm_sub<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05192 }
05193
05194 inline cimatrix operator-(const srmatrix_slice& M1, const cimatrix_slice& M2) {
05195 return spf_mm_sub<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05196 }
05197
05198 inline cimatrix operator-(const simatrix_slice& M1, const cimatrix_slice& M2) {
05199 return spf_mm_sub<simatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05200 }
05201
05202 inline cimatrix operator-(const scmatrix_slice& M1, const cimatrix_slice& M2) {
05203 return spf_mm_sub<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05204 }
05205
05206 inline cimatrix operator-(const simatrix_slice& M1, const cmatrix_slice& M2) {
05207 return spf_mm_sub<simatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05208 }
05209
05210 inline cimatrix operator-(const scmatrix_slice& M1, const imatrix_slice& M2) {
05211 return spf_mm_sub<scmatrix,imatrix_slice,cimatrix>(M1.A,M2);
05212 }
05213
05214 inline cimatrix operator-(const cimatrix_slice& M1, const srmatrix_slice& M2) {
05215 return fsp_mm_sub<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A);
05216 }
05217
05218 inline cimatrix operator-(const cimatrix_slice& M1, const simatrix_slice& M2) {
05219 return fsp_mm_sub<cimatrix_slice,simatrix,cimatrix>(M1,M2.A);
05220 }
05221
05222 inline cimatrix operator-(const cimatrix_slice& M1, const scmatrix_slice& M2) {
05223 return fsp_mm_sub<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05224 }
05225
05226 inline cimatrix operator-(const cimatrix_slice& M1, const scimatrix_slice& M2) {
05227 return fsp_mm_sub<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05228 }
05229
05230 inline cimatrix operator-(const rmatrix_slice& M1, const scimatrix_slice& M2) {
05231 return fsp_mm_sub<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05232 }
05233
05234 inline cimatrix operator-(const imatrix_slice& M1, const scimatrix_slice& M2) {
05235 return fsp_mm_sub<imatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05236 }
05237
05238 inline cimatrix operator-(const cmatrix_slice& M1, const scimatrix_slice& M2) {
05239 return fsp_mm_sub<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05240 }
05241
05242 inline cimatrix operator-(const imatrix_slice& M1, const scmatrix_slice& M2) {
05243 return fsp_mm_sub<imatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05244 }
05245
05246 inline cimatrix operator-(const cmatrix_slice& M1, const simatrix_slice& M2) {
05247 return fsp_mm_sub<cmatrix_slice,simatrix,cimatrix>(M1,M2.A);
05248 }
05249
05250 inline scimatrix operator|(const scimatrix_slice& M1, const srmatrix_slice& M2) {
05251 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A);
05252 }
05253
05254 inline scimatrix operator|(const scimatrix_slice& M1, const scmatrix_slice& M2) {
05255 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05256 }
05257
05258 inline scimatrix operator|(const scimatrix_slice& M1, const simatrix_slice& M2) {
05259 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
05260 }
05261
05262 inline scimatrix operator|(const scimatrix_slice& M1, const scimatrix_slice& M2) {
05263 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05264 }
05265
05266 inline scimatrix operator|(const srmatrix_slice& M1, const scimatrix_slice& M2) {
05267 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05268 }
05269
05270 inline scimatrix operator|(const scmatrix_slice& M1, const scimatrix_slice& M2) {
05271 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05272 }
05273
05274 inline scimatrix operator|(const simatrix_slice& M1, const scimatrix_slice& M2) {
05275 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05276 }
05277
05278 inline scimatrix operator|(const scmatrix_slice& M1, const simatrix_slice& M2) {
05279 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
05280 }
05281
05282 inline scimatrix operator|(const simatrix_slice& M1, const scmatrix_slice& M2) {
05283 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05284 }
05285
05286 inline scimatrix operator|(const scimatrix_slice& M1, const srmatrix& M2) {
05287 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2);
05288 }
05289
05290 inline scimatrix operator|(const scimatrix_slice& M1, const scmatrix& M2) {
05291 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05292 }
05293
05294 inline scimatrix operator|(const scimatrix_slice& M1, const simatrix& M2) {
05295 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
05296 }
05297
05298 inline scimatrix operator|(const scimatrix_slice& M1, const scimatrix& M2) {
05299 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05300 }
05301
05302 inline scimatrix operator|(const srmatrix_slice& M1, const scimatrix& M2) {
05303 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05304 }
05305
05306 inline scimatrix operator|(const simatrix_slice& M1, const scimatrix& M2) {
05307 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05308 }
05309
05310 inline scimatrix operator|(const scmatrix_slice& M1, const scimatrix& M2) {
05311 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05312 }
05313
05314 inline scimatrix operator|(const simatrix_slice& M1, const scmatrix& M2) {
05315 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05316 }
05317
05318 inline scimatrix operator|(const scmatrix_slice& M1, const simatrix& M2) {
05319 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
05320 }
05321
05322 inline scimatrix operator|(const scimatrix& M1, const srmatrix_slice& M2) {
05323 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A);
05324 }
05325
05326 inline scimatrix operator|(const scimatrix& M1, const scmatrix_slice& M2) {
05327 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05328 }
05329
05330 inline scimatrix operator|(const scimatrix& M1, const simatrix_slice& M2) {
05331 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
05332 }
05333
05334 inline scimatrix operator|(const scimatrix& M1, const scimatrix_slice& M2) {
05335 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05336 }
05337
05338 inline scimatrix operator|(const srmatrix& M1, const scimatrix_slice& M2) {
05339 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05340 }
05341
05342 inline scimatrix operator|(const simatrix& M1, const scimatrix_slice& M2) {
05343 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05344 }
05345
05346 inline scimatrix operator|(const scmatrix& M1, const scimatrix_slice& M2) {
05347 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05348 }
05349
05350 inline scimatrix operator|(const simatrix& M1, const scmatrix_slice& M2) {
05351 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05352 }
05353
05354 inline scimatrix operator|(const scmatrix& M1, const simatrix_slice& M2) {
05355 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
05356 }
05357
05358 inline cimatrix operator|(const scimatrix_slice& M1, const rmatrix& M2) {
05359 return spf_mm_hull<scimatrix,rmatrix,cimatrix>(M1.A,M2);
05360 }
05361
05362 inline cimatrix operator|(const scimatrix_slice& M1, const imatrix& M2) {
05363 return spf_mm_hull<scimatrix,imatrix,cimatrix>(M1.A,M2);
05364 }
05365
05366 inline cimatrix operator|(const scimatrix_slice& M1, const cmatrix& M2) {
05367 return spf_mm_hull<scimatrix,cmatrix,cimatrix>(M1.A,M2);
05368 }
05369
05370 inline cimatrix operator|(const scimatrix_slice& M1, const cimatrix& M2) {
05371 return spf_mm_hull<scimatrix,cimatrix,cimatrix>(M1.A,M2);
05372 }
05373
05374 inline cimatrix operator|(const srmatrix_slice& M1, const cimatrix& M2) {
05375 return spf_mm_hull<srmatrix,cimatrix,cimatrix>(M1.A,M2);
05376 }
05377
05378 inline cimatrix operator|(const simatrix_slice& M1, const cimatrix& M2) {
05379 return spf_mm_hull<simatrix,cimatrix,cimatrix>(M1.A,M2);
05380 }
05381
05382 inline cimatrix operator|(const scmatrix_slice& M1, const cimatrix& M2) {
05383 return spf_mm_hull<scmatrix,cimatrix,cimatrix>(M1.A,M2);
05384 }
05385
05386 inline cimatrix operator|(const simatrix_slice& M1, const cmatrix& M2) {
05387 return spf_mm_hull<simatrix,cmatrix,cimatrix>(M1.A,M2);
05388 }
05389
05390 inline cimatrix operator|(const scmatrix_slice& M1, const imatrix& M2) {
05391 return spf_mm_hull<scmatrix,imatrix,cimatrix>(M1.A,M2);
05392 }
05393
05394 inline cimatrix operator|(const cimatrix& M1, const srmatrix_slice& M2) {
05395 return fsp_mm_hull<cimatrix,srmatrix,cimatrix>(M1,M2.A);
05396 }
05397
05398 inline cimatrix operator|(const cimatrix& M1, const simatrix_slice& M2) {
05399 return fsp_mm_hull<cimatrix,simatrix,cimatrix>(M1,M2.A);
05400 }
05401
05402 inline cimatrix operator|(const cimatrix& M1, const scmatrix_slice& M2) {
05403 return fsp_mm_hull<cimatrix,scmatrix,cimatrix>(M1,M2.A);
05404 }
05405
05406 inline cimatrix operator|(const cimatrix& M1, const scimatrix_slice& M2) {
05407 return fsp_mm_hull<cimatrix,scimatrix,cimatrix>(M1,M2.A);
05408 }
05409
05410 inline cimatrix operator|(const rmatrix& M1, const scimatrix_slice& M2) {
05411 return fsp_mm_hull<rmatrix,scimatrix,cimatrix>(M1,M2.A);
05412 }
05413
05414 inline cimatrix operator|(const imatrix& M1, const scimatrix_slice& M2) {
05415 return fsp_mm_hull<imatrix,scimatrix,cimatrix>(M1,M2.A);
05416 }
05417
05418 inline cimatrix operator|(const cmatrix& M1, const scimatrix_slice& M2) {
05419 return fsp_mm_hull<cmatrix,scimatrix,cimatrix>(M1,M2.A);
05420 }
05421
05422 inline cimatrix operator|(const imatrix& M1, const scmatrix_slice& M2) {
05423 return fsp_mm_hull<imatrix,scmatrix,cimatrix>(M1,M2.A);
05424 }
05425
05426 inline cimatrix operator|(const cmatrix& M1, const simatrix_slice& M2) {
05427 return fsp_mm_hull<cmatrix,simatrix,cimatrix>(M1,M2.A);
05428 }
05429
05430 inline cimatrix operator|(const scimatrix_slice& M1, const rmatrix_slice& M2) {
05431 return spf_mm_hull<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2);
05432 }
05433
05434 inline cimatrix operator|(const scimatrix_slice& M1, const cmatrix_slice& M2) {
05435 return spf_mm_hull<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05436 }
05437
05438 inline cimatrix operator|(const scimatrix_slice& M1, const imatrix_slice& M2) {
05439 return spf_mm_hull<scimatrix,imatrix_slice,cimatrix>(M1.A,M2);
05440 }
05441
05442 inline cimatrix operator|(const scimatrix_slice& M1, const cimatrix_slice& M2) {
05443 return spf_mm_hull<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05444 }
05445
05446 inline cimatrix operator|(const srmatrix_slice& M1, const cimatrix_slice& M2) {
05447 return spf_mm_hull<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05448 }
05449
05450 inline cimatrix operator|(const simatrix_slice& M1, const cimatrix_slice& M2) {
05451 return spf_mm_hull<simatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05452 }
05453
05454 inline cimatrix operator|(const scmatrix_slice& M1, const cimatrix_slice& M2) {
05455 return spf_mm_hull<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05456 }
05457
05458 inline cimatrix operator|(const simatrix_slice& M1, const cmatrix_slice& M2) {
05459 return spf_mm_hull<simatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05460 }
05461
05462 inline cimatrix operator|(const scmatrix_slice& M1, const imatrix_slice& M2) {
05463 return spf_mm_hull<scmatrix,imatrix_slice,cimatrix>(M1.A,M2);
05464 }
05465
05466 inline cimatrix operator|(const cimatrix_slice& M1, const srmatrix_slice& M2) {
05467 return fsp_mm_hull<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A);
05468 }
05469
05470 inline cimatrix operator|(const cimatrix_slice& M1, const simatrix_slice& M2) {
05471 return fsp_mm_hull<cimatrix_slice,simatrix,cimatrix>(M1,M2.A);
05472 }
05473
05474 inline cimatrix operator|(const cimatrix_slice& M1, const scmatrix_slice& M2) {
05475 return fsp_mm_hull<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05476 }
05477
05478 inline cimatrix operator|(const cimatrix_slice& M1, const scimatrix_slice& M2) {
05479 return fsp_mm_hull<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05480 }
05481
05482 inline cimatrix operator|(const rmatrix_slice& M1, const scimatrix_slice& M2) {
05483 return fsp_mm_hull<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05484 }
05485
05486 inline cimatrix operator|(const imatrix_slice& M1, const scimatrix_slice& M2) {
05487 return fsp_mm_hull<imatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05488 }
05489
05490 inline cimatrix operator|(const cmatrix_slice& M1, const scimatrix_slice& M2) {
05491 return fsp_mm_hull<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05492 }
05493
05494 inline cimatrix operator|(const imatrix_slice& M1, const scmatrix_slice& M2) {
05495 return fsp_mm_hull<imatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05496 }
05497
05498 inline cimatrix operator|(const cmatrix_slice& M1, const simatrix_slice& M2) {
05499 return fsp_mm_hull<cmatrix_slice,simatrix,cimatrix>(M1,M2.A);
05500 }
05501
05502 inline scimatrix operator|(const scmatrix_slice& M1, const srmatrix_slice& M2) {
05503 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A);
05504 }
05505
05506 inline scimatrix operator|(const srmatrix_slice& M1, const scmatrix_slice& M2) {
05507 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05508 }
05509
05510 inline scimatrix operator|(const scmatrix_slice& M1, const scmatrix_slice& M2) {
05511 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A);
05512 }
05513
05514 inline scimatrix operator|(const scmatrix_slice& M1, const srmatrix& M2) {
05515 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1.A,M2);
05516 }
05517
05518 inline scimatrix operator|(const srmatrix_slice& M1, const scmatrix& M2) {
05519 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05520 }
05521
05522 inline scimatrix operator|(const scmatrix_slice& M1, const scmatrix& M2) {
05523 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2);
05524 }
05525
05526 inline scimatrix operator|(const scmatrix& M1, const srmatrix_slice& M2) {
05527 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1,M2.A);
05528 }
05529
05530 inline scimatrix operator|(const srmatrix& M1, const scmatrix_slice& M2) {
05531 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05532 }
05533
05534 inline scimatrix operator|(const scmatrix& M1, const scmatrix_slice& M2) {
05535 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1,M2.A);
05536 }
05537
05538 inline cimatrix operator|(const scmatrix_slice& M1, const rmatrix& M2) {
05539 return spf_mm_hull<scmatrix,rmatrix,cimatrix>(M1.A,M2);
05540 }
05541
05542 inline cimatrix operator|(const srmatrix_slice& M1, const cmatrix& M2) {
05543 return spf_mm_hull<srmatrix,cmatrix,cimatrix>(M1.A,M2);
05544 }
05545
05546 inline cimatrix operator|(const scmatrix_slice& M1, const cmatrix& M2) {
05547 return spf_mm_hull<scmatrix,cmatrix,cimatrix>(M1.A,M2);
05548 }
05549
05550 inline cimatrix operator|(const cmatrix& M1, const srmatrix_slice& M2) {
05551 return fsp_mm_hull<cmatrix,srmatrix,cimatrix>(M1,M2.A);
05552 }
05553
05554 inline cimatrix operator|(const rmatrix& M1, const scmatrix_slice& M2) {
05555 return fsp_mm_hull<rmatrix,scmatrix,cimatrix>(M1,M2.A);
05556 }
05557
05558 inline cimatrix operator|(const cmatrix& M1, const scmatrix_slice& M2) {
05559 return fsp_mm_hull<cmatrix,scmatrix,cimatrix>(M1,M2.A);
05560 }
05561
05562 inline cimatrix operator|(const scmatrix_slice& M1, const rmatrix_slice& M2) {
05563 return spf_mm_hull<scmatrix,rmatrix_slice,cimatrix>(M1.A,M2);
05564 }
05565
05566 inline cimatrix operator|(const srmatrix_slice& M1, const cmatrix_slice& M2) {
05567 return spf_mm_hull<srmatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05568 }
05569
05570 inline cimatrix operator|(const scmatrix_slice& M1, const cmatrix_slice& M2) {
05571 return spf_mm_hull<scmatrix,cmatrix_slice,cimatrix>(M1.A,M2);
05572 }
05573
05574 inline cimatrix operator|(const cmatrix_slice& M1, const srmatrix_slice& M2) {
05575 return fsp_mm_hull<cmatrix_slice,srmatrix,cimatrix>(M1,M2.A);
05576 }
05577
05578 inline cimatrix operator|(const rmatrix_slice& M1, const scmatrix_slice& M2) {
05579 return fsp_mm_hull<rmatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05580 }
05581
05582 inline cimatrix operator|(const cmatrix_slice& M1, const scmatrix_slice& M2) {
05583 return fsp_mm_hull<cmatrix_slice,scmatrix,cimatrix>(M1,M2.A);
05584 }
05585
05586 inline scimatrix operator&(const scimatrix_slice& M1, const simatrix_slice& M2) {
05587 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A);
05588 }
05589
05590 inline scimatrix operator&(const scimatrix_slice& M1, const scimatrix_slice& M2) {
05591 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05592 }
05593
05594 inline scimatrix operator&(const simatrix_slice& M1, const scimatrix_slice& M2) {
05595 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A);
05596 }
05597
05598 inline scimatrix operator&(const scimatrix_slice& M1, const simatrix& M2) {
05599 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2);
05600 }
05601
05602 inline scimatrix operator&(const scimatrix_slice& M1, const scimatrix& M2) {
05603 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05604 }
05605
05606 inline scimatrix operator&(const simatrix_slice& M1, const scimatrix& M2) {
05607 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2);
05608 }
05609
05610 inline scimatrix operator&(const scimatrix& M1, const simatrix_slice& M2) {
05611 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A);
05612 }
05613
05614 inline scimatrix operator&(const scimatrix& M1, const scimatrix_slice& M2) {
05615 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05616 }
05617
05618 inline scimatrix operator&(const simatrix& M1, const scimatrix_slice& M2) {
05619 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A);
05620 }
05621
05622 inline cimatrix operator&(const scimatrix_slice& M1, const imatrix& M2) {
05623 return spf_mm_intersect<scimatrix,imatrix,cimatrix>(M1.A,M2);
05624 }
05625
05626 inline cimatrix operator&(const scimatrix_slice& M1, const cimatrix& M2) {
05627 return spf_mm_intersect<scimatrix,cimatrix,cimatrix>(M1.A,M2);
05628 }
05629
05630 inline cimatrix operator&(const simatrix_slice& M1, const cimatrix& M2) {
05631 return spf_mm_intersect<simatrix,cimatrix,cimatrix>(M1.A,M2);
05632 }
05633
05634 inline cimatrix operator&(const cimatrix& M1, const simatrix_slice& M2) {
05635 return fsp_mm_intersect<cimatrix,simatrix,cimatrix>(M1,M2.A);
05636 }
05637
05638 inline cimatrix operator&(const cimatrix& M1, const scimatrix_slice& M2) {
05639 return fsp_mm_intersect<cimatrix,scimatrix,cimatrix>(M1,M2.A);
05640 }
05641
05642 inline cimatrix operator&(const imatrix& M1, const scimatrix_slice& M2) {
05643 return fsp_mm_intersect<imatrix,scimatrix,cimatrix>(M1,M2.A);
05644 }
05645
05646 inline cimatrix operator&(const scimatrix_slice& M1, const imatrix_slice& M2) {
05647 return spf_mm_intersect<scimatrix,imatrix_slice,cimatrix>(M1.A,M2);
05648 }
05649
05650 inline cimatrix operator&(const scimatrix_slice& M1, const cimatrix_slice& M2) {
05651 return spf_mm_intersect<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05652 }
05653
05654 inline cimatrix operator&(const simatrix_slice& M1, const cimatrix_slice& M2) {
05655 return spf_mm_intersect<simatrix,cimatrix_slice,cimatrix>(M1.A,M2);
05656 }
05657
05658 inline cimatrix operator&(const cimatrix_slice& M1, const simatrix_slice& M2) {
05659 return fsp_mm_intersect<cimatrix_slice,simatrix,cimatrix>(M1,M2.A);
05660 }
05661
05662 inline cimatrix operator&(const cimatrix_slice& M1, const scimatrix_slice& M2) {
05663 return fsp_mm_intersect<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05664 }
05665
05666 inline cimatrix operator&(const imatrix_slice& M1, const scimatrix_slice& M2) {
05667 return fsp_mm_intersect<imatrix_slice,scimatrix,cimatrix>(M1,M2.A);
05668 }
05669
05670 inline cimatrix& cimatrix::operator=(const srmatrix_slice& M) {
05671 *this = rmatrix(M);
05672 return *this;
05673 }
05674
05675 inline cimatrix_slice& cimatrix_slice::operator=(const srmatrix_slice& M) {
05676 *this = rmatrix(M);
05677 return *this;
05678 }
05679
05680 inline cimatrix& cimatrix::operator=(const simatrix_slice& M) {
05681 *this = imatrix(M);
05682 return *this;
05683 }
05684
05685 inline cimatrix_slice& cimatrix_slice::operator=(const simatrix_slice& M) {
05686 *this = imatrix(M);
05687 return *this;
05688 }
05689
05690 inline cimatrix& cimatrix::operator=(const scmatrix_slice& M) {
05691 *this = cmatrix(M);
05692 return *this;
05693 }
05694
05695 inline cimatrix_slice& cimatrix_slice::operator=(const scmatrix_slice& M) {
05696 *this = cmatrix(M);
05697 return *this;
05698 }
05699
05700 inline cimatrix& cimatrix::operator=(const scimatrix_slice& M) {
05701 *this = cimatrix(M);
05702 return *this;
05703 }
05704
05705 inline cimatrix_slice& cimatrix_slice::operator=(const scimatrix_slice& M) {
05706 *this = cimatrix(M);
05707 return *this;
05708 }
05709
05710 inline cimatrix& cimatrix::operator+=(const srmatrix_slice& M) {
05711 *this += M.A;
05712 return *this;
05713 }
05714
05715 inline cimatrix_slice& cimatrix_slice::operator+=(const srmatrix_slice& M) {
05716 *this += M.A;
05717 return *this;
05718 }
05719
05720 inline cimatrix& cimatrix::operator+=(const scmatrix_slice& M) {
05721 *this += M.A;
05722 return *this;
05723 }
05724
05725 inline cimatrix_slice& cimatrix_slice::operator+=(const scmatrix_slice& M) {
05726 *this += M.A;
05727 return *this;
05728 }
05729
05730 inline cimatrix& cimatrix::operator+=(const simatrix_slice& M) {
05731 *this += M.A;
05732 return *this;
05733 }
05734
05735 inline cimatrix_slice& cimatrix_slice::operator+=(const simatrix_slice& M) {
05736 *this += M.A;
05737 return *this;
05738 }
05739
05740 inline cimatrix& cimatrix::operator+=(const scimatrix_slice& M) {
05741 *this += M.A;
05742 return *this;
05743 }
05744
05745 inline cimatrix_slice& cimatrix_slice::operator+=(const scimatrix_slice& M) {
05746 *this += M.A;
05747 return *this;
05748 }
05749
05750 inline cimatrix& cimatrix::operator-=(const srmatrix_slice& M) {
05751 *this -= M.A;
05752 return *this;
05753 }
05754
05755 inline cimatrix_slice& cimatrix_slice::operator-=(const srmatrix_slice& M) {
05756 *this -= M.A;
05757 return *this;
05758 }
05759
05760 inline cimatrix& cimatrix::operator-=(const scmatrix_slice& M) {
05761 *this -= M.A;
05762 return *this;
05763 }
05764
05765 inline cimatrix_slice& cimatrix_slice::operator-=(const scmatrix_slice& M) {
05766 *this -= M.A;
05767 return *this;
05768 }
05769
05770 inline cimatrix& cimatrix::operator-=(const simatrix_slice& M) {
05771 *this -= M.A;
05772 return *this;
05773 }
05774
05775 inline cimatrix_slice& cimatrix_slice::operator-=(const simatrix_slice& M) {
05776 *this -= M.A;
05777 return *this;
05778 }
05779
05780 inline cimatrix& cimatrix::operator-=(const scimatrix_slice& M) {
05781 *this -= M.A;
05782 return *this;
05783 }
05784
05785 inline cimatrix_slice& cimatrix_slice::operator-=(const scimatrix_slice& M) {
05786 *this -= M.A;
05787 return *this;
05788 }
05789
05790 inline cimatrix& cimatrix::operator*=(const srmatrix_slice& M) {
05791 *this *= M.A;
05792 return *this;
05793 }
05794
05795 inline cimatrix_slice& cimatrix_slice::operator*=(const srmatrix_slice& M) {
05796 *this *= M.A;
05797 return *this;
05798 }
05799
05800 inline cimatrix& cimatrix::operator*=(const scmatrix_slice& M) {
05801 *this *= M.A;
05802 return *this;
05803 }
05804
05805 inline cimatrix_slice& cimatrix_slice::operator*=(const scmatrix_slice& M) {
05806 *this *= M.A;
05807 return *this;
05808 }
05809
05810 inline cimatrix& cimatrix::operator*=(const simatrix_slice& M) {
05811 *this *= M.A;
05812 return *this;
05813 }
05814
05815 inline cimatrix_slice& cimatrix_slice::operator*=(const simatrix_slice& M) {
05816 *this *= M.A;
05817 return *this;
05818 }
05819
05820 inline cimatrix& cimatrix::operator*=(const scimatrix_slice& M) {
05821 *this *= M.A;
05822 return *this;
05823 }
05824
05825 inline cimatrix_slice& cimatrix_slice::operator*=(const scimatrix_slice& M) {
05826 *this *= M.A;
05827 return *this;
05828 }
05829
05830 inline cimatrix& cimatrix::operator|=(const srmatrix_slice& M) {
05831 *this |= M.A;
05832 return *this;
05833 }
05834
05835 inline cimatrix_slice& cimatrix_slice::operator|=(const srmatrix_slice& M) {
05836 *this |= M.A;
05837 return *this;
05838 }
05839
05840 inline cimatrix& cimatrix::operator|=(const scmatrix_slice& M) {
05841 *this |= M.A;
05842 return *this;
05843 }
05844
05845 inline cimatrix_slice& cimatrix_slice::operator|=(const scmatrix_slice& M) {
05846 *this |= M.A;
05847 return *this;
05848 }
05849
05850 inline cimatrix& cimatrix::operator|=(const simatrix_slice& M) {
05851 *this |= M.A;
05852 return *this;
05853 }
05854
05855 inline cimatrix_slice& cimatrix_slice::operator|=(const simatrix_slice& M) {
05856 *this |= M.A;
05857 return *this;
05858 }
05859
05860 inline cimatrix& cimatrix::operator|=(const scimatrix_slice& M) {
05861 *this |= M.A;
05862 return *this;
05863 }
05864
05865 inline cimatrix_slice& cimatrix_slice::operator|=(const scimatrix_slice& M) {
05866 *this |= M.A;
05867 return *this;
05868 }
05869
05870 inline cimatrix& cimatrix::operator&=(const simatrix_slice& M) {
05871 *this &= M.A;
05872 return *this;
05873 }
05874
05875 inline cimatrix_slice& cimatrix_slice::operator&=(const simatrix_slice& M) {
05876 *this &= M.A;
05877 return *this;
05878 }
05879
05880 inline cimatrix& cimatrix::operator&=(const scimatrix_slice& M) {
05881 *this &= M.A;
05882 return *this;
05883 }
05884
05885 inline cimatrix_slice& cimatrix_slice::operator&=(const scimatrix_slice& M) {
05886 *this &= M.A;
05887 return *this;
05888 }
05889
05890 inline bool operator==(const scimatrix_slice& M1, const srmatrix_slice& M2) {
05891 return spsp_mm_comp(M1.A,M2.A);
05892 }
05893
05894 inline bool operator==(const scimatrix_slice& M1, const scmatrix_slice& M2) {
05895 return spsp_mm_comp(M1.A,M2.A);
05896 }
05897
05898 inline bool operator==(const scimatrix_slice& M1, const simatrix_slice& M2) {
05899 return spsp_mm_comp(M1.A,M2.A);
05900 }
05901
05902 inline bool operator==(const scimatrix_slice& M1, const scimatrix_slice& M2) {
05903 return spsp_mm_comp(M1.A,M2.A);
05904 }
05905
05906 inline bool operator==(const srmatrix_slice& M1, const scimatrix_slice& M2) {
05907 return spsp_mm_comp(M1.A,M2.A);
05908 }
05909
05910 inline bool operator==(const scmatrix_slice& M1, const scimatrix_slice& M2) {
05911 return spsp_mm_comp(M1.A,M2.A);
05912 }
05913
05914 inline bool operator==(const simatrix_slice& M1, const scimatrix_slice& M2) {
05915 return spsp_mm_comp(M1.A,M2.A);
05916 }
05917
05918 inline bool operator==(const scimatrix_slice& M1, const srmatrix& M2) {
05919 return spsp_mm_comp(M1.A,M2);
05920 }
05921
05922 inline bool operator==(const scimatrix_slice& M1, const scmatrix& M2) {
05923 return spsp_mm_comp(M1.A,M2);
05924 }
05925
05926 inline bool operator==(const scimatrix_slice& M1, const simatrix& M2) {
05927 return spsp_mm_comp(M1.A,M2);
05928 }
05929
05930 inline bool operator==(const scimatrix_slice& M1, const scimatrix& M2) {
05931 return spsp_mm_comp(M1.A,M2);
05932 }
05933
05934 inline bool operator==(const srmatrix_slice& M1, const scimatrix& M2) {
05935 return spsp_mm_comp(M1.A,M2);
05936 }
05937
05938 inline bool operator==(const scmatrix_slice& M1, const scimatrix& M2) {
05939 return spsp_mm_comp(M1.A,M2);
05940 }
05941
05942 inline bool operator==(const simatrix_slice& M1, const scimatrix& M2) {
05943 return spsp_mm_comp(M1.A,M2);
05944 }
05945
05946 inline bool operator==(const scimatrix& M1, const srmatrix_slice& M2) {
05947 return spsp_mm_comp(M1,M2.A);
05948 }
05949
05950 inline bool operator==(const scimatrix& M1, const scmatrix_slice& M2) {
05951 return spsp_mm_comp(M1,M2.A);
05952 }
05953
05954 inline bool operator==(const scimatrix& M1, const simatrix_slice& M2) {
05955 return spsp_mm_comp(M1,M2.A);
05956 }
05957
05958 inline bool operator==(const scimatrix& M1, const scimatrix_slice& M2) {
05959 return spsp_mm_comp(M1,M2.A);
05960 }
05961
05962 inline bool operator==(const srmatrix& M1, const scimatrix_slice& M2) {
05963 return spsp_mm_comp(M1,M2.A);
05964 }
05965
05966 inline bool operator==(const scmatrix& M1, const scimatrix_slice& M2) {
05967 return spsp_mm_comp(M1,M2.A);
05968 }
05969
05970 inline bool operator==(const simatrix& M1, const scimatrix_slice& M2) {
05971 return spsp_mm_comp(M1,M2.A);
05972 }
05973
05974 inline bool operator==(const scimatrix_slice& M1, const rmatrix& M2) {
05975 return spf_mm_comp(M1.A,M2);
05976 }
05977
05978 inline bool operator==(const scimatrix_slice& M1, const cmatrix& M2) {
05979 return spf_mm_comp(M1.A,M2);
05980 }
05981
05982 inline bool operator==(const scimatrix_slice& M1, const imatrix& M2) {
05983 return spf_mm_comp(M1.A,M2);
05984 }
05985
05986 inline bool operator==(const scimatrix_slice& M1, const cimatrix& M2) {
05987 return spf_mm_comp(M1.A,M2);
05988 }
05989
05990 inline bool operator==(const srmatrix_slice& M1, const cimatrix& M2) {
05991 return spf_mm_comp(M1.A,M2);
05992 }
05993
05994 inline bool operator==(const scmatrix_slice& M1, const cimatrix& M2) {
05995 return spf_mm_comp(M1.A,M2);
05996 }
05997
05998 inline bool operator==(const simatrix_slice& M1, const cimatrix& M2) {
05999 return spf_mm_comp(M1.A,M2);
06000 }
06001
06002 inline bool operator==(const cimatrix& M1, const srmatrix_slice& M2) {
06003 return fsp_mm_comp(M1,M2.A);
06004 }
06005
06006 inline bool operator==(const cimatrix& M1, const simatrix_slice& M2) {
06007 return fsp_mm_comp(M1,M2.A);
06008 }
06009
06010 inline bool operator==(const cimatrix& M1, const scmatrix_slice& M2) {
06011 return fsp_mm_comp(M1,M2.A);
06012 }
06013
06014 inline bool operator==(const cimatrix& M1, const scimatrix_slice& M2) {
06015 return fsp_mm_comp(M1,M2.A);
06016 }
06017
06018 inline bool operator==(const rmatrix& M1, const scimatrix_slice& M2) {
06019 return fsp_mm_comp(M1,M2.A);
06020 }
06021
06022 inline bool operator==(const imatrix& M1, const scimatrix_slice& M2) {
06023 return fsp_mm_comp(M1,M2.A);
06024 }
06025
06026 inline bool operator==(const cmatrix& M1, const scimatrix_slice& M2) {
06027 return fsp_mm_comp(M1,M2.A);
06028 }
06029
06030 inline bool operator==(const cimatrix_slice& M1, const srmatrix_slice& M2) {
06031 return fsp_mm_comp(M1,M2.A);
06032 }
06033
06034 inline bool operator==(const cimatrix_slice& M1, const simatrix_slice& M2) {
06035 return fsp_mm_comp(M1,M2.A);
06036 }
06037
06038 inline bool operator==(const cimatrix_slice& M1, const scmatrix_slice& M2) {
06039 return fsp_mm_comp(M1,M2.A);
06040 }
06041
06042 inline bool operator==(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06043 return fsp_mm_comp(M1,M2.A);
06044 }
06045
06046 inline bool operator==(const rmatrix_slice& M1, const scimatrix_slice& M2) {
06047 return fsp_mm_comp(M1,M2.A);
06048 }
06049
06050 inline bool operator==(const imatrix_slice& M1, const scimatrix_slice& M2) {
06051 return fsp_mm_comp(M1,M2.A);
06052 }
06053
06054 inline bool operator==(const cmatrix_slice& M1, const scimatrix_slice& M2) {
06055 return fsp_mm_comp(M1,M2.A);
06056 }
06057
06058 inline bool operator==(const scimatrix_slice& M1, const rmatrix_slice& M2) {
06059 return spf_mm_comp(M1.A,M2);
06060 }
06061
06062 inline bool operator==(const scimatrix_slice& M1, const cmatrix_slice& M2) {
06063 return spf_mm_comp(M1.A,M2);
06064 }
06065
06066 inline bool operator==(const scimatrix_slice& M1, const imatrix_slice& M2) {
06067 return spf_mm_comp(M1.A,M2);
06068 }
06069
06070 inline bool operator==(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06071 return spf_mm_comp(M1.A,M2);
06072 }
06073
06074 inline bool operator==(const srmatrix_slice& M1, const cimatrix_slice& M2) {
06075 return spf_mm_comp(M1.A,M2);
06076 }
06077
06078 inline bool operator==(const simatrix_slice& M1, const cimatrix_slice& M2) {
06079 return spf_mm_comp(M1.A,M2);
06080 }
06081
06082 inline bool operator==(const scmatrix_slice& M1, const cimatrix_slice& M2) {
06083 return spf_mm_comp(M1.A,M2);
06084 }
06085
06086 inline bool operator!=(const scimatrix_slice& M1, const srmatrix_slice& M2) {
06087 return !spsp_mm_comp(M1.A,M2.A);
06088 }
06089
06090 inline bool operator!=(const scimatrix_slice& M1, const scmatrix_slice& M2) {
06091 return !spsp_mm_comp(M1.A,M2.A);
06092 }
06093
06094 inline bool operator!=(const scimatrix_slice& M1, const simatrix_slice& M2) {
06095 return !spsp_mm_comp(M1.A,M2.A);
06096 }
06097
06098 inline bool operator!=(const scimatrix_slice& M1, const scimatrix_slice& M2) {
06099 return !spsp_mm_comp(M1.A,M2.A);
06100 }
06101
06102 inline bool operator!=(const srmatrix_slice& M1, const scimatrix_slice& M2) {
06103 return !spsp_mm_comp(M1.A,M2.A);
06104 }
06105
06106 inline bool operator!=(const scmatrix_slice& M1, const scimatrix_slice& M2) {
06107 return !spsp_mm_comp(M1.A,M2.A);
06108 }
06109
06110 inline bool operator!=(const simatrix_slice& M1, const scimatrix_slice& M2) {
06111 return !spsp_mm_comp(M1.A,M2.A);
06112 }
06113
06114 inline bool operator!=(const scimatrix_slice& M1, const srmatrix& M2) {
06115 return !spsp_mm_comp(M1.A,M2);
06116 }
06117
06118 inline bool operator!=(const scimatrix_slice& M1, const scmatrix& M2) {
06119 return !spsp_mm_comp(M1.A,M2);
06120 }
06121
06122 inline bool operator!=(const scimatrix_slice& M1, const simatrix& M2) {
06123 return !spsp_mm_comp(M1.A,M2);
06124 }
06125
06126 inline bool operator!=(const scimatrix_slice& M1, const scimatrix& M2) {
06127 return !spsp_mm_comp(M1.A,M2);
06128 }
06129
06130 inline bool operator!=(const srmatrix_slice& M1, const scimatrix& M2) {
06131 return !spsp_mm_comp(M1.A,M2);
06132 }
06133
06134 inline bool operator!=(const scmatrix_slice& M1, const scimatrix& M2) {
06135 return !spsp_mm_comp(M1.A,M2);
06136 }
06137
06138 inline bool operator!=(const simatrix_slice& M1, const scimatrix& M2) {
06139 return !spsp_mm_comp(M1.A,M2);
06140 }
06141
06142 inline bool operator!=(const scimatrix& M1, const srmatrix_slice& M2) {
06143 return !spsp_mm_comp(M1,M2.A);
06144 }
06145
06146 inline bool operator!=(const scimatrix& M1, const scmatrix_slice& M2) {
06147 return !spsp_mm_comp(M1,M2.A);
06148 }
06149
06150 inline bool operator!=(const scimatrix& M1, const simatrix_slice& M2) {
06151 return !spsp_mm_comp(M1,M2.A);
06152 }
06153
06154 inline bool operator!=(const scimatrix& M1, const scimatrix_slice& M2) {
06155 return !spsp_mm_comp(M1,M2.A);
06156 }
06157
06158 inline bool operator!=(const srmatrix& M1, const scimatrix_slice& M2) {
06159 return !spsp_mm_comp(M1,M2.A);
06160 }
06161
06162 inline bool operator!=(const scmatrix& M1, const scimatrix_slice& M2) {
06163 return !spsp_mm_comp(M1,M2.A);
06164 }
06165
06166 inline bool operator!=(const simatrix& M1, const scimatrix_slice& M2) {
06167 return !spsp_mm_comp(M1,M2.A);
06168 }
06169
06170 inline bool operator!=(const scimatrix_slice& M1, const rmatrix& M2) {
06171 return !spf_mm_comp(M1.A,M2);
06172 }
06173
06174 inline bool operator!=(const scimatrix_slice& M1, const cmatrix& M2) {
06175 return !spf_mm_comp(M1.A,M2);
06176 }
06177
06178 inline bool operator!=(const scimatrix_slice& M1, const imatrix& M2) {
06179 return !spf_mm_comp(M1.A,M2);
06180 }
06181
06182 inline bool operator!=(const scimatrix_slice& M1, const cimatrix& M2) {
06183 return !spf_mm_comp(M1.A,M2);
06184 }
06185
06186 inline bool operator!=(const srmatrix_slice& M1, const cimatrix& M2) {
06187 return !spf_mm_comp(M1.A,M2);
06188 }
06189
06190 inline bool operator!=(const scmatrix_slice& M1, const cimatrix& M2) {
06191 return !spf_mm_comp(M1.A,M2);
06192 }
06193
06194 inline bool operator!=(const simatrix_slice& M1, const cimatrix& M2) {
06195 return !spf_mm_comp(M1.A,M2);
06196 }
06197
06198 inline bool operator!=(const cimatrix& M1, const srmatrix_slice& M2) {
06199 return !fsp_mm_comp(M1,M2.A);
06200 }
06201
06202 inline bool operator!=(const cimatrix& M1, const simatrix_slice& M2) {
06203 return !fsp_mm_comp(M1,M2.A);
06204 }
06205
06206 inline bool operator!=(const cimatrix& M1, const scmatrix_slice& M2) {
06207 return !fsp_mm_comp(M1,M2.A);
06208 }
06209
06210 inline bool operator!=(const cimatrix& M1, const scimatrix_slice& M2) {
06211 return !fsp_mm_comp(M1,M2.A);
06212 }
06213
06214 inline bool operator!=(const rmatrix& M1, const scimatrix_slice& M2) {
06215 return !fsp_mm_comp(M1,M2.A);
06216 }
06217
06218 inline bool operator!=(const imatrix& M1, const scimatrix_slice& M2) {
06219 return !fsp_mm_comp(M1,M2.A);
06220 }
06221
06222 inline bool operator!=(const cmatrix& M1, const scimatrix_slice& M2) {
06223 return !fsp_mm_comp(M1,M2.A);
06224 }
06225
06226 inline bool operator!=(const cimatrix_slice& M1, const srmatrix_slice& M2) {
06227 return !fsp_mm_comp(M1,M2.A);
06228 }
06229
06230 inline bool operator!=(const cimatrix_slice& M1, const simatrix_slice& M2) {
06231 return !fsp_mm_comp(M1,M2.A);
06232 }
06233
06234 inline bool operator!=(const cimatrix_slice& M1, const scmatrix_slice& M2) {
06235 return !fsp_mm_comp(M1,M2.A);
06236 }
06237
06238 inline bool operator!=(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06239 return !fsp_mm_comp(M1,M2.A);
06240 }
06241
06242 inline bool operator!=(const rmatrix_slice& M1, const scimatrix_slice& M2) {
06243 return !fsp_mm_comp(M1,M2.A);
06244 }
06245
06246 inline bool operator!=(const imatrix_slice& M1, const scimatrix_slice& M2) {
06247 return !fsp_mm_comp(M1,M2.A);
06248 }
06249
06250 inline bool operator!=(const cmatrix_slice& M1, const scimatrix_slice& M2) {
06251 return !fsp_mm_comp(M1,M2.A);
06252 }
06253
06254 inline bool operator!=(const scimatrix_slice& M1, const rmatrix_slice& M2) {
06255 return !spf_mm_comp(M1.A,M2);
06256 }
06257
06258 inline bool operator!=(const scimatrix_slice& M1, const cmatrix_slice& M2) {
06259 return !spf_mm_comp(M1.A,M2);
06260 }
06261
06262 inline bool operator!=(const scimatrix_slice& M1, const imatrix_slice& M2) {
06263 return !spf_mm_comp(M1.A,M2);
06264 }
06265
06266 inline bool operator!=(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06267 return !spf_mm_comp(M1.A,M2);
06268 }
06269
06270 inline bool operator!=(const srmatrix_slice& M1, const cimatrix_slice& M2) {
06271 return !spf_mm_comp(M1.A,M2);
06272 }
06273
06274 inline bool operator!=(const simatrix_slice& M1, const cimatrix_slice& M2) {
06275 return !spf_mm_comp(M1.A,M2);
06276 }
06277
06278 inline bool operator!=(const scmatrix_slice& M1, const cimatrix_slice& M2) {
06279 return !spf_mm_comp(M1.A,M2);
06280 }
06281
06282 inline bool operator<(const scimatrix_slice& M1, const simatrix_slice& M2) {
06283 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1.A,M2.A);
06284 }
06285
06286 inline bool operator<(const scimatrix_slice& M1, const scimatrix_slice& M2) {
06287 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1.A,M2.A);
06288 }
06289
06290 inline bool operator<(const srmatrix_slice& M1, const scimatrix_slice& M2) {
06291 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1.A,M2.A);
06292 }
06293
06294 inline bool operator<(const scmatrix_slice& M1, const scimatrix_slice& M2) {
06295 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1.A,M2.A);
06296 }
06297
06298 inline bool operator<(const simatrix_slice& M1, const scimatrix_slice& M2) {
06299 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1.A,M2.A);
06300 }
06301
06302 inline bool operator<(const scimatrix_slice& M1, const simatrix& M2) {
06303 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1.A,M2);
06304 }
06305
06306 inline bool operator<(const scimatrix_slice& M1, const scimatrix& M2) {
06307 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1.A,M2);
06308 }
06309
06310 inline bool operator<(const srmatrix_slice& M1, const scimatrix& M2) {
06311 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1.A,M2);
06312 }
06313
06314 inline bool operator<(const scmatrix_slice& M1, const scimatrix& M2) {
06315 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1.A,M2);
06316 }
06317
06318 inline bool operator<(const simatrix_slice& M1, const scimatrix& M2) {
06319 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1.A,M2);
06320 }
06321
06322 inline bool operator<(const scimatrix& M1, const simatrix_slice& M2) {
06323 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1,M2.A);
06324 }
06325
06326 inline bool operator<(const scimatrix& M1, const scimatrix_slice& M2) {
06327 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1,M2.A);
06328 }
06329
06330 inline bool operator<(const srmatrix& M1, const scimatrix_slice& M2) {
06331 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1,M2.A);
06332 }
06333
06334 inline bool operator<(const scmatrix& M1, const scimatrix_slice& M2) {
06335 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1,M2.A);
06336 }
06337
06338 inline bool operator<(const simatrix& M1, const scimatrix_slice& M2) {
06339 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1,M2.A);
06340 }
06341
06342 inline bool operator<(const scimatrix_slice& M1, const imatrix& M2) {
06343 return spf_mm_less<scimatrix,imatrix,cinterval>(M1.A,M2);
06344 }
06345
06346 inline bool operator<(const scimatrix_slice& M1, const cimatrix& M2) {
06347 return spf_mm_less<scimatrix,cimatrix,cinterval>(M1.A,M2);
06348 }
06349
06350 inline bool operator<(const srmatrix_slice& M1, const cimatrix& M2) {
06351 return spf_mm_less<srmatrix,cimatrix,cinterval>(M1.A,M2);
06352 }
06353
06354 inline bool operator<(const scmatrix_slice& M1, const cimatrix& M2) {
06355 return spf_mm_less<scmatrix,cimatrix,cinterval>(M1.A,M2);
06356 }
06357
06358 inline bool operator<(const simatrix_slice& M1, const cimatrix& M2) {
06359 return spf_mm_less<simatrix,cimatrix,cinterval>(M1.A,M2);
06360 }
06361
06362 inline bool operator<(const cimatrix& M1, const simatrix_slice& M2) {
06363 return fsp_mm_less<cimatrix,simatrix,cinterval>(M1,M2.A);
06364 }
06365
06366 inline bool operator<(const cimatrix& M1, const scimatrix_slice& M2) {
06367 return fsp_mm_less<cimatrix,scimatrix,cinterval>(M1,M2.A);
06368 }
06369
06370 inline bool operator<(const rmatrix& M1, const scimatrix_slice& M2) {
06371 return fsp_mm_less<rmatrix,scimatrix,cinterval>(M1,M2.A);
06372 }
06373
06374 inline bool operator<(const imatrix& M1, const scimatrix_slice& M2) {
06375 return fsp_mm_less<imatrix,scimatrix,cinterval>(M1,M2.A);
06376 }
06377
06378 inline bool operator<(const cmatrix& M1, const scimatrix_slice& M2) {
06379 return fsp_mm_less<cmatrix,scimatrix,cinterval>(M1,M2.A);
06380 }
06381
06382 inline bool operator<(const cimatrix_slice& M1, const simatrix_slice& M2) {
06383 return fsp_mm_less<cimatrix_slice,simatrix,cinterval>(M1,M2.A);
06384 }
06385
06386 inline bool operator<(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06387 return fsp_mm_less<cimatrix_slice,scimatrix,cinterval>(M1,M2.A);
06388 }
06389
06390 inline bool operator<(const rmatrix_slice& M1, const scimatrix_slice& M2) {
06391 return fsp_mm_less<rmatrix_slice,scimatrix,cinterval>(M1,M2.A);
06392 }
06393
06394 inline bool operator<(const imatrix_slice& M1, const scimatrix_slice& M2) {
06395 return fsp_mm_less<imatrix_slice,scimatrix,cinterval>(M1,M2.A);
06396 }
06397
06398 inline bool operator<(const cmatrix_slice& M1, const scimatrix_slice& M2) {
06399 return fsp_mm_less<cmatrix_slice,scimatrix,cinterval>(M1,M2.A);
06400 }
06401
06402 inline bool operator<(const scimatrix_slice& M1, const imatrix_slice& M2) {
06403 return spf_mm_less<scimatrix,imatrix_slice,cinterval>(M1.A,M2);
06404 }
06405
06406 inline bool operator<(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06407 return spf_mm_less<scimatrix,cimatrix_slice,cinterval>(M1.A,M2);
06408 }
06409
06410 inline bool operator<(const srmatrix_slice& M1, const cimatrix_slice& M2) {
06411 return spf_mm_less<srmatrix,cimatrix_slice,cinterval>(M1.A,M2);
06412 }
06413
06414 inline bool operator<(const simatrix_slice& M1, const cimatrix_slice& M2) {
06415 return spf_mm_less<simatrix,cimatrix_slice,cinterval>(M1.A,M2);
06416 }
06417
06418 inline bool operator<(const scmatrix_slice& M1, const cimatrix_slice& M2) {
06419 return spf_mm_less<scmatrix,cimatrix_slice,cinterval>(M1.A,M2);
06420 }
06421
06422 inline bool operator<=(const scimatrix_slice& M1, const simatrix_slice& M2) {
06423 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1.A,M2.A);
06424 }
06425
06426 inline bool operator<=(const scimatrix_slice& M1, const scimatrix_slice& M2) {
06427 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1.A,M2.A);
06428 }
06429
06430 inline bool operator<=(const srmatrix_slice& M1, const scimatrix_slice& M2) {
06431 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1.A,M2.A);
06432 }
06433
06434 inline bool operator<=(const scmatrix_slice& M1, const scimatrix_slice& M2) {
06435 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1.A,M2.A);
06436 }
06437
06438 inline bool operator<=(const simatrix_slice& M1, const scimatrix_slice& M2) {
06439 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1.A,M2.A);
06440 }
06441
06442 inline bool operator<=(const scimatrix_slice& M1, const simatrix& M2) {
06443 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1.A,M2);
06444 }
06445
06446 inline bool operator<=(const scimatrix_slice& M1, const scimatrix& M2) {
06447 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1.A,M2);
06448 }
06449
06450 inline bool operator<=(const srmatrix_slice& M1, const scimatrix& M2) {
06451 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1.A,M2);
06452 }
06453
06454 inline bool operator<=(const scmatrix_slice& M1, const scimatrix& M2) {
06455 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1.A,M2);
06456 }
06457
06458 inline bool operator<=(const simatrix_slice& M1, const scimatrix& M2) {
06459 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1.A,M2);
06460 }
06461
06462 inline bool operator<=(const scimatrix& M1, const simatrix_slice& M2) {
06463 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1,M2.A);
06464 }
06465
06466 inline bool operator<=(const scimatrix& M1, const scimatrix_slice& M2) {
06467 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1,M2.A);
06468 }
06469
06470 inline bool operator<=(const srmatrix& M1, const scimatrix_slice& M2) {
06471 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1,M2.A);
06472 }
06473
06474 inline bool operator<=(const scmatrix& M1, const scimatrix_slice& M2) {
06475 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1,M2.A);
06476 }
06477
06478 inline bool operator<=(const simatrix& M1, const scimatrix_slice& M2) {
06479 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1,M2.A);
06480 }
06481
06482 inline bool operator<=(const scimatrix_slice& M1, const imatrix& M2) {
06483 return spf_mm_leq<scimatrix,imatrix,cinterval>(M1.A,M2);
06484 }
06485
06486 inline bool operator<=(const scimatrix_slice& M1, const cimatrix& M2) {
06487 return spf_mm_leq<scimatrix,cimatrix,cinterval>(M1.A,M2);
06488 }
06489
06490 inline bool operator<=(const srmatrix_slice& M1, const cimatrix& M2) {
06491 return spf_mm_leq<srmatrix,cimatrix,cinterval>(M1.A,M2);
06492 }
06493
06494 inline bool operator<=(const scmatrix_slice& M1, const cimatrix& M2) {
06495 return spf_mm_leq<scmatrix,cimatrix,cinterval>(M1.A,M2);
06496 }
06497
06498 inline bool operator<=(const simatrix_slice& M1, const cimatrix& M2) {
06499 return spf_mm_leq<simatrix,cimatrix,cinterval>(M1.A,M2);
06500 }
06501
06502 inline bool operator<=(const cimatrix& M1, const simatrix_slice& M2) {
06503 return fsp_mm_leq<cimatrix,simatrix,cinterval>(M1,M2.A);
06504 }
06505
06506 inline bool operator<=(const cimatrix& M1, const scimatrix_slice& M2) {
06507 return fsp_mm_leq<cimatrix,scimatrix,cinterval>(M1,M2.A);
06508 }
06509
06510 inline bool operator<=(const rmatrix& M1, const scimatrix_slice& M2) {
06511 return fsp_mm_leq<rmatrix,scimatrix,cinterval>(M1,M2.A);
06512 }
06513
06514 inline bool operator<=(const imatrix& M1, const scimatrix_slice& M2) {
06515 return fsp_mm_leq<imatrix,scimatrix,cinterval>(M1,M2.A);
06516 }
06517
06518 inline bool operator<=(const cmatrix& M1, const scimatrix_slice& M2) {
06519 return fsp_mm_leq<cmatrix,scimatrix,cinterval>(M1,M2.A);
06520 }
06521
06522 inline bool operator<=(const cimatrix_slice& M1, const simatrix_slice& M2) {
06523 return fsp_mm_leq<cimatrix_slice,simatrix,cinterval>(M1,M2.A);
06524 }
06525
06526 inline bool operator<=(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06527 return fsp_mm_leq<cimatrix_slice,scimatrix,cinterval>(M1,M2.A);
06528 }
06529
06530 inline bool operator<=(const rmatrix_slice& M1, const scimatrix_slice& M2) {
06531 return fsp_mm_leq<rmatrix_slice,scimatrix,cinterval>(M1,M2.A);
06532 }
06533
06534 inline bool operator<=(const imatrix_slice& M1, const scimatrix_slice& M2) {
06535 return fsp_mm_leq<imatrix_slice,scimatrix,cinterval>(M1,M2.A);
06536 }
06537
06538 inline bool operator<=(const cmatrix_slice& M1, const scimatrix_slice& M2) {
06539 return fsp_mm_leq<cmatrix_slice,scimatrix,cinterval>(M1,M2.A);
06540 }
06541
06542 inline bool operator<=(const scimatrix_slice& M1, const imatrix_slice& M2) {
06543 return spf_mm_leq<scimatrix,imatrix_slice,cinterval>(M1.A,M2);
06544 }
06545
06546 inline bool operator<=(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06547 return spf_mm_leq<scimatrix,cimatrix_slice,cinterval>(M1.A,M2);
06548 }
06549
06550 inline bool operator<=(const srmatrix_slice& M1, const cimatrix_slice& M2) {
06551 return spf_mm_leq<srmatrix,cimatrix_slice,cinterval>(M1.A,M2);
06552 }
06553
06554 inline bool operator<=(const simatrix_slice& M1, const cimatrix_slice& M2) {
06555 return spf_mm_leq<simatrix,cimatrix_slice,cinterval>(M1.A,M2);
06556 }
06557
06558 inline bool operator<=(const scmatrix_slice& M1, const cimatrix_slice& M2) {
06559 return spf_mm_leq<scmatrix,cimatrix_slice,cinterval>(M1.A,M2);
06560 }
06561
06562 inline bool operator>(const scimatrix_slice& M1, const srmatrix_slice& M2) {
06563 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1.A,M2.A);
06564 }
06565
06566 inline bool operator>(const scimatrix_slice& M1, const scmatrix_slice& M2) {
06567 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1.A,M2.A);
06568 }
06569
06570 inline bool operator>(const scimatrix_slice& M1, const simatrix_slice& M2) {
06571 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1.A,M2.A);
06572 }
06573
06574 inline bool operator>(const scimatrix_slice& M1, const scimatrix_slice& M2) {
06575 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1.A,M2.A);
06576 }
06577
06578 inline bool operator>(const simatrix_slice& M1, const scimatrix_slice& M2) {
06579 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1.A,M2.A);
06580 }
06581
06582 inline bool operator>(const scimatrix_slice& M1, const srmatrix& M2) {
06583 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1.A,M2);
06584 }
06585
06586 inline bool operator>(const scimatrix_slice& M1, const scmatrix& M2) {
06587 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1.A,M2);
06588 }
06589
06590 inline bool operator>(const scimatrix_slice& M1, const simatrix& M2) {
06591 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1.A,M2);
06592 }
06593
06594 inline bool operator>(const scimatrix_slice& M1, const scimatrix& M2) {
06595 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1.A,M2);
06596 }
06597
06598 inline bool operator>(const simatrix_slice& M1, const scimatrix& M2) {
06599 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1.A,M2);
06600 }
06601
06602 inline bool operator>(const scimatrix& M1, const srmatrix_slice& M2) {
06603 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1,M2.A);
06604 }
06605
06606 inline bool operator>(const scimatrix& M1, const scmatrix_slice& M2) {
06607 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1,M2.A);
06608 }
06609
06610 inline bool operator>(const scimatrix& M1, const simatrix_slice& M2) {
06611 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1,M2.A);
06612 }
06613
06614 inline bool operator>(const scimatrix& M1, const scimatrix_slice& M2) {
06615 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1,M2.A);
06616 }
06617
06618 inline bool operator>(const simatrix& M1, const scimatrix_slice& M2) {
06619 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1,M2.A);
06620 }
06621
06622 inline bool operator>(const scimatrix_slice& M1, const rmatrix& M2) {
06623 return spf_mm_greater<scimatrix,rmatrix,cinterval>(M1.A,M2);
06624 }
06625
06626 inline bool operator>(const scimatrix_slice& M1, const cmatrix& M2) {
06627 return spf_mm_greater<scimatrix,cmatrix,cinterval>(M1.A,M2);
06628 }
06629
06630 inline bool operator>(const scimatrix_slice& M1, const imatrix& M2) {
06631 return spf_mm_greater<scimatrix,imatrix,cinterval>(M1.A,M2);
06632 }
06633
06634 inline bool operator>(const scimatrix_slice& M1, const cimatrix& M2) {
06635 return spf_mm_greater<scimatrix,cimatrix,cinterval>(M1.A,M2);
06636 }
06637
06638 inline bool operator>(const simatrix_slice& M1, const cimatrix& M2) {
06639 return spf_mm_greater<simatrix,cimatrix,cinterval>(M1.A,M2);
06640 }
06641
06642 inline bool operator>(const cimatrix& M1, const srmatrix_slice& M2) {
06643 return fsp_mm_greater<cimatrix,srmatrix,cinterval>(M1,M2.A);
06644 }
06645
06646 inline bool operator>(const cimatrix& M1, const simatrix_slice& M2) {
06647 return fsp_mm_greater<cimatrix,simatrix,cinterval>(M1,M2.A);
06648 }
06649
06650 inline bool operator>(const cimatrix& M1, const scmatrix_slice& M2) {
06651 return fsp_mm_greater<cimatrix,scmatrix,cinterval>(M1,M2.A);
06652 }
06653
06654 inline bool operator>(const cimatrix& M1, const scimatrix_slice& M2) {
06655 return fsp_mm_greater<cimatrix,scimatrix,cinterval>(M1,M2.A);
06656 }
06657
06658 inline bool operator>(const imatrix& M1, const scimatrix_slice& M2) {
06659 return fsp_mm_greater<imatrix,scimatrix,cinterval>(M1,M2.A);
06660 }
06661
06662 inline bool operator>(const cimatrix_slice& M1, const srmatrix_slice& M2) {
06663 return fsp_mm_greater<cimatrix_slice,srmatrix,cinterval>(M1,M2.A);
06664 }
06665
06666 inline bool operator>(const cimatrix_slice& M1, const simatrix_slice& M2) {
06667 return fsp_mm_greater<cimatrix_slice,simatrix,cinterval>(M1,M2.A);
06668 }
06669
06670 inline bool operator>(const cimatrix_slice& M1, const scmatrix_slice& M2) {
06671 return fsp_mm_greater<cimatrix_slice,scmatrix,cinterval>(M1,M2.A);
06672 }
06673
06674 inline bool operator>(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06675 return fsp_mm_greater<cimatrix_slice,scimatrix,cinterval>(M1,M2.A);
06676 }
06677
06678 inline bool operator>(const imatrix_slice& M1, const scimatrix_slice& M2) {
06679 return fsp_mm_greater<imatrix_slice,scimatrix,cinterval>(M1,M2.A);
06680 }
06681
06682 inline bool operator>(const scimatrix_slice& M1, const rmatrix_slice& M2) {
06683 return spf_mm_greater<scimatrix,rmatrix_slice,cinterval>(M1.A,M2);
06684 }
06685
06686 inline bool operator>(const scimatrix_slice& M1, const cmatrix_slice& M2) {
06687 return spf_mm_greater<scimatrix,cmatrix_slice,cinterval>(M1.A,M2);
06688 }
06689
06690 inline bool operator>(const scimatrix_slice& M1, const imatrix_slice& M2) {
06691 return spf_mm_greater<scimatrix,imatrix_slice,cinterval>(M1.A,M2);
06692 }
06693
06694 inline bool operator>(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06695 return spf_mm_greater<scimatrix,cimatrix_slice,cinterval>(M1.A,M2);
06696 }
06697
06698 inline bool operator>(const simatrix_slice& M1, const cimatrix_slice& M2) {
06699 return spf_mm_greater<simatrix,cimatrix_slice,cinterval>(M1.A,M2);
06700 }
06701
06702 inline bool operator>=(const scimatrix_slice& M1, const srmatrix_slice& M2) {
06703 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1.A,M2.A);
06704 }
06705
06706 inline bool operator>=(const scimatrix_slice& M1, const scmatrix_slice& M2) {
06707 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1.A,M2.A);
06708 }
06709
06710 inline bool operator>=(const scimatrix_slice& M1, const simatrix_slice& M2) {
06711 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1.A,M2.A);
06712 }
06713
06714 inline bool operator>=(const scimatrix_slice& M1, const scimatrix_slice& M2) {
06715 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1.A,M2.A);
06716 }
06717
06718 inline bool operator>=(const simatrix_slice& M1, const scimatrix_slice& M2) {
06719 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1.A,M2.A);
06720 }
06721
06722 inline bool operator>=(const scimatrix_slice& M1, const srmatrix& M2) {
06723 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1.A,M2);
06724 }
06725
06726 inline bool operator>=(const scimatrix_slice& M1, const scmatrix& M2) {
06727 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1.A,M2);
06728 }
06729
06730 inline bool operator>=(const scimatrix_slice& M1, const simatrix& M2) {
06731 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1.A,M2);
06732 }
06733
06734 inline bool operator>=(const scimatrix_slice& M1, const scimatrix& M2) {
06735 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1.A,M2);
06736 }
06737
06738 inline bool operator>=(const simatrix_slice& M1, const scimatrix& M2) {
06739 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1.A,M2);
06740 }
06741
06742 inline bool operator>=(const scimatrix& M1, const srmatrix_slice& M2) {
06743 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1,M2.A);
06744 }
06745
06746 inline bool operator>=(const scimatrix& M1, const scmatrix_slice& M2) {
06747 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1,M2.A);
06748 }
06749
06750 inline bool operator>=(const scimatrix& M1, const simatrix_slice& M2) {
06751 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1,M2.A);
06752 }
06753
06754 inline bool operator>=(const scimatrix& M1, const scimatrix_slice& M2) {
06755 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1,M2.A);
06756 }
06757
06758 inline bool operator>=(const simatrix& M1, const scimatrix_slice& M2) {
06759 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1,M2.A);
06760 }
06761
06762 inline bool operator>=(const scimatrix_slice& M1, const rmatrix& M2) {
06763 return spf_mm_geq<scimatrix,rmatrix,cinterval>(M1.A,M2);
06764 }
06765
06766 inline bool operator>=(const scimatrix_slice& M1, const cmatrix& M2) {
06767 return spf_mm_geq<scimatrix,cmatrix,cinterval>(M1.A,M2);
06768 }
06769
06770 inline bool operator>=(const scimatrix_slice& M1, const imatrix& M2) {
06771 return spf_mm_geq<scimatrix,imatrix,cinterval>(M1.A,M2);
06772 }
06773
06774 inline bool operator>=(const scimatrix_slice& M1, const cimatrix& M2) {
06775 return spf_mm_geq<scimatrix,cimatrix,cinterval>(M1.A,M2);
06776 }
06777
06778 inline bool operator>=(const simatrix_slice& M1, const cimatrix& M2) {
06779 return spf_mm_geq<simatrix,cimatrix,cinterval>(M1.A,M2);
06780 }
06781
06782 inline bool operator>=(const cimatrix& M1, const srmatrix_slice& M2) {
06783 return fsp_mm_geq<cimatrix,srmatrix,cinterval>(M1,M2.A);
06784 }
06785
06786 inline bool operator>=(const cimatrix& M1, const simatrix_slice& M2) {
06787 return fsp_mm_geq<cimatrix,simatrix,cinterval>(M1,M2.A);
06788 }
06789
06790 inline bool operator>=(const cimatrix& M1, const scmatrix_slice& M2) {
06791 return fsp_mm_geq<cimatrix,scmatrix,cinterval>(M1,M2.A);
06792 }
06793
06794 inline bool operator>=(const cimatrix& M1, const scimatrix_slice& M2) {
06795 return fsp_mm_geq<cimatrix,scimatrix,cinterval>(M1,M2.A);
06796 }
06797
06798 inline bool operator>=(const imatrix& M1, const scimatrix_slice& M2) {
06799 return fsp_mm_geq<imatrix,scimatrix,cinterval>(M1,M2.A);
06800 }
06801
06802 inline bool operator>=(const cimatrix_slice& M1, const srmatrix_slice& M2) {
06803 return fsp_mm_geq<cimatrix_slice,srmatrix,cinterval>(M1,M2.A);
06804 }
06805
06806 inline bool operator>=(const cimatrix_slice& M1, const simatrix_slice& M2) {
06807 return fsp_mm_geq<cimatrix_slice,simatrix,cinterval>(M1,M2.A);
06808 }
06809
06810 inline bool operator>=(const cimatrix_slice& M1, const scmatrix_slice& M2) {
06811 return fsp_mm_geq<cimatrix_slice,scmatrix,cinterval>(M1,M2.A);
06812 }
06813
06814 inline bool operator>=(const cimatrix_slice& M1, const scimatrix_slice& M2) {
06815 return fsp_mm_geq<cimatrix_slice,scimatrix,cinterval>(M1,M2.A);
06816 }
06817
06818 inline bool operator>=(const imatrix_slice& M1, const scimatrix_slice& M2) {
06819 return fsp_mm_geq<imatrix_slice,scimatrix,cinterval>(M1,M2.A);
06820 }
06821
06822 inline bool operator>=(const scimatrix_slice& M1, const rmatrix_slice& M2) {
06823 return spf_mm_geq<scimatrix,rmatrix_slice,cinterval>(M1.A,M2);
06824 }
06825
06826 inline bool operator>=(const scimatrix_slice& M1, const cmatrix_slice& M2) {
06827 return spf_mm_geq<scimatrix,cmatrix_slice,cinterval>(M1.A,M2);
06828 }
06829
06830 inline bool operator>=(const scimatrix_slice& M1, const imatrix_slice& M2) {
06831 return spf_mm_geq<scimatrix,imatrix_slice,cinterval>(M1.A,M2);
06832 }
06833
06834 inline bool operator>=(const scimatrix_slice& M1, const cimatrix_slice& M2) {
06835 return spf_mm_geq<scimatrix,cimatrix_slice,cinterval>(M1.A,M2);
06836 }
06837
06838 inline bool operator>=(const simatrix_slice& M1, const cimatrix_slice& M2) {
06839 return spf_mm_geq<simatrix,cimatrix_slice,cinterval>(M1.A,M2);
06840 }
06841
06842 inline bool operator!(const scimatrix_slice& M) {
06843 return sp_m_not(M.A);
06844 }
06845
06846 inline std::ostream& operator<<(std::ostream& os, const scimatrix_slice& M) {
06847 return sp_m_output<scimatrix,cinterval>(os, M.A);
06848 }
06849
06850 inline std::istream& operator>>(std::istream& is, scimatrix_slice& M) {
06851 scimatrix tmp(M.A.m,M.A.n);
06852 is >> tmp;
06853 M = tmp;
06854 return is;
06855 }
06856
06857
06858
06859 class scimatrix_subv {
06860 private:
06861 scimatrix_slice dat;
06862 bool row;
06863 int index;
06864
06865 scimatrix_subv(scimatrix& A, bool r, int i, int j, int k, int l) : dat(A,i,j,k,l), row(r) {
06866 if(row) index=i; else index=k;
06867 }
06868
06869 scimatrix_subv(const scimatrix& A, bool r, int i, int j, int k, int l) : dat(A,i,j,k,l), row(r) {
06870 if(row) index=i; else index=k;
06871 }
06872
06873 public:
06874 cinterval& operator[](const int i) {
06875 if(row) {
06876 #if(CXSC_INDEX_CHECK)
06877 if(i<dat.A.lb2 || i>dat.A.ub2)
06878 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)"));
06879 #endif
06880 return dat.element(index,i);
06881 } else {
06882 #if(CXSC_INDEX_CHECK)
06883 if(i<dat.A.lb1 || i>dat.A.ub1)
06884 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)"));
06885 #endif
06886 return dat.element(i,index);
06887 }
06888 }
06889
06890 const cinterval operator[](const int i) const {
06891 if(row) {
06892 #if(CXSC_INDEX_CHECK)
06893 if(i<dat.A.lb2 || i>dat.A.ub2)
06894 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)"));
06895 #endif
06896 return dat(index,i);
06897 } else {
06898 #if(CXSC_INDEX_CHECK)
06899 if(i<dat.A.lb1 || i>dat.A.ub1)
06900 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)"));
06901 #endif
06902 return dat(i,index);
06903 }
06904 }
06905
06906 scimatrix_subv& operator=(const real& v) {
06907 return sv_vs_assign(*this,v);
06908 }
06909
06910 scimatrix_subv& operator=(const complex& v) {
06911 return sv_vs_assign(*this,v);
06912 }
06913
06914 scimatrix_subv& operator=(const interval& v) {
06915 return sv_vs_assign(*this,v);
06916 }
06917
06918 scimatrix_subv& operator=(const cinterval& v) {
06919 return sv_vs_assign(*this,v);
06920 }
06921
06922 scimatrix_subv& operator=(const srvector& v) {
06923 return svsp_vv_assign(*this,v);
06924 }
06925
06926 scimatrix_subv& operator=(const scvector& v) {
06927 return svsp_vv_assign(*this,v);
06928 }
06929
06930 scimatrix_subv& operator=(const sivector& v) {
06931 return svsp_vv_assign(*this,v);
06932 }
06933
06934 scimatrix_subv& operator=(const scivector& v) {
06935 return svsp_vv_assign(*this,v);
06936 }
06937
06938 scimatrix_subv& operator=(const srvector_slice& v) {
06939 return svsl_vv_assign(*this,v);
06940 }
06941
06942 scimatrix_subv& operator=(const scvector_slice& v) {
06943 return svsl_vv_assign(*this,v);
06944 }
06945
06946 scimatrix_subv& operator=(const sivector_slice& v) {
06947 return svsl_vv_assign(*this,v);
06948 }
06949
06950 scimatrix_subv& operator=(const scivector_slice& v) {
06951 return svsl_vv_assign(*this,v);
06952 }
06953
06954 scimatrix_subv& operator=(const rvector& v) {
06955 return svf_vv_assign(*this,v);
06956 }
06957
06958 scimatrix_subv& operator=(const cvector& v) {
06959 return svf_vv_assign(*this,v);
06960 }
06961
06962 scimatrix_subv& operator=(const ivector& v) {
06963 return svf_vv_assign(*this,v);
06964 }
06965
06966 scimatrix_subv& operator=(const civector& v) {
06967 return svf_vv_assign(*this,v);
06968 }
06969
06970 scimatrix_subv& operator=(const rvector_slice& v) {
06971 return svf_vv_assign(*this,v);
06972 }
06973
06974 scimatrix_subv& operator=(const cvector_slice& v) {
06975 return svf_vv_assign(*this,v);
06976 }
06977
06978 scimatrix_subv& operator=(const ivector_slice& v) {
06979 return svf_vv_assign(*this,v);
06980 }
06981
06982 scimatrix_subv& operator=(const civector_slice& v) {
06983 return svf_vv_assign(*this,v);
06984 }
06985
06986 scimatrix_subv& operator=(const srmatrix_subv& v) {
06987 return svsp_vv_assign(*this,srvector(v));
06988 }
06989
06990 scimatrix_subv& operator=(const simatrix_subv& v) {
06991 return svsp_vv_assign(*this,sivector(v));
06992 }
06993
06994 scimatrix_subv& operator=(const scmatrix_subv& v) {
06995 return svsp_vv_assign(*this,scvector(v));
06996 }
06997
06998 scimatrix_subv& operator=(const scimatrix_subv& v) {
06999 return svsp_vv_assign(*this,scivector(v));
07000 }
07001
07002 scimatrix_subv& operator*=(const real&);
07003 scimatrix_subv& operator*=(const complex&);
07004 scimatrix_subv& operator*=(const interval&);
07005 scimatrix_subv& operator*=(const cinterval&);
07006 scimatrix_subv& operator/=(const real&);
07007 scimatrix_subv& operator/=(const complex&);
07008 scimatrix_subv& operator/=(const interval&);
07009 scimatrix_subv& operator/=(const cinterval&);
07010 scimatrix_subv& operator+=(const srvector&);
07011 scimatrix_subv& operator+=(const srvector_slice&);
07012 scimatrix_subv& operator+=(const rvector&);
07013 scimatrix_subv& operator+=(const rvector_slice&);
07014 scimatrix_subv& operator-=(const srvector&);
07015 scimatrix_subv& operator-=(const srvector_slice&);
07016 scimatrix_subv& operator-=(const rvector&);
07017 scimatrix_subv& operator-=(const rvector_slice&);
07018 scimatrix_subv& operator+=(const scvector&);
07019 scimatrix_subv& operator+=(const scvector_slice&);
07020 scimatrix_subv& operator+=(const cvector&);
07021 scimatrix_subv& operator+=(const cvector_slice&);
07022 scimatrix_subv& operator-=(const scvector&);
07023 scimatrix_subv& operator-=(const scvector_slice&);
07024 scimatrix_subv& operator-=(const cvector&);
07025 scimatrix_subv& operator-=(const cvector_slice&);
07026 scimatrix_subv& operator+=(const sivector&);
07027 scimatrix_subv& operator+=(const sivector_slice&);
07028 scimatrix_subv& operator+=(const ivector&);
07029 scimatrix_subv& operator+=(const ivector_slice&);
07030 scimatrix_subv& operator-=(const sivector&);
07031 scimatrix_subv& operator-=(const sivector_slice&);
07032 scimatrix_subv& operator-=(const ivector&);
07033 scimatrix_subv& operator-=(const ivector_slice&);
07034 scimatrix_subv& operator+=(const scivector&);
07035 scimatrix_subv& operator+=(const scivector_slice&);
07036 scimatrix_subv& operator+=(const civector&);
07037 scimatrix_subv& operator+=(const civector_slice&);
07038 scimatrix_subv& operator-=(const scivector&);
07039 scimatrix_subv& operator-=(const scivector_slice&);
07040 scimatrix_subv& operator-=(const civector&);
07041 scimatrix_subv& operator-=(const civector_slice&);
07042 scimatrix_subv& operator|=(const srvector&);
07043 scimatrix_subv& operator|=(const srvector_slice&);
07044 scimatrix_subv& operator|=(const rvector&);
07045 scimatrix_subv& operator|=(const rvector_slice&);
07046 scimatrix_subv& operator|=(const scvector&);
07047 scimatrix_subv& operator|=(const scvector_slice&);
07048 scimatrix_subv& operator|=(const cvector&);
07049 scimatrix_subv& operator|=(const cvector_slice&);
07050 scimatrix_subv& operator|=(const sivector&);
07051 scimatrix_subv& operator|=(const sivector_slice&);
07052 scimatrix_subv& operator|=(const ivector&);
07053 scimatrix_subv& operator|=(const ivector_slice&);
07054 scimatrix_subv& operator|=(const scivector&);
07055 scimatrix_subv& operator|=(const scivector_slice&);
07056 scimatrix_subv& operator|=(const civector&);
07057 scimatrix_subv& operator|=(const civector_slice&);
07058
07059 friend scivector operator-(const scimatrix_subv&);
07060
07061 friend std::istream& operator>>(std::istream&, scimatrix_subv&);
07062
07063 friend int Lb(const scimatrix_subv&);
07064 friend int Ub(const scimatrix_subv&);
07065 friend int VecLen(const scimatrix_subv&);
07066 friend sivector Re(const scimatrix_subv&);
07067 friend sivector Im(const scimatrix_subv&);
07068 friend scvector Inf(const scimatrix_subv&);
07069 friend scvector Sup(const scimatrix_subv&);
07070 friend srvector InfRe(const scimatrix_subv&);
07071 friend srvector InfIm(const scimatrix_subv&);
07072 friend srvector SupRe(const scimatrix_subv&);
07073 friend srvector SupIm(const scimatrix_subv&);
07074
07075 friend class srvector;
07076 friend class srmatrix;
07077 friend class srmatrix_slice;
07078 friend class scvector;
07079 friend class scmatrix;
07080 friend class scmatrix_slice;
07081 friend class sivector;
07082 friend class simatrix;
07083 friend class simatrix_slice;
07084 friend class scivector;
07085 friend class scimatrix;
07086 friend class scimatrix_slice;
07087
07088 #include "vector_friend_declarations.inl"
07089 };
07090
07091 inline int Lb(const scimatrix_subv& S) {
07092 if(S.row)
07093 return Lb(S.dat, 2);
07094 else
07095 return Lb(S.dat, 1);
07096 }
07097
07098 inline int Ub(const scimatrix_subv& S) {
07099 if(S.row)
07100 return Ub(S.dat, 2);
07101 else
07102 return Ub(S.dat, 1);
07103 }
07104
07105 inline int VecLen(const scimatrix_subv& S) {
07106 return Ub(S)-Lb(S)+1;
07107 }
07108
07109 inline sivector Re(const scimatrix_subv& S) {
07110 return Re(scivector(S));
07111 }
07112
07113 inline sivector Im(const scimatrix_subv& S) {
07114 return Im(scivector(S));
07115 }
07116
07117 inline scivector conj(const scimatrix_subv& S) {
07118 return conj(scivector(S));
07119 }
07120
07121 inline sivector abs(const scimatrix_subv& S) {
07122 return abs(scivector(S));
07123 }
07124
07125 inline scvector mid(const scimatrix_subv& S) {
07126 return mid(scivector(S));
07127 }
07128
07129 inline scvector diam(const scimatrix_subv& S) {
07130 return diam(scivector(S));
07131 }
07132
07133 inline scvector Inf(const scimatrix_subv& S) {
07134 return Inf(scivector(S));
07135 }
07136
07137 inline scvector Sup(const scimatrix_subv& S) {
07138 return Sup(scivector(S));
07139 }
07140
07141 inline srvector InfRe(const scimatrix_subv& S) {
07142 return InfRe(scivector(S));
07143 }
07144
07145 inline srvector InfIm(const scimatrix_subv& S) {
07146 return InfIm(scivector(S));
07147 }
07148
07149 inline srvector SupRe(const scimatrix_subv& S) {
07150 return SupRe(scivector(S));
07151 }
07152
07153 inline srvector SupIm(const scimatrix_subv& S) {
07154 return SupIm(scivector(S));
07155 }
07156
07157 inline std::ostream& operator<<(std::ostream& os, const scimatrix_subv& v) {
07158 os << scivector(v);
07159 return os;
07160 }
07161
07162 inline std::istream& operator>>(std::istream& is, scimatrix_subv& v) {
07163 int n=0;
07164 if(v.row) n=v.dat.A.n; else n=v.dat.A.m;
07165 scivector tmp(n);
07166 is >> tmp;
07167 v = tmp;
07168 return is;
07169 }
07170
07171 inline scimatrix_subv scimatrix::operator[](const cxscmatrix_column& c) {
07172 #if(CXSC_INDEX_CHECK)
07173 if(c.col()<lb2 || c.col()>ub2)
07174 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const cxscmatrix_column&)"));
07175 #endif
07176 return scimatrix_subv(*this, false, lb1, ub1, c.col(), c.col());
07177 }
07178
07179 inline scimatrix_subv scimatrix::operator[](const int i) {
07180 #if(CXSC_INDEX_CHECK)
07181 if(i<lb1 || i>ub1)
07182 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const int)"));
07183 #endif
07184 return scimatrix_subv(*this, true, i, i, lb2, ub2);
07185 }
07186
07187 inline const scimatrix_subv scimatrix::operator[](const cxscmatrix_column& c) const{
07188 #if(CXSC_INDEX_CHECK)
07189 if(c.col()<lb2 || c.col()>ub2)
07190 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const cxscmatrix_column&)"));
07191 #endif
07192 return scimatrix_subv(*this, false, lb1, ub1, c.col(), c.col());
07193 }
07194
07195 inline const scimatrix_subv scimatrix::operator[](const int i) const{
07196 #if(CXSC_INDEX_CHECK)
07197 if(i<lb1 || i>ub1)
07198 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const int)"));
07199 #endif
07200 return scimatrix_subv(*this, true, i, i, lb2, ub2);
07201 }
07202
07203 inline scimatrix_subv scimatrix_slice::operator[](const int i) {
07204 #if(CXSC_INDEX_CHECK)
07205 if(i<A.lb1 || i>A.ub1)
07206 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const int)"));
07207 #endif
07208 return scimatrix_subv(*M, true, i, i, A.lb2, A.ub2);
07209 }
07210
07211 inline scimatrix_subv scimatrix_slice::operator[](const cxscmatrix_column& c) {
07212 #if(CXSC_INDEX_CHECK)
07213 if(c.col()<A.lb2 || c.col()>A.ub2)
07214 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const cxscmatrix_column&)"));
07215 #endif
07216 return scimatrix_subv(*M, false, A.lb1, A.ub1, c.col(), c.col());
07217 }
07218
07219 inline const scimatrix_subv scimatrix_slice::operator[](const int i) const {
07220 #if(CXSC_INDEX_CHECK)
07221 if(i<A.lb1 || i>A.ub1)
07222 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const int)"));
07223 #endif
07224 return scimatrix_subv(*M, true, i, i, A.lb2, A.ub2);
07225 }
07226
07227 inline const scimatrix_subv scimatrix_slice::operator[](const cxscmatrix_column& c) const {
07228 #if(CXSC_INDEX_CHECK)
07229 if(c.col()<A.lb2 || c.col()>A.ub2)
07230 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const cxscmatrix_column&)"));
07231 #endif
07232 return scimatrix_subv(*M, false, A.lb1, A.ub1, c.col(), c.col());
07233 }
07234
07235 inline scivector::scivector(const scimatrix_subv& A) {
07236 int nnz = A.dat.A.get_nnz();
07237 p.reserve(nnz);
07238 x.reserve(nnz);
07239
07240 if(A.row) {
07241 lb = A.dat.A.lb2;
07242 ub = A.dat.A.ub2;
07243 n = ub-lb+1;
07244
07245 for(int j=0 ; j<n ; j++) {
07246 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) {
07247 p.push_back(j);
07248 x.push_back(A.dat.A.x[k]);
07249 }
07250 }
07251
07252 } else {
07253 lb = A.dat.A.lb1;
07254 ub = A.dat.A.ub1;
07255 n = ub-lb+1;
07256
07257 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) {
07258 p.push_back(A.dat.A.ind[k]);
07259 x.push_back(A.dat.A.x[k]);
07260 }
07261 }
07262 }
07263
07264 inline scivector::scivector(const srmatrix_subv& A) {
07265 int nnz = A.dat.A.get_nnz();
07266 p.reserve(nnz);
07267 x.reserve(nnz);
07268
07269 if(A.row) {
07270 lb = A.dat.A.lb2;
07271 ub = A.dat.A.ub2;
07272 n = ub-lb+1;
07273
07274 for(int j=0 ; j<n ; j++) {
07275 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) {
07276 p.push_back(j);
07277 x.push_back(cinterval(A.dat.A.x[k]));
07278 }
07279 }
07280
07281 } else {
07282 lb = A.dat.A.lb1;
07283 ub = A.dat.A.ub1;
07284 n = ub-lb+1;
07285
07286 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) {
07287 p.push_back(A.dat.A.ind[k]);
07288 x.push_back(cinterval(A.dat.A.x[k]));
07289 }
07290 }
07291 }
07292
07293 inline scivector::scivector(const simatrix_subv& A) {
07294 int nnz = A.dat.A.get_nnz();
07295 p.reserve(nnz);
07296 x.reserve(nnz);
07297
07298 if(A.row) {
07299 lb = A.dat.A.lb2;
07300 ub = A.dat.A.ub2;
07301 n = ub-lb+1;
07302
07303 for(int j=0 ; j<n ; j++) {
07304 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) {
07305 p.push_back(j);
07306 x.push_back(cinterval(A.dat.A.x[k]));
07307 }
07308 }
07309
07310 } else {
07311 lb = A.dat.A.lb1;
07312 ub = A.dat.A.ub1;
07313 n = ub-lb+1;
07314
07315 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) {
07316 p.push_back(A.dat.A.ind[k]);
07317 x.push_back(cinterval(A.dat.A.x[k]));
07318 }
07319 }
07320 }
07321
07322 inline scivector::scivector(const scmatrix_subv& A) {
07323 int nnz = A.dat.A.get_nnz();
07324 p.reserve(nnz);
07325 x.reserve(nnz);
07326
07327 if(A.row) {
07328 lb = A.dat.A.lb2;
07329 ub = A.dat.A.ub2;
07330 n = ub-lb+1;
07331
07332 for(int j=0 ; j<n ; j++) {
07333 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) {
07334 p.push_back(j);
07335 x.push_back(cinterval(A.dat.A.x[k]));
07336 }
07337 }
07338
07339 } else {
07340 lb = A.dat.A.lb1;
07341 ub = A.dat.A.ub1;
07342 n = ub-lb+1;
07343
07344 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) {
07345 p.push_back(A.dat.A.ind[k]);
07346 x.push_back(cinterval(A.dat.A.x[k]));
07347 }
07348 }
07349 }
07350
07351
07352 inline scivector operator-(const scimatrix_subv& v) {
07353 scivector s(v);
07354 return -s;
07355 }
07356
07357
07358 inline scivector operator/(const scimatrix_subv& v1, const real& v2) {
07359 return scivector(v1) / v2;
07360 }
07361
07362 inline scivector operator/(const scimatrix_subv& v1, const complex& v2) {
07363 return scivector(v1) / v2;
07364 }
07365
07366 inline scivector operator/(const scimatrix_subv& v1, const interval& v2) {
07367 return scivector(v1) / v2;
07368 }
07369
07370 inline scivector operator/(const scimatrix_subv& v1, const cinterval& v2) {
07371 return scivector(v1) / v2;
07372 }
07373
07374 inline scivector operator/(const srmatrix_subv& v1, const cinterval& v2) {
07375 return srvector(v1) / v2;
07376 }
07377
07378 inline scivector operator/(const scmatrix_subv& v1, const cinterval& v2) {
07379 return scvector(v1) / v2;
07380 }
07381
07382 inline scivector operator/(const simatrix_subv& v1, const cinterval& v2) {
07383 return sivector(v1) / v2;
07384 }
07385
07386 inline scivector operator/(const simatrix_subv& v1, const complex& v2) {
07387 return sivector(v1) / v2;
07388 }
07389
07390 inline scivector operator/(const scmatrix_subv& v1, const interval& v2) {
07391 return scvector(v1) / v2;
07392 }
07393
07394 inline scivector operator*(const scimatrix_subv& v1, const real& v2) {
07395 return scivector(v1) * v2;
07396 }
07397
07398 inline scivector operator*(const scimatrix_subv& v1, const complex& v2) {
07399 return scivector(v1) * v2;
07400 }
07401
07402 inline scivector operator*(const scimatrix_subv& v1, const interval& v2) {
07403 return scivector(v1) * v2;
07404 }
07405
07406 inline scivector operator*(const scimatrix_subv& v1, const cinterval& v2) {
07407 return scivector(v1) * v2;
07408 }
07409
07410 inline scivector operator*(const srmatrix_subv& v1, const cinterval& v2) {
07411 return srvector(v1) * v2;
07412 }
07413
07414 inline scivector operator*(const scmatrix_subv& v1, const cinterval& v2) {
07415 return scvector(v1) * v2;
07416 }
07417
07418 inline scivector operator*(const simatrix_subv& v1, const cinterval& v2) {
07419 return sivector(v1) * v2;
07420 }
07421
07422 inline scivector operator*(const simatrix_subv& v1, const complex& v2) {
07423 return sivector(v1) * v2;
07424 }
07425
07426 inline scivector operator*(const scmatrix_subv& v1, const interval& v2) {
07427 return scvector(v1) * v2;
07428 }
07429
07430 inline scivector operator*(const real& v1, const scimatrix_subv& v2) {
07431 return v1 * scivector(v2);
07432 }
07433
07434 inline scivector operator*(const complex& v1, const scimatrix_subv& v2) {
07435 return v1 * scivector(v2);
07436 }
07437
07438 inline scivector operator*(const interval& v1, const scimatrix_subv& v2) {
07439 return v1 * scivector(v2);
07440 }
07441
07442 inline scivector operator*(const cinterval& v1, const scimatrix_subv& v2) {
07443 return v1 * scivector(v2);
07444 }
07445
07446 inline scivector operator*(const cinterval& v1, const srmatrix_subv& v2) {
07447 return v1 * srvector(v2);
07448 }
07449
07450 inline scivector operator*(const cinterval& v1, const scmatrix_subv& v2) {
07451 return v1 * scvector(v2);
07452 }
07453
07454 inline scivector operator*(const cinterval& v1, const simatrix_subv& v2) {
07455 return v1 * sivector(v2);
07456 }
07457
07458 inline scivector operator*(const complex& v1, const simatrix_subv& v2) {
07459 return v1 * sivector(v2);
07460 }
07461
07462 inline scivector operator*(const interval& v1, const scmatrix_subv& v2) {
07463 return v1 * scvector(v2);
07464 }
07465
07466 inline cinterval operator*(const scimatrix_subv& v1, const srvector& v2) {
07467 return scivector(v1) * v2;
07468 }
07469
07470 inline cinterval operator*(const scimatrix_subv& v1, const scvector& v2) {
07471 return scivector(v1) * v2;
07472 }
07473
07474 inline cinterval operator*(const scimatrix_subv& v1, const sivector& v2) {
07475 return scivector(v1) * v2;
07476 }
07477
07478 inline cinterval operator*(const scimatrix_subv& v1, const scivector& v2) {
07479 return scivector(v1) * v2;
07480 }
07481
07482 inline cinterval operator*(const srmatrix_subv& v1, const scivector& v2) {
07483 return srvector(v1) * v2;
07484 }
07485
07486 inline cinterval operator*(const scmatrix_subv& v1, const scivector& v2) {
07487 return scvector(v1) * v2;
07488 }
07489
07490 inline cinterval operator*(const simatrix_subv& v1, const scivector& v2) {
07491 return sivector(v1) * v2;
07492 }
07493
07494 inline cinterval operator*(const scmatrix_subv& v1, const sivector& v2) {
07495 return scvector(v1) * v2;
07496 }
07497
07498 inline cinterval operator*(const simatrix_subv& v1, const scvector& v2) {
07499 return sivector(v1) * v2;
07500 }
07501
07502 inline cinterval operator*(const scimatrix_subv& v1, const srvector_slice& v2) {
07503 return scivector(v1) * v2;
07504 }
07505
07506 inline cinterval operator*(const scimatrix_subv& v1, const scvector_slice& v2) {
07507 return scivector(v1) * v2;
07508 }
07509
07510 inline cinterval operator*(const scimatrix_subv& v1, const sivector_slice& v2) {
07511 return scivector(v1) * v2;
07512 }
07513
07514 inline cinterval operator*(const scimatrix_subv& v1, const scivector_slice& v2) {
07515 return scivector(v1) * v2;
07516 }
07517
07518 inline cinterval operator*(const srmatrix_subv& v1, const scivector_slice& v2) {
07519 return srvector(v1) * v2;
07520 }
07521
07522 inline cinterval operator*(const scmatrix_subv& v1, const scivector_slice& v2) {
07523 return scvector(v1) * v2;
07524 }
07525
07526 inline cinterval operator*(const simatrix_subv& v1, const scivector_slice& v2) {
07527 return sivector(v1) * v2;
07528 }
07529
07530 inline cinterval operator*(const scmatrix_subv& v1, const sivector_slice& v2) {
07531 return scvector(v1) * v2;
07532 }
07533
07534 inline cinterval operator*(const simatrix_subv& v1, const scvector_slice& v2) {
07535 return sivector(v1) * v2;
07536 }
07537
07538 inline cinterval operator*(const scimatrix_subv& v1, const rvector& v2) {
07539 return scivector(v1) * v2;
07540 }
07541
07542 inline cinterval operator*(const scimatrix_subv& v1, const ivector& v2) {
07543 return scivector(v1) * v2;
07544 }
07545
07546 inline cinterval operator*(const scimatrix_subv& v1, const cvector& v2) {
07547 return scivector(v1) * v2;
07548 }
07549
07550 inline cinterval operator*(const scimatrix_subv& v1, const civector& v2) {
07551 return scivector(v1) * v2;
07552 }
07553
07554 inline cinterval operator*(const srmatrix_subv& v1, const civector& v2) {
07555 return srvector(v1) * v2;
07556 }
07557
07558 inline cinterval operator*(const simatrix_subv& v1, const civector& v2) {
07559 return sivector(v1) * v2;
07560 }
07561
07562 inline cinterval operator*(const scmatrix_subv& v1, const civector& v2) {
07563 return scvector(v1) * v2;
07564 }
07565
07566 inline cinterval operator*(const scmatrix_subv& v1, const ivector& v2) {
07567 return scvector(v1) * v2;
07568 }
07569
07570 inline cinterval operator*(const simatrix_subv& v1, const cvector& v2) {
07571 return sivector(v1) * v2;
07572 }
07573
07574 inline cinterval operator*(const scimatrix_subv& v1, const rvector_slice& v2) {
07575 return scivector(v1) * v2;
07576 }
07577
07578 inline cinterval operator*(const scimatrix_subv& v1, const ivector_slice& v2) {
07579 return scivector(v1) * v2;
07580 }
07581
07582 inline cinterval operator*(const scimatrix_subv& v1, const cvector_slice& v2) {
07583 return scivector(v1) * v2;
07584 }
07585
07586 inline cinterval operator*(const scimatrix_subv& v1, const civector_slice& v2) {
07587 return scivector(v1) * v2;
07588 }
07589
07590 inline cinterval operator*(const srmatrix_subv& v1, const civector_slice& v2) {
07591 return srvector(v1) * v2;
07592 }
07593
07594 inline cinterval operator*(const scmatrix_subv& v1, const civector_slice& v2) {
07595 return scvector(v1) * v2;
07596 }
07597
07598 inline cinterval operator*(const simatrix_subv& v1, const civector_slice& v2) {
07599 return sivector(v1) * v2;
07600 }
07601
07602 inline cinterval operator*(const scmatrix_subv& v1, const ivector_slice& v2) {
07603 return scvector(v1) * v2;
07604 }
07605
07606 inline cinterval operator*(const simatrix_subv& v1, const cvector_slice& v2) {
07607 return sivector(v1) * v2;
07608 }
07609
07610 inline cinterval operator*(const scivector& v1, const srmatrix_subv& v2) {
07611 return v1 * srvector(v2);
07612 }
07613
07614 inline cinterval operator*(const scivector& v1, const scmatrix_subv& v2) {
07615 return v1 * scvector(v2);
07616 }
07617
07618 inline cinterval operator*(const scivector& v1, const simatrix_subv& v2) {
07619 return v1 * sivector(v2);
07620 }
07621
07622 inline cinterval operator*(const scivector& v1, const scimatrix_subv& v2) {
07623 return v1 * scivector(v2);
07624 }
07625
07626 inline cinterval operator*(const srvector& v1, const scimatrix_subv& v2) {
07627 return v1 * scivector(v2);
07628 }
07629
07630 inline cinterval operator*(const scvector& v1, const scimatrix_subv& v2) {
07631 return v1 * scivector(v2);
07632 }
07633
07634 inline cinterval operator*(const sivector& v1, const scimatrix_subv& v2) {
07635 return v1 * scivector(v2);
07636 }
07637
07638 inline cinterval operator*(const scvector& v1, const simatrix_subv& v2) {
07639 return v1 * sivector(v2);
07640 }
07641
07642 inline cinterval operator*(const sivector& v1, const scmatrix_subv& v2) {
07643 return v1 * scvector(v2);
07644 }
07645
07646 inline cinterval operator*(const scivector_slice& v1, const srmatrix_subv& v2) {
07647 return v1 * srvector(v2);
07648 }
07649
07650 inline cinterval operator*(const scivector_slice& v1, const scmatrix_subv& v2) {
07651 return v1 * scvector(v2);
07652 }
07653
07654 inline cinterval operator*(const scivector_slice& v1, const simatrix_subv& v2) {
07655 return v1 * sivector(v2);
07656 }
07657
07658 inline cinterval operator*(const scivector_slice& v1, const scimatrix_subv& v2) {
07659 return v1 * scivector(v2);
07660 }
07661
07662 inline cinterval operator*(const srvector_slice& v1, const scimatrix_subv& v2) {
07663 return v1 * scivector(v2);
07664 }
07665
07666 inline cinterval operator*(const sivector_slice& v1, const scimatrix_subv& v2) {
07667 return v1 * scivector(v2);
07668 }
07669
07670 inline cinterval operator*(const scvector_slice& v1, const scimatrix_subv& v2) {
07671 return v1 * scivector(v2);
07672 }
07673
07674 inline cinterval operator*(const scvector_slice& v1, const simatrix_subv& v2) {
07675 return v1 * sivector(v2);
07676 }
07677
07678 inline cinterval operator*(const sivector_slice& v1, const scmatrix_subv& v2) {
07679 return v1 * scvector(v2);
07680 }
07681
07682 inline cinterval operator*(const civector& v1, const srmatrix_subv& v2) {
07683 return v1 * srvector(v2);
07684 }
07685
07686 inline cinterval operator*(const civector& v1, const scmatrix_subv& v2) {
07687 return v1 * scvector(v2);
07688 }
07689
07690 inline cinterval operator*(const civector& v1, const simatrix_subv& v2) {
07691 return v1 * sivector(v2);
07692 }
07693
07694 inline cinterval operator*(const civector& v1, const scimatrix_subv& v2) {
07695 return v1 * scivector(v2);
07696 }
07697
07698 inline cinterval operator*(const rvector& v1, const scimatrix_subv& v2) {
07699 return v1 * scivector(v2);
07700 }
07701
07702 inline cinterval operator*(const cvector& v1, const scimatrix_subv& v2) {
07703 return v1 * scivector(v2);
07704 }
07705
07706 inline cinterval operator*(const ivector& v1, const scimatrix_subv& v2) {
07707 return v1 * scivector(v2);
07708 }
07709
07710 inline cinterval operator*(const ivector& v1, const scmatrix_subv& v2) {
07711 return v1 * scvector(v2);
07712 }
07713
07714 inline cinterval operator*(const cvector& v1, const simatrix_subv& v2) {
07715 return v1 * sivector(v2);
07716 }
07717
07718 inline cinterval operator*(const civector_slice& v1, const srmatrix_subv& v2) {
07719 return v1 * srvector(v2);
07720 }
07721
07722 inline cinterval operator*(const civector_slice& v1, const scmatrix_subv& v2) {
07723 return v1 * scvector(v2);
07724 }
07725
07726 inline cinterval operator*(const civector_slice& v1, const simatrix_subv& v2) {
07727 return v1 * sivector(v2);
07728 }
07729
07730 inline cinterval operator*(const civector_slice& v1, const scimatrix_subv& v2) {
07731 return v1 * scivector(v2);
07732 }
07733
07734 inline cinterval operator*(const rvector_slice& v1, const scimatrix_subv& v2) {
07735 return v1 * scivector(v2);
07736 }
07737
07738 inline cinterval operator*(const cvector_slice& v1, const scimatrix_subv& v2) {
07739 return v1 * scivector(v2);
07740 }
07741
07742 inline cinterval operator*(const ivector_slice& v1, const scimatrix_subv& v2) {
07743 return v1 * scivector(v2);
07744 }
07745
07746 inline cinterval operator*(const ivector_slice& v1, const scmatrix_subv& v2) {
07747 return v1 * scvector(v2);
07748 }
07749
07750 inline cinterval operator*(const cvector_slice& v1, const simatrix_subv& v2) {
07751 return v1 * sivector(v2);
07752 }
07753
07754 inline scivector operator+(const scimatrix_subv& v1, const srvector& v2) {
07755 return scivector(v1) + v2;
07756 }
07757
07758 inline scivector operator+(const scimatrix_subv& v1, const scvector& v2) {
07759 return scivector(v1) + v2;
07760 }
07761
07762 inline scivector operator+(const scimatrix_subv& v1, const sivector& v2) {
07763 return scivector(v1) + v2;
07764 }
07765
07766 inline scivector operator+(const scimatrix_subv& v1, const scivector& v2) {
07767 return scivector(v1) + v2;
07768 }
07769
07770 inline scivector operator+(const srmatrix_subv& v1, const scivector& v2) {
07771 return srvector(v1) + v2;
07772 }
07773
07774 inline scivector operator+(const scmatrix_subv& v1, const scivector& v2) {
07775 return scvector(v1) + v2;
07776 }
07777
07778 inline scivector operator+(const simatrix_subv& v1, const scivector& v2) {
07779 return sivector(v1) + v2;
07780 }
07781
07782 inline scivector operator+(const scmatrix_subv& v1, const sivector& v2) {
07783 return scvector(v1) + v2;
07784 }
07785
07786 inline scivector operator+(const simatrix_subv& v1, const scvector& v2) {
07787 return sivector(v1) + v2;
07788 }
07789
07790 inline scivector operator+(const scimatrix_subv& v1, const srvector_slice& v2) {
07791 return scivector(v1) + v2;
07792 }
07793
07794 inline scivector operator+(const scimatrix_subv& v1, const scvector_slice& v2) {
07795 return scivector(v1) + v2;
07796 }
07797
07798 inline scivector operator+(const scimatrix_subv& v1, const sivector_slice& v2) {
07799 return scivector(v1) + v2;
07800 }
07801
07802 inline scivector operator+(const scimatrix_subv& v1, const scivector_slice& v2) {
07803 return scivector(v1) + v2;
07804 }
07805
07806 inline scivector operator+(const srmatrix_subv& v1, const scivector_slice& v2) {
07807 return srvector(v1) + v2;
07808 }
07809
07810 inline scivector operator+(const scmatrix_subv& v1, const scivector_slice& v2) {
07811 return scvector(v1) + v2;
07812 }
07813
07814 inline scivector operator+(const simatrix_subv& v1, const scivector_slice& v2) {
07815 return sivector(v1) + v2;
07816 }
07817
07818 inline scivector operator+(const simatrix_subv& v1, const scvector_slice& v2) {
07819 return sivector(v1) + v2;
07820 }
07821
07822 inline scivector operator+(const scmatrix_subv& v1, const sivector_slice& v2) {
07823 return scvector(v1) + v2;
07824 }
07825
07826 inline civector operator+(const scimatrix_subv& v1, const rvector& v2) {
07827 return scivector(v1) + v2;
07828 }
07829
07830 inline civector operator+(const scimatrix_subv& v1, const cvector& v2) {
07831 return scivector(v1) + v2;
07832 }
07833
07834 inline civector operator+(const scimatrix_subv& v1, const ivector& v2) {
07835 return scivector(v1) + v2;
07836 }
07837
07838 inline civector operator+(const scimatrix_subv& v1, const civector& v2) {
07839 return scivector(v1) + v2;
07840 }
07841
07842 inline civector operator+(const srmatrix_subv& v1, const civector& v2) {
07843 return srvector(v1) + v2;
07844 }
07845
07846 inline civector operator+(const simatrix_subv& v1, const civector& v2) {
07847 return sivector(v1) + v2;
07848 }
07849
07850 inline civector operator+(const scmatrix_subv& v1, const civector& v2) {
07851 return scvector(v1) + v2;
07852 }
07853
07854 inline civector operator+(const scmatrix_subv& v1, const ivector& v2) {
07855 return scvector(v1) + v2;
07856 }
07857
07858 inline civector operator+(const simatrix_subv& v1, const cvector& v2) {
07859 return sivector(v1) + v2;
07860 }
07861
07862 inline civector operator+(const scimatrix_subv& v1, const rvector_slice& v2) {
07863 return scivector(v1) + v2;
07864 }
07865
07866 inline civector operator+(const scimatrix_subv& v1, const cvector_slice& v2) {
07867 return scivector(v1) + v2;
07868 }
07869
07870 inline civector operator+(const scimatrix_subv& v1, const ivector_slice& v2) {
07871 return scivector(v1) + v2;
07872 }
07873
07874 inline civector operator+(const scimatrix_subv& v1, const civector_slice& v2) {
07875 return scivector(v1) + v2;
07876 }
07877
07878 inline civector operator+(const srmatrix_subv& v1, const civector_slice& v2) {
07879 return srvector(v1) + v2;
07880 }
07881
07882 inline civector operator+(const scmatrix_subv& v1, const civector_slice& v2) {
07883 return scvector(v1) + v2;
07884 }
07885
07886 inline civector operator+(const simatrix_subv& v1, const civector_slice& v2) {
07887 return sivector(v1) + v2;
07888 }
07889
07890 inline civector operator+(const simatrix_subv& v1, const cvector_slice& v2) {
07891 return sivector(v1) + v2;
07892 }
07893
07894 inline civector operator+(const scmatrix_subv& v1, const ivector_slice& v2) {
07895 return scvector(v1) + v2;
07896 }
07897
07898 inline scivector operator+(const scivector& v1, const srmatrix_subv& v2) {
07899 return v1 + srvector(v2);
07900 }
07901
07902 inline scivector operator+(const scivector& v1, const scmatrix_subv& v2) {
07903 return v1 + scvector(v2);
07904 }
07905
07906 inline scivector operator+(const scivector& v1, const simatrix_subv& v2) {
07907 return v1 + sivector(v2);
07908 }
07909
07910 inline scivector operator+(const scivector& v1, const scimatrix_subv& v2) {
07911 return v1 + scivector(v2);
07912 }
07913
07914 inline scivector operator+(const srvector& v1, const scimatrix_subv& v2) {
07915 return v1 + scivector(v2);
07916 }
07917
07918 inline scivector operator+(const scvector& v1, const scimatrix_subv& v2) {
07919 return v1 + scivector(v2);
07920 }
07921
07922 inline scivector operator+(const sivector& v1, const scimatrix_subv& v2) {
07923 return v1 + scivector(v2);
07924 }
07925
07926 inline scivector operator+(const sivector& v1, const scmatrix_subv& v2) {
07927 return v1 + scvector(v2);
07928 }
07929
07930 inline scivector operator+(const scvector& v1, const simatrix_subv& v2) {
07931 return v1 + sivector(v2);
07932 }
07933
07934 inline scivector operator+(const scivector_slice& v1, const srmatrix_subv& v2) {
07935 return v1 + srvector(v2);
07936 }
07937
07938 inline scivector operator+(const scivector_slice& v1, const scmatrix_subv& v2) {
07939 return v1 + scvector(v2);
07940 }
07941
07942 inline scivector operator+(const scivector_slice& v1, const simatrix_subv& v2) {
07943 return v1 + sivector(v2);
07944 }
07945
07946 inline scivector operator+(const scivector_slice& v1, const scimatrix_subv& v2) {
07947 return v1 + scivector(v2);
07948 }
07949
07950 inline scivector operator+(const srvector_slice& v1, const scimatrix_subv& v2) {
07951 return v1 + scivector(v2);
07952 }
07953
07954 inline scivector operator+(const scvector_slice& v1, const scimatrix_subv& v2) {
07955 return v1 + scivector(v2);
07956 }
07957
07958 inline scivector operator+(const sivector_slice& v1, const scimatrix_subv& v2) {
07959 return v1 + scivector(v2);
07960 }
07961
07962 inline scivector operator+(const sivector_slice& v1, const scmatrix_subv& v2) {
07963 return v1 + scvector(v2);
07964 }
07965
07966 inline scivector operator+(const scvector_slice& v1, const simatrix_subv& v2) {
07967 return v1 + sivector(v2);
07968 }
07969
07970 inline civector operator+(const civector& v1, const srmatrix_subv& v2) {
07971 return v1 + srvector(v2);
07972 }
07973
07974 inline civector operator+(const civector& v1, const scmatrix_subv& v2) {
07975 return v1 + scvector(v2);
07976 }
07977
07978 inline civector operator+(const civector& v1, const simatrix_subv& v2) {
07979 return v1 + sivector(v2);
07980 }
07981
07982 inline civector operator+(const civector& v1, const scimatrix_subv& v2) {
07983 return v1 + scivector(v2);
07984 }
07985
07986 inline civector operator+(const rvector& v1, const scimatrix_subv& v2) {
07987 return v1 + scivector(v2);
07988 }
07989
07990 inline civector operator+(const cvector& v1, const scimatrix_subv& v2) {
07991 return v1 + scivector(v2);
07992 }
07993
07994 inline civector operator+(const ivector& v1, const scimatrix_subv& v2) {
07995 return v1 + scivector(v2);
07996 }
07997
07998 inline civector operator+(const ivector& v1, const scmatrix_subv& v2) {
07999 return v1 + scvector(v2);
08000 }
08001
08002 inline civector operator+(const cvector& v1, const simatrix_subv& v2) {
08003 return v1 + sivector(v2);
08004 }
08005
08006 inline civector operator+(const civector_slice& v1, const srmatrix_subv& v2) {
08007 return v1 + srvector(v2);
08008 }
08009
08010 inline civector operator+(const civector_slice& v1, const scmatrix_subv& v2) {
08011 return v1 + scvector(v2);
08012 }
08013
08014 inline civector operator+(const civector_slice& v1, const simatrix_subv& v2) {
08015 return v1 + sivector(v2);
08016 }
08017
08018 inline civector operator+(const civector_slice& v1, const scimatrix_subv& v2) {
08019 return v1 + scivector(v2);
08020 }
08021
08022 inline civector operator+(const rvector_slice& v1, const scimatrix_subv& v2) {
08023 return v1 + scivector(v2);
08024 }
08025
08026 inline civector operator+(const cvector_slice& v1, const scimatrix_subv& v2) {
08027 return v1 + scivector(v2);
08028 }
08029
08030 inline civector operator+(const ivector_slice& v1, const scimatrix_subv& v2) {
08031 return v1 + scivector(v2);
08032 }
08033
08034 inline civector operator+(const ivector_slice& v1, const scmatrix_subv& v2) {
08035 return v1 + scvector(v2);
08036 }
08037
08038 inline civector operator+(const cvector_slice& v1, const simatrix_subv& v2) {
08039 return v1 + sivector(v2);
08040 }
08041
08042 inline scivector operator-(const scimatrix_subv& v1, const srvector& v2) {
08043 return scivector(v1) - v2;
08044 }
08045
08046 inline scivector operator-(const scimatrix_subv& v1, const scvector& v2) {
08047 return scivector(v1) - v2;
08048 }
08049
08050 inline scivector operator-(const scimatrix_subv& v1, const sivector& v2) {
08051 return scivector(v1) - v2;
08052 }
08053
08054 inline scivector operator-(const scimatrix_subv& v1, const scivector& v2) {
08055 return scivector(v1) - v2;
08056 }
08057
08058 inline scivector operator-(const srmatrix_subv& v1, const scivector& v2) {
08059 return srvector(v1) - v2;
08060 }
08061
08062 inline scivector operator-(const scmatrix_subv& v1, const scivector& v2) {
08063 return scvector(v1) - v2;
08064 }
08065
08066 inline scivector operator-(const simatrix_subv& v1, const scivector& v2) {
08067 return sivector(v1) - v2;
08068 }
08069
08070 inline scivector operator-(const scmatrix_subv& v1, const sivector& v2) {
08071 return scvector(v1) - v2;
08072 }
08073
08074 inline scivector operator-(const simatrix_subv& v1, const scvector& v2) {
08075 return sivector(v1) - v2;
08076 }
08077
08078 inline scivector operator-(const scimatrix_subv& v1, const srvector_slice& v2) {
08079 return scivector(v1) - v2;
08080 }
08081
08082 inline scivector operator-(const scimatrix_subv& v1, const scvector_slice& v2) {
08083 return scivector(v1) - v2;
08084 }
08085
08086 inline scivector operator-(const scimatrix_subv& v1, const sivector_slice& v2) {
08087 return scivector(v1) - v2;
08088 }
08089
08090 inline scivector operator-(const scimatrix_subv& v1, const scivector_slice& v2) {
08091 return scivector(v1) - v2;
08092 }
08093
08094 inline scivector operator-(const srmatrix_subv& v1, const scivector_slice& v2) {
08095 return srvector(v1) - v2;
08096 }
08097
08098 inline scivector operator-(const scmatrix_subv& v1, const scivector_slice& v2) {
08099 return scvector(v1) - v2;
08100 }
08101
08102 inline scivector operator-(const simatrix_subv& v1, const scivector_slice& v2) {
08103 return sivector(v1) - v2;
08104 }
08105
08106 inline scivector operator-(const simatrix_subv& v1, const scvector_slice& v2) {
08107 return sivector(v1) - v2;
08108 }
08109
08110 inline scivector operator-(const scmatrix_subv& v1, const sivector_slice& v2) {
08111 return scvector(v1) - v2;
08112 }
08113
08114 inline civector operator-(const scimatrix_subv& v1, const rvector& v2) {
08115 return scivector(v1) - v2;
08116 }
08117
08118 inline civector operator-(const scimatrix_subv& v1, const cvector& v2) {
08119 return scivector(v1) - v2;
08120 }
08121
08122 inline civector operator-(const scimatrix_subv& v1, const ivector& v2) {
08123 return scivector(v1) - v2;
08124 }
08125
08126 inline civector operator-(const scimatrix_subv& v1, const civector& v2) {
08127 return scivector(v1) - v2;
08128 }
08129
08130 inline civector operator-(const srmatrix_subv& v1, const civector& v2) {
08131 return srvector(v1) - v2;
08132 }
08133
08134 inline civector operator-(const simatrix_subv& v1, const civector& v2) {
08135 return sivector(v1) - v2;
08136 }
08137
08138 inline civector operator-(const scmatrix_subv& v1, const civector& v2) {
08139 return scvector(v1) - v2;
08140 }
08141
08142 inline civector operator-(const scmatrix_subv& v1, const ivector& v2) {
08143 return scvector(v1) - v2;
08144 }
08145
08146 inline civector operator-(const simatrix_subv& v1, const cvector& v2) {
08147 return sivector(v1) - v2;
08148 }
08149
08150 inline civector operator-(const scimatrix_subv& v1, const rvector_slice& v2) {
08151 return scivector(v1) - v2;
08152 }
08153
08154 inline civector operator-(const scimatrix_subv& v1, const cvector_slice& v2) {
08155 return scivector(v1) - v2;
08156 }
08157
08158 inline civector operator-(const scimatrix_subv& v1, const ivector_slice& v2) {
08159 return scivector(v1) - v2;
08160 }
08161
08162 inline civector operator-(const scimatrix_subv& v1, const civector_slice& v2) {
08163 return scivector(v1) - v2;
08164 }
08165
08166 inline civector operator-(const srmatrix_subv& v1, const civector_slice& v2) {
08167 return srvector(v1) - v2;
08168 }
08169
08170 inline civector operator-(const scmatrix_subv& v1, const civector_slice& v2) {
08171 return scvector(v1) - v2;
08172 }
08173
08174 inline civector operator-(const simatrix_subv& v1, const civector_slice& v2) {
08175 return sivector(v1) - v2;
08176 }
08177
08178 inline civector operator-(const simatrix_subv& v1, const cvector_slice& v2) {
08179 return sivector(v1) - v2;
08180 }
08181
08182 inline civector operator-(const scmatrix_subv& v1, const ivector_slice& v2) {
08183 return scvector(v1) - v2;
08184 }
08185
08186 inline scivector operator-(const scivector& v1, const srmatrix_subv& v2) {
08187 return v1 - srvector(v2);
08188 }
08189
08190 inline scivector operator-(const scivector& v1, const scmatrix_subv& v2) {
08191 return v1 - scvector(v2);
08192 }
08193
08194 inline scivector operator-(const scivector& v1, const simatrix_subv& v2) {
08195 return v1 - sivector(v2);
08196 }
08197
08198 inline scivector operator-(const scivector& v1, const scimatrix_subv& v2) {
08199 return v1 - scivector(v2);
08200 }
08201
08202 inline scivector operator-(const srvector& v1, const scimatrix_subv& v2) {
08203 return v1 - scivector(v2);
08204 }
08205
08206 inline scivector operator-(const scvector& v1, const scimatrix_subv& v2) {
08207 return v1 - scivector(v2);
08208 }
08209
08210 inline scivector operator-(const sivector& v1, const scimatrix_subv& v2) {
08211 return v1 - scivector(v2);
08212 }
08213
08214 inline scivector operator-(const sivector& v1, const scmatrix_subv& v2) {
08215 return v1 - scvector(v2);
08216 }
08217
08218 inline scivector operator-(const scvector& v1, const simatrix_subv& v2) {
08219 return v1 - sivector(v2);
08220 }
08221
08222 inline scivector operator-(const scivector_slice& v1, const srmatrix_subv& v2) {
08223 return v1 - srvector(v2);
08224 }
08225
08226 inline scivector operator-(const scivector_slice& v1, const scmatrix_subv& v2) {
08227 return v1 - scvector(v2);
08228 }
08229
08230 inline scivector operator-(const scivector_slice& v1, const simatrix_subv& v2) {
08231 return v1 - sivector(v2);
08232 }
08233
08234 inline scivector operator-(const scivector_slice& v1, const scimatrix_subv& v2) {
08235 return v1 - scivector(v2);
08236 }
08237
08238 inline scivector operator-(const srvector_slice& v1, const scimatrix_subv& v2) {
08239 return v1 - scivector(v2);
08240 }
08241
08242 inline scivector operator-(const scvector_slice& v1, const scimatrix_subv& v2) {
08243 return v1 - scivector(v2);
08244 }
08245
08246 inline scivector operator-(const sivector_slice& v1, const scimatrix_subv& v2) {
08247 return v1 - scivector(v2);
08248 }
08249
08250 inline scivector operator-(const sivector_slice& v1, const scmatrix_subv& v2) {
08251 return v1 - scvector(v2);
08252 }
08253
08254 inline scivector operator-(const scvector_slice& v1, const simatrix_subv& v2) {
08255 return v1 - sivector(v2);
08256 }
08257
08258 inline civector operator-(const civector& v1, const srmatrix_subv& v2) {
08259 return v1 - srvector(v2);
08260 }
08261
08262 inline civector operator-(const civector& v1, const scmatrix_subv& v2) {
08263 return v1 - scvector(v2);
08264 }
08265
08266 inline civector operator-(const civector& v1, const simatrix_subv& v2) {
08267 return v1 - sivector(v2);
08268 }
08269
08270 inline civector operator-(const civector& v1, const scimatrix_subv& v2) {
08271 return v1 - scivector(v2);
08272 }
08273
08274 inline civector operator-(const rvector& v1, const scimatrix_subv& v2) {
08275 return v1 - scivector(v2);
08276 }
08277
08278 inline civector operator-(const cvector& v1, const scimatrix_subv& v2) {
08279 return v1 - scivector(v2);
08280 }
08281
08282 inline civector operator-(const ivector& v1, const scimatrix_subv& v2) {
08283 return v1 - scivector(v2);
08284 }
08285
08286 inline civector operator-(const ivector& v1, const scmatrix_subv& v2) {
08287 return v1 - scvector(v2);
08288 }
08289
08290 inline civector operator-(const cvector& v1, const simatrix_subv& v2) {
08291 return v1 - sivector(v2);
08292 }
08293
08294 inline civector operator-(const civector_slice& v1, const srmatrix_subv& v2) {
08295 return v1 - srvector(v2);
08296 }
08297
08298 inline civector operator-(const civector_slice& v1, const scmatrix_subv& v2) {
08299 return v1 - scvector(v2);
08300 }
08301
08302 inline civector operator-(const civector_slice& v1, const simatrix_subv& v2) {
08303 return v1 - sivector(v2);
08304 }
08305
08306 inline civector operator-(const civector_slice& v1, const scimatrix_subv& v2) {
08307 return v1 - scivector(v2);
08308 }
08309
08310 inline civector operator-(const rvector_slice& v1, const scimatrix_subv& v2) {
08311 return v1 - scivector(v2);
08312 }
08313
08314 inline civector operator-(const cvector_slice& v1, const scimatrix_subv& v2) {
08315 return v1 - scivector(v2);
08316 }
08317
08318 inline civector operator-(const ivector_slice& v1, const scimatrix_subv& v2) {
08319 return v1 - scivector(v2);
08320 }
08321
08322 inline civector operator-(const ivector_slice& v1, const scmatrix_subv& v2) {
08323 return v1 - scvector(v2);
08324 }
08325
08326 inline civector operator-(const cvector_slice& v1, const simatrix_subv& v2) {
08327 return v1 - sivector(v2);
08328 }
08329
08330 inline scivector operator|(const scimatrix_subv& v1, const srvector& v2) {
08331 return scivector(v1) | v2;
08332 }
08333
08334 inline scivector operator|(const scimatrix_subv& v1, const scvector& v2) {
08335 return scivector(v1) | v2;
08336 }
08337
08338 inline scivector operator|(const scimatrix_subv& v1, const sivector& v2) {
08339 return scivector(v1) | v2;
08340 }
08341
08342 inline scivector operator|(const scimatrix_subv& v1, const scivector& v2) {
08343 return scivector(v1) | v2;
08344 }
08345
08346 inline scivector operator|(const srmatrix_subv& v1, const scivector& v2) {
08347 return srvector(v1) | v2;
08348 }
08349
08350 inline scivector operator|(const scmatrix_subv& v1, const scivector& v2) {
08351 return scvector(v1) | v2;
08352 }
08353
08354 inline scivector operator|(const simatrix_subv& v1, const scivector& v2) {
08355 return sivector(v1) | v2;
08356 }
08357
08358 inline scivector operator|(const scmatrix_subv& v1, const sivector& v2) {
08359 return scvector(v1) | v2;
08360 }
08361
08362 inline scivector operator|(const simatrix_subv& v1, const scvector& v2) {
08363 return sivector(v1) | v2;
08364 }
08365
08366 inline scivector operator|(const scimatrix_subv& v1, const srvector_slice& v2) {
08367 return scivector(v1) | v2;
08368 }
08369
08370 inline scivector operator|(const scimatrix_subv& v1, const scvector_slice& v2) {
08371 return scivector(v1) | v2;
08372 }
08373
08374 inline scivector operator|(const scimatrix_subv& v1, const sivector_slice& v2) {
08375 return scivector(v1) | v2;
08376 }
08377
08378 inline scivector operator|(const scimatrix_subv& v1, const scivector_slice& v2) {
08379 return scivector(v1) | v2;
08380 }
08381
08382 inline scivector operator|(const srmatrix_subv& v1, const scivector_slice& v2) {
08383 return srvector(v1) | v2;
08384 }
08385
08386 inline scivector operator|(const scmatrix_subv& v1, const scivector_slice& v2) {
08387 return scvector(v1) | v2;
08388 }
08389
08390 inline scivector operator|(const simatrix_subv& v1, const scivector_slice& v2) {
08391 return sivector(v1) | v2;
08392 }
08393
08394 inline scivector operator|(const simatrix_subv& v1, const scvector_slice& v2) {
08395 return sivector(v1) | v2;
08396 }
08397
08398 inline scivector operator|(const scmatrix_subv& v1, const sivector_slice& v2) {
08399 return scvector(v1) | v2;
08400 }
08401
08402 inline civector operator|(const scimatrix_subv& v1, const rvector& v2) {
08403 return scivector(v1) | v2;
08404 }
08405
08406 inline civector operator|(const scimatrix_subv& v1, const cvector& v2) {
08407 return scivector(v1) | v2;
08408 }
08409
08410 inline civector operator|(const scimatrix_subv& v1, const ivector& v2) {
08411 return scivector(v1) | v2;
08412 }
08413
08414 inline civector operator|(const scimatrix_subv& v1, const civector& v2) {
08415 return scivector(v1) | v2;
08416 }
08417
08418 inline civector operator|(const srmatrix_subv& v1, const civector& v2) {
08419 return srvector(v1) | v2;
08420 }
08421
08422 inline civector operator|(const simatrix_subv& v1, const civector& v2) {
08423 return sivector(v1) | v2;
08424 }
08425
08426 inline civector operator|(const scmatrix_subv& v1, const civector& v2) {
08427 return scvector(v1) | v2;
08428 }
08429
08430 inline civector operator|(const scmatrix_subv& v1, const ivector& v2) {
08431 return scvector(v1) | v2;
08432 }
08433
08434 inline civector operator|(const simatrix_subv& v1, const cvector& v2) {
08435 return sivector(v1) | v2;
08436 }
08437
08438 inline civector operator|(const scimatrix_subv& v1, const rvector_slice& v2) {
08439 return scivector(v1) | v2;
08440 }
08441
08442 inline civector operator|(const scimatrix_subv& v1, const cvector_slice& v2) {
08443 return scivector(v1) | v2;
08444 }
08445
08446 inline civector operator|(const scimatrix_subv& v1, const ivector_slice& v2) {
08447 return scivector(v1) | v2;
08448 }
08449
08450 inline civector operator|(const scimatrix_subv& v1, const civector_slice& v2) {
08451 return scivector(v1) | v2;
08452 }
08453
08454 inline civector operator|(const srmatrix_subv& v1, const civector_slice& v2) {
08455 return srvector(v1) | v2;
08456 }
08457
08458 inline civector operator|(const scmatrix_subv& v1, const civector_slice& v2) {
08459 return scvector(v1) | v2;
08460 }
08461
08462 inline civector operator|(const simatrix_subv& v1, const civector_slice& v2) {
08463 return sivector(v1) | v2;
08464 }
08465
08466 inline civector operator|(const simatrix_subv& v1, const cvector_slice& v2) {
08467 return sivector(v1) | v2;
08468 }
08469
08470 inline civector operator|(const scmatrix_subv& v1, const ivector_slice& v2) {
08471 return scvector(v1) | v2;
08472 }
08473
08474 inline scivector operator|(const scivector& v1, const srmatrix_subv& v2) {
08475 return v1 | srvector(v2);
08476 }
08477
08478 inline scivector operator|(const scivector& v1, const scmatrix_subv& v2) {
08479 return v1 | scvector(v2);
08480 }
08481
08482 inline scivector operator|(const scivector& v1, const simatrix_subv& v2) {
08483 return v1 | sivector(v2);
08484 }
08485
08486 inline scivector operator|(const scivector& v1, const scimatrix_subv& v2) {
08487 return v1 | scivector(v2);
08488 }
08489
08490 inline scivector operator|(const srvector& v1, const scimatrix_subv& v2) {
08491 return v1 | scivector(v2);
08492 }
08493
08494 inline scivector operator|(const scvector& v1, const scimatrix_subv& v2) {
08495 return v1 | scivector(v2);
08496 }
08497
08498 inline scivector operator|(const sivector& v1, const scimatrix_subv& v2) {
08499 return v1 | scivector(v2);
08500 }
08501
08502 inline scivector operator|(const sivector& v1, const scmatrix_subv& v2) {
08503 return v1 | scvector(v2);
08504 }
08505
08506 inline scivector operator|(const scvector& v1, const simatrix_subv& v2) {
08507 return v1 | sivector(v2);
08508 }
08509
08510 inline scivector operator|(const scivector_slice& v1, const srmatrix_subv& v2) {
08511 return v1 | srvector(v2);
08512 }
08513
08514 inline scivector operator|(const scivector_slice& v1, const scmatrix_subv& v2) {
08515 return v1 | scvector(v2);
08516 }
08517
08518 inline scivector operator|(const scivector_slice& v1, const simatrix_subv& v2) {
08519 return v1 | sivector(v2);
08520 }
08521
08522 inline scivector operator|(const scivector_slice& v1, const scimatrix_subv& v2) {
08523 return v1 | scivector(v2);
08524 }
08525
08526 inline scivector operator|(const srvector_slice& v1, const scimatrix_subv& v2) {
08527 return v1 | scivector(v2);
08528 }
08529
08530 inline scivector operator|(const scvector_slice& v1, const scimatrix_subv& v2) {
08531 return v1 | scivector(v2);
08532 }
08533
08534 inline scivector operator|(const sivector_slice& v1, const scimatrix_subv& v2) {
08535 return v1 | scivector(v2);
08536 }
08537
08538 inline scivector operator|(const sivector_slice& v1, const scmatrix_subv& v2) {
08539 return v1 | scvector(v2);
08540 }
08541
08542 inline scivector operator|(const scvector_slice& v1, const simatrix_subv& v2) {
08543 return v1 | sivector(v2);
08544 }
08545
08546 inline civector operator|(const civector& v1, const srmatrix_subv& v2) {
08547 return v1 | srvector(v2);
08548 }
08549
08550 inline civector operator|(const civector& v1, const scmatrix_subv& v2) {
08551 return v1 | scvector(v2);
08552 }
08553
08554 inline civector operator|(const civector& v1, const simatrix_subv& v2) {
08555 return v1 | sivector(v2);
08556 }
08557
08558 inline civector operator|(const civector& v1, const scimatrix_subv& v2) {
08559 return v1 | scivector(v2);
08560 }
08561
08562 inline civector operator|(const rvector& v1, const scimatrix_subv& v2) {
08563 return v1 | scivector(v2);
08564 }
08565
08566 inline civector operator|(const cvector& v1, const scimatrix_subv& v2) {
08567 return v1 | scivector(v2);
08568 }
08569
08570 inline civector operator|(const ivector& v1, const scimatrix_subv& v2) {
08571 return v1 | scivector(v2);
08572 }
08573
08574 inline civector operator|(const ivector& v1, const scmatrix_subv& v2) {
08575 return v1 | scvector(v2);
08576 }
08577
08578 inline civector operator|(const cvector& v1, const simatrix_subv& v2) {
08579 return v1 | sivector(v2);
08580 }
08581
08582 inline civector operator|(const civector_slice& v1, const srmatrix_subv& v2) {
08583 return v1 | srvector(v2);
08584 }
08585
08586 inline civector operator|(const civector_slice& v1, const scmatrix_subv& v2) {
08587 return v1 | scvector(v2);
08588 }
08589
08590 inline civector operator|(const civector_slice& v1, const simatrix_subv& v2) {
08591 return v1 | sivector(v2);
08592 }
08593
08594 inline civector operator|(const civector_slice& v1, const scimatrix_subv& v2) {
08595 return v1 | scivector(v2);
08596 }
08597
08598 inline civector operator|(const rvector_slice& v1, const scimatrix_subv& v2) {
08599 return v1 | scivector(v2);
08600 }
08601
08602 inline civector operator|(const cvector_slice& v1, const scimatrix_subv& v2) {
08603 return v1 | scivector(v2);
08604 }
08605
08606 inline civector operator|(const ivector_slice& v1, const scimatrix_subv& v2) {
08607 return v1 | scivector(v2);
08608 }
08609
08610 inline civector operator|(const ivector_slice& v1, const scmatrix_subv& v2) {
08611 return v1 | scvector(v2);
08612 }
08613
08614 inline civector operator|(const cvector_slice& v1, const simatrix_subv& v2) {
08615 return v1 | sivector(v2);
08616 }
08617
08618 inline scivector operator|(const scmatrix_subv& v1, const srvector& v2) {
08619 return scvector(v1) | v2;
08620 }
08621
08622 inline scivector operator|(const srmatrix_subv& v1, const scvector& v2) {
08623 return srvector(v1) | v2;
08624 }
08625
08626 inline scivector operator|(const scmatrix_subv& v1, const scvector& v2) {
08627 return scvector(v1) | v2;
08628 }
08629
08630 inline scivector operator|(const scmatrix_subv& v1, const srvector_slice& v2) {
08631 return scvector(v1) | v2;
08632 }
08633
08634 inline scivector operator|(const srmatrix_subv& v1, const scvector_slice& v2) {
08635 return srvector(v1) | v2;
08636 }
08637
08638 inline scivector operator|(const scmatrix_subv& v1, const scvector_slice& v2) {
08639 return scvector(v1) | v2;
08640 }
08641
08642 inline civector operator|(const scmatrix_subv& v1, const rvector& v2) {
08643 return scvector(v1) | v2;
08644 }
08645
08646 inline civector operator|(const srmatrix_subv& v1, const cvector& v2) {
08647 return srvector(v1) | v2;
08648 }
08649
08650 inline civector operator|(const scmatrix_subv& v1, const cvector& v2) {
08651 return scvector(v1) | v2;
08652 }
08653
08654 inline civector operator|(const scmatrix_subv& v1, const rvector_slice& v2) {
08655 return scvector(v1) | v2;
08656 }
08657
08658 inline civector operator|(const srmatrix_subv& v1, const cvector_slice& v2) {
08659 return srvector(v1) | v2;
08660 }
08661
08662 inline civector operator|(const scmatrix_subv& v1, const cvector_slice& v2) {
08663 return scvector(v1) | v2;
08664 }
08665
08666 inline scivector operator|(const scvector& v1, const srmatrix_subv& v2) {
08667 return v1 | srvector(v2);
08668 }
08669
08670 inline scivector operator|(const srvector& v1, const scmatrix_subv& v2) {
08671 return v1 | scvector(v2);
08672 }
08673
08674 inline scivector operator|(const scvector& v1, const scmatrix_subv& v2) {
08675 return v1 | scvector(v2);
08676 }
08677
08678 inline scivector operator|(const scvector_slice& v1, const srmatrix_subv& v2) {
08679 return v1 | srvector(v2);
08680 }
08681
08682 inline scivector operator|(const srvector_slice& v1, const scmatrix_subv& v2) {
08683 return v1 | scvector(v2);
08684 }
08685
08686 inline scivector operator|(const scvector_slice& v1, const scmatrix_subv& v2) {
08687 return v1 | scvector(v2);
08688 }
08689
08690 inline civector operator|(const cvector& v1, const srmatrix_subv& v2) {
08691 return v1 | srvector(v2);
08692 }
08693
08694 inline civector operator|(const rvector& v1, const scmatrix_subv& v2) {
08695 return v1 | scvector(v2);
08696 }
08697
08698 inline civector operator|(const cvector& v1, const scmatrix_subv& v2) {
08699 return v1 | scvector(v2);
08700 }
08701
08702 inline civector operator|(const cvector_slice& v1, const srmatrix_subv& v2) {
08703 return v1 | srvector(v2);
08704 }
08705
08706 inline civector operator|(const rvector_slice& v1, const scmatrix_subv& v2) {
08707 return v1 | scvector(v2);
08708 }
08709
08710 inline civector operator|(const cvector_slice& v1, const scmatrix_subv& v2) {
08711 return v1 | scvector(v2);
08712 }
08713
08714 inline scimatrix_subv& scimatrix_subv::operator*=(const real& v) {
08715 *this = *this * v;
08716 return *this;
08717 }
08718
08719 inline scimatrix_subv& scimatrix_subv::operator*=(const complex& v) {
08720 *this = *this * v;
08721 return *this;
08722 }
08723
08724 inline scimatrix_subv& scimatrix_subv::operator*=(const interval& v) {
08725 *this = *this * v;
08726 return *this;
08727 }
08728
08729 inline scimatrix_subv& scimatrix_subv::operator*=(const cinterval& v) {
08730 *this = *this * v;
08731 return *this;
08732 }
08733
08734 inline scimatrix_subv& scimatrix_subv::operator/=(const real& v) {
08735 *this = *this / v;
08736 return *this;
08737 }
08738
08739 inline scimatrix_subv& scimatrix_subv::operator/=(const complex& v) {
08740 *this = *this / v;
08741 return *this;
08742 }
08743
08744 inline scimatrix_subv& scimatrix_subv::operator/=(const interval& v) {
08745 *this = *this / v;
08746 return *this;
08747 }
08748
08749 inline scimatrix_subv& scimatrix_subv::operator/=(const cinterval& v) {
08750 *this = *this / v;
08751 return *this;
08752 }
08753
08754 inline scimatrix_subv& scimatrix_subv::operator+=(const srvector& v) {
08755 *this = *this + v;
08756 return *this;
08757 }
08758
08759 inline scimatrix_subv& scimatrix_subv::operator+=(const srvector_slice& v) {
08760 *this = *this + v;
08761 return *this;
08762 }
08763
08764 inline scimatrix_subv& scimatrix_subv::operator+=(const rvector& v) {
08765 *this = *this + v;
08766 return *this;
08767 }
08768
08769 inline scimatrix_subv& scimatrix_subv::operator+=(const rvector_slice& v) {
08770 *this = *this + v;
08771 return *this;
08772 }
08773
08774 inline scimatrix_subv& scimatrix_subv::operator-=(const srvector& v) {
08775 *this = *this - v;
08776 return *this;
08777 }
08778
08779 inline scimatrix_subv& scimatrix_subv::operator-=(const srvector_slice& v) {
08780 *this = *this - v;
08781 return *this;
08782 }
08783
08784 inline scimatrix_subv& scimatrix_subv::operator-=(const rvector& v) {
08785 *this = *this - v;
08786 return *this;
08787 }
08788
08789 inline scimatrix_subv& scimatrix_subv::operator-=(const rvector_slice& v) {
08790 *this = *this - v;
08791 return *this;
08792 }
08793
08794 inline scimatrix_subv& scimatrix_subv::operator+=(const scvector& v) {
08795 *this = *this + v;
08796 return *this;
08797 }
08798
08799 inline scimatrix_subv& scimatrix_subv::operator+=(const scvector_slice& v) {
08800 *this = *this + v;
08801 return *this;
08802 }
08803
08804 inline scimatrix_subv& scimatrix_subv::operator+=(const cvector& v) {
08805 *this = *this + v;
08806 return *this;
08807 }
08808
08809 inline scimatrix_subv& scimatrix_subv::operator+=(const cvector_slice& v) {
08810 *this = *this + v;
08811 return *this;
08812 }
08813
08814 inline scimatrix_subv& scimatrix_subv::operator-=(const scvector& v) {
08815 *this = *this - v;
08816 return *this;
08817 }
08818
08819 inline scimatrix_subv& scimatrix_subv::operator-=(const scvector_slice& v) {
08820 *this = *this - v;
08821 return *this;
08822 }
08823
08824 inline scimatrix_subv& scimatrix_subv::operator-=(const cvector& v) {
08825 *this = *this - v;
08826 return *this;
08827 }
08828
08829 inline scimatrix_subv& scimatrix_subv::operator-=(const cvector_slice& v) {
08830 *this = *this - v;
08831 return *this;
08832 }
08833
08834 inline scimatrix_subv& scimatrix_subv::operator+=(const sivector& v) {
08835 *this = *this + v;
08836 return *this;
08837 }
08838
08839 inline scimatrix_subv& scimatrix_subv::operator+=(const sivector_slice& v) {
08840 *this = *this + v;
08841 return *this;
08842 }
08843
08844 inline scimatrix_subv& scimatrix_subv::operator+=(const ivector& v) {
08845 *this = *this + v;
08846 return *this;
08847 }
08848
08849 inline scimatrix_subv& scimatrix_subv::operator+=(const ivector_slice& v) {
08850 *this = *this + v;
08851 return *this;
08852 }
08853
08854 inline scimatrix_subv& scimatrix_subv::operator-=(const sivector& v) {
08855 *this = *this - v;
08856 return *this;
08857 }
08858
08859 inline scimatrix_subv& scimatrix_subv::operator-=(const sivector_slice& v) {
08860 *this = *this - v;
08861 return *this;
08862 }
08863
08864 inline scimatrix_subv& scimatrix_subv::operator-=(const ivector& v) {
08865 *this = *this - v;
08866 return *this;
08867 }
08868
08869 inline scimatrix_subv& scimatrix_subv::operator-=(const ivector_slice& v) {
08870 *this = *this - v;
08871 return *this;
08872 }
08873
08874 inline scimatrix_subv& scimatrix_subv::operator+=(const scivector& v) {
08875 *this = *this + v;
08876 return *this;
08877 }
08878
08879 inline scimatrix_subv& scimatrix_subv::operator+=(const scivector_slice& v) {
08880 *this = *this + v;
08881 return *this;
08882 }
08883
08884 inline scimatrix_subv& scimatrix_subv::operator+=(const civector& v) {
08885 *this = *this + v;
08886 return *this;
08887 }
08888
08889 inline scimatrix_subv& scimatrix_subv::operator+=(const civector_slice& v) {
08890 *this = *this + v;
08891 return *this;
08892 }
08893
08894 inline scimatrix_subv& scimatrix_subv::operator-=(const scivector& v) {
08895 *this = *this - v;
08896 return *this;
08897 }
08898
08899 inline scimatrix_subv& scimatrix_subv::operator-=(const scivector_slice& v) {
08900 *this = *this - v;
08901 return *this;
08902 }
08903
08904 inline scimatrix_subv& scimatrix_subv::operator-=(const civector& v) {
08905 *this = *this - v;
08906 return *this;
08907 }
08908
08909 inline scimatrix_subv& scimatrix_subv::operator-=(const civector_slice& v) {
08910 *this = *this - v;
08911 return *this;
08912 }
08913
08914 inline scimatrix_subv& scimatrix_subv::operator|=(const srvector& v) {
08915 *this = *this | v;
08916 return *this;
08917 }
08918
08919 inline scimatrix_subv& scimatrix_subv::operator|=(const srvector_slice& v) {
08920 *this = *this | v;
08921 return *this;
08922 }
08923
08924 inline scimatrix_subv& scimatrix_subv::operator|=(const rvector& v) {
08925 *this = *this | v;
08926 return *this;
08927 }
08928
08929 inline scimatrix_subv& scimatrix_subv::operator|=(const rvector_slice& v) {
08930 *this = *this | v;
08931 return *this;
08932 }
08933
08934 inline scimatrix_subv& scimatrix_subv::operator|=(const sivector& v) {
08935 *this = *this | v;
08936 return *this;
08937 }
08938
08939 inline scimatrix_subv& scimatrix_subv::operator|=(const sivector_slice& v) {
08940 *this = *this | v;
08941 return *this;
08942 }
08943
08944 inline scimatrix_subv& scimatrix_subv::operator|=(const ivector& v) {
08945 *this = *this | v;
08946 return *this;
08947 }
08948
08949 inline scimatrix_subv& scimatrix_subv::operator|=(const ivector_slice& v) {
08950 *this = *this | v;
08951 return *this;
08952 }
08953
08954 inline scimatrix_subv& scimatrix_subv::operator|=(const scvector& v) {
08955 *this = *this | v;
08956 return *this;
08957 }
08958
08959 inline scimatrix_subv& scimatrix_subv::operator|=(const scvector_slice& v) {
08960 *this = *this | v;
08961 return *this;
08962 }
08963
08964 inline scimatrix_subv& scimatrix_subv::operator|=(const cvector& v) {
08965 *this = *this | v;
08966 return *this;
08967 }
08968
08969 inline scimatrix_subv& scimatrix_subv::operator|=(const cvector_slice& v) {
08970 *this = *this | v;
08971 return *this;
08972 }
08973
08974 inline scimatrix_subv& scimatrix_subv::operator|=(const scivector& v) {
08975 *this = *this | v;
08976 return *this;
08977 }
08978
08979 inline scimatrix_subv& scimatrix_subv::operator|=(const scivector_slice& v) {
08980 *this = *this | v;
08981 return *this;
08982 }
08983
08984 inline scimatrix_subv& scimatrix_subv::operator|=(const civector& v) {
08985 *this = *this | v;
08986 return *this;
08987 }
08988
08989 inline scimatrix_subv& scimatrix_subv::operator|=(const civector_slice& v) {
08990 *this = *this | v;
08991 return *this;
08992 }
08993
08994 inline cimatrix_subv& cimatrix_subv::operator+=(const srmatrix_subv& v) {
08995 *this += rvector(v);
08996 return *this;
08997 }
08998
08999 inline cimatrix_subv& cimatrix_subv::operator+=(const scmatrix_subv& v) {
09000 *this += cvector(v);
09001 return *this;
09002 }
09003
09004 inline cimatrix_subv& cimatrix_subv::operator+=(const simatrix_subv& v) {
09005 *this += ivector(v);
09006 return *this;
09007 }
09008
09009 inline cimatrix_subv& cimatrix_subv::operator+=(const scimatrix_subv& v) {
09010 *this += civector(v);
09011 return *this;
09012 }
09013
09014 inline cimatrix_subv& cimatrix_subv::operator+=(const srvector& v) {
09015 *this += rvector(v);
09016 return *this;
09017 }
09018
09019 inline cimatrix_subv& cimatrix_subv::operator+=(const scvector& v) {
09020 *this += cvector(v);
09021 return *this;
09022 }
09023
09024 inline cimatrix_subv& cimatrix_subv::operator+=(const sivector& v) {
09025 *this += ivector(v);
09026 return *this;
09027 }
09028
09029 inline cimatrix_subv& cimatrix_subv::operator+=(const scivector& v) {
09030 *this += civector(v);
09031 return *this;
09032 }
09033
09034 inline cimatrix_subv& cimatrix_subv::operator+=(const srvector_slice& v) {
09035 *this += rvector(v);
09036 return *this;
09037 }
09038
09039 inline cimatrix_subv& cimatrix_subv::operator+=(const scvector_slice& v) {
09040 *this += cvector(v);
09041 return *this;
09042 }
09043
09044 inline cimatrix_subv& cimatrix_subv::operator+=(const sivector_slice& v) {
09045 *this += ivector(v);
09046 return *this;
09047 }
09048
09049 inline cimatrix_subv& cimatrix_subv::operator+=(const scivector_slice& v) {
09050 *this += civector(v);
09051 return *this;
09052 }
09053
09054 inline cimatrix_subv& cimatrix_subv::operator-=(const srmatrix_subv& v) {
09055 *this -= rvector(v);
09056 return *this;
09057 }
09058
09059 inline cimatrix_subv& cimatrix_subv::operator-=(const scmatrix_subv& v) {
09060 *this -= cvector(v);
09061 return *this;
09062 }
09063
09064 inline cimatrix_subv& cimatrix_subv::operator-=(const simatrix_subv& v) {
09065 *this -= ivector(v);
09066 return *this;
09067 }
09068
09069 inline cimatrix_subv& cimatrix_subv::operator-=(const scimatrix_subv& v) {
09070 *this -= civector(v);
09071 return *this;
09072 }
09073
09074 inline cimatrix_subv& cimatrix_subv::operator-=(const srvector& v) {
09075 *this -= rvector(v);
09076 return *this;
09077 }
09078
09079 inline cimatrix_subv& cimatrix_subv::operator-=(const scvector& v) {
09080 *this -= cvector(v);
09081 return *this;
09082 }
09083
09084 inline cimatrix_subv& cimatrix_subv::operator-=(const sivector& v) {
09085 *this -= ivector(v);
09086 return *this;
09087 }
09088
09089 inline cimatrix_subv& cimatrix_subv::operator-=(const scivector& v) {
09090 *this -= civector(v);
09091 return *this;
09092 }
09093
09094 inline cimatrix_subv& cimatrix_subv::operator-=(const srvector_slice& v) {
09095 *this -= rvector(v);
09096 return *this;
09097 }
09098
09099 inline cimatrix_subv& cimatrix_subv::operator-=(const scvector_slice& v) {
09100 *this -= cvector(v);
09101 return *this;
09102 }
09103
09104 inline cimatrix_subv& cimatrix_subv::operator-=(const sivector_slice& v) {
09105 *this -= ivector(v);
09106 return *this;
09107 }
09108
09109 inline cimatrix_subv& cimatrix_subv::operator-=(const scivector_slice& v) {
09110 *this -= civector(v);
09111 return *this;
09112 }
09113
09114 inline cimatrix_subv& cimatrix_subv::operator|=(const srmatrix_subv& v) {
09115 *this |= rvector(v);
09116 return *this;
09117 }
09118
09119 inline cimatrix_subv& cimatrix_subv::operator|=(const scmatrix_subv& v) {
09120 *this |= cvector(v);
09121 return *this;
09122 }
09123
09124 inline cimatrix_subv& cimatrix_subv::operator|=(const simatrix_subv& v) {
09125 *this |= ivector(v);
09126 return *this;
09127 }
09128
09129 inline cimatrix_subv& cimatrix_subv::operator|=(const scimatrix_subv& v) {
09130 *this |= civector(v);
09131 return *this;
09132 }
09133
09134 inline cimatrix_subv& cimatrix_subv::operator|=(const srvector& v) {
09135 *this |= rvector(v);
09136 return *this;
09137 }
09138
09139 inline cimatrix_subv& cimatrix_subv::operator|=(const scvector& v) {
09140 *this |= cvector(v);
09141 return *this;
09142 }
09143
09144 inline cimatrix_subv& cimatrix_subv::operator|=(const sivector& v) {
09145 *this |= ivector(v);
09146 return *this;
09147 }
09148
09149 inline cimatrix_subv& cimatrix_subv::operator|=(const scivector& v) {
09150 *this |= civector(v);
09151 return *this;
09152 }
09153
09154 inline cimatrix_subv& cimatrix_subv::operator|=(const srvector_slice& v) {
09155 *this |= rvector(v);
09156 return *this;
09157 }
09158
09159 inline cimatrix_subv& cimatrix_subv::operator|=(const scvector_slice& v) {
09160 *this |= cvector(v);
09161 return *this;
09162 }
09163
09164 inline cimatrix_subv& cimatrix_subv::operator|=(const sivector_slice& v) {
09165 *this |= ivector(v);
09166 return *this;
09167 }
09168
09169 inline cimatrix_subv& cimatrix_subv::operator|=(const scivector_slice& v) {
09170 *this |= civector(v);
09171 return *this;
09172 }
09173
09174 inline cimatrix_subv& cimatrix_subv::operator=(const srvector& v) {
09175 *this = rvector(v);
09176 return *this;
09177 }
09178
09179 inline cimatrix_subv& cimatrix_subv::operator=(const scvector& v) {
09180 *this = cvector(v);
09181 return *this;
09182 }
09183
09184 inline cimatrix_subv& cimatrix_subv::operator=(const sivector& v) {
09185 *this = ivector(v);
09186 return *this;
09187 }
09188
09189 inline cimatrix_subv& cimatrix_subv::operator=(const scivector& v) {
09190 *this = civector(v);
09191 return *this;
09192 }
09193
09194 inline cimatrix_subv& cimatrix_subv::operator=(const srvector_slice& v) {
09195 *this = rvector(v);
09196 return *this;
09197 }
09198
09199 inline cimatrix_subv& cimatrix_subv::operator=(const scvector_slice& v) {
09200 *this = cvector(v);
09201 return *this;
09202 }
09203
09204 inline cimatrix_subv& cimatrix_subv::operator=(const sivector_slice& v) {
09205 *this = ivector(v);
09206 return *this;
09207 }
09208
09209 inline cimatrix_subv& cimatrix_subv::operator=(const scivector_slice& v) {
09210 *this = civector(v);
09211 return *this;
09212 }
09213
09214 inline cimatrix_subv& cimatrix_subv::operator=(const srmatrix_subv& v) {
09215 *this = rvector(v);
09216 return *this;
09217 }
09218
09219 inline cimatrix_subv& cimatrix_subv::operator=(const simatrix_subv& v) {
09220 *this = ivector(v);
09221 return *this;
09222 }
09223
09224 inline cimatrix_subv& cimatrix_subv::operator=(const scmatrix_subv& v) {
09225 *this = cvector(v);
09226 return *this;
09227 }
09228
09229 inline cimatrix_subv& cimatrix_subv::operator=(const scimatrix_subv& v) {
09230 *this = civector(v);
09231 return *this;
09232 }
09233
09234 inline cimatrix_subv& cimatrix_subv::operator&=(const simatrix_subv& v) {
09235 *this &= ivector(v);
09236 return *this;
09237 }
09238
09239 inline cimatrix_subv& cimatrix_subv::operator&=(const scimatrix_subv& v) {
09240 *this &= civector(v);
09241 return *this;
09242 }
09243
09244 inline cimatrix_subv& cimatrix_subv::operator&=(const sivector& v) {
09245 *this &= ivector(v);
09246 return *this;
09247 }
09248
09249 inline cimatrix_subv& cimatrix_subv::operator&=(const scivector& v) {
09250 *this &= civector(v);
09251 return *this;
09252 }
09253
09254 inline cimatrix_subv& cimatrix_subv::operator&=(const sivector_slice& v) {
09255 *this &= ivector(v);
09256 return *this;
09257 }
09258
09259 inline cimatrix_subv& cimatrix_subv::operator&=(const scivector_slice& v) {
09260 *this &= civector(v);
09261 return *this;
09262 }
09263
09264 inline bool operator==(const scimatrix_subv& v1, const srvector& v2) {
09265 return scivector(v1) == v2;
09266 }
09267
09268 inline bool operator==(const scimatrix_subv& v1, const scvector& v2) {
09269 return scivector(v1) == v2;
09270 }
09271
09272 inline bool operator==(const scimatrix_subv& v1, const sivector& v2) {
09273 return scivector(v1) == v2;
09274 }
09275
09276 inline bool operator==(const scimatrix_subv& v1, const scivector& v2) {
09277 return scivector(v1) == v2;
09278 }
09279
09280 inline bool operator==(const srmatrix_subv& v1, const scivector& v2) {
09281 return srvector(v1) == v2;
09282 }
09283
09284 inline bool operator==(const scmatrix_subv& v1, const scivector& v2) {
09285 return scvector(v1) == v2;
09286 }
09287
09288 inline bool operator==(const simatrix_subv& v1, const scivector& v2) {
09289 return sivector(v1) == v2;
09290 }
09291
09292 inline bool operator==(const scimatrix_subv& v1, const srvector_slice& v2) {
09293 return scivector(v1) == v2;
09294 }
09295
09296 inline bool operator==(const scimatrix_subv& v1, const sivector_slice& v2) {
09297 return scivector(v1) == v2;
09298 }
09299
09300 inline bool operator==(const scimatrix_subv& v1, const scvector_slice& v2) {
09301 return scivector(v1) == v2;
09302 }
09303
09304 inline bool operator==(const scimatrix_subv& v1, const scivector_slice& v2) {
09305 return scivector(v1) == v2;
09306 }
09307
09308 inline bool operator==(const srmatrix_subv& v1, const scivector_slice& v2) {
09309 return srvector(v1) == v2;
09310 }
09311
09312 inline bool operator==(const scmatrix_subv& v1, const scivector_slice& v2) {
09313 return scvector(v1) == v2;
09314 }
09315
09316 inline bool operator==(const simatrix_subv& v1, const scivector_slice& v2) {
09317 return sivector(v1) == v2;
09318 }
09319
09320 inline bool operator==(const scimatrix_subv& v1, const rvector& v2) {
09321 return scivector(v1) == v2;
09322 }
09323
09324 inline bool operator==(const scimatrix_subv& v1, const cvector& v2) {
09325 return scivector(v1) == v2;
09326 }
09327
09328 inline bool operator==(const scimatrix_subv& v1, const ivector& v2) {
09329 return scivector(v1) == v2;
09330 }
09331
09332 inline bool operator==(const scimatrix_subv& v1, const civector& v2) {
09333 return scivector(v1) == v2;
09334 }
09335
09336 inline bool operator==(const srmatrix_subv& v1, const civector& v2) {
09337 return srvector(v1) == v2;
09338 }
09339
09340 inline bool operator==(const simatrix_subv& v1, const civector& v2) {
09341 return sivector(v1) == v2;
09342 }
09343
09344 inline bool operator==(const scmatrix_subv& v1, const civector& v2) {
09345 return scivector(v1) == v2;
09346 }
09347
09348 inline bool operator==(const scimatrix_subv& v1, const rvector_slice& v2) {
09349 return scivector(v1) == v2;
09350 }
09351
09352 inline bool operator==(const scimatrix_subv& v1, const cvector_slice& v2) {
09353 return scivector(v1) == v2;
09354 }
09355
09356 inline bool operator==(const scimatrix_subv& v1, const ivector_slice& v2) {
09357 return scivector(v1) == v2;
09358 }
09359
09360 inline bool operator==(const scimatrix_subv& v1, const civector_slice& v2) {
09361 return scivector(v1) == v2;
09362 }
09363
09364 inline bool operator==(const srmatrix_subv& v1, const civector_slice& v2) {
09365 return srvector(v1) == v2;
09366 }
09367
09368 inline bool operator==(const scmatrix_subv& v1, const civector_slice& v2) {
09369 return scivector(v1) == v2;
09370 }
09371
09372 inline bool operator==(const simatrix_subv& v1, const civector_slice& v2) {
09373 return scivector(v1) == v2;
09374 }
09375
09376 inline bool operator==(const scivector& v1, const srmatrix_subv& v2) {
09377 return v1 == srvector(v2);
09378 }
09379
09380 inline bool operator==(const scivector& v1, const scmatrix_subv& v2) {
09381 return v1 == scvector(v2);
09382 }
09383
09384 inline bool operator==(const scivector& v1, const simatrix_subv& v2) {
09385 return v1 == sivector(v2);
09386 }
09387
09388 inline bool operator==(const scivector& v1, const scimatrix_subv& v2) {
09389 return v1 == scivector(v2);
09390 }
09391
09392 inline bool operator==(const srvector& v1, const scimatrix_subv& v2) {
09393 return v1 == scivector(v2);
09394 }
09395
09396 inline bool operator==(const scvector& v1, const scimatrix_subv& v2) {
09397 return v1 == scivector(v2);
09398 }
09399
09400 inline bool operator==(const sivector& v1, const scimatrix_subv& v2) {
09401 return v1 == scivector(v2);
09402 }
09403
09404 inline bool operator==(const scivector_slice& v1, const srmatrix_subv& v2) {
09405 return v1 == srvector(v2);
09406 }
09407
09408 inline bool operator==(const scivector_slice& v1, const simatrix_subv& v2) {
09409 return v1 == sivector(v2);
09410 }
09411
09412 inline bool operator==(const scivector_slice& v1, const scmatrix_subv& v2) {
09413 return v1 == scvector(v2);
09414 }
09415
09416 inline bool operator==(const scivector_slice& v1, const scimatrix_subv& v2) {
09417 return v1 == scivector(v2);
09418 }
09419
09420 inline bool operator==(const srvector_slice& v1, const scimatrix_subv& v2) {
09421 return v1 == scivector(v2);
09422 }
09423
09424 inline bool operator==(const scvector_slice& v1, const scimatrix_subv& v2) {
09425 return v1 == scivector(v2);
09426 }
09427
09428 inline bool operator==(const sivector_slice& v1, const scimatrix_subv& v2) {
09429 return v1 == scivector(v2);
09430 }
09431
09432 inline bool operator==(const civector& v1, const srmatrix_subv& v2) {
09433 return v1 == srvector(v2);
09434 }
09435
09436 inline bool operator==(const civector& v1, const simatrix_subv& v2) {
09437 return v1 == sivector(v2);
09438 }
09439
09440 inline bool operator==(const civector& v1, const scmatrix_subv& v2) {
09441 return v1 == scvector(v2);
09442 }
09443
09444 inline bool operator==(const civector& v1, const scimatrix_subv& v2) {
09445 return v1 == scivector(v2);
09446 }
09447
09448 inline bool operator==(const rvector& v1, const scimatrix_subv& v2) {
09449 return v1 == scivector(v2);
09450 }
09451
09452 inline bool operator==(const cvector& v1, const scimatrix_subv& v2) {
09453 return v1 == scivector(v2);
09454 }
09455
09456 inline bool operator==(const ivector& v1, const scimatrix_subv& v2) {
09457 return v1 == scivector(v2);
09458 }
09459
09460 inline bool operator==(const civector_slice& v1, const srmatrix_subv& v2) {
09461 return v1 == srvector(v2);
09462 }
09463
09464 inline bool operator==(const civector_slice& v1, const simatrix_subv& v2) {
09465 return v1 == sivector(v2);
09466 }
09467
09468 inline bool operator==(const civector_slice& v1, const scmatrix_subv& v2) {
09469 return v1 == scvector(v2);
09470 }
09471
09472 inline bool operator==(const civector_slice& v1, const scimatrix_subv& v2) {
09473 return v1 == scivector(v2);
09474 }
09475
09476 inline bool operator==(const rvector_slice& v1, const scimatrix_subv& v2) {
09477 return v1 == scivector(v2);
09478 }
09479
09480 inline bool operator==(const cvector_slice& v1, const scimatrix_subv& v2) {
09481 return v1 == scivector(v2);
09482 }
09483
09484 inline bool operator==(const ivector_slice& v1, const scimatrix_subv& v2) {
09485 return v1 == scivector(v2);
09486 }
09487
09488 inline bool operator!=(const scimatrix_subv& v1, const srvector& v2) {
09489 return scivector(v1) != v2;
09490 }
09491
09492 inline bool operator!=(const scimatrix_subv& v1, const scvector& v2) {
09493 return scivector(v1) != v2;
09494 }
09495
09496 inline bool operator!=(const scimatrix_subv& v1, const sivector& v2) {
09497 return scivector(v1) != v2;
09498 }
09499
09500 inline bool operator!=(const scimatrix_subv& v1, const scivector& v2) {
09501 return scivector(v1) != v2;
09502 }
09503
09504 inline bool operator!=(const srmatrix_subv& v1, const scivector& v2) {
09505 return srvector(v1) != v2;
09506 }
09507
09508 inline bool operator!=(const scmatrix_subv& v1, const scivector& v2) {
09509 return scvector(v1) != v2;
09510 }
09511
09512 inline bool operator!=(const simatrix_subv& v1, const scivector& v2) {
09513 return sivector(v1) != v2;
09514 }
09515
09516 inline bool operator!=(const scimatrix_subv& v1, const srvector_slice& v2) {
09517 return scivector(v1) != v2;
09518 }
09519
09520 inline bool operator!=(const scimatrix_subv& v1, const sivector_slice& v2) {
09521 return scivector(v1) != v2;
09522 }
09523
09524 inline bool operator!=(const scimatrix_subv& v1, const scvector_slice& v2) {
09525 return scivector(v1) != v2;
09526 }
09527
09528 inline bool operator!=(const scimatrix_subv& v1, const scivector_slice& v2) {
09529 return scivector(v1) != v2;
09530 }
09531
09532 inline bool operator!=(const srmatrix_subv& v1, const scivector_slice& v2) {
09533 return srvector(v1) != v2;
09534 }
09535
09536 inline bool operator!=(const scmatrix_subv& v1, const scivector_slice& v2) {
09537 return scvector(v1) != v2;
09538 }
09539
09540 inline bool operator!=(const simatrix_subv& v1, const scivector_slice& v2) {
09541 return sivector(v1) != v2;
09542 }
09543
09544 inline bool operator!=(const scimatrix_subv& v1, const rvector& v2) {
09545 return scivector(v1) != v2;
09546 }
09547
09548 inline bool operator!=(const scimatrix_subv& v1, const cvector& v2) {
09549 return scivector(v1) != v2;
09550 }
09551
09552 inline bool operator!=(const scimatrix_subv& v1, const ivector& v2) {
09553 return scivector(v1) != v2;
09554 }
09555
09556 inline bool operator!=(const scimatrix_subv& v1, const civector& v2) {
09557 return scivector(v1) != v2;
09558 }
09559
09560 inline bool operator!=(const srmatrix_subv& v1, const civector& v2) {
09561 return srvector(v1) != v2;
09562 }
09563
09564 inline bool operator!=(const simatrix_subv& v1, const civector& v2) {
09565 return sivector(v1) != v2;
09566 }
09567
09568 inline bool operator!=(const scmatrix_subv& v1, const civector& v2) {
09569 return scivector(v1) != v2;
09570 }
09571
09572 inline bool operator!=(const scimatrix_subv& v1, const rvector_slice& v2) {
09573 return scivector(v1) != v2;
09574 }
09575
09576 inline bool operator!=(const scimatrix_subv& v1, const cvector_slice& v2) {
09577 return scivector(v1) != v2;
09578 }
09579
09580 inline bool operator!=(const scimatrix_subv& v1, const ivector_slice& v2) {
09581 return scivector(v1) != v2;
09582 }
09583
09584 inline bool operator!=(const scimatrix_subv& v1, const civector_slice& v2) {
09585 return scivector(v1) != v2;
09586 }
09587
09588 inline bool operator!=(const srmatrix_subv& v1, const civector_slice& v2) {
09589 return srvector(v1) != v2;
09590 }
09591
09592 inline bool operator!=(const scmatrix_subv& v1, const civector_slice& v2) {
09593 return scivector(v1) != v2;
09594 }
09595
09596 inline bool operator!=(const simatrix_subv& v1, const civector_slice& v2) {
09597 return scivector(v1) != v2;
09598 }
09599
09600 inline bool operator!=(const scivector& v1, const srmatrix_subv& v2) {
09601 return v1 != srvector(v2);
09602 }
09603
09604 inline bool operator!=(const scivector& v1, const scmatrix_subv& v2) {
09605 return v1 != scvector(v2);
09606 }
09607
09608 inline bool operator!=(const scivector& v1, const simatrix_subv& v2) {
09609 return v1 != sivector(v2);
09610 }
09611
09612 inline bool operator!=(const scivector& v1, const scimatrix_subv& v2) {
09613 return v1 != scivector(v2);
09614 }
09615
09616 inline bool operator!=(const srvector& v1, const scimatrix_subv& v2) {
09617 return v1 != scivector(v2);
09618 }
09619
09620 inline bool operator!=(const scvector& v1, const scimatrix_subv& v2) {
09621 return v1 != scivector(v2);
09622 }
09623
09624 inline bool operator!=(const sivector& v1, const scimatrix_subv& v2) {
09625 return v1 != scivector(v2);
09626 }
09627
09628 inline bool operator!=(const scivector_slice& v1, const srmatrix_subv& v2) {
09629 return v1 != srvector(v2);
09630 }
09631
09632 inline bool operator!=(const scivector_slice& v1, const simatrix_subv& v2) {
09633 return v1 != sivector(v2);
09634 }
09635
09636 inline bool operator!=(const scivector_slice& v1, const scmatrix_subv& v2) {
09637 return v1 != scvector(v2);
09638 }
09639
09640 inline bool operator!=(const scivector_slice& v1, const scimatrix_subv& v2) {
09641 return v1 != scivector(v2);
09642 }
09643
09644 inline bool operator!=(const srvector_slice& v1, const scimatrix_subv& v2) {
09645 return v1 != scivector(v2);
09646 }
09647
09648 inline bool operator!=(const scvector_slice& v1, const scimatrix_subv& v2) {
09649 return v1 != scivector(v2);
09650 }
09651
09652 inline bool operator!=(const sivector_slice& v1, const scimatrix_subv& v2) {
09653 return v1 != scivector(v2);
09654 }
09655
09656 inline bool operator!=(const civector& v1, const srmatrix_subv& v2) {
09657 return v1 != srvector(v2);
09658 }
09659
09660 inline bool operator!=(const civector& v1, const simatrix_subv& v2) {
09661 return v1 != sivector(v2);
09662 }
09663
09664 inline bool operator!=(const civector& v1, const scmatrix_subv& v2) {
09665 return v1 != scivector(v2);
09666 }
09667
09668 inline bool operator!=(const civector& v1, const scimatrix_subv& v2) {
09669 return v1 != scivector(v2);
09670 }
09671
09672 inline bool operator!=(const rvector& v1, const scimatrix_subv& v2) {
09673 return v1 != scivector(v2);
09674 }
09675
09676 inline bool operator!=(const cvector& v1, const scimatrix_subv& v2) {
09677 return v1 != scivector(v2);
09678 }
09679
09680 inline bool operator!=(const ivector& v1, const scimatrix_subv& v2) {
09681 return v1 != scivector(v2);
09682 }
09683
09684 inline bool operator!=(const civector_slice& v1, const srmatrix_subv& v2) {
09685 return v1 != srvector(v2);
09686 }
09687
09688 inline bool operator!=(const civector_slice& v1, const simatrix_subv& v2) {
09689 return v1 != sivector(v2);
09690 }
09691
09692 inline bool operator!=(const civector_slice& v1, const scmatrix_subv& v2) {
09693 return v1 != scvector(v2);
09694 }
09695
09696 inline bool operator!=(const civector_slice& v1, const scimatrix_subv& v2) {
09697 return v1 != scivector(v2);
09698 }
09699
09700 inline bool operator!=(const rvector_slice& v1, const scimatrix_subv& v2) {
09701 return v1 != scivector(v2);
09702 }
09703
09704 inline bool operator!=(const cvector_slice& v1, const scimatrix_subv& v2) {
09705 return v1 != scivector(v2);
09706 }
09707
09708 inline bool operator!=(const ivector_slice& v1, const scimatrix_subv& v2) {
09709 return v1 != scivector(v2);
09710 }
09711
09712 inline bool operator<(const scimatrix_subv& v1, const sivector& v2) {
09713 return scivector(v1) < v2;
09714 }
09715
09716 inline bool operator<(const scimatrix_subv& v1, const scivector& v2) {
09717 return scivector(v1) < v2;
09718 }
09719
09720 inline bool operator<(const srmatrix_subv& v1, const scivector& v2) {
09721 return srvector(v1) < v2;
09722 }
09723
09724 inline bool operator<(const scmatrix_subv& v1, const scivector& v2) {
09725 return scvector(v1) < v2;
09726 }
09727
09728 inline bool operator<(const simatrix_subv& v1, const scivector& v2) {
09729 return sivector(v1) < v2;
09730 }
09731
09732 inline bool operator<(const scimatrix_subv& v1, const sivector_slice& v2) {
09733 return scivector(v1) < v2;
09734 }
09735
09736 inline bool operator<(const scimatrix_subv& v1, const scivector_slice& v2) {
09737 return scivector(v1) < v2;
09738 }
09739
09740 inline bool operator<(const srmatrix_subv& v1, const scivector_slice& v2) {
09741 return srvector(v1) < v2;
09742 }
09743
09744 inline bool operator<(const scmatrix_subv& v1, const scivector_slice& v2) {
09745 return scvector(v1) < v2;
09746 }
09747
09748 inline bool operator<(const simatrix_subv& v1, const scivector_slice& v2) {
09749 return sivector(v1) < v2;
09750 }
09751
09752 inline bool operator<(const scimatrix_subv& v1, const ivector& v2) {
09753 return scivector(v1) < v2;
09754 }
09755
09756 inline bool operator<(const scimatrix_subv& v1, const civector& v2) {
09757 return scivector(v1) < v2;
09758 }
09759
09760 inline bool operator<(const srmatrix_subv& v1, const civector& v2) {
09761 return srvector(v1) < v2;
09762 }
09763
09764 inline bool operator<(const simatrix_subv& v1, const civector& v2) {
09765 return sivector(v1) < v2;
09766 }
09767
09768 inline bool operator<(const scmatrix_subv& v1, const civector& v2) {
09769 return scivector(v1) < v2;
09770 }
09771
09772 inline bool operator<(const scimatrix_subv& v1, const ivector_slice& v2) {
09773 return scivector(v1) < v2;
09774 }
09775
09776 inline bool operator<(const scimatrix_subv& v1, const civector_slice& v2) {
09777 return scivector(v1) < v2;
09778 }
09779
09780 inline bool operator<(const srmatrix_subv& v1, const civector_slice& v2) {
09781 return srvector(v1) < v2;
09782 }
09783
09784 inline bool operator<(const scmatrix_subv& v1, const civector_slice& v2) {
09785 return scivector(v1) < v2;
09786 }
09787
09788 inline bool operator<(const simatrix_subv& v1, const civector_slice& v2) {
09789 return scivector(v1) < v2;
09790 }
09791
09792 inline bool operator<(const scivector& v1, const simatrix_subv& v2) {
09793 return v1 < sivector(v2);
09794 }
09795
09796 inline bool operator<(const scivector& v1, const scimatrix_subv& v2) {
09797 return v1 < scivector(v2);
09798 }
09799
09800 inline bool operator<(const srvector& v1, const scimatrix_subv& v2) {
09801 return v1 < scivector(v2);
09802 }
09803
09804 inline bool operator<(const scvector& v1, const scimatrix_subv& v2) {
09805 return v1 < scivector(v2);
09806 }
09807
09808 inline bool operator<(const sivector& v1, const scimatrix_subv& v2) {
09809 return v1 < scivector(v2);
09810 }
09811
09812 inline bool operator<(const scivector_slice& v1, const simatrix_subv& v2) {
09813 return v1 < sivector(v2);
09814 }
09815
09816 inline bool operator<(const scivector_slice& v1, const scimatrix_subv& v2) {
09817 return v1 < scivector(v2);
09818 }
09819
09820 inline bool operator<(const srvector_slice& v1, const scimatrix_subv& v2) {
09821 return v1 < scivector(v2);
09822 }
09823
09824 inline bool operator<(const scvector_slice& v1, const scimatrix_subv& v2) {
09825 return v1 < scivector(v2);
09826 }
09827
09828 inline bool operator<(const sivector_slice& v1, const scimatrix_subv& v2) {
09829 return v1 < scivector(v2);
09830 }
09831
09832 inline bool operator<(const civector& v1, const simatrix_subv& v2) {
09833 return v1 < sivector(v2);
09834 }
09835
09836 inline bool operator<(const civector& v1, const scimatrix_subv& v2) {
09837 return v1 < scivector(v2);
09838 }
09839
09840 inline bool operator<(const rvector& v1, const scimatrix_subv& v2) {
09841 return v1 < scivector(v2);
09842 }
09843
09844 inline bool operator<(const cvector& v1, const scimatrix_subv& v2) {
09845 return v1 < scivector(v2);
09846 }
09847
09848 inline bool operator<(const ivector& v1, const scimatrix_subv& v2) {
09849 return v1 < scivector(v2);
09850 }
09851
09852 inline bool operator<(const civector_slice& v1, const simatrix_subv& v2) {
09853 return v1 < sivector(v2);
09854 }
09855
09856 inline bool operator<(const civector_slice& v1, const scimatrix_subv& v2) {
09857 return v1 < scivector(v2);
09858 }
09859
09860 inline bool operator<(const rvector_slice& v1, const scimatrix_subv& v2) {
09861 return v1 < scivector(v2);
09862 }
09863
09864 inline bool operator<(const cvector_slice& v1, const scimatrix_subv& v2) {
09865 return v1 < scivector(v2);
09866 }
09867
09868 inline bool operator<(const ivector_slice& v1, const scimatrix_subv& v2) {
09869 return v1 < scivector(v2);
09870 }
09871
09872 inline bool operator<=(const scimatrix_subv& v1, const sivector& v2) {
09873 return scivector(v1) <= v2;
09874 }
09875
09876 inline bool operator<=(const scimatrix_subv& v1, const scivector& v2) {
09877 return scivector(v1) <= v2;
09878 }
09879
09880 inline bool operator<=(const srmatrix_subv& v1, const scivector& v2) {
09881 return srvector(v1) <= v2;
09882 }
09883
09884 inline bool operator<=(const scmatrix_subv& v1, const scivector& v2) {
09885 return scvector(v1) <= v2;
09886 }
09887
09888 inline bool operator<=(const simatrix_subv& v1, const scivector& v2) {
09889 return sivector(v1) <= v2;
09890 }
09891
09892 inline bool operator<=(const scimatrix_subv& v1, const sivector_slice& v2) {
09893 return scivector(v1) <= v2;
09894 }
09895
09896 inline bool operator<=(const scimatrix_subv& v1, const scivector_slice& v2) {
09897 return scivector(v1) <= v2;
09898 }
09899
09900 inline bool operator<=(const srmatrix_subv& v1, const scivector_slice& v2) {
09901 return srvector(v1) <= v2;
09902 }
09903
09904 inline bool operator<=(const scmatrix_subv& v1, const scivector_slice& v2) {
09905 return scvector(v1) <= v2;
09906 }
09907
09908 inline bool operator<=(const simatrix_subv& v1, const scivector_slice& v2) {
09909 return sivector(v1) <= v2;
09910 }
09911
09912 inline bool operator<=(const scimatrix_subv& v1, const ivector& v2) {
09913 return scivector(v1) <= v2;
09914 }
09915
09916 inline bool operator<=(const scimatrix_subv& v1, const civector& v2) {
09917 return scivector(v1) <= v2;
09918 }
09919
09920 inline bool operator<=(const srmatrix_subv& v1, const civector& v2) {
09921 return srvector(v1) <= v2;
09922 }
09923
09924 inline bool operator<=(const simatrix_subv& v1, const civector& v2) {
09925 return sivector(v1) <= v2;
09926 }
09927
09928 inline bool operator<=(const scmatrix_subv& v1, const civector& v2) {
09929 return scivector(v1) <= v2;
09930 }
09931
09932 inline bool operator<=(const scimatrix_subv& v1, const ivector_slice& v2) {
09933 return scivector(v1) <= v2;
09934 }
09935
09936 inline bool operator<=(const scimatrix_subv& v1, const civector_slice& v2) {
09937 return scivector(v1) <= v2;
09938 }
09939
09940 inline bool operator<=(const srmatrix_subv& v1, const civector_slice& v2) {
09941 return srvector(v1) <= v2;
09942 }
09943
09944 inline bool operator<=(const scmatrix_subv& v1, const civector_slice& v2) {
09945 return scivector(v1) <= v2;
09946 }
09947
09948 inline bool operator<=(const simatrix_subv& v1, const civector_slice& v2) {
09949 return scivector(v1) <= v2;
09950 }
09951
09952 inline bool operator<=(const scivector& v1, const simatrix_subv& v2) {
09953 return v1 <= sivector(v2);
09954 }
09955
09956 inline bool operator<=(const scivector& v1, const scimatrix_subv& v2) {
09957 return v1 <= scivector(v2);
09958 }
09959
09960 inline bool operator<=(const srvector& v1, const scimatrix_subv& v2) {
09961 return v1 <= scivector(v2);
09962 }
09963
09964 inline bool operator<=(const scvector& v1, const scimatrix_subv& v2) {
09965 return v1 <= scivector(v2);
09966 }
09967
09968 inline bool operator<=(const sivector& v1, const scimatrix_subv& v2) {
09969 return v1 <= scivector(v2);
09970 }
09971
09972 inline bool operator<=(const scivector_slice& v1, const simatrix_subv& v2) {
09973 return v1 <= sivector(v2);
09974 }
09975
09976 inline bool operator<=(const scivector_slice& v1, const scimatrix_subv& v2) {
09977 return v1 <= scivector(v2);
09978 }
09979
09980 inline bool operator<=(const srvector_slice& v1, const scimatrix_subv& v2) {
09981 return v1 <= scivector(v2);
09982 }
09983
09984 inline bool operator<=(const scvector_slice& v1, const scimatrix_subv& v2) {
09985 return v1 <= scivector(v2);
09986 }
09987
09988 inline bool operator<=(const sivector_slice& v1, const scimatrix_subv& v2) {
09989 return v1 <= scivector(v2);
09990 }
09991
09992 inline bool operator<=(const civector& v1, const simatrix_subv& v2) {
09993 return v1 <= sivector(v2);
09994 }
09995
09996 inline bool operator<=(const civector& v1, const scimatrix_subv& v2) {
09997 return v1 <= scivector(v2);
09998 }
09999
10000 inline bool operator<=(const rvector& v1, const scimatrix_subv& v2) {
10001 return v1 <= scivector(v2);
10002 }
10003
10004 inline bool operator<=(const cvector& v1, const scimatrix_subv& v2) {
10005 return v1 <= scivector(v2);
10006 }
10007
10008 inline bool operator<=(const ivector& v1, const scimatrix_subv& v2) {
10009 return v1 <= scivector(v2);
10010 }
10011
10012 inline bool operator<=(const civector_slice& v1, const simatrix_subv& v2) {
10013 return v1 <= sivector(v2);
10014 }
10015
10016 inline bool operator<=(const civector_slice& v1, const scimatrix_subv& v2) {
10017 return v1 <= scivector(v2);
10018 }
10019
10020 inline bool operator<=(const rvector_slice& v1, const scimatrix_subv& v2) {
10021 return v1 <= scivector(v2);
10022 }
10023
10024 inline bool operator<=(const cvector_slice& v1, const scimatrix_subv& v2) {
10025 return v1 <= scivector(v2);
10026 }
10027
10028 inline bool operator<=(const ivector_slice& v1, const scimatrix_subv& v2) {
10029 return v1 <= scivector(v2);
10030 }
10031
10032 inline bool operator>(const scimatrix_subv& v1, const srvector& v2) {
10033 return scivector(v1) > v2;
10034 }
10035
10036 inline bool operator>(const scimatrix_subv& v1, const scvector& v2) {
10037 return scivector(v1) > v2;
10038 }
10039
10040 inline bool operator>(const scimatrix_subv& v1, const sivector& v2) {
10041 return scivector(v1) > v2;
10042 }
10043
10044 inline bool operator>(const scimatrix_subv& v1, const scivector& v2) {
10045 return scivector(v1) > v2;
10046 }
10047
10048 inline bool operator>(const simatrix_subv& v1, const scivector& v2) {
10049 return sivector(v1) > v2;
10050 }
10051
10052 inline bool operator>(const scimatrix_subv& v1, const srvector_slice& v2) {
10053 return scivector(v1) > v2;
10054 }
10055
10056 inline bool operator>(const scimatrix_subv& v1, const sivector_slice& v2) {
10057 return scivector(v1) > v2;
10058 }
10059
10060 inline bool operator>(const scimatrix_subv& v1, const scvector_slice& v2) {
10061 return scivector(v1) > v2;
10062 }
10063
10064 inline bool operator>(const scimatrix_subv& v1, const scivector_slice& v2) {
10065 return scivector(v1) > v2;
10066 }
10067
10068 inline bool operator>(const simatrix_subv& v1, const scivector_slice& v2) {
10069 return sivector(v1) > v2;
10070 }
10071
10072 inline bool operator>(const scimatrix_subv& v1, const rvector& v2) {
10073 return scivector(v1) > v2;
10074 }
10075
10076 inline bool operator>(const scimatrix_subv& v1, const cvector& v2) {
10077 return scivector(v1) > v2;
10078 }
10079
10080 inline bool operator>(const scimatrix_subv& v1, const ivector& v2) {
10081 return scivector(v1) > v2;
10082 }
10083
10084 inline bool operator>(const scimatrix_subv& v1, const civector& v2) {
10085 return scivector(v1) > v2;
10086 }
10087
10088 inline bool operator>(const simatrix_subv& v1, const civector& v2) {
10089 return sivector(v1) > v2;
10090 }
10091
10092 inline bool operator>(const scimatrix_subv& v1, const rvector_slice& v2) {
10093 return scivector(v1) > v2;
10094 }
10095
10096 inline bool operator>(const scimatrix_subv& v1, const cvector_slice& v2) {
10097 return scivector(v1) > v2;
10098 }
10099
10100 inline bool operator>(const scimatrix_subv& v1, const ivector_slice& v2) {
10101 return scivector(v1) > v2;
10102 }
10103
10104 inline bool operator>(const scimatrix_subv& v1, const civector_slice& v2) {
10105 return scivector(v1) > v2;
10106 }
10107
10108 inline bool operator>(const simatrix_subv& v1, const civector_slice& v2) {
10109 return scivector(v1) > v2;
10110 }
10111
10112 inline bool operator>(const scivector& v1, const srmatrix_subv& v2) {
10113 return v1 > srvector(v2);
10114 }
10115
10116 inline bool operator>(const scivector& v1, const scmatrix_subv& v2) {
10117 return v1 > scvector(v2);
10118 }
10119
10120 inline bool operator>(const scivector& v1, const simatrix_subv& v2) {
10121 return v1 > sivector(v2);
10122 }
10123
10124 inline bool operator>(const scivector& v1, const scimatrix_subv& v2) {
10125 return v1 > scivector(v2);
10126 }
10127
10128 inline bool operator>(const sivector& v1, const scimatrix_subv& v2) {
10129 return v1 > scivector(v2);
10130 }
10131
10132 inline bool operator>(const scivector_slice& v1, const srmatrix_subv& v2) {
10133 return v1 > srvector(v2);
10134 }
10135
10136 inline bool operator>(const scivector_slice& v1, const simatrix_subv& v2) {
10137 return v1 > sivector(v2);
10138 }
10139
10140 inline bool operator>(const scivector_slice& v1, const scmatrix_subv& v2) {
10141 return v1 > scvector(v2);
10142 }
10143
10144 inline bool operator>(const scivector_slice& v1, const scimatrix_subv& v2) {
10145 return v1 > scivector(v2);
10146 }
10147
10148 inline bool operator>(const sivector_slice& v1, const scimatrix_subv& v2) {
10149 return v1 > scivector(v2);
10150 }
10151
10152 inline bool operator>(const civector& v1, const srmatrix_subv& v2) {
10153 return v1 > srvector(v2);
10154 }
10155
10156 inline bool operator>(const civector& v1, const simatrix_subv& v2) {
10157 return v1 > sivector(v2);
10158 }
10159
10160 inline bool operator>(const civector& v1, const scmatrix_subv& v2) {
10161 return v1 > scvector(v2);
10162 }
10163
10164 inline bool operator>(const civector& v1, const scimatrix_subv& v2) {
10165 return v1 > scivector(v2);
10166 }
10167
10168 inline bool operator>(const ivector& v1, const scimatrix_subv& v2) {
10169 return v1 > scivector(v2);
10170 }
10171
10172 inline bool operator>(const civector_slice& v1, const srmatrix_subv& v2) {
10173 return v1 > srvector(v2);
10174 }
10175
10176 inline bool operator>(const civector_slice& v1, const simatrix_subv& v2) {
10177 return v1 > sivector(v2);
10178 }
10179
10180 inline bool operator>(const civector_slice& v1, const scmatrix_subv& v2) {
10181 return v1 > scvector(v2);
10182 }
10183
10184 inline bool operator>(const civector_slice& v1, const scimatrix_subv& v2) {
10185 return v1 > scivector(v2);
10186 }
10187
10188 inline bool operator>(const ivector_slice& v1, const scimatrix_subv& v2) {
10189 return v1 > scivector(v2);
10190 }
10191
10192 inline bool operator>=(const scimatrix_subv& v1, const srvector& v2) {
10193 return scivector(v1) >= v2;
10194 }
10195
10196 inline bool operator>=(const scimatrix_subv& v1, const scvector& v2) {
10197 return scivector(v1) >= v2;
10198 }
10199
10200 inline bool operator>=(const scimatrix_subv& v1, const sivector& v2) {
10201 return scivector(v1) >= v2;
10202 }
10203
10204 inline bool operator>=(const scimatrix_subv& v1, const scivector& v2) {
10205 return scivector(v1) >= v2;
10206 }
10207
10208 inline bool operator>=(const simatrix_subv& v1, const scivector& v2) {
10209 return sivector(v1) >= v2;
10210 }
10211
10212 inline bool operator>=(const scimatrix_subv& v1, const srvector_slice& v2) {
10213 return scivector(v1) >= v2;
10214 }
10215
10216 inline bool operator>=(const scimatrix_subv& v1, const sivector_slice& v2) {
10217 return scivector(v1) >= v2;
10218 }
10219
10220 inline bool operator>=(const scimatrix_subv& v1, const scvector_slice& v2) {
10221 return scivector(v1) >= v2;
10222 }
10223
10224 inline bool operator>=(const scimatrix_subv& v1, const scivector_slice& v2) {
10225 return scivector(v1) >= v2;
10226 }
10227
10228 inline bool operator>=(const simatrix_subv& v1, const scivector_slice& v2) {
10229 return sivector(v1) >= v2;
10230 }
10231
10232 inline bool operator>=(const scimatrix_subv& v1, const rvector& v2) {
10233 return scivector(v1) >= v2;
10234 }
10235
10236 inline bool operator>=(const scimatrix_subv& v1, const cvector& v2) {
10237 return scivector(v1) >= v2;
10238 }
10239
10240 inline bool operator>=(const scimatrix_subv& v1, const ivector& v2) {
10241 return scivector(v1) >= v2;
10242 }
10243
10244 inline bool operator>=(const scimatrix_subv& v1, const civector& v2) {
10245 return scivector(v1) >= v2;
10246 }
10247
10248 inline bool operator>=(const simatrix_subv& v1, const civector& v2) {
10249 return sivector(v1) >= v2;
10250 }
10251
10252 inline bool operator>=(const scimatrix_subv& v1, const rvector_slice& v2) {
10253 return scivector(v1) >= v2;
10254 }
10255
10256 inline bool operator>=(const scimatrix_subv& v1, const cvector_slice& v2) {
10257 return scivector(v1) >= v2;
10258 }
10259
10260 inline bool operator>=(const scimatrix_subv& v1, const ivector_slice& v2) {
10261 return scivector(v1) >= v2;
10262 }
10263
10264 inline bool operator>=(const scimatrix_subv& v1, const civector_slice& v2) {
10265 return scivector(v1) >= v2;
10266 }
10267
10268 inline bool operator>=(const simatrix_subv& v1, const civector_slice& v2) {
10269 return scivector(v1) >= v2;
10270 }
10271
10272 inline bool operator>=(const scivector& v1, const srmatrix_subv& v2) {
10273 return v1 >= srvector(v2);
10274 }
10275
10276 inline bool operator>=(const scivector& v1, const scmatrix_subv& v2) {
10277 return v1 >= scvector(v2);
10278 }
10279
10280 inline bool operator>=(const scivector& v1, const simatrix_subv& v2) {
10281 return v1 >= sivector(v2);
10282 }
10283
10284 inline bool operator>=(const scivector& v1, const scimatrix_subv& v2) {
10285 return v1 >= scivector(v2);
10286 }
10287
10288 inline bool operator>=(const sivector& v1, const scimatrix_subv& v2) {
10289 return v1 >= scivector(v2);
10290 }
10291
10292 inline bool operator>=(const scivector_slice& v1, const srmatrix_subv& v2) {
10293 return v1 >= srvector(v2);
10294 }
10295
10296 inline bool operator>=(const scivector_slice& v1, const simatrix_subv& v2) {
10297 return v1 >= sivector(v2);
10298 }
10299
10300 inline bool operator>=(const scivector_slice& v1, const scmatrix_subv& v2) {
10301 return v1 >= scvector(v2);
10302 }
10303
10304 inline bool operator>=(const scivector_slice& v1, const scimatrix_subv& v2) {
10305 return v1 >= scivector(v2);
10306 }
10307
10308 inline bool operator>=(const sivector_slice& v1, const scimatrix_subv& v2) {
10309 return v1 >= scivector(v2);
10310 }
10311
10312 inline bool operator>=(const civector& v1, const srmatrix_subv& v2) {
10313 return v1 >= srvector(v2);
10314 }
10315
10316 inline bool operator>=(const civector& v1, const simatrix_subv& v2) {
10317 return v1 >= sivector(v2);
10318 }
10319
10320 inline bool operator>=(const civector& v1, const scmatrix_subv& v2) {
10321 return v1 >= scvector(v2);
10322 }
10323
10324 inline bool operator>=(const civector& v1, const scimatrix_subv& v2) {
10325 return v1 >= scivector(v2);
10326 }
10327
10328 inline bool operator>=(const ivector& v1, const scimatrix_subv& v2) {
10329 return v1 >= scivector(v2);
10330 }
10331
10332 inline bool operator>=(const civector_slice& v1, const srmatrix_subv& v2) {
10333 return v1 >= srvector(v2);
10334 }
10335
10336 inline bool operator>=(const civector_slice& v1, const simatrix_subv& v2) {
10337 return v1 >= sivector(v2);
10338 }
10339
10340 inline bool operator>=(const civector_slice& v1, const scmatrix_subv& v2) {
10341 return v1 >= scvector(v2);
10342 }
10343
10344 inline bool operator>=(const civector_slice& v1, const scimatrix_subv& v2) {
10345 return v1 >= scivector(v2);
10346 }
10347
10348 inline bool operator>=(const ivector_slice& v1, const scimatrix_subv& v2) {
10349 return v1 >= scivector(v2);
10350 }
10351
10352 inline bool operator!(const scimatrix_subv& x) {
10353 return sv_v_not(x);
10354 }
10355
10356 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scimatrix_subv& v2) {
10357 accumulate(dot,scivector(v1),scivector(v2));
10358 }
10359
10360 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scmatrix_subv& v2) {
10361 accumulate(dot,scivector(v1),scvector(v2));
10362 }
10363
10364 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const simatrix_subv& v2) {
10365 accumulate(dot,scivector(v1),sivector(v2));
10366 }
10367
10368 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srmatrix_subv& v2) {
10369 accumulate(dot,scivector(v1),srvector(v2));
10370 }
10371
10372 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scimatrix_subv& v2) {
10373 accumulate(dot,scvector(v1),scivector(v2));
10374 }
10375
10376 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scimatrix_subv& v2) {
10377 accumulate(dot,sivector(v1),scivector(v2));
10378 }
10379
10380 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scimatrix_subv& v2) {
10381 accumulate(dot,srvector(v1),scivector(v2));
10382 }
10383
10384 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srvector& v2) {
10385 accumulate(dot,scivector(v1),v2);
10386 }
10387
10388 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scvector& v2) {
10389 accumulate(dot,scivector(v1),v2);
10390 }
10391
10392 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const sivector& v2) {
10393 accumulate(dot,scivector(v1),v2);
10394 }
10395
10396 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scivector& v2) {
10397 accumulate(dot,scivector(v1),v2);
10398 }
10399
10400 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scivector& v2) {
10401 accumulate(dot,srvector(v1),v2);
10402 }
10403
10404 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scivector& v2) {
10405 accumulate(dot,scvector(v1),v2);
10406 }
10407
10408 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scivector& v2) {
10409 accumulate(dot,sivector(v1),v2);
10410 }
10411
10412 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const sivector& v2) {
10413 accumulate(dot,scvector(v1),v2);
10414 }
10415
10416 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scvector& v2) {
10417 accumulate(dot,sivector(v1),v2);
10418 }
10419
10420 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srvector_slice& v2) {
10421 accumulate(dot,scivector(v1),v2);
10422 }
10423
10424 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scvector_slice& v2) {
10425 accumulate(dot,scivector(v1),v2);
10426 }
10427
10428 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const sivector_slice& v2) {
10429 accumulate(dot,scivector(v1),v2);
10430 }
10431
10432 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scivector_slice& v2) {
10433 accumulate(dot,scivector(v1),v2);
10434 }
10435
10436 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scivector_slice& v2) {
10437 accumulate(dot,srvector(v1),v2);
10438 }
10439
10440 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scivector_slice& v2) {
10441 accumulate(dot,scvector(v1),v2);
10442 }
10443
10444 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scivector_slice& v2) {
10445 accumulate(dot,sivector(v1),v2);
10446 }
10447
10448 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const sivector_slice& v2) {
10449 accumulate(dot,scvector(v1),v2);
10450 }
10451
10452 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scvector_slice& v2) {
10453 accumulate(dot,sivector(v1),v2);
10454 }
10455
10456 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const rvector& v2) {
10457 accumulate(dot,scivector(v1),v2);
10458 }
10459
10460 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const ivector& v2) {
10461 accumulate(dot,scivector(v1),v2);
10462 }
10463
10464 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const cvector& v2) {
10465 accumulate(dot,scivector(v1),v2);
10466 }
10467
10468 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const civector& v2) {
10469 accumulate(dot,scivector(v1),v2);
10470 }
10471
10472 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const civector& v2) {
10473 accumulate(dot,srvector(v1),v2);
10474 }
10475
10476 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const civector& v2) {
10477 accumulate(dot,sivector(v1),v2);
10478 }
10479
10480 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const civector& v2) {
10481 accumulate(dot,scvector(v1),v2);
10482 }
10483
10484 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const ivector& v2) {
10485 accumulate(dot,scvector(v1),v2);
10486 }
10487
10488 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const cvector& v2) {
10489 accumulate(dot,sivector(v1),v2);
10490 }
10491
10492 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const rvector_slice& v2) {
10493 accumulate(dot,scivector(v1),v2);
10494 }
10495
10496 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const ivector_slice& v2) {
10497 accumulate(dot,scivector(v1),v2);
10498 }
10499
10500 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const cvector_slice& v2) {
10501 accumulate(dot,scivector(v1),v2);
10502 }
10503
10504 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const civector_slice& v2) {
10505 accumulate(dot,scivector(v1),v2);
10506 }
10507
10508 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const civector_slice& v2) {
10509 accumulate(dot,srvector(v1),v2);
10510 }
10511
10512 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const civector_slice& v2) {
10513 accumulate(dot,scvector(v1),v2);
10514 }
10515
10516 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const civector_slice& v2) {
10517 accumulate(dot,sivector(v1),v2);
10518 }
10519
10520 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const ivector_slice& v2) {
10521 accumulate(dot,scvector(v1),v2);
10522 }
10523
10524 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const cvector_slice& v2) {
10525 accumulate(dot,sivector(v1),v2);
10526 }
10527
10528 inline void accumulate(cidotprecision& dot,const scivector& v1, const srmatrix_subv& v2) {
10529 accumulate(dot,v1,srvector(v2));
10530 }
10531
10532 inline void accumulate(cidotprecision& dot,const scivector& v1, const scmatrix_subv& v2) {
10533 accumulate(dot,v1,scvector(v2));
10534 }
10535
10536 inline void accumulate(cidotprecision& dot,const scivector& v1, const simatrix_subv& v2) {
10537 accumulate(dot,v1,sivector(v2));
10538 }
10539
10540 inline void accumulate(cidotprecision& dot,const scivector& v1, const scimatrix_subv& v2) {
10541 accumulate(dot,v1,scivector(v2));
10542 }
10543
10544 inline void accumulate(cidotprecision& dot,const srvector& v1, const scimatrix_subv& v2) {
10545 accumulate(dot,v1,scivector(v2));
10546 }
10547
10548 inline void accumulate(cidotprecision& dot,const scvector& v1, const scimatrix_subv& v2) {
10549 accumulate(dot,v1,scivector(v2));
10550 }
10551
10552 inline void accumulate(cidotprecision& dot,const sivector& v1, const scimatrix_subv& v2) {
10553 accumulate(dot,v1,scivector(v2));
10554 }
10555
10556 inline void accumulate(cidotprecision& dot,const scvector& v1, const simatrix_subv& v2) {
10557 accumulate(dot,v1,sivector(v2));
10558 }
10559
10560 inline void accumulate(cidotprecision& dot,const sivector& v1, const scmatrix_subv& v2) {
10561 accumulate(dot,v1,scvector(v2));
10562 }
10563
10564 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const srmatrix_subv& v2) {
10565 accumulate(dot,v1,srvector(v2));
10566 }
10567
10568 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const scmatrix_subv& v2) {
10569 accumulate(dot,v1,scvector(v2));
10570 }
10571
10572 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const simatrix_subv& v2) {
10573 accumulate(dot,v1,sivector(v2));
10574 }
10575
10576 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const scimatrix_subv& v2) {
10577 accumulate(dot,v1,scivector(v2));
10578 }
10579
10580 inline void accumulate(cidotprecision& dot,const srvector_slice& v1, const scimatrix_subv& v2) {
10581 accumulate(dot,v1,scivector(v2));
10582 }
10583
10584 inline void accumulate(cidotprecision& dot,const sivector_slice& v1, const scimatrix_subv& v2) {
10585 accumulate(dot,v1,scivector(v2));
10586 }
10587
10588 inline void accumulate(cidotprecision& dot,const scvector_slice& v1, const scimatrix_subv& v2) {
10589 accumulate(dot,v1,scivector(v2));
10590 }
10591
10592 inline void accumulate(cidotprecision& dot,const scvector_slice& v1, const simatrix_subv& v2) {
10593 accumulate(dot,v1,sivector(v2));
10594 }
10595
10596 inline void accumulate(cidotprecision& dot,const sivector_slice& v1, const scmatrix_subv& v2) {
10597 accumulate(dot,v1,scvector(v2));
10598 }
10599
10600 inline void accumulate(cidotprecision& dot,const civector& v1, const srmatrix_subv& v2) {
10601 accumulate(dot,v1,srvector(v2));
10602 }
10603
10604 inline void accumulate(cidotprecision& dot,const civector& v1, const scmatrix_subv& v2) {
10605 accumulate(dot,v1,scvector(v2));
10606 }
10607
10608 inline void accumulate(cidotprecision& dot,const civector& v1, const simatrix_subv& v2) {
10609 accumulate(dot,v1,sivector(v2));
10610 }
10611
10612 inline void accumulate(cidotprecision& dot,const civector& v1, const scimatrix_subv& v2) {
10613 accumulate(dot,v1,scivector(v2));
10614 }
10615
10616 inline void accumulate(cidotprecision& dot,const rvector& v1, const scimatrix_subv& v2) {
10617 accumulate(dot,v1,scivector(v2));
10618 }
10619
10620 inline void accumulate(cidotprecision& dot,const cvector& v1, const scimatrix_subv& v2) {
10621 accumulate(dot,v1,scivector(v2));
10622 }
10623
10624 inline void accumulate(cidotprecision& dot,const ivector& v1, const scimatrix_subv& v2) {
10625 accumulate(dot,v1,scivector(v2));
10626 }
10627
10628 inline void accumulate(cidotprecision& dot,const ivector& v1, const scmatrix_subv& v2) {
10629 accumulate(dot,v1,scvector(v2));
10630 }
10631
10632 inline void accumulate(cidotprecision& dot,const cvector& v1, const simatrix_subv& v2) {
10633 accumulate(dot,v1,sivector(v2));
10634 }
10635
10636 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const srmatrix_subv& v2) {
10637 accumulate(dot,v1,srvector(v2));
10638 }
10639
10640 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const scmatrix_subv& v2) {
10641 accumulate(dot,v1,scvector(v2));
10642 }
10643
10644 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const simatrix_subv& v2) {
10645 accumulate(dot,v1,sivector(v2));
10646 }
10647
10648 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const scimatrix_subv& v2) {
10649 accumulate(dot,v1,scivector(v2));
10650 }
10651
10652 inline void accumulate(cidotprecision& dot,const rvector_slice& v1, const scimatrix_subv& v2) {
10653 accumulate(dot,v1,scivector(v2));
10654 }
10655
10656 inline void accumulate(cidotprecision& dot,const cvector_slice& v1, const scimatrix_subv& v2) {
10657 accumulate(dot,v1,scivector(v2));
10658 }
10659
10660 inline void accumulate(cidotprecision& dot,const ivector_slice& v1, const scimatrix_subv& v2) {
10661 accumulate(dot,v1,scivector(v2));
10662 }
10663
10664 inline void accumulate(cidotprecision& dot,const ivector_slice& v1, const scmatrix_subv& v2) {
10665 accumulate(dot,v1,scvector(v2));
10666 }
10667
10668 inline void accumulate(cidotprecision& dot,const cvector_slice& v1, const simatrix_subv& v2) {
10669 accumulate(dot,v1,sivector(v2));
10670 }
10671
10672
10673 }
10674
10675 #include "sparsematrix.inl"
10676
10677 #endif
10678