C-XSC - A C++ Class Library for Extended Scientific Computing
2.5.4
|
00001 /* 00002 ** CXSC is a C++ library for eXtended Scientific Computing (V 2.5.4) 00003 ** 00004 ** Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik, 00005 ** Universitaet Karlsruhe, Germany 00006 ** (C) 2000-2014 Wiss. Rechnen/Softwaretechnologie 00007 ** Universitaet Wuppertal, Germany 00008 ** 00009 ** This library is free software; you can redistribute it and/or 00010 ** modify it under the terms of the GNU Library General Public 00011 ** License as published by the Free Software Foundation; either 00012 ** version 2 of the License, or (at your option) any later version. 00013 ** 00014 ** This library is distributed in the hope that it will be useful, 00015 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 ** Library General Public License for more details. 00018 ** 00019 ** You should have received a copy of the GNU Library General Public 00020 ** License along with this library; if not, write to the Free 00021 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 */ 00023 00024 /* CVS $Id: scimatrix.hpp,v 1.20 2014/01/30 17:23:48 cxsc Exp $ */ 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 //definiert in srmatrix.hpp 00049 //enum STORAGE_TYPE{triplet,compressed_row,compressed_column}; 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 00059 00071 class scimatrix { 00072 00073 private: 00074 std::vector<int> p; 00075 std::vector<int> ind; 00076 std::vector<cinterval> x; 00077 int m; 00078 int n; 00079 int lb1,ub1,lb2,ub2; 00080 00081 public: 00082 00084 std::vector<int>& column_pointers() { 00085 return p; 00086 } 00087 00089 std::vector<int>& row_indices() { 00090 return ind; 00091 } 00092 00094 std::vector<cinterval>& values() { 00095 return x; 00096 } 00097 00099 const std::vector<int>& column_pointers() const { 00100 return p; 00101 } 00102 00104 const std::vector<int>& row_indices() const { 00105 return ind; 00106 } 00107 00109 const std::vector<cinterval>& values() const { 00110 return x; 00111 } 00112 00114 scimatrix() { 00115 p.push_back(0); 00116 m = n = 0; 00117 lb1 = lb2 = ub1 = ub2 = 0; 00118 } 00119 00121 scimatrix(const int r, const int c) : m(r),n(c),lb1(1),ub1(r),lb2(1),ub2(c) { 00122 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00123 ind.reserve(2*(m+n)); 00124 x.reserve(2*(m+n)); 00125 00126 p[0] = 0; 00127 } 00128 00130 scimatrix(const int r, const int c, const int e) : m(r),n(c),lb1(1),ub1(r),lb2(1),ub2(c) { 00131 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00132 ind.reserve(e); 00133 x.reserve(e); 00134 00135 p[0] = 0; 00136 } 00137 00139 00145 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) { 00146 if(t == triplet) { 00147 this->m = m; 00148 this->n = n; 00149 p = std::vector<int>(n+1,0); 00150 ind.reserve(nnz); 00151 x.reserve(nnz); 00152 lb1 = lb2 = 1; 00153 ub1 = m; ub2 = n; 00154 00155 std::vector<triplet_store<cinterval> > work; 00156 work.reserve(nnz); 00157 00158 for(int k=0 ; k<nnz ; k++) { 00159 work.push_back(triplet_store<cinterval>(rows[Lb(rows)+k],cols[Lb(cols)+k],values[Lb(values)+k])); 00160 } 00161 00162 sort(work.begin(), work.end()); 00163 00164 int i=0; 00165 00166 for(int j=0 ; j<n ; j++) { 00167 00168 while((unsigned int)i < work.size() && work[i].col == j ) { 00169 ind.push_back(work[i].row); 00170 x.push_back(work[i].val); 00171 i++; 00172 } 00173 00174 p[j+1] = i; 00175 } 00176 00177 } else if(t == compressed_row) { 00178 00179 this->m = m; 00180 this->n = n; 00181 p = std::vector<int>(n+1,0); 00182 ind.reserve(nnz); 00183 x.reserve(nnz); 00184 lb1 = lb2 = 1; 00185 ub1 = m; ub2 = n; 00186 00187 for(int i=0 ; i<n+1 ; i++) 00188 p[i] = rows[Lb(rows)+i]; 00189 00190 std::vector<triplet_store<cinterval> > work; 00191 work.reserve(nnz); 00192 00193 for(int j=0 ; j<n ; j++) { 00194 for(int k=p[j] ; k<p[j+1] ; k++) { 00195 work.push_back(triplet_store<cinterval>(j,cols[Lb(cols)+k],values[Lb(values)+k])); 00196 } 00197 } 00198 00199 sort(work.begin(), work.end()); 00200 00201 int i=0; 00202 00203 for(int j=0 ; j<n ; j++) { 00204 00205 while((unsigned int)i < work.size() && work[i].col == j ) { 00206 ind.push_back(work[i].row); 00207 x.push_back(work[i].val); 00208 i++; 00209 } 00210 00211 p[j+1] = i; 00212 } 00213 00214 } else if(t == compressed_column) { 00215 this->m = m; 00216 this->n = n; 00217 p = std::vector<int>(n+1,0); 00218 ind.reserve(nnz); 00219 x.reserve(nnz); 00220 lb1 = lb2 = 1; 00221 ub1 = m; ub2 = n; 00222 00223 for(int i=0 ; i<n+1 ; i++) 00224 p[i] = rows[Lb(rows)+i]; 00225 00226 std::vector<std::pair<int,cinterval> > work; 00227 work.reserve(n); 00228 00229 for(int j=0 ; j<n ; j++) { 00230 work.clear(); 00231 00232 for(int k=p[j] ; k<p[j+1] ; k++) { 00233 work.push_back(std::make_pair(cols[Lb(cols)+k],values[Lb(values)+k])); 00234 } 00235 00236 std::sort(work.begin(),work.end(),comp_pair_ci); 00237 00238 for(unsigned int i=0 ; i<work.size() ; i++) { 00239 ind.push_back(work[i].first); 00240 x.push_back(work[i].second); 00241 } 00242 } 00243 00244 } 00245 00246 } 00247 00249 00256 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) { 00257 if(t == triplet) { 00258 this->m = m; 00259 this->n = n; 00260 p = std::vector<int>(n+1,0); 00261 ind.reserve(nnz); 00262 x.reserve(nnz); 00263 lb1 = lb2 = 1; 00264 ub1 = m; ub2 = n; 00265 00266 std::vector<triplet_store<cinterval> > work; 00267 work.reserve(nnz); 00268 00269 for(int k=0 ; k<nnz ; k++) { 00270 work.push_back(triplet_store<cinterval>(rows[k],cols[k],values[k])); 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_row) { 00289 00290 this->m = m; 00291 this->n = n; 00292 p = std::vector<int>(n+1,0); 00293 ind.reserve(nnz); 00294 x.reserve(nnz); 00295 lb1 = lb2 = 1; 00296 ub1 = m; ub2 = n; 00297 00298 for(int i=0 ; i<n+1 ; i++) 00299 p[i] = rows[i]; 00300 00301 std::vector<triplet_store<cinterval> > work; 00302 work.reserve(nnz); 00303 00304 for(int j=0 ; j<n ; j++) { 00305 for(int k=p[j] ; k<p[j+1] ; k++) { 00306 work.push_back(triplet_store<cinterval>(j,cols[k],values[k])); 00307 } 00308 } 00309 00310 sort(work.begin(), work.end()); 00311 00312 int i=0; 00313 00314 for(int j=0 ; j<n ; j++) { 00315 00316 while((unsigned int)i < work.size() && work[i].col == j ) { 00317 ind.push_back(work[i].row); 00318 x.push_back(work[i].val); 00319 i++; 00320 } 00321 00322 p[j+1] = i; 00323 } 00324 00325 } else if(t == compressed_column) { 00326 this->m = m; 00327 this->n = n; 00328 p = std::vector<int>(n+1,0); 00329 ind.reserve(nnz); 00330 x.reserve(nnz); 00331 lb1 = lb2 = 1; 00332 ub1 = m; ub2 = n; 00333 00334 for(int i=0 ; i<n+1 ; i++) 00335 p[i] = rows[i]; 00336 00337 std::vector<std::pair<int,cinterval> > work; 00338 work.reserve(n); 00339 00340 for(int j=0 ; j<n ; j++) { 00341 work.clear(); 00342 00343 for(int k=p[j] ; k<p[j+1] ; k++) { 00344 work.push_back(std::make_pair(cols[k],values[k])); 00345 } 00346 00347 std::sort(work.begin(),work.end(),comp_pair_ci); 00348 00349 for(unsigned int i=0 ; i<work.size() ; i++) { 00350 ind.push_back(work[i].first); 00351 x.push_back(work[i].second); 00352 } 00353 } 00354 00355 } 00356 00357 } 00358 00360 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) { 00361 x.reserve(A.get_nnz()); 00362 for(unsigned int i=0 ; i<A.x.size() ; i++) 00363 x.push_back(cinterval(A.x[i])); 00364 } 00365 00367 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) { 00368 x.reserve(A.get_nnz()); 00369 for(unsigned int i=0 ; i<A.x.size() ; i++) 00370 x.push_back(cinterval(A.x[i])); 00371 } 00372 00374 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) { 00375 x.reserve(A.get_nnz()); 00376 for(unsigned int i=0 ; i<A.x.size() ; i++) 00377 x.push_back(cinterval(A.x[i])); 00378 } 00379 00381 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)) { 00382 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00383 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00384 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00385 00386 p[0] = 0; 00387 int nnz = 0; 00388 00389 for(int j=0 ; j<n ; j++) { 00390 for(int i=0 ; i<m ; i++) { 00391 if(A[i+lb1][j+lb2] != 0.0) { 00392 ind.push_back(i); 00393 x.push_back(cinterval(A[i+lb1][j+lb2])); 00394 nnz++; 00395 } 00396 } 00397 00398 p[j+1] = nnz; 00399 } 00400 00401 } 00402 00404 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)) { 00405 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00406 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00407 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00408 00409 p[0] = 0; 00410 int nnz = 0; 00411 00412 for(int j=0 ; j<n ; j++) { 00413 for(int i=0 ; i<m ; i++) { 00414 if(A[i+lb1][j+lb2] != 0.0) { 00415 ind.push_back(i); 00416 x.push_back(cinterval(A[i+lb1][j+lb2])); 00417 nnz++; 00418 } 00419 } 00420 00421 p[j+1] = nnz; 00422 } 00423 00424 } 00425 00427 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)) { 00428 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00429 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00430 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00431 00432 p[0] = 0; 00433 int nnz = 0; 00434 00435 for(int j=0 ; j<n ; j++) { 00436 for(int i=0 ; i<m ; i++) { 00437 if(A[i+lb1][j+lb2] != 0.0) { 00438 ind.push_back(i); 00439 x.push_back(cinterval(A[i+lb1][j+lb2])); 00440 nnz++; 00441 } 00442 } 00443 00444 p[j+1] = nnz; 00445 } 00446 00447 } 00448 00450 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)) { 00451 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00452 ind.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00453 x.reserve((m*n*0.1 < 2*m) ? (int)(m*n*0.1) : 2*m); 00454 00455 p[0] = 0; 00456 int nnz = 0; 00457 00458 for(int j=0 ; j<n ; j++) { 00459 for(int i=0 ; i<m ; i++) { 00460 if(A[i+lb1][j+lb2] != 0.0) { 00461 ind.push_back(i); 00462 x.push_back(A[i+lb1][j+lb2]); 00463 nnz++; 00464 } 00465 } 00466 00467 p[j+1] = nnz; 00468 } 00469 00470 } 00471 00473 00476 scimatrix(const int ms, const int ns, const cimatrix& A) : m(ms), n(ns), lb1(1), ub1(ms), lb2(1), ub2(ns) { 00477 //Banded matrix constructor 00478 int nnz = RowLen(A)*ColLen(A); 00479 p = std::vector<int>((n>0) ? n+1 : 1, 0); 00480 ind.reserve(nnz); 00481 x.reserve(nnz); 00482 00483 std::vector<triplet_store<cinterval> > work; 00484 work.reserve(nnz); 00485 00486 00487 for(int i=0 ; i<ColLen(A) ; i++) { 00488 for(int j=Lb(A,2) ; j<=Ub(A,2) ; j++) { 00489 if(i+j >=0 && i+j < n) { 00490 work.push_back(triplet_store<cinterval>(i,i+j,A[i+Lb(A,1)][j])); 00491 } 00492 } 00493 } 00494 00495 sort(work.begin(), work.end()); 00496 00497 int i=0; 00498 00499 for(int j=0 ; j<n ; j++) { 00500 00501 while((unsigned int)i < work.size() && work[i].col == j ) { 00502 ind.push_back(work[i].row); 00503 x.push_back(work[i].val); 00504 i++; 00505 } 00506 00507 p[j+1] = i; 00508 } 00509 00510 } 00511 00513 scimatrix(const srmatrix_slice&); 00515 scimatrix(const scmatrix_slice&); 00517 scimatrix(const simatrix_slice&); 00519 scimatrix(const scimatrix_slice&); 00520 00522 void full(cimatrix& A) const { 00523 A = cimatrix(lb1,ub1,lb2,ub2); 00524 A = 0.0; 00525 for(int j=0 ; j<n ; j++) { 00526 for(int k=p[j] ; k<p[j+1] ; k++) { 00527 A[ind[k]+lb1][j+lb2] = x[k]; 00528 } 00529 } 00530 } 00531 00533 00537 void dropzeros() { 00538 std::vector<int> pnew(n+1,0); 00539 std::vector<int> indnew; 00540 std::vector<cinterval> xnew; 00541 int nnznew = 0; 00542 00543 for(int j=0 ; j<n ; j++) { 00544 for(int k=p[j] ; k<p[j+1] ; k++) { 00545 if(x[k] != 0.0) { 00546 xnew.push_back(x[k]); 00547 indnew.push_back(ind[k]); 00548 nnznew++; 00549 } 00550 } 00551 pnew[j+1] = nnznew; 00552 } 00553 00554 p = pnew; 00555 ind = indnew; 00556 x = xnew; 00557 } 00558 00559 00561 scimatrix& operator=(const real& A) { 00562 return sp_ms_assign<scimatrix,real,cinterval>(*this,A); 00563 } 00564 00566 scimatrix& operator=(const interval& A) { 00567 return sp_ms_assign<scimatrix,interval,cinterval>(*this,A); 00568 } 00569 00571 scimatrix& operator=(const complex& A) { 00572 return sp_ms_assign<scimatrix,complex,cinterval>(*this,A); 00573 } 00574 00576 scimatrix& operator=(const cinterval& A) { 00577 return sp_ms_assign<scimatrix,cinterval,cinterval>(*this,A); 00578 } 00579 00581 scimatrix& operator=(const rmatrix& A) { 00582 return spf_mm_assign<scimatrix,rmatrix,cinterval>(*this,A); 00583 } 00584 00586 scimatrix& operator=(const cmatrix& A) { 00587 return spf_mm_assign<scimatrix,cmatrix,cinterval>(*this,A); 00588 } 00589 00591 scimatrix& operator=(const imatrix& A) { 00592 return spf_mm_assign<scimatrix,imatrix,cinterval>(*this,A); 00593 } 00594 00596 scimatrix& operator=(const cimatrix& A) { 00597 return spf_mm_assign<scimatrix,cimatrix,cinterval>(*this,A); 00598 } 00599 00601 scimatrix& operator=(const rmatrix_slice& A) { 00602 return spf_mm_assign<scimatrix,rmatrix_slice,cinterval>(*this,A); 00603 } 00604 00606 scimatrix& operator=(const cmatrix_slice& A) { 00607 return spf_mm_assign<scimatrix,cmatrix_slice,cinterval>(*this,A); 00608 } 00609 00611 scimatrix& operator=(const imatrix_slice& A) { 00612 return spf_mm_assign<scimatrix,imatrix_slice,cinterval>(*this,A); 00613 } 00614 00616 scimatrix& operator=(const cimatrix_slice& A) { 00617 return spf_mm_assign<scimatrix,cimatrix_slice,cinterval>(*this,A); 00618 } 00619 00621 scimatrix& operator=(const srmatrix& A) { 00622 m = A.m; 00623 n = A.n; 00624 p = A.p; 00625 ind = A.ind; 00626 x.clear(); 00627 x.reserve(A.get_nnz()); 00628 for(unsigned int i=0 ; i<A.x.size() ; i++) 00629 x.push_back(cinterval(A.x[i])); 00630 return *this; 00631 } 00632 00634 scimatrix& operator=(const scmatrix& A) { 00635 m = A.m; 00636 n = A.n; 00637 p = A.p; 00638 ind = A.ind; 00639 x.clear(); 00640 x.reserve(A.get_nnz()); 00641 for(unsigned int i=0 ; i<A.x.size() ; i++) 00642 x.push_back(cinterval(A.x[i])); 00643 return *this; 00644 } 00645 00647 scimatrix& operator=(const simatrix& A) { 00648 m = A.m; 00649 n = A.n; 00650 p = A.p; 00651 ind = A.ind; 00652 x.clear(); 00653 x.reserve(A.get_nnz()); 00654 for(unsigned int i=0 ; i<A.x.size() ; i++) 00655 x.push_back(cinterval(A.x[i])); 00656 return *this; 00657 } 00658 00659 /* scimatrix& operator=(const scimatrix& A) { 00660 p = A.p; 00661 ind = A.ind; 00662 x = A.x; 00663 return *this; 00664 } */ 00665 00667 scimatrix& operator=(const srmatrix_slice&); 00669 scimatrix& operator=(const scmatrix_slice&); 00671 scimatrix& operator=(const simatrix_slice&); 00673 scimatrix& operator=(const scimatrix_slice&); 00674 00676 00682 const cinterval operator()(int i, int j) const { 00683 #if(CXSC_INDEX_CHECK) 00684 if(i<lb1 || i>ub1 || j<lb2 || j>ub2) 00685 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix::operator()(int, int)")); 00686 #endif 00687 cinterval r(0.0); 00688 for(int k=p[j-lb2] ; k<p[j-lb2+1] && ind[k]<=i-lb1 ; k++) { 00689 if(ind[k] == i-lb1) r = x[k]; 00690 } 00691 return r; 00692 } 00693 00695 00703 cinterval& element(int i, int j) { 00704 #if(CXSC_INDEX_CHECK) 00705 if(i<lb1 || i>ub1 || j<lb2 || j>ub2) 00706 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix::element(int, int)")); 00707 #endif 00708 int k; 00709 for(k=p[j-lb2] ; k<p[j-lb2+1] && ind[k]<=i-lb1 ; k++) { 00710 if(ind[k] == i-lb1) return x[k]; 00711 } 00712 00713 //Nicht gefunden, Element muss angelegt werden, da Schreibzugriff moeglich 00714 std::vector<int>::iterator ind_it = ind.begin() + k; 00715 std::vector<cinterval>::iterator x_it = x.begin() + k; 00716 ind.insert(ind_it, i-lb1); 00717 x_it = x.insert(x_it, cinterval(0.0)); 00718 for(k=j-lb2+1 ; k<(int)p.size() ; k++) 00719 p[k]++; 00720 00721 return *x_it; 00722 } 00723 00725 scimatrix_subv operator[](const cxscmatrix_column&); 00727 scimatrix_subv operator[](const int); 00729 const scimatrix_subv operator[](const cxscmatrix_column&) const; 00731 const scimatrix_subv operator[](const int) const; 00732 00734 scimatrix_slice operator()(const int, const int , const int, const int); 00736 const scimatrix_slice operator()(const int, const int , const int, const int) const; 00737 00739 scimatrix operator()(const intvector& pervec, const intvector& q) { 00740 scimatrix A(m,n,get_nnz()); 00741 intvector per = perminv(pervec); 00742 00743 int nnz=0; 00744 for(int k=0 ; k<n ; k++) { 00745 A.p[k] = nnz; 00746 00747 std::map<int,cinterval> work; 00748 for(int j=p[q[Lb(q)+k]] ; j<p[q[Lb(q)+k]+1] ; j++) 00749 work.insert(std::make_pair(per[Lb(per)+ind[j]], x[j])); 00750 00751 for(std::map<int,cinterval>::iterator it = work.begin() ; it != work.end() ; it++) { 00752 A.ind.push_back(it->first); 00753 A.x.push_back(it->second); 00754 } 00755 00756 nnz += work.size(); 00757 00758 } 00759 00760 A.p[n] = nnz; 00761 00762 return A; 00763 } 00764 00766 scimatrix operator()(const intvector& pervec) { 00767 scimatrix A(m,n,get_nnz()); 00768 intvector per = perminv(pervec); 00769 00770 for(int k=0 ; k<n ; k++) { 00771 A.p[k] = p[k]; 00772 00773 std::map<int,cinterval> work; 00774 for(int j=p[k] ; j<p[k+1] ; j++) 00775 work.insert(std::make_pair(per[Lb(per)+ind[j]], x[j])); 00776 00777 for(std::map<int,cinterval>::iterator it = work.begin() ; it != work.end() ; it++) { 00778 A.ind.push_back(it->first); 00779 A.x.push_back(it->second); 00780 } 00781 00782 } 00783 00784 A.p[n] = p[n]; 00785 00786 return A; 00787 } 00788 00790 scimatrix operator()(const intmatrix& P, const intmatrix& Q) { 00791 intvector p = permvec(P); 00792 intvector q = perminv(permvec(Q)); 00793 return (*this)(p,q); 00794 } 00795 00797 scimatrix operator()(const intmatrix& P) { 00798 intvector p = permvec(P); 00799 return (*this)(p); 00800 } 00801 00803 real density() const { 00804 return p[n]/((double)m*n); 00805 } 00806 00808 int get_nnz() const { 00809 return p[n]; 00810 } 00811 00813 scimatrix& operator+=(const rmatrix& B) { 00814 return spf_mm_addassign<scimatrix,rmatrix,cimatrix>(*this,B); 00815 } 00816 00818 scimatrix& operator+=(const cmatrix& B) { 00819 return spf_mm_addassign<scimatrix,cmatrix,cimatrix>(*this,B); 00820 } 00821 00823 scimatrix& operator+=(const imatrix& B) { 00824 return spf_mm_addassign<scimatrix,imatrix,cimatrix>(*this,B); 00825 } 00826 00828 scimatrix& operator+=(const cimatrix& B) { 00829 return spf_mm_addassign<scimatrix,cimatrix,cimatrix>(*this,B); 00830 } 00831 00833 scimatrix& operator+=(const rmatrix_slice& B) { 00834 return spf_mm_addassign<scimatrix,rmatrix_slice,cimatrix>(*this,B); 00835 } 00836 00838 scimatrix& operator+=(const cmatrix_slice& B) { 00839 return spf_mm_addassign<scimatrix,cmatrix_slice,cimatrix>(*this,B); 00840 } 00841 00843 scimatrix& operator+=(const imatrix_slice& B) { 00844 return spf_mm_addassign<scimatrix,imatrix_slice,cimatrix>(*this,B); 00845 } 00846 00848 scimatrix& operator+=(const cimatrix_slice& B) { 00849 return spf_mm_addassign<scimatrix,cimatrix_slice,cimatrix>(*this,B); 00850 } 00851 00853 scimatrix& operator+=(const srmatrix& B) { 00854 return spsp_mm_addassign<scimatrix,srmatrix,cinterval>(*this,B); 00855 } 00856 00858 scimatrix& operator+=(const scmatrix& B) { 00859 return spsp_mm_addassign<scimatrix,scmatrix,cinterval>(*this,B); 00860 } 00861 00863 scimatrix& operator+=(const simatrix& B) { 00864 return spsp_mm_addassign<scimatrix,simatrix,cinterval>(*this,B); 00865 } 00866 00868 scimatrix& operator+=(const scimatrix& B) { 00869 return spsp_mm_addassign<scimatrix,scimatrix,cinterval>(*this,B); 00870 } 00871 00873 scimatrix& operator-=(const rmatrix& B) { 00874 return spf_mm_subassign<scimatrix,rmatrix,cimatrix>(*this,B); 00875 } 00876 00878 scimatrix& operator-=(const cmatrix& B) { 00879 return spf_mm_subassign<scimatrix,cmatrix,cimatrix>(*this,B); 00880 } 00881 00883 scimatrix& operator-=(const imatrix& B) { 00884 return spf_mm_subassign<scimatrix,imatrix,cimatrix>(*this,B); 00885 } 00886 00888 scimatrix& operator-=(const cimatrix& B) { 00889 return spf_mm_subassign<scimatrix,cimatrix,cimatrix>(*this,B); 00890 } 00891 00893 scimatrix& operator-=(const rmatrix_slice& B) { 00894 return spf_mm_subassign<scimatrix,rmatrix_slice,cimatrix>(*this,B); 00895 } 00896 00898 scimatrix& operator-=(const cmatrix_slice& B) { 00899 return spf_mm_subassign<scimatrix,cmatrix_slice,cimatrix>(*this,B); 00900 } 00901 00903 scimatrix& operator-=(const imatrix_slice& B) { 00904 return spf_mm_subassign<scimatrix,imatrix_slice,cimatrix>(*this,B); 00905 } 00906 00908 scimatrix& operator-=(const cimatrix_slice& B) { 00909 return spf_mm_subassign<scimatrix,cimatrix_slice,cimatrix>(*this,B); 00910 } 00911 00913 scimatrix& operator-=(const srmatrix& B) { 00914 return spsp_mm_subassign<scimatrix,srmatrix,cinterval>(*this,B); 00915 } 00916 00918 scimatrix& operator-=(const scmatrix& B) { 00919 return spsp_mm_subassign<scimatrix,scmatrix,cinterval>(*this,B); 00920 } 00921 00923 scimatrix& operator-=(const simatrix& B) { 00924 return spsp_mm_subassign<scimatrix,simatrix,cinterval>(*this,B); 00925 } 00926 00928 scimatrix& operator-=(const scimatrix& B) { 00929 return spsp_mm_subassign<scimatrix,scimatrix,cinterval>(*this,B); 00930 } 00931 00933 scimatrix& operator|=(const rmatrix& B) { 00934 return spf_mm_hullassign<scimatrix,rmatrix,cimatrix>(*this,B); 00935 } 00936 00938 scimatrix& operator|=(const cmatrix& B) { 00939 return spf_mm_hullassign<scimatrix,cmatrix,cimatrix>(*this,B); 00940 } 00941 00943 scimatrix& operator|=(const imatrix& B) { 00944 return spf_mm_hullassign<scimatrix,imatrix,cimatrix>(*this,B); 00945 } 00946 00948 scimatrix& operator|=(const cimatrix& B) { 00949 return spf_mm_hullassign<scimatrix,cimatrix,cimatrix>(*this,B); 00950 } 00951 00953 scimatrix& operator|=(const rmatrix_slice& B) { 00954 return spf_mm_hullassign<scimatrix,rmatrix_slice,cimatrix>(*this,B); 00955 } 00956 00958 scimatrix& operator|=(const cmatrix_slice& B) { 00959 return spf_mm_hullassign<scimatrix,cmatrix_slice,cimatrix>(*this,B); 00960 } 00961 00963 scimatrix& operator|=(const imatrix_slice& B) { 00964 return spf_mm_hullassign<scimatrix,imatrix_slice,cimatrix>(*this,B); 00965 } 00966 00968 scimatrix& operator|=(const cimatrix_slice& B) { 00969 return spf_mm_hullassign<scimatrix,cimatrix_slice,cimatrix>(*this,B); 00970 } 00971 00973 scimatrix& operator|=(const srmatrix& B) { 00974 return spsp_mm_hullassign<scimatrix,srmatrix,cinterval>(*this,B); 00975 } 00976 00978 scimatrix& operator|=(const scmatrix& B) { 00979 return spsp_mm_hullassign<scimatrix,scmatrix,cinterval>(*this,B); 00980 } 00981 00983 scimatrix& operator|=(const simatrix& B) { 00984 return spsp_mm_hullassign<scimatrix,simatrix,cinterval>(*this,B); 00985 } 00986 00988 scimatrix& operator|=(const scimatrix& B) { 00989 return spsp_mm_hullassign<scimatrix,scimatrix,cinterval>(*this,B); 00990 } 00991 00993 scimatrix& operator&=(const imatrix& B) { 00994 return spf_mm_intersectassign<scimatrix,imatrix,cimatrix>(*this,B); 00995 } 00996 00998 scimatrix& operator&=(const cimatrix& B) { 00999 return spf_mm_intersectassign<scimatrix,cimatrix,cimatrix>(*this,B); 01000 } 01001 01003 scimatrix& operator&=(const imatrix_slice& B) { 01004 return spf_mm_intersectassign<scimatrix,imatrix_slice,cimatrix>(*this,B); 01005 } 01006 01008 scimatrix& operator&=(const cimatrix_slice& B) { 01009 return spf_mm_intersectassign<scimatrix,cimatrix_slice,cimatrix>(*this,B); 01010 } 01011 01013 scimatrix& operator&=(const simatrix& B) { 01014 return spsp_mm_intersectassign<scimatrix,simatrix,cinterval>(*this,B); 01015 } 01016 01018 scimatrix& operator&=(const scimatrix& B) { 01019 return spsp_mm_intersectassign<scimatrix,scimatrix,cinterval>(*this,B); 01020 } 01021 01023 scimatrix& operator*=(const cmatrix& B) { 01024 return spf_mm_multassign<scimatrix,cmatrix,sparse_cidot,cimatrix>(*this,B); 01025 } 01026 01028 scimatrix& operator*=(const rmatrix& B) { 01029 return spf_mm_multassign<scimatrix,rmatrix,sparse_cidot,cimatrix>(*this,B); 01030 } 01031 01033 scimatrix& operator*=(const imatrix& B) { 01034 return spf_mm_multassign<scimatrix,imatrix,sparse_cidot,cimatrix>(*this,B); 01035 } 01036 01038 scimatrix& operator*=(const cimatrix& B) { 01039 return spf_mm_multassign<scimatrix,cimatrix,sparse_cidot,cimatrix>(*this,B); 01040 } 01041 01043 scimatrix& operator*=(const rmatrix_slice& B) { 01044 return spf_mm_multassign<scimatrix,rmatrix_slice,sparse_cidot,cimatrix>(*this,B); 01045 } 01046 01048 scimatrix& operator*=(const cmatrix_slice& B) { 01049 return spf_mm_multassign<scimatrix,cmatrix_slice,sparse_cidot,cimatrix>(*this,B); 01050 } 01051 01053 scimatrix& operator*=(const imatrix_slice& B) { 01054 return spf_mm_multassign<scimatrix,imatrix_slice,sparse_cidot,cimatrix>(*this,B); 01055 } 01056 01058 scimatrix& operator*=(const cimatrix_slice& B) { 01059 return spf_mm_multassign<scimatrix,cimatrix_slice,sparse_cidot,cimatrix>(*this,B); 01060 } 01061 01063 scimatrix& operator*=(const srmatrix& B) { 01064 return spsp_mm_multassign<scimatrix,srmatrix,sparse_cidot,cinterval>(*this,B); 01065 } 01066 01068 scimatrix& operator*=(const scmatrix& B) { 01069 return spsp_mm_multassign<scimatrix,scmatrix,sparse_cidot,cinterval>(*this,B); 01070 } 01071 01073 scimatrix& operator*=(const simatrix& B) { 01074 return spsp_mm_multassign<scimatrix,simatrix,sparse_cidot,cinterval>(*this,B); 01075 } 01076 01078 scimatrix& operator*=(const scimatrix& B) { 01079 return spsp_mm_multassign<scimatrix,scimatrix,sparse_cidot,cinterval>(*this,B); 01080 } 01081 01083 scimatrix& operator*=(const real& r) { 01084 return sp_ms_multassign(*this,r); 01085 } 01086 01088 scimatrix& operator*=(const complex& r) { 01089 return sp_ms_multassign(*this,r); 01090 } 01091 01093 scimatrix& operator*=(const interval& r) { 01094 return sp_ms_multassign(*this,r); 01095 } 01096 01098 scimatrix& operator*=(const cinterval& r) { 01099 return sp_ms_multassign(*this,r); 01100 } 01101 01103 scimatrix& operator/=(const real& r) { 01104 return sp_ms_divassign(*this,r); 01105 } 01106 01108 scimatrix& operator/=(const complex& r) { 01109 return sp_ms_divassign(*this,r); 01110 } 01111 01113 scimatrix& operator/=(const interval& r) { 01114 return sp_ms_divassign(*this,r); 01115 } 01116 01118 scimatrix& operator/=(const cinterval& r) { 01119 return sp_ms_divassign(*this,r); 01120 } 01121 01122 friend void SetLb(scimatrix&, const int, const int); 01123 friend void SetUb(scimatrix&, const int, const int); 01124 friend int Lb(const scimatrix&, int); 01125 friend int Ub(const scimatrix&, int); 01126 friend int RowLen(const scimatrix&); 01127 friend int ColLen(const scimatrix&); 01128 friend simatrix Re(const scimatrix&); 01129 friend simatrix Im(const scimatrix&); 01130 friend scmatrix Sup(const scimatrix&); 01131 friend scmatrix Inf(const scimatrix&); 01132 friend srmatrix InfRe(const scimatrix&); 01133 friend srmatrix InfIm(const scimatrix&); 01134 friend srmatrix SupRe(const scimatrix&); 01135 friend srmatrix SupIm(const scimatrix&); 01136 friend scimatrix conj(const scimatrix&); 01137 friend simatrix abs(const scimatrix&); 01138 friend scmatrix mid(const scimatrix&); 01139 friend scmatrix diam(const scimatrix&); 01140 01141 friend srmatrix CompMat(const scimatrix&); 01142 friend scimatrix transp(const scimatrix&); 01143 friend scimatrix Id(const scimatrix&); 01144 01145 friend std::istream& operator>>(std::istream&, scimatrix_slice&); 01146 friend std::istream& operator>>(std::istream&, scimatrix_subv&); 01147 01148 friend class srmatrix_slice; 01149 friend class srmatrix_subv; 01150 friend class srvector; 01151 friend class scmatrix_slice; 01152 friend class scmatrix_subv; 01153 friend class scvector; 01154 friend class simatrix_slice; 01155 friend class simatrix_subv; 01156 friend class sivector; 01157 friend class scimatrix_slice; 01158 friend class scimatrix_subv; 01159 friend class scivector; 01160 friend class cimatrix; 01161 01162 #include "matrix_friend_declarations.inl" 01163 }; 01164 01165 inline cimatrix::cimatrix(const srmatrix& A) { 01166 dat = new cinterval[A.m*A.n]; 01167 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2; 01168 xsize = A.n; 01169 ysize = A.m; 01170 *this = 0.0; 01171 for(int j=0 ; j<A.n ; j++) { 01172 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01173 dat[A.ind[k]*A.n+j] = A.x[k]; 01174 } 01175 } 01176 } 01177 01178 inline cimatrix::cimatrix(const simatrix& A) { 01179 dat = new cinterval[A.m*A.n]; 01180 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2; 01181 xsize = A.n; 01182 ysize = A.m; 01183 *this = 0.0; 01184 for(int j=0 ; j<A.n ; j++) { 01185 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01186 dat[A.ind[k]*A.n+j] = A.x[k]; 01187 } 01188 } 01189 } 01190 01191 inline cimatrix::cimatrix(const scmatrix& A) { 01192 dat = new cinterval[A.m*A.n]; 01193 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2; 01194 xsize = A.n; 01195 ysize = A.m; 01196 *this = 0.0; 01197 for(int j=0 ; j<A.n ; j++) { 01198 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01199 dat[A.ind[k]*A.n+j] = A.x[k]; 01200 } 01201 } 01202 } 01203 01204 inline cimatrix::cimatrix(const scimatrix& A) { 01205 dat = new cinterval[A.m*A.n]; 01206 lb1 = A.lb1; lb2 = A.lb2; ub1 = A.ub1; ub2 = A.ub2; 01207 xsize = A.n; 01208 ysize = A.m; 01209 *this = 0.0; 01210 for(int j=0 ; j<A.n ; j++) { 01211 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01212 dat[A.ind[k]*A.n+j] = A.x[k]; 01213 } 01214 } 01215 } 01216 01218 inline scimatrix Id(const scimatrix& A) { 01219 scimatrix I(A.m, A.n, (A.m>A.n) ? A.m : A.n); 01220 I.lb1 = A.lb1; I.lb2 = A.lb2; 01221 I.ub1 = A.ub1; I.ub2 = A.ub2; 01222 01223 if(A.m < A.n) { 01224 for(int i=0 ; i<A.m ; i++) { 01225 I.p[i+1] = I.p[i] + 1; 01226 I.ind.push_back(i); 01227 I.x.push_back(cinterval(1.0)); 01228 } 01229 } else { 01230 for(int i=0 ; i<A.n ; i++) { 01231 I.p[i+1] = I.p[i] + 1; 01232 I.ind.push_back(i); 01233 I.x.push_back(cinterval(1.0)); 01234 } 01235 } 01236 01237 return I; 01238 } 01239 01241 inline srmatrix CompMat(const scimatrix& A) { 01242 srmatrix res(A.m,A.n,A.get_nnz()); 01243 res.lb1 = A.lb1; 01244 res.lb2 = A.lb2; 01245 res.ub1 = A.ub1; 01246 res.ub2 = A.ub2; 01247 res.p = A.p; 01248 res.ind = A.ind; 01249 res.p[A.n] = A.p[A.n]; 01250 01251 for(int j=0 ; j<res.n ; j++) { 01252 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01253 if(A.ind[k] == j) 01254 res.x.push_back(Inf(abs(A.x[k]))); 01255 else 01256 res.x.push_back(-Sup(abs(A.x[k]))); 01257 } 01258 } 01259 01260 res.dropzeros(); 01261 01262 return res; 01263 } 01264 01266 inline scimatrix transp(const scimatrix& A) { 01267 scimatrix B(A.n, A.m, A.get_nnz()); 01268 01269 //NIchtnullen pro Zeile bestimmen 01270 std::vector<int> w(A.m,0); 01271 for(unsigned int i=0 ; i<A.ind.size() ; i++) 01272 w[A.ind[i]]++; 01273 01274 //Spalten"pointer" setzen 01275 B.p.resize(A.m+1); 01276 B.p[0] = 0; 01277 for(unsigned int i=1 ; i<B.p.size() ; i++) 01278 B.p[i] = w[i-1] + B.p[i-1]; 01279 01280 //w vorbereiten 01281 w.insert(w.begin(), 0); 01282 for(unsigned int i=1 ; i<w.size() ; i++) { 01283 w[i] += w[i-1]; 01284 } 01285 01286 //neuer zeilenindex und wert wird gesetzt 01287 int q; 01288 B.ind.resize(A.get_nnz()); 01289 B.x.resize(A.get_nnz()); 01290 for(int j=0 ; j<A.n ; j++) { 01291 for(int k=A.p[j] ; k<A.p[j+1] ; k++) { 01292 q = w[A.ind[k]]++; 01293 B.ind[q] = j; 01294 B.x[q] = A.x[k]; 01295 } 01296 } 01297 01298 return B; 01299 } 01300 01302 01306 inline void SetLb(scimatrix& A, const int i, const int j) { 01307 if(i==1) { 01308 A.lb1 = j; 01309 A.ub1 = j + A.m - 1; 01310 } else if(i==2) { 01311 A.lb2 = j; 01312 A.ub2 = j + A.n - 1; 01313 } 01314 } 01315 01317 01321 inline void SetUb(scimatrix& A, const int i, const int j) { 01322 if(i==1) { 01323 A.ub1 = j; 01324 A.lb1 = j - A.m + 1; 01325 } else if(i==2) { 01326 A.ub2 = j; 01327 A.lb2 = j - A.n + 1; 01328 } 01329 } 01330 01332 01335 inline int Lb(const scimatrix& A, int i) { 01336 if(i==1) 01337 return A.lb1; 01338 else if(i==2) 01339 return A.lb2; 01340 else 01341 return 1; 01342 } 01343 01345 01348 inline int Ub(const scimatrix& A, int i) { 01349 if(i==1) 01350 return A.ub1; 01351 else if(i==2) 01352 return A.ub2; 01353 else 01354 return 1; 01355 } 01356 01358 inline int RowLen(const scimatrix& A) { 01359 return A.n; 01360 } 01361 01363 inline int ColLen(const scimatrix& A) { 01364 return A.m; 01365 } 01366 01368 inline void Resize(scimatrix& A) { 01369 sp_m_resize(A); 01370 } 01371 01373 inline void Resize(scimatrix& A, const int m, const int n) { 01374 sp_m_resize(A,m,n); 01375 } 01376 01378 inline void Resize(scimatrix& A, const int l1, const int u1, const int l2, const int u2) { 01379 sp_m_resize(A,l1,u1,l2,u2); 01380 } 01381 01383 inline simatrix Re(const scimatrix& A) { 01384 simatrix res(A.m,A.n,A.get_nnz()); 01385 res.lb1 = A.lb1; 01386 res.lb2 = A.lb2; 01387 res.ub1 = A.ub1; 01388 res.ub2 = A.ub2; 01389 res.p = A.p; 01390 res.ind = A.ind; 01391 01392 for(int i=0 ; i<res.get_nnz() ; i++) 01393 res.x.push_back(Re(A.x[i])); 01394 01395 res.dropzeros(); 01396 01397 return res; 01398 } 01399 01401 inline simatrix Im(const scimatrix& A) { 01402 simatrix res(A.m,A.n,A.get_nnz()); 01403 res.lb1 = A.lb1; 01404 res.lb2 = A.lb2; 01405 res.ub1 = A.ub1; 01406 res.ub2 = A.ub2; 01407 res.p = A.p; 01408 res.ind = A.ind; 01409 01410 for(int i=0 ; i<res.get_nnz() ; i++) 01411 res.x.push_back(Im(A.x[i])); 01412 01413 res.dropzeros(); 01414 01415 return res; 01416 } 01417 01419 inline scmatrix Inf(const scimatrix& A) { 01420 scmatrix res(A.m,A.n,A.get_nnz()); 01421 res.lb1 = A.lb1; 01422 res.lb2 = A.lb2; 01423 res.ub1 = A.ub1; 01424 res.ub2 = A.ub2; 01425 res.p = A.p; 01426 res.ind = A.ind; 01427 01428 for(int i=0 ; i<res.get_nnz() ; i++) 01429 res.x.push_back(Inf(A.x[i])); 01430 01431 res.dropzeros(); 01432 01433 return res; 01434 } 01435 01437 inline scmatrix Sup(const scimatrix& A) { 01438 scmatrix res(A.m,A.n,A.get_nnz()); 01439 res.lb1 = A.lb1; 01440 res.lb2 = A.lb2; 01441 res.ub1 = A.ub1; 01442 res.ub2 = A.ub2; 01443 res.p = A.p; 01444 res.ind = A.ind; 01445 01446 for(int i=0 ; i<res.get_nnz() ; i++) 01447 res.x.push_back(Sup(A.x[i])); 01448 01449 res.dropzeros(); 01450 01451 return res; 01452 } 01453 01455 inline scimatrix conj(const scimatrix& A) { 01456 scimatrix res(A.m,A.n,A.get_nnz()); 01457 res.lb1 = A.lb1; 01458 res.lb2 = A.lb2; 01459 res.ub1 = A.ub1; 01460 res.ub2 = A.ub2; 01461 res.p = A.p; 01462 res.ind = A.ind; 01463 01464 for(int i=0 ; i<res.get_nnz() ; i++) 01465 res.x.push_back(conj(A.x[i])); 01466 01467 res.dropzeros(); 01468 01469 return res; 01470 } 01471 01473 inline simatrix abs(const scimatrix& A) { 01474 simatrix res(A.m,A.n,A.get_nnz()); 01475 res.lb1 = A.lb1; 01476 res.lb2 = A.lb2; 01477 res.ub1 = A.ub1; 01478 res.ub2 = A.ub2; 01479 res.p = A.p; 01480 res.ind = A.ind; 01481 01482 for(int i=0 ; i<res.get_nnz() ; i++) 01483 res.x.push_back(abs(A.x[i])); 01484 01485 res.dropzeros(); 01486 01487 return res; 01488 } 01489 01491 inline scmatrix mid(const scimatrix& A) { 01492 scmatrix res(A.m,A.n,A.get_nnz()); 01493 res.lb1 = A.lb1; 01494 res.lb2 = A.lb2; 01495 res.ub1 = A.ub1; 01496 res.ub2 = A.ub2; 01497 res.p = A.p; 01498 res.ind = A.ind; 01499 01500 for(int i=0 ; i<res.get_nnz() ; i++) 01501 res.x.push_back(mid(A.x[i])); 01502 01503 res.dropzeros(); 01504 01505 return res; 01506 } 01507 01509 inline scmatrix diam(const scimatrix& A) { 01510 scmatrix res(A.m,A.n,A.get_nnz()); 01511 res.lb1 = A.lb1; 01512 res.lb2 = A.lb2; 01513 res.ub1 = A.ub1; 01514 res.ub2 = A.ub2; 01515 res.p = A.p; 01516 res.ind = A.ind; 01517 01518 for(int i=0 ; i<res.get_nnz() ; i++) 01519 res.x.push_back(diam(A.x[i])); 01520 01521 res.dropzeros(); 01522 01523 return res; 01524 } 01525 01527 inline srmatrix InfRe(const scimatrix& A) { 01528 srmatrix res(A.m,A.n,A.get_nnz()); 01529 res.lb1 = A.lb1; 01530 res.lb2 = A.lb2; 01531 res.ub1 = A.ub1; 01532 res.ub2 = A.ub2; 01533 res.p = A.p; 01534 res.ind = A.ind; 01535 01536 for(int i=0 ; i<res.get_nnz() ; i++) 01537 res.x.push_back(InfRe(A.x[i])); 01538 01539 res.dropzeros(); 01540 01541 return res; 01542 } 01543 01545 inline srmatrix InfIm(const scimatrix& A) { 01546 srmatrix res(A.m,A.n,A.get_nnz()); 01547 res.lb1 = A.lb1; 01548 res.lb2 = A.lb2; 01549 res.ub1 = A.ub1; 01550 res.ub2 = A.ub2; 01551 res.p = A.p; 01552 res.ind = A.ind; 01553 01554 for(int i=0 ; i<res.get_nnz() ; i++) 01555 res.x.push_back(InfIm(A.x[i])); 01556 01557 res.dropzeros(); 01558 01559 return res; 01560 } 01561 01563 inline srmatrix SupRe(const scimatrix& A) { 01564 srmatrix res(A.m,A.n,A.get_nnz()); 01565 res.lb1 = A.lb1; 01566 res.lb2 = A.lb2; 01567 res.ub1 = A.ub1; 01568 res.ub2 = A.ub2; 01569 res.p = A.p; 01570 res.ind = A.ind; 01571 01572 for(int i=0 ; i<res.get_nnz() ; i++) 01573 res.x.push_back(SupRe(A.x[i])); 01574 01575 res.dropzeros(); 01576 01577 return res; 01578 } 01579 01581 inline srmatrix SupIm(const scimatrix& A) { 01582 srmatrix res(A.m,A.n,A.get_nnz()); 01583 res.lb1 = A.lb1; 01584 res.lb2 = A.lb2; 01585 res.ub1 = A.ub1; 01586 res.ub2 = A.ub2; 01587 res.p = A.p; 01588 res.ind = A.ind; 01589 01590 for(int i=0 ; i<res.get_nnz() ; i++) 01591 res.x.push_back(SupIm(A.x[i])); 01592 01593 res.dropzeros(); 01594 01595 return res; 01596 } 01597 01599 01605 inline cimatrix operator*(const cimatrix& A, const srmatrix& B) { 01606 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(A,B); 01607 } 01608 01610 01616 inline cimatrix operator*(const cimatrix& A, const scmatrix& B) { 01617 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(A,B); 01618 } 01619 01621 01627 inline cimatrix operator*(const cimatrix& A, const simatrix& B) { 01628 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(A,B); 01629 } 01630 01632 01638 inline cimatrix operator*(const cimatrix& A, const scimatrix& B) { 01639 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(A,B); 01640 } 01641 01643 01649 inline cimatrix operator*(const rmatrix& A, const scimatrix& B) { 01650 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(A,B); 01651 } 01652 01654 01660 inline cimatrix operator*(const cmatrix& A, const scimatrix& B) { 01661 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(A,B); 01662 } 01663 01665 01671 inline cimatrix operator*(const imatrix& A, const scimatrix& B) { 01672 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(A,B); 01673 } 01674 01676 01682 inline cimatrix operator*(const cmatrix& A, const simatrix& B) { 01683 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(A,B); 01684 } 01685 01687 01693 inline cimatrix operator*(const imatrix& A, const scmatrix& B) { 01694 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(A,B); 01695 } 01696 01698 01704 inline cimatrix operator*(const scimatrix& A, const rmatrix& B) { 01705 return spf_mm_mult<scimatrix,rmatrix,cimatrix,sparse_cidot>(A,B); 01706 } 01707 01709 01715 inline cimatrix operator*(const scimatrix& A, const cmatrix& B) { 01716 return spf_mm_mult<scimatrix,cmatrix,cimatrix,sparse_cidot>(A,B); 01717 } 01718 01720 01726 inline cimatrix operator*(const scimatrix& A, const imatrix& B) { 01727 return spf_mm_mult<scimatrix,imatrix,cimatrix,sparse_cidot>(A,B); 01728 } 01729 01731 01737 inline cimatrix operator*(const scimatrix& A, const cimatrix& B) { 01738 return spf_mm_mult<scimatrix,cimatrix,cimatrix,sparse_cidot>(A,B); 01739 } 01740 01742 01748 inline cimatrix operator*(const srmatrix& A, const cimatrix& B) { 01749 return spf_mm_mult<srmatrix,cimatrix,cimatrix,sparse_cidot>(A,B); 01750 } 01751 01753 01759 inline cimatrix operator*(const scmatrix& A, const cimatrix& B) { 01760 return spf_mm_mult<scmatrix,cimatrix,cimatrix,sparse_cidot>(A,B); 01761 } 01762 01764 01770 inline cimatrix operator*(const simatrix& A, const cimatrix& B) { 01771 return spf_mm_mult<simatrix,cimatrix,cimatrix,sparse_cidot>(A,B); 01772 } 01773 01775 01781 inline cimatrix operator*(const scmatrix& A, const imatrix& B) { 01782 return spf_mm_mult<scmatrix,imatrix,cimatrix,sparse_cidot>(A,B); 01783 } 01784 01786 01792 inline cimatrix operator*(const simatrix& A, const cmatrix& B) { 01793 return spf_mm_mult<simatrix,cmatrix,cimatrix,sparse_cidot>(A,B); 01794 } 01795 01797 01803 inline cimatrix operator*(const cimatrix_slice& A, const srmatrix& B) { 01804 return fsp_mm_mult<cimatrix_slice,srmatrix,cimatrix,sparse_cidot>(A,B); 01805 } 01806 01808 01814 inline cimatrix operator*(const cimatrix_slice& A, const scmatrix& B) { 01815 return fsp_mm_mult<cimatrix_slice,scmatrix,cimatrix,sparse_cidot>(A,B); 01816 } 01817 01819 01825 inline cimatrix operator*(const cimatrix_slice& A, const simatrix& B) { 01826 return fsp_mm_mult<cimatrix_slice,simatrix,cimatrix,sparse_cidot>(A,B); 01827 } 01828 01830 01836 inline cimatrix operator*(const cimatrix_slice& A, const scimatrix& B) { 01837 return fsp_mm_mult<cimatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B); 01838 } 01839 01841 01847 inline cimatrix operator*(const rmatrix_slice& A, const scimatrix& B) { 01848 return fsp_mm_mult<rmatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B); 01849 } 01850 01852 01858 inline cimatrix operator*(const imatrix_slice& A, const scimatrix& B) { 01859 return fsp_mm_mult<imatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B); 01860 } 01861 01863 01869 inline cimatrix operator*(const cmatrix_slice& A, const scimatrix& B) { 01870 return fsp_mm_mult<cmatrix_slice,scimatrix,cimatrix,sparse_cidot>(A,B); 01871 } 01872 01874 01880 inline cimatrix operator*(const cmatrix_slice& A, const simatrix& B) { 01881 return fsp_mm_mult<cmatrix_slice,simatrix,cimatrix,sparse_cidot>(A,B); 01882 } 01883 01885 01891 inline cimatrix operator*(const imatrix_slice& A, const scmatrix& B) { 01892 return fsp_mm_mult<imatrix_slice,scmatrix,cimatrix,sparse_cidot>(A,B); 01893 } 01894 01896 01902 inline cimatrix operator*(const scimatrix& A, const rmatrix_slice& B) { 01903 return spf_mm_mult<scimatrix,rmatrix_slice,cimatrix,sparse_cidot>(A,B); 01904 } 01905 01907 01913 inline cimatrix operator*(const scimatrix& A, const cmatrix_slice& B) { 01914 return spf_mm_mult<scimatrix,cmatrix_slice,cimatrix,sparse_cidot>(A,B); 01915 } 01916 01918 01924 inline cimatrix operator*(const scimatrix& A, const imatrix_slice& B) { 01925 return spf_mm_mult<scimatrix,imatrix_slice,cimatrix,sparse_cidot>(A,B); 01926 } 01927 01929 01935 inline cimatrix operator*(const scimatrix& A, const cimatrix_slice& B) { 01936 return spf_mm_mult<scimatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B); 01937 } 01938 01940 01946 inline cimatrix operator*(const srmatrix& A, const cimatrix_slice& B) { 01947 return spf_mm_mult<srmatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B); 01948 } 01949 01951 01957 inline cimatrix operator*(const scmatrix& A, const cimatrix_slice& B) { 01958 return spf_mm_mult<scmatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B); 01959 } 01960 01962 01968 inline cimatrix operator*(const simatrix& A, const cimatrix_slice& B) { 01969 return spf_mm_mult<simatrix,cimatrix_slice,cimatrix,sparse_cidot>(A,B); 01970 } 01971 01973 01979 inline cimatrix operator*(const scmatrix& A, const imatrix_slice& B) { 01980 return spf_mm_mult<scmatrix,imatrix_slice,cimatrix,sparse_cidot>(A,B); 01981 } 01982 01984 01990 inline cimatrix operator*(const simatrix& A, const cmatrix_slice& B) { 01991 return spf_mm_mult<simatrix,cmatrix_slice,cimatrix,sparse_cidot>(A,B); 01992 } 01993 01995 02001 inline scimatrix operator*(const scimatrix& A, const srmatrix& B) { 02002 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02003 } 02004 02006 02012 inline scimatrix operator*(const scimatrix& A, const scmatrix& B) { 02013 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02014 } 02015 02017 02023 inline scimatrix operator*(const scimatrix& A, const simatrix& B) { 02024 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02025 } 02026 02028 02034 inline scimatrix operator*(const scimatrix& A, const scimatrix& B) { 02035 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02036 } 02037 02039 02045 inline scimatrix operator*(const srmatrix& A, const scimatrix& B) { 02046 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02047 } 02048 02050 02056 inline scimatrix operator*(const scmatrix& A, const scimatrix& B) { 02057 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02058 } 02059 02061 02067 inline scimatrix operator*(const simatrix& A, const scimatrix& B) { 02068 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02069 } 02070 02072 02078 inline scimatrix operator*(const scmatrix& A, const simatrix& B) { 02079 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02080 } 02081 02083 02089 inline scimatrix operator*(const simatrix& A, const scmatrix& B) { 02090 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(A,B); 02091 } 02092 02094 inline scimatrix operator/(const scimatrix& A, const real& r) { 02095 return sp_ms_div<scimatrix,real,scimatrix>(A,r); 02096 } 02097 02099 inline scimatrix operator/(const scimatrix& A, const complex& r) { 02100 return sp_ms_div<scimatrix,complex,scimatrix>(A,r); 02101 } 02102 02104 inline scimatrix operator/(const scimatrix& A, const interval& r) { 02105 return sp_ms_div<scimatrix,interval,scimatrix>(A,r); 02106 } 02107 02109 inline scimatrix operator/(const scimatrix& A, const cinterval& r) { 02110 return sp_ms_div<scimatrix,cinterval,scimatrix>(A,r); 02111 } 02112 02114 inline scimatrix operator/(const srmatrix& A, const cinterval& r) { 02115 return sp_ms_div<srmatrix,cinterval,scimatrix>(A,r); 02116 } 02117 02119 inline scimatrix operator/(const simatrix& A, const cinterval& r) { 02120 return sp_ms_div<simatrix,cinterval,scimatrix>(A,r); 02121 } 02122 02124 inline scimatrix operator/(const scmatrix& A, const cinterval& r) { 02125 return sp_ms_div<scmatrix,cinterval,scimatrix>(A,r); 02126 } 02127 02129 inline scimatrix operator/(const scmatrix& A, const interval& r) { 02130 return sp_ms_div<scmatrix,interval,scimatrix>(A,r); 02131 } 02132 02134 inline scimatrix operator/(const simatrix& A, const complex& r) { 02135 return sp_ms_div<simatrix,complex,scimatrix>(A,r); 02136 } 02137 02139 inline scimatrix operator*(const scimatrix& A, const real& r) { 02140 return sp_ms_mult<scimatrix,real,scimatrix>(A,r); 02141 } 02142 02144 inline scimatrix operator*(const scimatrix& A, const complex& r) { 02145 return sp_ms_mult<scimatrix,complex,scimatrix>(A,r); 02146 } 02147 02149 inline scimatrix operator*(const scimatrix& A, const interval& r) { 02150 return sp_ms_mult<scimatrix,interval,scimatrix>(A,r); 02151 } 02152 02154 inline scimatrix operator*(const scimatrix& A, const cinterval& r) { 02155 return sp_ms_mult<scimatrix,cinterval,scimatrix>(A,r); 02156 } 02157 02159 inline scimatrix operator*(const srmatrix& A, const cinterval& r) { 02160 return sp_ms_mult<srmatrix,cinterval,scimatrix>(A,r); 02161 } 02162 02164 inline scimatrix operator*(const simatrix& A, const cinterval& r) { 02165 return sp_ms_mult<simatrix,cinterval,scimatrix>(A,r); 02166 } 02167 02169 inline scimatrix operator*(const scmatrix& A, const cinterval& r) { 02170 return sp_ms_mult<scmatrix,cinterval,scimatrix>(A,r); 02171 } 02172 02174 inline scimatrix operator*(const scmatrix& A, const interval& r) { 02175 return sp_ms_mult<scmatrix,interval,scimatrix>(A,r); 02176 } 02177 02179 inline scimatrix operator*(const simatrix& A, const complex& r) { 02180 return sp_ms_mult<simatrix,complex,scimatrix>(A,r); 02181 } 02182 02184 inline scimatrix operator*(const real& r, const scimatrix& A) { 02185 return sp_sm_mult<real,scimatrix,scimatrix>(r,A); 02186 } 02187 02189 inline scimatrix operator*(const complex& r, const scimatrix& A) { 02190 return sp_sm_mult<complex,scimatrix,scimatrix>(r,A); 02191 } 02192 02194 inline scimatrix operator*(const interval& r, const scimatrix& A) { 02195 return sp_sm_mult<interval,scimatrix,scimatrix>(r,A); 02196 } 02197 02199 inline scimatrix operator*(const cinterval& r, const scimatrix& A) { 02200 return sp_sm_mult<cinterval,scimatrix,scimatrix>(r,A); 02201 } 02202 02204 inline scimatrix operator*(const cinterval& r, const srmatrix& A) { 02205 return sp_sm_mult<cinterval,srmatrix,scimatrix>(r,A); 02206 } 02207 02209 inline scimatrix operator*(const cinterval& r, const simatrix& A) { 02210 return sp_sm_mult<cinterval,simatrix,scimatrix>(r,A); 02211 } 02212 02214 inline scimatrix operator*(const cinterval& r, const scmatrix& A) { 02215 return sp_sm_mult<cinterval,scmatrix,scimatrix>(r,A); 02216 } 02217 02219 inline scimatrix operator*(const complex& r, const simatrix& A) { 02220 return sp_sm_mult<complex,simatrix,scimatrix>(r,A); 02221 } 02222 02224 inline scimatrix operator*(const interval& r, const scmatrix& A) { 02225 return sp_sm_mult<interval,scmatrix,scimatrix>(r,A); 02226 } 02227 02229 02235 inline civector operator*(const scimatrix& A, const rvector& v) { 02236 return spf_mv_mult<scimatrix,rvector,civector,sparse_cidot>(A,v); 02237 } 02238 02240 02246 inline civector operator*(const scimatrix& A, const cvector& v) { 02247 return spf_mv_mult<scimatrix,cvector,civector,sparse_cidot>(A,v); 02248 } 02249 02251 02257 inline civector operator*(const scimatrix& A, const ivector& v) { 02258 return spf_mv_mult<scimatrix,ivector,civector,sparse_cidot>(A,v); 02259 } 02260 02262 02268 inline civector operator*(const scimatrix& A, const civector& v) { 02269 return spf_mv_mult<scimatrix,civector,civector,sparse_cidot>(A,v); 02270 } 02271 02273 02279 inline civector operator*(const srmatrix& A, const civector& v) { 02280 return spf_mv_mult<srmatrix,civector,civector,sparse_cidot>(A,v); 02281 } 02282 02284 02290 inline civector operator*(const scmatrix& A, const civector& v) { 02291 return spf_mv_mult<scmatrix,civector,civector,sparse_cidot>(A,v); 02292 } 02293 02295 02301 inline civector operator*(const simatrix& A, const civector& v) { 02302 return spf_mv_mult<simatrix,civector,civector,sparse_cidot>(A,v); 02303 } 02304 02306 02312 inline civector operator*(const scmatrix& A, const ivector& v) { 02313 return spf_mv_mult<scmatrix,ivector,civector,sparse_cidot>(A,v); 02314 } 02315 02317 02323 inline civector operator*(const simatrix& A, const cvector& v) { 02324 return spf_mv_mult<simatrix,cvector,civector,sparse_cidot>(A,v); 02325 } 02326 02328 02334 inline civector operator*(const scimatrix& A, const rvector_slice& v) { 02335 return spf_mv_mult<scimatrix,rvector_slice,civector,sparse_cidot>(A,v); 02336 } 02337 02339 02345 inline civector operator*(const scimatrix& A, const ivector_slice& v) { 02346 return spf_mv_mult<scimatrix,ivector_slice,civector,sparse_cidot>(A,v); 02347 } 02348 02350 02356 inline civector operator*(const scimatrix& A, const cvector_slice& v) { 02357 return spf_mv_mult<scimatrix,cvector_slice,civector,sparse_cidot>(A,v); 02358 } 02359 02361 02367 inline civector operator*(const scimatrix& A, const civector_slice& v) { 02368 return spf_mv_mult<scimatrix,civector_slice,civector,sparse_cidot>(A,v); 02369 } 02370 02372 02378 inline civector operator*(const srmatrix& A, const civector_slice& v) { 02379 return spf_mv_mult<srmatrix,civector_slice,civector,sparse_cidot>(A,v); 02380 } 02381 02383 02389 inline civector operator*(const scmatrix& A, const civector_slice& v) { 02390 return spf_mv_mult<scmatrix,civector_slice,civector,sparse_cidot>(A,v); 02391 } 02392 02394 02400 inline civector operator*(const simatrix& A, const civector_slice& v) { 02401 return spf_mv_mult<simatrix,civector_slice,civector,sparse_cidot>(A,v); 02402 } 02403 02405 02411 inline civector operator*(const simatrix& A, const cvector_slice& v) { 02412 return spf_mv_mult<simatrix,cvector_slice,civector,sparse_cidot>(A,v); 02413 } 02414 02416 02422 inline civector operator*(const scmatrix& A, const ivector_slice& v) { 02423 return spf_mv_mult<scmatrix,ivector_slice,civector,sparse_cidot>(A,v); 02424 } 02425 02427 02433 inline scivector operator*(const scimatrix& A, const srvector& v) { 02434 return spsp_mv_mult<scimatrix,srvector,scivector,sparse_cidot,cinterval>(A,v); 02435 } 02436 02438 02444 inline scivector operator*(const scimatrix& A, const sivector& v) { 02445 return spsp_mv_mult<scimatrix,sivector,scivector,sparse_cidot,cinterval>(A,v); 02446 } 02447 02449 02455 inline scivector operator*(const scimatrix& A, const scvector& v) { 02456 return spsp_mv_mult<scimatrix,scvector,scivector,sparse_cidot,cinterval>(A,v); 02457 } 02458 02460 02466 inline scivector operator*(const scimatrix& A, const scivector& v) { 02467 return spsp_mv_mult<scimatrix,scivector,scivector,sparse_cidot,cinterval>(A,v); 02468 } 02469 02471 02477 inline scivector operator*(const srmatrix& A, const scivector& v) { 02478 return spsp_mv_mult<srmatrix,scivector,scivector,sparse_cidot,cinterval>(A,v); 02479 } 02480 02482 02488 inline scivector operator*(const scmatrix& A, const scivector& v) { 02489 return spsp_mv_mult<scmatrix,scivector,scivector,sparse_cidot,cinterval>(A,v); 02490 } 02491 02493 02499 inline scivector operator*(const simatrix& A, const scivector& v) { 02500 return spsp_mv_mult<simatrix,scivector,scivector,sparse_cidot,cinterval>(A,v); 02501 } 02503 02509 inline scivector operator*(const scmatrix& A, const sivector& v) { 02510 return spsp_mv_mult<scmatrix,sivector,scivector,sparse_cidot,cinterval>(A,v); 02511 } 02512 02514 02520 inline scivector operator*(const simatrix& A, const scvector& v) { 02521 return spsp_mv_mult<simatrix,scvector,scivector,sparse_cidot,cinterval>(A,v); 02522 } 02523 02525 02531 inline scivector operator*(const scimatrix& A, const srvector_slice& v) { 02532 return spsl_mv_mult<scimatrix,srvector_slice,scivector,sparse_cidot,cinterval>(A,v); 02533 } 02534 02536 02542 inline scivector operator*(const scimatrix& A, const scvector_slice& v) { 02543 return spsl_mv_mult<scimatrix,scvector_slice,scivector,sparse_cidot,cinterval>(A,v); 02544 } 02545 02547 02553 inline scivector operator*(const scimatrix& A, const sivector_slice& v) { 02554 return spsl_mv_mult<scimatrix,sivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02555 } 02556 02558 02564 inline scivector operator*(const scimatrix& A, const scivector_slice& v) { 02565 return spsl_mv_mult<scimatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02566 } 02567 02569 02575 inline scivector operator*(const srmatrix& A, const scivector_slice& v) { 02576 return spsl_mv_mult<srmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02577 } 02578 02580 02586 inline scivector operator*(const scmatrix& A, const scivector_slice& v) { 02587 return spsl_mv_mult<scmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02588 } 02589 02591 02597 inline scivector operator*(const simatrix& A, const scivector_slice& v) { 02598 return spsl_mv_mult<simatrix,scivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02599 } 02600 02602 02608 inline scivector operator*(const simatrix& A, const scvector_slice& v) { 02609 return spsl_mv_mult<simatrix,scvector_slice,scivector,sparse_cidot,cinterval>(A,v); 02610 } 02611 02613 02619 inline scivector operator*(const scmatrix& A, const sivector_slice& v) { 02620 return spsl_mv_mult<scmatrix,sivector_slice,scivector,sparse_cidot,cinterval>(A,v); 02621 } 02622 02624 02630 inline civector operator*(const cimatrix& A, const srvector& v) { 02631 return fsp_mv_mult<cimatrix,srvector,civector,sparse_cidot>(A,v); 02632 } 02633 02635 02641 inline civector operator*(const cimatrix& A, const sivector& v) { 02642 return fsp_mv_mult<cimatrix,sivector,civector,sparse_cidot>(A,v); 02643 } 02644 02646 02652 inline civector operator*(const cimatrix& A, const scvector& v) { 02653 return fsp_mv_mult<cimatrix,scvector,civector,sparse_cidot>(A,v); 02654 } 02655 02657 02663 inline civector operator*(const cimatrix& A, const scivector& v) { 02664 return fsp_mv_mult<cimatrix,scivector,civector,sparse_cidot>(A,v); 02665 } 02666 02668 02674 inline civector operator*(const rmatrix& A, const scivector& v) { 02675 return fsp_mv_mult<rmatrix,scivector,civector,sparse_cidot>(A,v); 02676 } 02677 02679 02685 inline civector operator*(const cmatrix& A, const scivector& v) { 02686 return fsp_mv_mult<cmatrix,scivector,civector,sparse_cidot>(A,v); 02687 } 02688 02690 02696 inline civector operator*(const imatrix& A, const scivector& v) { 02697 return fsp_mv_mult<imatrix,scivector,civector,sparse_cidot>(A,v); 02698 } 02699 02701 02707 inline civector operator*(const cmatrix& A, const sivector& v) { 02708 return fsp_mv_mult<cmatrix,sivector,civector,sparse_cidot>(A,v); 02709 } 02710 02712 02718 inline civector operator*(const imatrix& A, const scvector& v) { 02719 return fsp_mv_mult<imatrix,scvector,civector,sparse_cidot>(A,v); 02720 } 02721 02723 02729 inline civector operator*(const cimatrix_slice& A, const srvector& v) { 02730 return fsp_mv_mult<cimatrix_slice,srvector,civector,sparse_cidot>(A,v); 02731 } 02732 02734 02740 inline civector operator*(const cimatrix_slice& A, const scvector& v) { 02741 return fsp_mv_mult<cimatrix_slice,scvector,civector,sparse_cidot>(A,v); 02742 } 02743 02745 02751 inline civector operator*(const cimatrix_slice& A, const sivector& v) { 02752 return fsp_mv_mult<cimatrix_slice,sivector,civector,sparse_cidot>(A,v); 02753 } 02754 02756 02762 inline civector operator*(const cimatrix_slice& A, const scivector& v) { 02763 return fsp_mv_mult<cimatrix_slice,scivector,civector,sparse_cidot>(A,v); 02764 } 02765 02767 02773 inline civector operator*(const rmatrix_slice& A, const scivector& v) { 02774 return fsp_mv_mult<rmatrix_slice,scivector,civector,sparse_cidot>(A,v); 02775 } 02776 02778 02784 inline civector operator*(const cmatrix_slice& A, const scivector& v) { 02785 return fsp_mv_mult<cmatrix_slice,scivector,civector,sparse_cidot>(A,v); 02786 } 02787 02789 02795 inline civector operator*(const imatrix_slice& A, const scivector& v) { 02796 return fsp_mv_mult<imatrix_slice,scivector,civector,sparse_cidot>(A,v); 02797 } 02798 02800 02806 inline civector operator*(const cmatrix_slice& A, const sivector& v) { 02807 return fsp_mv_mult<cmatrix_slice,sivector,civector,sparse_cidot>(A,v); 02808 } 02809 02811 02817 inline civector operator*(const imatrix_slice& A, const scvector& v) { 02818 return fsp_mv_mult<imatrix_slice,scvector,civector,sparse_cidot>(A,v); 02819 } 02820 02822 02828 inline civector operator*(const cimatrix& A, const srvector_slice& v) { 02829 return fsl_mv_mult<cimatrix,srvector_slice,civector,sparse_cidot>(A,v); 02830 } 02831 02833 02839 inline civector operator*(const cimatrix& A, const scvector_slice& v) { 02840 return fsl_mv_mult<cimatrix,scvector_slice,civector,sparse_cidot>(A,v); 02841 } 02842 02844 02850 inline civector operator*(const cimatrix& A, const sivector_slice& v) { 02851 return fsl_mv_mult<cimatrix,sivector_slice,civector,sparse_cidot>(A,v); 02852 } 02853 02855 02861 inline civector operator*(const cimatrix& A, const scivector_slice& v) { 02862 return fsl_mv_mult<cimatrix,scivector_slice,civector,sparse_cidot>(A,v); 02863 } 02864 02866 02872 inline civector operator*(const rmatrix& A, const scivector_slice& v) { 02873 return fsl_mv_mult<rmatrix,scivector_slice,civector,sparse_cidot>(A,v); 02874 } 02875 02877 02883 inline civector operator*(const cmatrix& A, const scivector_slice& v) { 02884 return fsl_mv_mult<cmatrix,scivector_slice,civector,sparse_cidot>(A,v); 02885 } 02886 02888 02894 inline civector operator*(const imatrix& A, const scivector_slice& v) { 02895 return fsl_mv_mult<imatrix,scivector_slice,civector,sparse_cidot>(A,v); 02896 } 02897 02899 02905 inline civector operator*(const cmatrix& A, const sivector_slice& v) { 02906 return fsl_mv_mult<cmatrix,sivector_slice,civector,sparse_cidot>(A,v); 02907 } 02908 02910 02916 inline civector operator*(const imatrix& A, const scvector_slice& v) { 02917 return fsl_mv_mult<imatrix,scvector_slice,civector,sparse_cidot>(A,v); 02918 } 02919 02921 02927 inline civector operator*(const cimatrix_slice& A, const srvector_slice& v) { 02928 return fsl_mv_mult<cimatrix_slice,srvector_slice,civector,sparse_cidot>(A,v); 02929 } 02930 02932 02938 inline civector operator*(const cimatrix_slice& A, const scvector_slice& v) { 02939 return fsl_mv_mult<cimatrix_slice,scvector_slice,civector,sparse_cidot>(A,v); 02940 } 02941 02943 02949 inline civector operator*(const cimatrix_slice& A, const sivector_slice& v) { 02950 return fsl_mv_mult<cimatrix_slice,sivector_slice,civector,sparse_cidot>(A,v); 02951 } 02952 02954 02960 inline civector operator*(const cimatrix_slice& A, const scivector_slice& v) { 02961 return fsl_mv_mult<cimatrix_slice,scivector_slice,civector,sparse_cidot>(A,v); 02962 } 02963 02965 02971 inline civector operator*(const rmatrix_slice& A, const scivector_slice& v) { 02972 return fsl_mv_mult<rmatrix_slice,scivector_slice,civector,sparse_cidot>(A,v); 02973 } 02974 02976 02982 inline civector operator*(const imatrix_slice& A, const scivector_slice& v) { 02983 return fsl_mv_mult<imatrix_slice,scivector_slice,civector,sparse_cidot>(A,v); 02984 } 02985 02987 02993 inline civector operator*(const cmatrix_slice& A, const scivector_slice& v) { 02994 return fsl_mv_mult<cmatrix_slice,scivector_slice,civector,sparse_cidot>(A,v); 02995 } 02996 02998 03004 inline civector operator*(const cmatrix_slice& A, const sivector_slice& v) { 03005 return fsl_mv_mult<cmatrix_slice,sivector_slice,civector,sparse_cidot>(A,v); 03006 } 03007 03009 03015 inline civector operator*(const imatrix_slice& A, const scvector_slice& v) { 03016 return fsl_mv_mult<imatrix_slice,scvector_slice,civector,sparse_cidot>(A,v); 03017 } 03018 03020 inline cimatrix operator+(const cimatrix& A, const srmatrix& B) { 03021 return fsp_mm_add<cimatrix,srmatrix,cimatrix>(A,B); 03022 } 03023 03025 inline cimatrix operator+(const cimatrix& A, const scmatrix& B) { 03026 return fsp_mm_add<cimatrix,scmatrix,cimatrix>(A,B); 03027 } 03028 03030 inline cimatrix operator+(const cimatrix& A, const simatrix& B) { 03031 return fsp_mm_add<cimatrix,simatrix,cimatrix>(A,B); 03032 } 03033 03035 inline cimatrix operator+(const cimatrix& A, const scimatrix& B) { 03036 return fsp_mm_add<cimatrix,scimatrix,cimatrix>(A,B); 03037 } 03038 03040 inline cimatrix operator+(const rmatrix& A, const scimatrix& B) { 03041 return fsp_mm_add<rmatrix,scimatrix,cimatrix>(A,B); 03042 } 03043 03045 inline cimatrix operator+(const cmatrix& A, const scimatrix& B) { 03046 return fsp_mm_add<cmatrix,scimatrix,cimatrix>(A,B); 03047 } 03048 03050 inline cimatrix operator+(const imatrix& A, const scimatrix& B) { 03051 return fsp_mm_add<imatrix,scimatrix,cimatrix>(A,B); 03052 } 03053 03055 inline cimatrix operator+(const imatrix& A, const scmatrix& B) { 03056 return fsp_mm_add<imatrix,scmatrix,cimatrix>(A,B); 03057 } 03058 03060 inline cimatrix operator+(const cmatrix& A, const simatrix& B) { 03061 return fsp_mm_add<cmatrix,simatrix,cimatrix>(A,B); 03062 } 03063 03065 inline cimatrix operator+(const scimatrix& A, const rmatrix& B) { 03066 return spf_mm_add<scimatrix,rmatrix,cimatrix>(A,B); 03067 } 03068 03070 inline cimatrix operator+(const scimatrix& A, const cmatrix& B) { 03071 return spf_mm_add<scimatrix,cmatrix,cimatrix>(A,B); 03072 } 03073 03075 inline cimatrix operator+(const scimatrix& A, const imatrix& B) { 03076 return spf_mm_add<scimatrix,imatrix,cimatrix>(A,B); 03077 } 03078 03080 inline cimatrix operator+(const scimatrix& A, const cimatrix& B) { 03081 return spf_mm_add<scimatrix,cimatrix,cimatrix>(A,B); 03082 } 03083 03085 inline cimatrix operator+(const srmatrix& A, const cimatrix& B) { 03086 return spf_mm_add<srmatrix,cimatrix,cimatrix>(A,B); 03087 } 03088 03090 inline cimatrix operator+(const scmatrix& A, const cimatrix& B) { 03091 return spf_mm_add<scmatrix,cimatrix,cimatrix>(A,B); 03092 } 03093 03095 inline cimatrix operator+(const simatrix& A, const cimatrix& B) { 03096 return spf_mm_add<simatrix,cimatrix,cimatrix>(A,B); 03097 } 03098 03100 inline cimatrix operator+(const simatrix& A, const cmatrix& B) { 03101 return spf_mm_add<simatrix,cmatrix,cimatrix>(A,B); 03102 } 03103 03105 inline cimatrix operator+(const scmatrix& A, const imatrix& B) { 03106 return spf_mm_add<scmatrix,imatrix,cimatrix>(A,B); 03107 } 03108 03110 inline cimatrix operator+(const cimatrix_slice& A, const srmatrix& B) { 03111 return fsp_mm_add<cimatrix_slice,srmatrix,cimatrix>(A,B); 03112 } 03113 03115 inline cimatrix operator+(const cimatrix_slice& A, const simatrix& B) { 03116 return fsp_mm_add<cimatrix_slice,simatrix,cimatrix>(A,B); 03117 } 03118 03120 inline cimatrix operator+(const cimatrix_slice& A, const scmatrix& B) { 03121 return fsp_mm_add<cimatrix_slice,scmatrix,cimatrix>(A,B); 03122 } 03123 03125 inline cimatrix operator+(const cimatrix_slice& A, const scimatrix& B) { 03126 return fsp_mm_add<cimatrix_slice,scimatrix,cimatrix>(A,B); 03127 } 03128 03130 inline cimatrix operator+(const rmatrix_slice& A, const scimatrix& B) { 03131 return fsp_mm_add<rmatrix_slice,scimatrix,cimatrix>(A,B); 03132 } 03133 03135 inline cimatrix operator+(const imatrix_slice& A, const scimatrix& B) { 03136 return fsp_mm_add<imatrix_slice,scimatrix,cimatrix>(A,B); 03137 } 03138 03140 inline cimatrix operator+(const cmatrix_slice& A, const scimatrix& B) { 03141 return fsp_mm_add<cmatrix_slice,scimatrix,cimatrix>(A,B); 03142 } 03143 03145 inline cimatrix operator+(const cmatrix_slice& A, const simatrix& B) { 03146 return fsp_mm_add<cmatrix_slice,simatrix,cimatrix>(A,B); 03147 } 03148 03150 inline cimatrix operator+(const imatrix_slice& A, const scmatrix& B) { 03151 return fsp_mm_add<imatrix_slice,scmatrix,cimatrix>(A,B); 03152 } 03153 03155 inline cimatrix operator+(const scimatrix& A, const rmatrix_slice& B) { 03156 return spf_mm_add<scimatrix,rmatrix_slice,cimatrix>(A,B); 03157 } 03158 03160 inline cimatrix operator+(const scimatrix& A, const cmatrix_slice& B) { 03161 return spf_mm_add<scimatrix,cmatrix_slice,cimatrix>(A,B); 03162 } 03163 03165 inline cimatrix operator+(const scimatrix& A, const imatrix_slice& B) { 03166 return spf_mm_add<scimatrix,imatrix_slice,cimatrix>(A,B); 03167 } 03168 03170 inline cimatrix operator+(const scimatrix& A, const cimatrix_slice& B) { 03171 return spf_mm_add<scimatrix,cimatrix_slice,cimatrix>(A,B); 03172 } 03173 03175 inline cimatrix operator+(const srmatrix& A, const cimatrix_slice& B) { 03176 return spf_mm_add<srmatrix,cimatrix_slice,cimatrix>(A,B); 03177 } 03178 03180 inline cimatrix operator+(const scmatrix& A, const cimatrix_slice& B) { 03181 return spf_mm_add<scmatrix,cimatrix_slice,cimatrix>(A,B); 03182 } 03183 03185 inline cimatrix operator+(const simatrix& A, const cimatrix_slice& B) { 03186 return spf_mm_add<simatrix,cimatrix_slice,cimatrix>(A,B); 03187 } 03188 03190 inline cimatrix operator+(const simatrix& A, const cmatrix_slice& B) { 03191 return spf_mm_add<simatrix,cmatrix_slice,cimatrix>(A,B); 03192 } 03193 03195 inline cimatrix operator+(const scmatrix& A, const imatrix_slice& B) { 03196 return spf_mm_add<scmatrix,imatrix_slice,cimatrix>(A,B); 03197 } 03198 03200 inline scimatrix operator+(const scimatrix& A, const srmatrix& B) { 03201 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(A,B); 03202 } 03203 03205 inline scimatrix operator+(const scimatrix& A, const scmatrix& B) { 03206 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(A,B); 03207 } 03208 03210 inline scimatrix operator+(const scimatrix& A, const simatrix& B) { 03211 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(A,B); 03212 } 03213 03215 inline scimatrix operator+(const scimatrix& A, const scimatrix& B) { 03216 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(A,B); 03217 } 03218 03220 inline scimatrix operator+(const srmatrix& A, const scimatrix& B) { 03221 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(A,B); 03222 } 03223 03225 inline scimatrix operator+(const scmatrix& A, const scimatrix& B) { 03226 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(A,B); 03227 } 03228 03230 inline scimatrix operator+(const simatrix& A, const scimatrix& B) { 03231 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(A,B); 03232 } 03233 03235 inline scimatrix operator+(const simatrix& A, const scmatrix& B) { 03236 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(A,B); 03237 } 03238 03240 inline scimatrix operator+(const scmatrix& A, const simatrix& B) { 03241 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(A,B); 03242 } 03243 03245 inline cimatrix operator-(const cimatrix& A, const srmatrix& B) { 03246 return fsp_mm_sub<cimatrix,srmatrix,cimatrix>(A,B); 03247 } 03248 03250 inline cimatrix operator-(const cimatrix& A, const scmatrix& B) { 03251 return fsp_mm_sub<cimatrix,scmatrix,cimatrix>(A,B); 03252 } 03253 03255 inline cimatrix operator-(const cimatrix& A, const simatrix& B) { 03256 return fsp_mm_sub<cimatrix,simatrix,cimatrix>(A,B); 03257 } 03258 03260 inline cimatrix operator-(const cimatrix& A, const scimatrix& B) { 03261 return fsp_mm_sub<cimatrix,scimatrix,cimatrix>(A,B); 03262 } 03263 03265 inline cimatrix operator-(const rmatrix& A, const scimatrix& B) { 03266 return fsp_mm_sub<rmatrix,scimatrix,cimatrix>(A,B); 03267 } 03268 03270 inline cimatrix operator-(const cmatrix& A, const scimatrix& B) { 03271 return fsp_mm_sub<cmatrix,scimatrix,cimatrix>(A,B); 03272 } 03273 03275 inline cimatrix operator-(const imatrix& A, const scimatrix& B) { 03276 return fsp_mm_sub<imatrix,scimatrix,cimatrix>(A,B); 03277 } 03278 03280 inline cimatrix operator-(const imatrix& A, const scmatrix& B) { 03281 return fsp_mm_sub<imatrix,scmatrix,cimatrix>(A,B); 03282 } 03283 03285 inline cimatrix operator-(const cmatrix& A, const simatrix& B) { 03286 return fsp_mm_sub<cmatrix,simatrix,cimatrix>(A,B); 03287 } 03288 03290 inline cimatrix operator-(const scimatrix& A, const rmatrix& B) { 03291 return spf_mm_sub<scimatrix,rmatrix,cimatrix>(A,B); 03292 } 03293 03295 inline cimatrix operator-(const scimatrix& A, const cmatrix& B) { 03296 return spf_mm_sub<scimatrix,cmatrix,cimatrix>(A,B); 03297 } 03298 03300 inline cimatrix operator-(const scimatrix& A, const imatrix& B) { 03301 return spf_mm_sub<scimatrix,imatrix,cimatrix>(A,B); 03302 } 03303 03305 inline cimatrix operator-(const scimatrix& A, const cimatrix& B) { 03306 return spf_mm_sub<scimatrix,cimatrix,cimatrix>(A,B); 03307 } 03308 03310 inline cimatrix operator-(const srmatrix& A, const cimatrix& B) { 03311 return spf_mm_sub<srmatrix,cimatrix,cimatrix>(A,B); 03312 } 03313 03315 inline cimatrix operator-(const scmatrix& A, const cimatrix& B) { 03316 return spf_mm_sub<scmatrix,cimatrix,cimatrix>(A,B); 03317 } 03318 03320 inline cimatrix operator-(const simatrix& A, const cimatrix& B) { 03321 return spf_mm_sub<simatrix,cimatrix,cimatrix>(A,B); 03322 } 03323 03325 inline cimatrix operator-(const simatrix& A, const cmatrix& B) { 03326 return spf_mm_sub<simatrix,cmatrix,cimatrix>(A,B); 03327 } 03328 03330 inline cimatrix operator-(const scmatrix& A, const imatrix& B) { 03331 return spf_mm_sub<scmatrix,imatrix,cimatrix>(A,B); 03332 } 03333 03335 inline cimatrix operator-(const cimatrix_slice& A, const srmatrix& B) { 03336 return fsp_mm_sub<cimatrix_slice,srmatrix,cimatrix>(A,B); 03337 } 03338 03340 inline cimatrix operator-(const cimatrix_slice& A, const simatrix& B) { 03341 return fsp_mm_sub<cimatrix_slice,simatrix,cimatrix>(A,B); 03342 } 03343 03345 inline cimatrix operator-(const cimatrix_slice& A, const scmatrix& B) { 03346 return fsp_mm_sub<cimatrix_slice,scmatrix,cimatrix>(A,B); 03347 } 03348 03350 inline cimatrix operator-(const cimatrix_slice& A, const scimatrix& B) { 03351 return fsp_mm_sub<cimatrix_slice,scimatrix,cimatrix>(A,B); 03352 } 03353 03355 inline cimatrix operator-(const rmatrix_slice& A, const scimatrix& B) { 03356 return fsp_mm_sub<rmatrix_slice,scimatrix,cimatrix>(A,B); 03357 } 03358 03360 inline cimatrix operator-(const imatrix_slice& A, const scimatrix& B) { 03361 return fsp_mm_sub<imatrix_slice,scimatrix,cimatrix>(A,B); 03362 } 03363 03365 inline cimatrix operator-(const cmatrix_slice& A, const scimatrix& B) { 03366 return fsp_mm_sub<cmatrix_slice,scimatrix,cimatrix>(A,B); 03367 } 03368 03370 inline cimatrix operator-(const cmatrix_slice& A, const simatrix& B) { 03371 return fsp_mm_sub<cmatrix_slice,simatrix,cimatrix>(A,B); 03372 } 03373 03375 inline cimatrix operator-(const imatrix_slice& A, const scmatrix& B) { 03376 return fsp_mm_sub<imatrix_slice,scmatrix,cimatrix>(A,B); 03377 } 03378 03380 inline cimatrix operator-(const scimatrix& A, const rmatrix_slice& B) { 03381 return spf_mm_sub<scimatrix,rmatrix_slice,cimatrix>(A,B); 03382 } 03383 03385 inline cimatrix operator-(const scimatrix& A, const cmatrix_slice& B) { 03386 return spf_mm_sub<scimatrix,cmatrix_slice,cimatrix>(A,B); 03387 } 03388 03390 inline cimatrix operator-(const scimatrix& A, const imatrix_slice& B) { 03391 return spf_mm_sub<scimatrix,imatrix_slice,cimatrix>(A,B); 03392 } 03393 03395 inline cimatrix operator-(const scimatrix& A, const cimatrix_slice& B) { 03396 return spf_mm_sub<scimatrix,cimatrix_slice,cimatrix>(A,B); 03397 } 03398 03400 inline cimatrix operator-(const srmatrix& A, const cimatrix_slice& B) { 03401 return spf_mm_sub<srmatrix,cimatrix_slice,cimatrix>(A,B); 03402 } 03403 03405 inline cimatrix operator-(const scmatrix& A, const cimatrix_slice& B) { 03406 return spf_mm_sub<scmatrix,cimatrix_slice,cimatrix>(A,B); 03407 } 03408 03410 inline cimatrix operator-(const simatrix& A, const cimatrix_slice& B) { 03411 return spf_mm_sub<simatrix,cimatrix_slice,cimatrix>(A,B); 03412 } 03413 03415 inline cimatrix operator-(const simatrix& A, const cmatrix_slice& B) { 03416 return spf_mm_sub<simatrix,cmatrix_slice,cimatrix>(A,B); 03417 } 03418 03420 inline cimatrix operator-(const scmatrix& A, const imatrix_slice& B) { 03421 return spf_mm_sub<scmatrix,imatrix_slice,cimatrix>(A,B); 03422 } 03423 03425 inline scimatrix operator-(const scimatrix& A, const srmatrix& B) { 03426 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(A,B); 03427 } 03428 03430 inline scimatrix operator-(const scimatrix& A, const scmatrix& B) { 03431 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(A,B); 03432 } 03433 03435 inline scimatrix operator-(const scimatrix& A, const simatrix& B) { 03436 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(A,B); 03437 } 03438 03440 inline scimatrix operator-(const scimatrix& A, const scimatrix& B) { 03441 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(A,B); 03442 } 03443 03445 inline scimatrix operator-(const srmatrix& A, const scimatrix& B) { 03446 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(A,B); 03447 } 03448 03450 inline scimatrix operator-(const scmatrix& A, const scimatrix& B) { 03451 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(A,B); 03452 } 03453 03455 inline scimatrix operator-(const simatrix& A, const scimatrix& B) { 03456 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(A,B); 03457 } 03458 03460 inline scimatrix operator-(const simatrix& A, const scmatrix& B) { 03461 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(A,B); 03462 } 03463 03465 inline scimatrix operator-(const scmatrix& A, const simatrix& B) { 03466 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(A,B); 03467 } 03468 03470 inline cimatrix operator|(const cimatrix& A, const srmatrix& B) { 03471 return fsp_mm_hull<cimatrix,srmatrix,cimatrix>(A,B); 03472 } 03473 03475 inline cimatrix operator|(const cimatrix& A, const scmatrix& B) { 03476 return fsp_mm_hull<cimatrix,scmatrix,cimatrix>(A,B); 03477 } 03478 03480 inline cimatrix operator|(const cimatrix& A, const simatrix& B) { 03481 return fsp_mm_hull<cimatrix,simatrix,cimatrix>(A,B); 03482 } 03483 03485 inline cimatrix operator|(const cimatrix& A, const scimatrix& B) { 03486 return fsp_mm_hull<cimatrix,scimatrix,cimatrix>(A,B); 03487 } 03488 03490 inline cimatrix operator|(const rmatrix& A, const scimatrix& B) { 03491 return fsp_mm_hull<rmatrix,scimatrix,cimatrix>(A,B); 03492 } 03493 03495 inline cimatrix operator|(const cmatrix& A, const scimatrix& B) { 03496 return fsp_mm_hull<cmatrix,scimatrix,cimatrix>(A,B); 03497 } 03498 03500 inline cimatrix operator|(const imatrix& A, const scimatrix& B) { 03501 return fsp_mm_hull<imatrix,scimatrix,cimatrix>(A,B); 03502 } 03503 03505 inline cimatrix operator|(const imatrix& A, const scmatrix& B) { 03506 return fsp_mm_hull<imatrix,scmatrix,cimatrix>(A,B); 03507 } 03508 03510 inline cimatrix operator|(const cmatrix& A, const simatrix& B) { 03511 return fsp_mm_hull<cmatrix,simatrix,cimatrix>(A,B); 03512 } 03513 03515 inline cimatrix operator|(const scimatrix& A, const rmatrix& B) { 03516 return spf_mm_hull<scimatrix,rmatrix,cimatrix>(A,B); 03517 } 03518 03520 inline cimatrix operator|(const scimatrix& A, const cmatrix& B) { 03521 return spf_mm_hull<scimatrix,cmatrix,cimatrix>(A,B); 03522 } 03523 03525 inline cimatrix operator|(const scimatrix& A, const imatrix& B) { 03526 return spf_mm_hull<scimatrix,imatrix,cimatrix>(A,B); 03527 } 03528 03530 inline cimatrix operator|(const scimatrix& A, const cimatrix& B) { 03531 return spf_mm_hull<scimatrix,cimatrix,cimatrix>(A,B); 03532 } 03533 03535 inline cimatrix operator|(const srmatrix& A, const cimatrix& B) { 03536 return spf_mm_hull<srmatrix,cimatrix,cimatrix>(A,B); 03537 } 03538 03540 inline cimatrix operator|(const scmatrix& A, const cimatrix& B) { 03541 return spf_mm_hull<scmatrix,cimatrix,cimatrix>(A,B); 03542 } 03543 03545 inline cimatrix operator|(const simatrix& A, const cimatrix& B) { 03546 return spf_mm_hull<simatrix,cimatrix,cimatrix>(A,B); 03547 } 03548 03550 inline cimatrix operator|(const simatrix& A, const cmatrix& B) { 03551 return spf_mm_hull<simatrix,cmatrix,cimatrix>(A,B); 03552 } 03553 03555 inline cimatrix operator|(const scmatrix& A, const imatrix& B) { 03556 return spf_mm_hull<scmatrix,imatrix,cimatrix>(A,B); 03557 } 03558 03560 inline cimatrix operator|(const cimatrix_slice& A, const srmatrix& B) { 03561 return fsp_mm_hull<cimatrix_slice,srmatrix,cimatrix>(A,B); 03562 } 03563 03565 inline cimatrix operator|(const cimatrix_slice& A, const simatrix& B) { 03566 return fsp_mm_hull<cimatrix_slice,simatrix,cimatrix>(A,B); 03567 } 03568 03570 inline cimatrix operator|(const cimatrix_slice& A, const scmatrix& B) { 03571 return fsp_mm_hull<cimatrix_slice,scmatrix,cimatrix>(A,B); 03572 } 03573 03575 inline cimatrix operator|(const cimatrix_slice& A, const scimatrix& B) { 03576 return fsp_mm_hull<cimatrix_slice,scimatrix,cimatrix>(A,B); 03577 } 03578 03580 inline cimatrix operator|(const rmatrix_slice& A, const scimatrix& B) { 03581 return fsp_mm_hull<rmatrix_slice,scimatrix,cimatrix>(A,B); 03582 } 03583 03585 inline cimatrix operator|(const imatrix_slice& A, const scimatrix& B) { 03586 return fsp_mm_hull<imatrix_slice,scimatrix,cimatrix>(A,B); 03587 } 03588 03590 inline cimatrix operator|(const cmatrix_slice& A, const scimatrix& B) { 03591 return fsp_mm_hull<cmatrix_slice,scimatrix,cimatrix>(A,B); 03592 } 03593 03595 inline cimatrix operator|(const cmatrix_slice& A, const simatrix& B) { 03596 return fsp_mm_hull<cmatrix_slice,simatrix,cimatrix>(A,B); 03597 } 03598 03600 inline cimatrix operator|(const imatrix_slice& A, const scmatrix& B) { 03601 return fsp_mm_hull<imatrix_slice,scmatrix,cimatrix>(A,B); 03602 } 03603 03605 inline cimatrix operator|(const scimatrix& A, const rmatrix_slice& B) { 03606 return spf_mm_hull<scimatrix,rmatrix_slice,cimatrix>(A,B); 03607 } 03608 03610 inline cimatrix operator|(const scimatrix& A, const cmatrix_slice& B) { 03611 return spf_mm_hull<scimatrix,cmatrix_slice,cimatrix>(A,B); 03612 } 03613 03615 inline cimatrix operator|(const scimatrix& A, const imatrix_slice& B) { 03616 return spf_mm_hull<scimatrix,imatrix_slice,cimatrix>(A,B); 03617 } 03618 03620 inline cimatrix operator|(const scimatrix& A, const cimatrix_slice& B) { 03621 return spf_mm_hull<scimatrix,cimatrix_slice,cimatrix>(A,B); 03622 } 03623 03625 inline cimatrix operator|(const srmatrix& A, const cimatrix_slice& B) { 03626 return spf_mm_hull<srmatrix,cimatrix_slice,cimatrix>(A,B); 03627 } 03628 03630 inline cimatrix operator|(const scmatrix& A, const cimatrix_slice& B) { 03631 return spf_mm_hull<scmatrix,cimatrix_slice,cimatrix>(A,B); 03632 } 03633 03635 inline cimatrix operator|(const simatrix& A, const cimatrix_slice& B) { 03636 return spf_mm_hull<simatrix,cimatrix_slice,cimatrix>(A,B); 03637 } 03638 03640 inline cimatrix operator|(const simatrix& A, const cmatrix_slice& B) { 03641 return spf_mm_hull<simatrix,cmatrix_slice,cimatrix>(A,B); 03642 } 03643 03645 inline cimatrix operator|(const scmatrix& A, const imatrix_slice& B) { 03646 return spf_mm_hull<scmatrix,imatrix_slice,cimatrix>(A,B); 03647 } 03648 03650 inline scimatrix operator|(const scimatrix& A, const srmatrix& B) { 03651 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(A,B); 03652 } 03653 03655 inline scimatrix operator|(const scimatrix& A, const scmatrix& B) { 03656 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(A,B); 03657 } 03658 03660 inline scimatrix operator|(const scimatrix& A, const simatrix& B) { 03661 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(A,B); 03662 } 03663 03665 inline scimatrix operator|(const scimatrix& A, const scimatrix& B) { 03666 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(A,B); 03667 } 03668 03670 inline scimatrix operator|(const srmatrix& A, const scimatrix& B) { 03671 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(A,B); 03672 } 03673 03675 inline scimatrix operator|(const scmatrix& A, const scimatrix& B) { 03676 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(A,B); 03677 } 03678 03680 inline scimatrix operator|(const simatrix& A, const scimatrix& B) { 03681 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(A,B); 03682 } 03683 03685 inline scimatrix operator|(const simatrix& A, const scmatrix& B) { 03686 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(A,B); 03687 } 03688 03690 inline scimatrix operator|(const scmatrix& A, const simatrix& B) { 03691 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(A,B); 03692 } 03693 03695 inline cimatrix operator|(const cmatrix& A, const srmatrix& B) { 03696 return fsp_mm_hull<cmatrix,srmatrix,cimatrix>(A,B); 03697 } 03698 03700 inline cimatrix operator|(const rmatrix& A, const scmatrix& B) { 03701 return fsp_mm_hull<rmatrix,scmatrix,cimatrix>(A,B); 03702 } 03703 03705 inline cimatrix operator|(const cmatrix& A, const scmatrix& B) { 03706 return fsp_mm_hull<cmatrix,scmatrix,cimatrix>(A,B); 03707 } 03708 03710 inline cimatrix operator|(const scmatrix& A, const rmatrix& B) { 03711 return spf_mm_hull<scmatrix,rmatrix,cimatrix>(A,B); 03712 } 03713 03715 inline cimatrix operator|(const srmatrix& A, const cmatrix& B) { 03716 return spf_mm_hull<srmatrix,cmatrix,cimatrix>(A,B); 03717 } 03718 03720 inline cimatrix operator|(const scmatrix& A, const cmatrix& B) { 03721 return spf_mm_hull<scmatrix,cmatrix,cimatrix>(A,B); 03722 } 03723 03725 inline cimatrix operator|(const cmatrix_slice& A, const srmatrix& B) { 03726 return fsp_mm_hull<cmatrix_slice,srmatrix,cimatrix>(A,B); 03727 } 03728 03730 inline cimatrix operator|(const rmatrix_slice& A, const scmatrix& B) { 03731 return fsp_mm_hull<rmatrix_slice,scmatrix,cimatrix>(A,B); 03732 } 03733 03735 inline cimatrix operator|(const cmatrix_slice& A, const scmatrix& B) { 03736 return fsp_mm_hull<cmatrix_slice,scmatrix,cimatrix>(A,B); 03737 } 03738 03740 inline cimatrix operator|(const scmatrix& A, const rmatrix_slice& B) { 03741 return spf_mm_hull<scmatrix,rmatrix_slice,cimatrix>(A,B); 03742 } 03743 03745 inline cimatrix operator|(const srmatrix& A, const cmatrix_slice& B) { 03746 return spf_mm_hull<srmatrix,cmatrix_slice,cimatrix>(A,B); 03747 } 03748 03750 inline cimatrix operator|(const scmatrix& A, const cmatrix_slice& B) { 03751 return spf_mm_hull<scmatrix,cmatrix_slice,cimatrix>(A,B); 03752 } 03753 03755 inline scimatrix operator|(const scmatrix& A, const srmatrix& B) { 03756 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(A,B); 03757 } 03758 03760 inline scimatrix operator|(const srmatrix& A, const scmatrix& B) { 03761 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(A,B); 03762 } 03763 03765 inline scimatrix operator|(const scmatrix& A, const scmatrix& B) { 03766 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(A,B); 03767 } 03768 03770 inline cimatrix operator&(const cimatrix& A, const simatrix& B) { 03771 return fsp_mm_intersect<cimatrix,simatrix,cimatrix>(A,B); 03772 } 03773 03775 inline cimatrix operator&(const cimatrix& A, const scimatrix& B) { 03776 return fsp_mm_intersect<cimatrix,scimatrix,cimatrix>(A,B); 03777 } 03778 03780 inline cimatrix operator&(const imatrix& A, const scimatrix& B) { 03781 return fsp_mm_intersect<imatrix,scimatrix,cimatrix>(A,B); 03782 } 03783 03785 inline cimatrix operator&(const scimatrix& A, const imatrix& B) { 03786 return spf_mm_intersect<scimatrix,imatrix,cimatrix>(A,B); 03787 } 03788 03790 inline cimatrix operator&(const scimatrix& A, const cimatrix& B) { 03791 return spf_mm_intersect<scimatrix,cimatrix,cimatrix>(A,B); 03792 } 03793 03795 inline cimatrix operator&(const simatrix& A, const cimatrix& B) { 03796 return spf_mm_intersect<simatrix,cimatrix,cimatrix>(A,B); 03797 } 03798 03800 inline cimatrix operator&(const cimatrix_slice& A, const simatrix& B) { 03801 return fsp_mm_intersect<cimatrix_slice,simatrix,cimatrix>(A,B); 03802 } 03803 03805 inline cimatrix operator&(const cimatrix_slice& A, const scimatrix& B) { 03806 return fsp_mm_intersect<cimatrix_slice,scimatrix,cimatrix>(A,B); 03807 } 03808 03810 inline cimatrix operator&(const imatrix_slice& A, const scimatrix& B) { 03811 return fsp_mm_intersect<imatrix_slice,scimatrix,cimatrix>(A,B); 03812 } 03813 03815 inline cimatrix operator&(const scimatrix& A, const imatrix_slice& B) { 03816 return spf_mm_intersect<scimatrix,imatrix_slice,cimatrix>(A,B); 03817 } 03818 03820 inline cimatrix operator&(const scimatrix& A, const cimatrix_slice& B) { 03821 return spf_mm_intersect<scimatrix,cimatrix_slice,cimatrix>(A,B); 03822 } 03823 03825 inline cimatrix operator&(const simatrix& A, const cimatrix_slice& B) { 03826 return spf_mm_intersect<simatrix,cimatrix_slice,cimatrix>(A,B); 03827 } 03828 03830 inline scimatrix operator&(const scimatrix& A, const simatrix& B) { 03831 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(A,B); 03832 } 03833 03835 inline scimatrix operator&(const scimatrix& A, const scimatrix& B) { 03836 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(A,B); 03837 } 03838 03840 inline scimatrix operator&(const simatrix& A, const scimatrix& B) { 03841 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(A,B); 03842 } 03843 03845 inline scimatrix operator-(const scimatrix& M) { 03846 return sp_m_negative<scimatrix,scimatrix>(M); 03847 } 03848 03850 inline scimatrix& operator+(scimatrix& A) { 03851 return A; 03852 } 03853 03854 inline cimatrix& cimatrix::operator=(const srmatrix& B) { 03855 *this = rmatrix(B); 03856 return *this; 03857 } 03858 03859 inline cimatrix& cimatrix::operator=(const scmatrix& B) { 03860 *this = cmatrix(B); 03861 return *this; 03862 } 03863 03864 inline cimatrix& cimatrix::operator=(const simatrix& B) { 03865 *this = imatrix(B); 03866 return *this; 03867 } 03868 03869 inline cimatrix& cimatrix::operator=(const scimatrix& B) { 03870 *this = cimatrix(B); 03871 return *this; 03872 } 03873 03874 inline cimatrix_slice& cimatrix_slice::operator=(const srmatrix& B) { 03875 *this = rmatrix(B); 03876 return *this; 03877 } 03878 03879 inline cimatrix_slice& cimatrix_slice::operator=(const scmatrix& B) { 03880 *this = cmatrix(B); 03881 return *this; 03882 } 03883 03884 inline cimatrix_slice& cimatrix_slice::operator=(const simatrix& B) { 03885 *this = imatrix(B); 03886 return *this; 03887 } 03888 03889 inline cimatrix_slice& cimatrix_slice::operator=(const scimatrix& B) { 03890 *this = cimatrix(B); 03891 return *this; 03892 } 03893 03894 inline cimatrix& cimatrix::operator+=(const srmatrix& B) { 03895 return fsp_mm_addassign(*this,B); 03896 } 03897 03898 inline cimatrix& cimatrix::operator+=(const scmatrix& B) { 03899 return fsp_mm_addassign(*this,B); 03900 } 03901 03902 inline cimatrix& cimatrix::operator+=(const simatrix& B) { 03903 return fsp_mm_addassign(*this,B); 03904 } 03905 03906 inline cimatrix& cimatrix::operator+=(const scimatrix& B) { 03907 return fsp_mm_addassign(*this,B); 03908 } 03909 03910 inline cimatrix_slice& cimatrix_slice::operator+=(const srmatrix& B) { 03911 return fsp_mm_addassign(*this,B); 03912 } 03913 03914 inline cimatrix_slice& cimatrix_slice::operator+=(const scmatrix& B) { 03915 return fsp_mm_addassign(*this,B); 03916 } 03917 03918 inline cimatrix_slice& cimatrix_slice::operator+=(const simatrix& B) { 03919 return fsp_mm_addassign(*this,B); 03920 } 03921 03922 inline cimatrix_slice& cimatrix_slice::operator+=(const scimatrix& B) { 03923 return fsp_mm_addassign(*this,B); 03924 } 03925 03926 inline cimatrix& cimatrix::operator-=(const srmatrix& B) { 03927 return fsp_mm_subassign(*this,B); 03928 } 03929 03930 inline cimatrix& cimatrix::operator-=(const scmatrix& B) { 03931 return fsp_mm_subassign(*this,B); 03932 } 03933 03934 inline cimatrix& cimatrix::operator-=(const scimatrix& B) { 03935 return fsp_mm_subassign(*this,B); 03936 } 03937 03938 inline cimatrix& cimatrix::operator-=(const simatrix& B) { 03939 return fsp_mm_subassign(*this,B); 03940 } 03941 03942 inline cimatrix_slice& cimatrix_slice::operator-=(const srmatrix& B) { 03943 return fsp_mm_subassign(*this,B); 03944 } 03945 03946 inline cimatrix_slice& cimatrix_slice::operator-=(const scmatrix& B) { 03947 return fsp_mm_subassign(*this,B); 03948 } 03949 03950 inline cimatrix_slice& cimatrix_slice::operator-=(const simatrix& B) { 03951 return fsp_mm_subassign(*this,B); 03952 } 03953 03954 inline cimatrix_slice& cimatrix_slice::operator-=(const scimatrix& B) { 03955 return fsp_mm_subassign(*this,B); 03956 } 03957 03958 inline cimatrix& cimatrix::operator|=(const srmatrix& B) { 03959 return fsp_mm_hullassign(*this,B); 03960 } 03961 03962 inline cimatrix& cimatrix::operator|=(const scmatrix& B) { 03963 return fsp_mm_hullassign(*this,B); 03964 } 03965 03966 inline cimatrix& cimatrix::operator|=(const simatrix& B) { 03967 return fsp_mm_hullassign(*this,B); 03968 } 03969 03970 inline cimatrix& cimatrix::operator|=(const scimatrix& B) { 03971 return fsp_mm_hullassign(*this,B); 03972 } 03973 03974 inline cimatrix_slice& cimatrix_slice::operator|=(const srmatrix& B) { 03975 return fsp_mm_hullassign(*this,B); 03976 } 03977 03978 inline cimatrix_slice& cimatrix_slice::operator|=(const scmatrix& B) { 03979 return fsp_mm_hullassign(*this,B); 03980 } 03981 03982 inline cimatrix_slice& cimatrix_slice::operator|=(const simatrix& B) { 03983 return fsp_mm_hullassign(*this,B); 03984 } 03985 03986 inline cimatrix_slice& cimatrix_slice::operator|=(const scimatrix& B) { 03987 return fsp_mm_hullassign(*this,B); 03988 } 03989 03990 inline cimatrix& cimatrix::operator&=(const simatrix& B) { 03991 return fsp_mm_intersectassign(*this,B); 03992 } 03993 03994 inline cimatrix& cimatrix::operator&=(const scimatrix& B) { 03995 return fsp_mm_intersectassign(*this,B); 03996 } 03997 03998 inline cimatrix_slice& cimatrix_slice::operator&=(const simatrix& B) { 03999 return fsp_mm_intersectassign(*this,B); 04000 } 04001 04002 inline cimatrix_slice& cimatrix_slice::operator&=(const scimatrix& B) { 04003 return fsp_mm_intersectassign(*this,B); 04004 } 04005 04006 inline cimatrix& cimatrix::operator*=(const srmatrix& B) { 04007 return fsp_mm_multassign<cimatrix,srmatrix,sparse_cidot,cimatrix>(*this,B); 04008 } 04009 04010 inline cimatrix& cimatrix::operator*=(const scmatrix& B) { 04011 return fsp_mm_multassign<cimatrix,scmatrix,sparse_cidot,cimatrix>(*this,B); 04012 } 04013 04014 inline cimatrix& cimatrix::operator*=(const simatrix& B) { 04015 return fsp_mm_multassign<cimatrix,simatrix,sparse_cidot,cimatrix>(*this,B); 04016 } 04017 04018 inline cimatrix& cimatrix::operator*=(const scimatrix& B) { 04019 return fsp_mm_multassign<cimatrix,scimatrix,sparse_cidot,cimatrix>(*this,B); 04020 } 04021 04022 inline cimatrix_slice& cimatrix_slice::operator*=(const srmatrix& B) { 04023 return fsp_mm_multassign<cimatrix_slice,srmatrix,sparse_cidot,cimatrix>(*this,B); 04024 } 04025 04026 inline cimatrix_slice& cimatrix_slice::operator*=(const scmatrix& B) { 04027 return fsp_mm_multassign<cimatrix_slice,scmatrix,sparse_cidot,cimatrix>(*this,B); 04028 } 04029 04030 inline cimatrix_slice& cimatrix_slice::operator*=(const simatrix& B) { 04031 return fsp_mm_multassign<cimatrix_slice,simatrix,sparse_cidot,cimatrix>(*this,B); 04032 } 04033 04034 inline cimatrix_slice& cimatrix_slice::operator*=(const scimatrix& B) { 04035 return fsp_mm_multassign<cimatrix_slice,scimatrix,sparse_cidot,cimatrix>(*this,B); 04036 } 04037 04039 inline bool operator==(const scimatrix& A, const srmatrix& B) { 04040 return spsp_mm_comp(A,B); 04041 } 04042 04044 inline bool operator==(const scimatrix& A, const scmatrix& B) { 04045 return spsp_mm_comp(A,B); 04046 } 04047 04049 inline bool operator==(const scimatrix& A, const simatrix& B) { 04050 return spsp_mm_comp(A,B); 04051 } 04052 04054 inline bool operator==(const scimatrix& A, const scimatrix& B) { 04055 return spsp_mm_comp(A,B); 04056 } 04057 04059 inline bool operator==(const srmatrix& A, const scimatrix& B) { 04060 return spsp_mm_comp(A,B); 04061 } 04062 04064 inline bool operator==(const scmatrix& A, const scimatrix& B) { 04065 return spsp_mm_comp(A,B); 04066 } 04067 04069 inline bool operator==(const simatrix& A, const scimatrix& B) { 04070 return spsp_mm_comp(A,B); 04071 } 04072 04074 inline bool operator==(const scimatrix& A, const rmatrix& B) { 04075 return spf_mm_comp(A,B); 04076 } 04077 04079 inline bool operator==(const scimatrix& A, const imatrix& B) { 04080 return spf_mm_comp(A,B); 04081 } 04082 04084 inline bool operator==(const scimatrix& A, const cmatrix& B) { 04085 return spf_mm_comp(A,B); 04086 } 04087 04089 inline bool operator==(const scimatrix& A, const cimatrix& B) { 04090 return spf_mm_comp(A,B); 04091 } 04092 04094 inline bool operator==(const srmatrix& A, const cimatrix& B) { 04095 return spf_mm_comp(A,B); 04096 } 04097 04099 inline bool operator==(const scmatrix& A, const cimatrix& B) { 04100 return spf_mm_comp(A,B); 04101 } 04102 04104 inline bool operator==(const simatrix& A, const cimatrix& B) { 04105 return spf_mm_comp(A,B); 04106 } 04107 04109 inline bool operator==(const cimatrix& A, const srmatrix& B) { 04110 return fsp_mm_comp(A,B); 04111 } 04112 04114 inline bool operator==(const cimatrix& A, const simatrix& B) { 04115 return fsp_mm_comp(A,B); 04116 } 04117 04119 inline bool operator==(const cimatrix& A, const scmatrix& B) { 04120 return fsp_mm_comp(A,B); 04121 } 04122 04124 inline bool operator==(const cimatrix& A, const scimatrix& B) { 04125 return fsp_mm_comp(A,B); 04126 } 04127 04129 inline bool operator==(const rmatrix& A, const scimatrix& B) { 04130 return fsp_mm_comp(A,B); 04131 } 04132 04134 inline bool operator==(const cmatrix& A, const scimatrix& B) { 04135 return fsp_mm_comp(A,B); 04136 } 04137 04139 inline bool operator==(const imatrix& A, const scimatrix& B) { 04140 return fsp_mm_comp(A,B); 04141 } 04142 04144 inline bool operator==(const cimatrix_slice& A, const srmatrix& B) { 04145 return fsp_mm_comp(A,B); 04146 } 04147 04149 inline bool operator==(const cimatrix_slice& A, const scmatrix& B) { 04150 return fsp_mm_comp(A,B); 04151 } 04152 04154 inline bool operator==(const cimatrix_slice& A, const simatrix& B) { 04155 return fsp_mm_comp(A,B); 04156 } 04157 04159 inline bool operator==(const cimatrix_slice& A, const scimatrix& B) { 04160 return fsp_mm_comp(A,B); 04161 } 04162 04164 inline bool operator==(const rmatrix_slice& A, const scimatrix& B) { 04165 return fsp_mm_comp(A,B); 04166 } 04167 04169 inline bool operator==(const cmatrix_slice& A, const scimatrix& B) { 04170 return fsp_mm_comp(A,B); 04171 } 04172 04174 inline bool operator==(const imatrix_slice& A, const scimatrix& B) { 04175 return fsp_mm_comp(A,B); 04176 } 04177 04179 inline bool operator==(const scimatrix& A, const rmatrix_slice& B) { 04180 return spf_mm_comp(A,B); 04181 } 04182 04184 inline bool operator==(const scimatrix& A, const imatrix_slice& B) { 04185 return spf_mm_comp(A,B); 04186 } 04187 04189 inline bool operator==(const scimatrix& A, const cmatrix_slice& B) { 04190 return spf_mm_comp(A,B); 04191 } 04192 04194 inline bool operator==(const scimatrix& A, const cimatrix_slice& B) { 04195 return spf_mm_comp(A,B); 04196 } 04197 04199 inline bool operator==(const srmatrix& A, const cimatrix_slice& B) { 04200 return spf_mm_comp(A,B); 04201 } 04202 04204 inline bool operator==(const scmatrix& A, const cimatrix_slice& B) { 04205 return spf_mm_comp(A,B); 04206 } 04207 04209 inline bool operator==(const simatrix& A, const cimatrix_slice& B) { 04210 return spf_mm_comp(A,B); 04211 } 04212 04214 inline bool operator!=(const scimatrix& A, const srmatrix& B) { 04215 return !spsp_mm_comp(A,B); 04216 } 04217 04219 inline bool operator!=(const scimatrix& A, const scmatrix& B) { 04220 return !spsp_mm_comp(A,B); 04221 } 04222 04224 inline bool operator!=(const scimatrix& A, const simatrix& B) { 04225 return !spsp_mm_comp(A,B); 04226 } 04227 04229 inline bool operator!=(const scimatrix& A, const scimatrix& B) { 04230 return !spsp_mm_comp(A,B); 04231 } 04232 04234 inline bool operator!=(const srmatrix& A, const scimatrix& B) { 04235 return !spsp_mm_comp(A,B); 04236 } 04237 04239 inline bool operator!=(const scmatrix& A, const scimatrix& B) { 04240 return !spsp_mm_comp(A,B); 04241 } 04242 04244 inline bool operator!=(const simatrix& A, const scimatrix& B) { 04245 return !spsp_mm_comp(A,B); 04246 } 04247 04249 inline bool operator!=(const scimatrix& A, const rmatrix& B) { 04250 return !spf_mm_comp(A,B); 04251 } 04252 04254 inline bool operator!=(const scimatrix& A, const imatrix& B) { 04255 return !spf_mm_comp(A,B); 04256 } 04257 04259 inline bool operator!=(const scimatrix& A, const cmatrix& B) { 04260 return !spf_mm_comp(A,B); 04261 } 04262 04264 inline bool operator!=(const scimatrix& A, const cimatrix& B) { 04265 return !spf_mm_comp(A,B); 04266 } 04267 04269 inline bool operator!=(const srmatrix& A, const cimatrix& B) { 04270 return !spf_mm_comp(A,B); 04271 } 04272 04274 inline bool operator!=(const scmatrix& A, const cimatrix& B) { 04275 return !spf_mm_comp(A,B); 04276 } 04277 04279 inline bool operator!=(const simatrix& A, const cimatrix& B) { 04280 return !spf_mm_comp(A,B); 04281 } 04282 04284 inline bool operator!=(const cimatrix& A, const srmatrix& B) { 04285 return !fsp_mm_comp(A,B); 04286 } 04287 04289 inline bool operator!=(const cimatrix& A, const simatrix& B) { 04290 return !fsp_mm_comp(A,B); 04291 } 04292 04294 inline bool operator!=(const cimatrix& A, const scmatrix& B) { 04295 return !fsp_mm_comp(A,B); 04296 } 04297 04299 inline bool operator!=(const cimatrix& A, const scimatrix& B) { 04300 return !fsp_mm_comp(A,B); 04301 } 04302 04304 inline bool operator!=(const rmatrix& A, const scimatrix& B) { 04305 return !fsp_mm_comp(A,B); 04306 } 04307 04309 inline bool operator!=(const cmatrix& A, const scimatrix& B) { 04310 return !fsp_mm_comp(A,B); 04311 } 04312 04314 inline bool operator!=(const imatrix& A, const scimatrix& B) { 04315 return !fsp_mm_comp(A,B); 04316 } 04317 04319 inline bool operator!=(const cimatrix_slice& A, const srmatrix& B) { 04320 return !fsp_mm_comp(A,B); 04321 } 04322 04324 inline bool operator!=(const cimatrix_slice& A, const scmatrix& B) { 04325 return !fsp_mm_comp(A,B); 04326 } 04327 04329 inline bool operator!=(const cimatrix_slice& A, const simatrix& B) { 04330 return !fsp_mm_comp(A,B); 04331 } 04332 04334 inline bool operator!=(const cimatrix_slice& A, const scimatrix& B) { 04335 return !fsp_mm_comp(A,B); 04336 } 04337 04339 inline bool operator!=(const rmatrix_slice& A, const scimatrix& B) { 04340 return !fsp_mm_comp(A,B); 04341 } 04342 04344 inline bool operator!=(const cmatrix_slice& A, const scimatrix& B) { 04345 return !fsp_mm_comp(A,B); 04346 } 04347 04349 inline bool operator!=(const imatrix_slice& A, const scimatrix& B) { 04350 return !fsp_mm_comp(A,B); 04351 } 04352 04354 inline bool operator!=(const scimatrix& A, const rmatrix_slice& B) { 04355 return !spf_mm_comp(A,B); 04356 } 04357 04359 inline bool operator!=(const scimatrix& A, const imatrix_slice& B) { 04360 return !spf_mm_comp(A,B); 04361 } 04362 04364 inline bool operator!=(const scimatrix& A, const cmatrix_slice& B) { 04365 return !spf_mm_comp(A,B); 04366 } 04367 04369 inline bool operator!=(const scimatrix& A, const cimatrix_slice& B) { 04370 return !spf_mm_comp(A,B); 04371 } 04372 04374 inline bool operator!=(const srmatrix& A, const cimatrix_slice& B) { 04375 return !spf_mm_comp(A,B); 04376 } 04377 04379 inline bool operator!=(const scmatrix& A, const cimatrix_slice& B) { 04380 return !spf_mm_comp(A,B); 04381 } 04382 04384 inline bool operator!=(const simatrix& A, const cimatrix_slice& B) { 04385 return !spf_mm_comp(A,B); 04386 } 04387 04389 inline bool operator<(const scimatrix& A, const simatrix& B) { 04390 return spsp_mm_less<scimatrix,simatrix,cinterval>(A,B); 04391 } 04392 04394 inline bool operator<(const scimatrix& A, const scimatrix& B) { 04395 return spsp_mm_less<scimatrix,scimatrix,cinterval>(A,B); 04396 } 04397 04399 inline bool operator<(const srmatrix& A, const scimatrix& B) { 04400 return spsp_mm_less<srmatrix,scimatrix,cinterval>(A,B); 04401 } 04402 04404 inline bool operator<(const scmatrix& A, const scimatrix& B) { 04405 return spsp_mm_less<scmatrix,scimatrix,cinterval>(A,B); 04406 } 04407 04409 inline bool operator<(const simatrix& A, const scimatrix& B) { 04410 return spsp_mm_less<simatrix,scimatrix,cinterval>(A,B); 04411 } 04412 04414 inline bool operator<(const scimatrix& A, const imatrix& B) { 04415 return spf_mm_less<scimatrix,imatrix,cinterval>(A,B); 04416 } 04417 04419 inline bool operator<(const scimatrix& A, const cimatrix& B) { 04420 return spf_mm_less<scimatrix,cimatrix,cinterval>(A,B); 04421 } 04422 04424 inline bool operator<(const srmatrix& A, const cimatrix& B) { 04425 return spf_mm_less<srmatrix,cimatrix,cinterval>(A,B); 04426 } 04427 04429 inline bool operator<(const scmatrix& A, const cimatrix& B) { 04430 return spf_mm_less<scmatrix,cimatrix,cinterval>(A,B); 04431 } 04432 04434 inline bool operator<(const simatrix& A, const cimatrix& B) { 04435 return spf_mm_less<simatrix,cimatrix,cinterval>(A,B); 04436 } 04437 04439 inline bool operator<(const cimatrix& A, const simatrix& B) { 04440 return fsp_mm_less<cimatrix,simatrix,cinterval>(A,B); 04441 } 04442 04444 inline bool operator<(const cimatrix& A, const scimatrix& B) { 04445 return fsp_mm_less<cimatrix,scimatrix,cinterval>(A,B); 04446 } 04447 04449 inline bool operator<(const rmatrix& A, const scimatrix& B) { 04450 return fsp_mm_less<rmatrix,scimatrix,cinterval>(A,B); 04451 } 04452 04454 inline bool operator<(const cmatrix& A, const scimatrix& B) { 04455 return fsp_mm_less<cmatrix,scimatrix,cinterval>(A,B); 04456 } 04457 04459 inline bool operator<(const imatrix& A, const scimatrix& B) { 04460 return fsp_mm_less<imatrix,scimatrix,cinterval>(A,B); 04461 } 04462 04464 inline bool operator<(const cimatrix_slice& A, const simatrix& B) { 04465 return fsp_mm_less<cimatrix_slice,simatrix,cinterval>(A,B); 04466 } 04467 04469 inline bool operator<(const cimatrix_slice& A, const scimatrix& B) { 04470 return fsp_mm_less<cimatrix_slice,scimatrix,cinterval>(A,B); 04471 } 04472 04474 inline bool operator<(const rmatrix_slice& A, const scimatrix& B) { 04475 return fsp_mm_less<rmatrix_slice,scimatrix,cinterval>(A,B); 04476 } 04477 04479 inline bool operator<(const cmatrix_slice& A, const scimatrix& B) { 04480 return fsp_mm_less<cmatrix_slice,scimatrix,cinterval>(A,B); 04481 } 04482 04484 inline bool operator<(const imatrix_slice& A, const scimatrix& B) { 04485 return fsp_mm_less<imatrix_slice,scimatrix,cinterval>(A,B); 04486 } 04487 04489 inline bool operator<(const scimatrix& A, const imatrix_slice& B) { 04490 return spf_mm_less<scimatrix,imatrix_slice,cinterval>(A,B); 04491 } 04492 04494 inline bool operator<(const scimatrix& A, const cimatrix_slice& B) { 04495 return spf_mm_less<scimatrix,cimatrix_slice,cinterval>(A,B); 04496 } 04497 04499 inline bool operator<(const srmatrix& A, const cimatrix_slice& B) { 04500 return spf_mm_less<srmatrix,cimatrix_slice,cinterval>(A,B); 04501 } 04502 04504 inline bool operator<(const scmatrix& A, const cimatrix_slice& B) { 04505 return spf_mm_less<scmatrix,cimatrix_slice,cinterval>(A,B); 04506 } 04507 04509 inline bool operator<(const simatrix& A, const cimatrix_slice& B) { 04510 return spf_mm_less<simatrix,cimatrix_slice,cinterval>(A,B); 04511 } 04512 04514 inline bool operator<=(const scimatrix& A, const simatrix& B) { 04515 return spsp_mm_leq<scimatrix,simatrix,cinterval>(A,B); 04516 } 04517 04519 inline bool operator<=(const scimatrix& A, const scimatrix& B) { 04520 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(A,B); 04521 } 04522 04524 inline bool operator<=(const srmatrix& A, const scimatrix& B) { 04525 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(A,B); 04526 } 04527 04529 inline bool operator<=(const scmatrix& A, const scimatrix& B) { 04530 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(A,B); 04531 } 04532 04534 inline bool operator<=(const simatrix& A, const scimatrix& B) { 04535 return spsp_mm_leq<simatrix,scimatrix,cinterval>(A,B); 04536 } 04537 04539 inline bool operator<=(const scimatrix& A, const imatrix& B) { 04540 return spf_mm_leq<scimatrix,imatrix,cinterval>(A,B); 04541 } 04542 04544 inline bool operator<=(const scimatrix& A, const cimatrix& B) { 04545 return spf_mm_leq<scimatrix,cimatrix,cinterval>(A,B); 04546 } 04547 04549 inline bool operator<=(const srmatrix& A, const cimatrix& B) { 04550 return spf_mm_leq<srmatrix,cimatrix,cinterval>(A,B); 04551 } 04552 04554 inline bool operator<=(const scmatrix& A, const cimatrix& B) { 04555 return spf_mm_leq<scmatrix,cimatrix,cinterval>(A,B); 04556 } 04557 04559 inline bool operator<=(const simatrix& A, const cimatrix& B) { 04560 return spf_mm_leq<simatrix,cimatrix,cinterval>(A,B); 04561 } 04562 04564 inline bool operator<=(const cimatrix& A, const simatrix& B) { 04565 return fsp_mm_leq<cimatrix,simatrix,cinterval>(A,B); 04566 } 04567 04569 inline bool operator<=(const cimatrix& A, const scimatrix& B) { 04570 return fsp_mm_leq<cimatrix,scimatrix,cinterval>(A,B); 04571 } 04572 04574 inline bool operator<=(const rmatrix& A, const scimatrix& B) { 04575 return fsp_mm_leq<rmatrix,scimatrix,cinterval>(A,B); 04576 } 04577 04579 inline bool operator<=(const cmatrix& A, const scimatrix& B) { 04580 return fsp_mm_leq<cmatrix,scimatrix,cinterval>(A,B); 04581 } 04582 04584 inline bool operator<=(const imatrix& A, const scimatrix& B) { 04585 return fsp_mm_leq<imatrix,scimatrix,cinterval>(A,B); 04586 } 04587 04589 inline bool operator<=(const cimatrix_slice& A, const simatrix& B) { 04590 return fsp_mm_leq<cimatrix_slice,simatrix,cinterval>(A,B); 04591 } 04592 04594 inline bool operator<=(const cimatrix_slice& A, const scimatrix& B) { 04595 return fsp_mm_leq<cimatrix_slice,scimatrix,cinterval>(A,B); 04596 } 04597 04599 inline bool operator<=(const rmatrix_slice& A, const scimatrix& B) { 04600 return fsp_mm_leq<rmatrix_slice,scimatrix,cinterval>(A,B); 04601 } 04602 04604 inline bool operator<=(const cmatrix_slice& A, const scimatrix& B) { 04605 return fsp_mm_leq<cmatrix_slice,scimatrix,cinterval>(A,B); 04606 } 04607 04609 inline bool operator<=(const imatrix_slice& A, const scimatrix& B) { 04610 return fsp_mm_leq<imatrix_slice,scimatrix,cinterval>(A,B); 04611 } 04612 04614 inline bool operator<=(const scimatrix& A, const imatrix_slice& B) { 04615 return spf_mm_leq<scimatrix,imatrix_slice,cinterval>(A,B); 04616 } 04617 04619 inline bool operator<=(const scimatrix& A, const cimatrix_slice& B) { 04620 return spf_mm_leq<scimatrix,cimatrix_slice,cinterval>(A,B); 04621 } 04622 04624 inline bool operator<=(const srmatrix& A, const cimatrix_slice& B) { 04625 return spf_mm_leq<srmatrix,cimatrix_slice,cinterval>(A,B); 04626 } 04627 04629 inline bool operator<=(const scmatrix& A, const cimatrix_slice& B) { 04630 return spf_mm_leq<scmatrix,cimatrix_slice,cinterval>(A,B); 04631 } 04632 04634 inline bool operator<=(const simatrix& A, const cimatrix_slice& B) { 04635 return spf_mm_leq<simatrix,cimatrix_slice,cinterval>(A,B); 04636 } 04637 04639 inline bool operator>(const scimatrix& A, const srmatrix& B) { 04640 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(A,B); 04641 } 04642 04644 inline bool operator>(const scimatrix& A, const scmatrix& B) { 04645 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(A,B); 04646 } 04647 04649 inline bool operator>(const scimatrix& A, const simatrix& B) { 04650 return spsp_mm_greater<scimatrix,simatrix,cinterval>(A,B); 04651 } 04652 04654 inline bool operator>(const scimatrix& A, const scimatrix& B) { 04655 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(A,B); 04656 } 04657 04659 inline bool operator>(const simatrix& A, const scimatrix& B) { 04660 return spsp_mm_greater<simatrix,scimatrix,cinterval>(A,B); 04661 } 04662 04664 inline bool operator>(const scimatrix& A, const rmatrix& B) { 04665 return spf_mm_greater<scimatrix,rmatrix,cinterval>(A,B); 04666 } 04667 04669 inline bool operator>(const scimatrix& A, const imatrix& B) { 04670 return spf_mm_greater<scimatrix,imatrix,cinterval>(A,B); 04671 } 04672 04674 inline bool operator>(const scimatrix& A, const cmatrix& B) { 04675 return spf_mm_greater<scimatrix,cmatrix,cinterval>(A,B); 04676 } 04677 04679 inline bool operator>(const scimatrix& A, const cimatrix& B) { 04680 return spf_mm_greater<scimatrix,cimatrix,cinterval>(A,B); 04681 } 04682 04684 inline bool operator>(const simatrix& A, const cimatrix& B) { 04685 return spf_mm_greater<simatrix,cimatrix,cinterval>(A,B); 04686 } 04687 04689 inline bool operator>(const cimatrix& A, const srmatrix& B) { 04690 return fsp_mm_greater<cimatrix,srmatrix,cinterval>(A,B); 04691 } 04692 04694 inline bool operator>(const cimatrix& A, const simatrix& B) { 04695 return fsp_mm_greater<cimatrix,simatrix,cinterval>(A,B); 04696 } 04697 04699 inline bool operator>(const cimatrix& A, const scmatrix& B) { 04700 return fsp_mm_greater<cimatrix,scmatrix,cinterval>(A,B); 04701 } 04702 04704 inline bool operator>(const cimatrix& A, const scimatrix& B) { 04705 return fsp_mm_greater<cimatrix,scimatrix,cinterval>(A,B); 04706 } 04707 04709 inline bool operator>(const imatrix& A, const scimatrix& B) { 04710 return fsp_mm_greater<imatrix,scimatrix,cinterval>(A,B); 04711 } 04712 04714 inline bool operator>(const cimatrix_slice& A, const srmatrix& B) { 04715 return fsp_mm_greater<cimatrix_slice,srmatrix,cinterval>(A,B); 04716 } 04717 04719 inline bool operator>(const cimatrix_slice& A, const scmatrix& B) { 04720 return fsp_mm_greater<cimatrix_slice,scmatrix,cinterval>(A,B); 04721 } 04722 04724 inline bool operator>(const cimatrix_slice& A, const simatrix& B) { 04725 return fsp_mm_greater<cimatrix_slice,simatrix,cinterval>(A,B); 04726 } 04727 04729 inline bool operator>(const cimatrix_slice& A, const scimatrix& B) { 04730 return fsp_mm_greater<cimatrix_slice,scimatrix,cinterval>(A,B); 04731 } 04732 04734 inline bool operator>(const imatrix_slice& A, const scimatrix& B) { 04735 return fsp_mm_greater<imatrix_slice,scimatrix,cinterval>(A,B); 04736 } 04737 04739 inline bool operator>(const scimatrix& A, const rmatrix_slice& B) { 04740 return spf_mm_greater<scimatrix,rmatrix_slice,cinterval>(A,B); 04741 } 04742 04744 inline bool operator>(const scimatrix& A, const imatrix_slice& B) { 04745 return spf_mm_greater<scimatrix,imatrix_slice,cinterval>(A,B); 04746 } 04747 04749 inline bool operator>(const scimatrix& A, const cmatrix_slice& B) { 04750 return spf_mm_greater<scimatrix,cmatrix_slice,cinterval>(A,B); 04751 } 04752 04754 inline bool operator>(const scimatrix& A, const cimatrix_slice& B) { 04755 return spf_mm_greater<scimatrix,cimatrix_slice,cinterval>(A,B); 04756 } 04757 04759 inline bool operator>(const simatrix& A, const cimatrix_slice& B) { 04760 return spf_mm_greater<simatrix,cimatrix_slice,cinterval>(A,B); 04761 } 04762 04764 inline bool operator>=(const scimatrix& A, const srmatrix& B) { 04765 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(A,B); 04766 } 04767 04769 inline bool operator>=(const scimatrix& A, const scmatrix& B) { 04770 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(A,B); 04771 } 04772 04774 inline bool operator>=(const scimatrix& A, const simatrix& B) { 04775 return spsp_mm_geq<scimatrix,simatrix,cinterval>(A,B); 04776 } 04777 04779 inline bool operator>=(const scimatrix& A, const scimatrix& B) { 04780 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(A,B); 04781 } 04782 04784 inline bool operator>=(const simatrix& A, const scimatrix& B) { 04785 return spsp_mm_geq<simatrix,scimatrix,cinterval>(A,B); 04786 } 04787 04789 inline bool operator>=(const scimatrix& A, const rmatrix& B) { 04790 return spf_mm_geq<scimatrix,rmatrix,cinterval>(A,B); 04791 } 04792 04794 inline bool operator>=(const scimatrix& A, const imatrix& B) { 04795 return spf_mm_geq<scimatrix,imatrix,cinterval>(A,B); 04796 } 04797 04799 inline bool operator>=(const scimatrix& A, const cmatrix& B) { 04800 return spf_mm_geq<scimatrix,cmatrix,cinterval>(A,B); 04801 } 04802 04804 inline bool operator>=(const scimatrix& A, const cimatrix& B) { 04805 return spf_mm_geq<scimatrix,cimatrix,cinterval>(A,B); 04806 } 04807 04809 inline bool operator>=(const simatrix& A, const cimatrix& B) { 04810 return spf_mm_geq<simatrix,cimatrix,cinterval>(A,B); 04811 } 04812 04814 inline bool operator>=(const cimatrix& A, const srmatrix& B) { 04815 return fsp_mm_geq<cimatrix,srmatrix,cinterval>(A,B); 04816 } 04817 04819 inline bool operator>=(const cimatrix& A, const simatrix& B) { 04820 return fsp_mm_geq<cimatrix,simatrix,cinterval>(A,B); 04821 } 04822 04824 inline bool operator>=(const cimatrix& A, const scmatrix& B) { 04825 return fsp_mm_geq<cimatrix,scmatrix,cinterval>(A,B); 04826 } 04827 04829 inline bool operator>=(const cimatrix& A, const scimatrix& B) { 04830 return fsp_mm_geq<cimatrix,scimatrix,cinterval>(A,B); 04831 } 04832 04834 inline bool operator>=(const imatrix& A, const scimatrix& B) { 04835 return fsp_mm_geq<imatrix,scimatrix,cinterval>(A,B); 04836 } 04837 04839 inline bool operator>=(const cimatrix_slice& A, const srmatrix& B) { 04840 return fsp_mm_geq<cimatrix_slice,srmatrix,cinterval>(A,B); 04841 } 04842 04844 inline bool operator>=(const cimatrix_slice& A, const scmatrix& B) { 04845 return fsp_mm_geq<cimatrix_slice,scmatrix,cinterval>(A,B); 04846 } 04847 04849 inline bool operator>=(const cimatrix_slice& A, const simatrix& B) { 04850 return fsp_mm_geq<cimatrix_slice,simatrix,cinterval>(A,B); 04851 } 04852 04854 inline bool operator>=(const cimatrix_slice& A, const scimatrix& B) { 04855 return fsp_mm_geq<cimatrix_slice,scimatrix,cinterval>(A,B); 04856 } 04857 04859 inline bool operator>=(const imatrix_slice& A, const scimatrix& B) { 04860 return fsp_mm_geq<imatrix_slice,scimatrix,cinterval>(A,B); 04861 } 04862 04864 inline bool operator>=(const scimatrix& A, const rmatrix_slice& B) { 04865 return spf_mm_geq<scimatrix,rmatrix_slice,cinterval>(A,B); 04866 } 04867 04869 inline bool operator>=(const scimatrix& A, const imatrix_slice& B) { 04870 return spf_mm_geq<scimatrix,imatrix_slice,cinterval>(A,B); 04871 } 04872 04874 inline bool operator>=(const scimatrix& A, const cmatrix_slice& B) { 04875 return spf_mm_geq<scimatrix,cmatrix_slice,cinterval>(A,B); 04876 } 04877 04879 inline bool operator>=(const scimatrix& A, const cimatrix_slice& B) { 04880 return spf_mm_geq<scimatrix,cimatrix_slice,cinterval>(A,B); 04881 } 04882 04884 inline bool operator>=(const simatrix& A, const cimatrix_slice& B) { 04885 return spf_mm_geq<simatrix,cimatrix_slice,cinterval>(A,B); 04886 } 04887 04889 inline bool operator!(const scimatrix& A) { 04890 return sp_m_not(A); 04891 } 04892 04894 04899 inline std::ostream& operator<<(std::ostream& os, const scimatrix& A) { 04900 return sp_m_output<scimatrix,cinterval>(os,A); 04901 } 04902 04904 04909 inline std::istream& operator>>(std::istream& is, scimatrix& A) { 04910 return sp_m_input<scimatrix,cinterval>(is,A); 04911 } 04912 04914 04918 class scimatrix_slice { 04919 public: 04920 scimatrix A; 04921 scimatrix* M; //Originalmatrix 04922 04923 private: 04924 scimatrix_slice(scimatrix& Mat, int sl1l, int sl1u, int sl2l, int sl2u) { 04925 A.lb1 = sl1l; 04926 A.lb2 = sl2l; 04927 A.ub1 = sl1u; 04928 A.ub2 = sl2u; 04929 A.m = sl1u-sl1l+1; 04930 A.n = sl2u-sl2l+1; 04931 04932 //Kopieren der Werte aus A 04933 A.p = std::vector<int>(A.n+1, 0); 04934 A.ind.reserve(A.m + A.n); 04935 A.x.reserve(A.m + A.n); 04936 04937 for(int i=0 ; i<A.n ; i++) { 04938 A.p[i+1] = A.p[i]; 04939 for(int j=Mat.p[sl2l-Mat.lb2+i] ; j<Mat.p[sl2l-Mat.lb2+i+1] ; j++) { 04940 if(Mat.ind[j] >= sl1l-Mat.lb1 && Mat.ind[j] <= sl1u-Mat.lb1) { 04941 A.ind.push_back(Mat.ind[j]-(sl1l-Mat.lb1)); 04942 A.x.push_back(Mat.x[j]); 04943 A.p[i+1]++; 04944 } 04945 } 04946 } 04947 04948 //Zeiger auf A fuer Datenmanipulationen 04949 M = &Mat; 04950 } 04951 04952 scimatrix_slice(const scimatrix& Mat, int sl1l, int sl1u, int sl2l, int sl2u) { 04953 A.lb1 = sl1l; 04954 A.lb2 = sl2l; 04955 A.ub1 = sl1u; 04956 A.ub2 = sl2u; 04957 A.m = sl1u-sl1l+1; 04958 A.n = sl2u-sl2l+1; 04959 04960 //Kopieren der Werte aus A 04961 A.p = std::vector<int>(A.n+1, 0); 04962 A.ind.reserve(A.m + A.n); 04963 A.x.reserve(A.m + A.n); 04964 04965 for(int i=0 ; i<A.n ; i++) { 04966 A.p[i+1] = A.p[i]; 04967 for(int j=Mat.p[sl2l-Mat.lb2+i] ; j<Mat.p[sl2l-Mat.lb2+i+1] ; j++) { 04968 if(Mat.ind[j] >= sl1l-Mat.lb1 && Mat.ind[j] <= sl1u-Mat.lb1) { 04969 A.ind.push_back(Mat.ind[j]-(sl1l-Mat.lb1)); 04970 A.x.push_back(Mat.x[j]); 04971 A.p[i+1]++; 04972 } 04973 } 04974 } 04975 04976 //Zeiger auf A fuer Datenmanipulationen 04977 M = const_cast<scimatrix*>(&Mat); 04978 } 04979 04980 04981 public: 04982 04984 scimatrix_slice& operator=(const real& C) { 04985 return sl_ms_assign<scimatrix_slice, real, std::vector<cinterval>::iterator, cinterval>(*this,C); 04986 } 04987 04989 scimatrix_slice& operator=(const interval& C) { 04990 return sl_ms_assign<scimatrix_slice, interval, std::vector<cinterval>::iterator, cinterval>(*this,C); 04991 } 04992 04994 scimatrix_slice& operator=(const complex& C) { 04995 return sl_ms_assign<scimatrix_slice, complex, std::vector<cinterval>::iterator, cinterval>(*this,C); 04996 } 04997 04999 scimatrix_slice& operator=(const cinterval& C) { 05000 return sl_ms_assign<scimatrix_slice, cinterval, std::vector<cinterval>::iterator, cinterval>(*this,C); 05001 } 05002 05004 scimatrix_slice& operator=(const srmatrix& C) { 05005 return slsp_mm_assign<scimatrix_slice, srmatrix, std::vector<cinterval>::iterator>(*this,C); 05006 } 05007 05009 scimatrix_slice& operator=(const scmatrix& C) { 05010 return slsp_mm_assign<scimatrix_slice, scmatrix, std::vector<cinterval>::iterator>(*this,C); 05011 } 05012 05014 scimatrix_slice& operator=(const simatrix& C) { 05015 return slsp_mm_assign<scimatrix_slice, simatrix, std::vector<cinterval>::iterator>(*this,C); 05016 } 05017 05019 scimatrix_slice& operator=(const scimatrix& C) { 05020 return slsp_mm_assign<scimatrix_slice, scimatrix, std::vector<cinterval>::iterator>(*this,C); 05021 } 05022 05024 scimatrix_slice& operator=(const rmatrix& C) { 05025 return slf_mm_assign<scimatrix_slice, rmatrix, std::vector<cinterval>::iterator, cinterval>(*this,C); 05026 } 05027 05029 scimatrix_slice& operator=(const cmatrix& C) { 05030 return slf_mm_assign<scimatrix_slice, cmatrix, std::vector<cinterval>::iterator, cinterval>(*this,C); 05031 } 05032 05034 scimatrix_slice& operator=(const imatrix& C) { 05035 return slf_mm_assign<scimatrix_slice, imatrix, std::vector<cinterval>::iterator, cinterval>(*this,C); 05036 } 05037 05039 scimatrix_slice& operator=(const cimatrix& C) { 05040 return slf_mm_assign<scimatrix_slice, cimatrix, std::vector<cinterval>::iterator, cinterval>(*this,C); 05041 } 05042 05044 scimatrix_slice& operator=(const rmatrix_slice& C) { 05045 return slf_mm_assign<scimatrix_slice, rmatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C); 05046 } 05047 05049 scimatrix_slice& operator=(const cmatrix_slice& C) { 05050 return slf_mm_assign<scimatrix_slice, cmatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C); 05051 } 05052 05054 scimatrix_slice& operator=(const imatrix_slice& C) { 05055 return slf_mm_assign<scimatrix_slice, imatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C); 05056 } 05057 05059 scimatrix_slice& operator=(const cimatrix_slice& C) { 05060 return slf_mm_assign<scimatrix_slice, cimatrix_slice, std::vector<cinterval>::iterator, cinterval>(*this,C); 05061 } 05062 05064 scimatrix_slice& operator=(const srmatrix_slice& C) { 05065 *this = C.A; 05066 return *this; 05067 } 05068 05070 scimatrix_slice& operator=(const scmatrix_slice& C) { 05071 *this = C.A; 05072 return *this; 05073 } 05074 05076 scimatrix_slice& operator=(const simatrix_slice& C) { 05077 *this = C.A; 05078 return *this; 05079 } 05080 05082 scimatrix_slice& operator=(const scimatrix_slice& C) { 05083 *this = C.A; 05084 return *this; 05085 } 05086 05088 scimatrix_slice& operator*=(const srmatrix_slice& M) { 05089 *this = A*M.A; 05090 return *this; 05091 } 05092 05094 scimatrix_slice& operator*=(const scmatrix_slice& M) { 05095 *this = A*M.A; 05096 return *this; 05097 } 05098 05100 scimatrix_slice& operator*=(const simatrix_slice& M) { 05101 *this = A*M.A; 05102 return *this; 05103 } 05104 05106 scimatrix_slice& operator*=(const scimatrix_slice& M) { 05107 *this = A*M.A; 05108 return *this; 05109 } 05110 05112 scimatrix_slice& operator*=(const srmatrix& M) { 05113 *this = A*M; 05114 return *this; 05115 } 05116 05118 scimatrix_slice& operator*=(const scmatrix& M) { 05119 *this = A*M; 05120 return *this; 05121 } 05122 05124 scimatrix_slice& operator*=(const simatrix& M) { 05125 *this = A*M; 05126 return *this; 05127 } 05128 05130 scimatrix_slice& operator*=(const scimatrix& M) { 05131 *this = A*M; 05132 return *this; 05133 } 05134 05136 scimatrix_slice& operator*=(const rmatrix& M) { 05137 *this = A*M; 05138 return *this; 05139 } 05140 05142 scimatrix_slice& operator*=(const cmatrix& M) { 05143 *this = A*M; 05144 return *this; 05145 } 05146 05148 scimatrix_slice& operator*=(const imatrix& M) { 05149 *this = A*M; 05150 return *this; 05151 } 05152 05154 scimatrix_slice& operator*=(const cimatrix& M) { 05155 *this = A*M; 05156 return *this; 05157 } 05158 05160 scimatrix_slice& operator*=(const rmatrix_slice& M) { 05161 *this = A*M; 05162 return *this; 05163 } 05164 05166 scimatrix_slice& operator*=(const cmatrix_slice& M) { 05167 *this = A*M; 05168 return *this; 05169 } 05170 05172 scimatrix_slice& operator*=(const imatrix_slice& M) { 05173 *this = A*M; 05174 return *this; 05175 } 05176 05178 scimatrix_slice& operator*=(const cimatrix_slice& M) { 05179 *this = A*M; 05180 return *this; 05181 } 05182 05184 scimatrix_slice& operator*=(const real& r) { 05185 *this = A*r; 05186 return *this; 05187 } 05188 05190 scimatrix_slice& operator*=(const complex& r) { 05191 *this = A*r; 05192 return *this; 05193 } 05194 05196 scimatrix_slice& operator*=(const interval& r) { 05197 *this = A*r; 05198 return *this; 05199 } 05200 05202 scimatrix_slice& operator*=(const cinterval& r) { 05203 *this = A*r; 05204 return *this; 05205 } 05206 05208 scimatrix_slice& operator/=(const real& r) { 05209 *this = A/r; 05210 return *this; 05211 } 05212 05214 scimatrix_slice& operator/=(const complex& r) { 05215 *this = A/r; 05216 return *this; 05217 } 05218 05220 scimatrix_slice& operator/=(const interval& r) { 05221 *this = A/r; 05222 return *this; 05223 } 05224 05226 scimatrix_slice& operator/=(const cinterval& r) { 05227 *this = A/r; 05228 return *this; 05229 } 05230 05232 scimatrix_slice& operator+=(const srmatrix_slice& M) { 05233 *this = A+M.A; 05234 return *this; 05235 } 05236 05238 scimatrix_slice& operator+=(const scmatrix_slice& M) { 05239 *this = A+M.A; 05240 return *this; 05241 } 05242 05244 scimatrix_slice& operator+=(const simatrix_slice& M) { 05245 *this = A+M.A; 05246 return *this; 05247 } 05248 05250 scimatrix_slice& operator+=(const scimatrix_slice& M) { 05251 *this = A+M.A; 05252 return *this; 05253 } 05254 05256 scimatrix_slice& operator+=(const srmatrix& M) { 05257 *this = A+M; 05258 return *this; 05259 } 05260 05262 scimatrix_slice& operator+=(const scmatrix& M) { 05263 *this = A+M; 05264 return *this; 05265 } 05266 05268 scimatrix_slice& operator+=(const simatrix& M) { 05269 *this = A+M; 05270 return *this; 05271 } 05272 05274 scimatrix_slice& operator+=(const scimatrix& M) { 05275 *this = A+M; 05276 return *this; 05277 } 05278 05280 scimatrix_slice& operator+=(const rmatrix& M) { 05281 *this = A+M; 05282 return *this; 05283 } 05284 05286 scimatrix_slice& operator+=(const cmatrix& M) { 05287 *this = A+M; 05288 return *this; 05289 } 05290 05292 scimatrix_slice& operator+=(const imatrix& M) { 05293 *this = A+M; 05294 return *this; 05295 } 05296 05298 scimatrix_slice& operator+=(const cimatrix& M) { 05299 *this = A+M; 05300 return *this; 05301 } 05302 05304 scimatrix_slice& operator+=(const rmatrix_slice& M) { 05305 *this = A+M; 05306 return *this; 05307 } 05308 05310 scimatrix_slice& operator+=(const cmatrix_slice& M) { 05311 *this = A+M; 05312 return *this; 05313 } 05314 05316 scimatrix_slice& operator+=(const imatrix_slice& M) { 05317 *this = A+M; 05318 return *this; 05319 } 05320 05322 scimatrix_slice& operator+=(const cimatrix_slice& M) { 05323 *this = A+M; 05324 return *this; 05325 } 05326 05328 scimatrix_slice& operator-=(const srmatrix_slice& M) { 05329 *this = A-M.A; 05330 return *this; 05331 } 05332 05334 scimatrix_slice& operator-=(const scmatrix_slice& M) { 05335 *this = A-M.A; 05336 return *this; 05337 } 05338 05340 scimatrix_slice& operator-=(const simatrix_slice& M) { 05341 *this = A-M.A; 05342 return *this; 05343 } 05344 05346 scimatrix_slice& operator-=(const scimatrix_slice& M) { 05347 *this = A-M.A; 05348 return *this; 05349 } 05350 05352 scimatrix_slice& operator-=(const srmatrix& M) { 05353 *this = A-M; 05354 return *this; 05355 } 05356 05358 scimatrix_slice& operator-=(const scmatrix& M) { 05359 *this = A-M; 05360 return *this; 05361 } 05362 05364 scimatrix_slice& operator-=(const simatrix& M) { 05365 *this = A-M; 05366 return *this; 05367 } 05368 05370 scimatrix_slice& operator-=(const scimatrix& M) { 05371 *this = A-M; 05372 return *this; 05373 } 05374 05376 scimatrix_slice& operator-=(const rmatrix& M) { 05377 *this = A-M; 05378 return *this; 05379 } 05380 05382 scimatrix_slice& operator-=(const cmatrix& M) { 05383 *this = A-M; 05384 return *this; 05385 } 05386 05388 scimatrix_slice& operator-=(const imatrix& M) { 05389 *this = A-M; 05390 return *this; 05391 } 05392 05394 scimatrix_slice& operator-=(const cimatrix& M) { 05395 *this = A-M; 05396 return *this; 05397 } 05398 05400 scimatrix_slice& operator-=(const rmatrix_slice& M) { 05401 *this = A-M; 05402 return *this; 05403 } 05404 05406 scimatrix_slice& operator-=(const cmatrix_slice& M) { 05407 *this = A-M; 05408 return *this; 05409 } 05410 05412 scimatrix_slice& operator-=(const imatrix_slice& M) { 05413 *this = A-M; 05414 return *this; 05415 } 05416 05418 scimatrix_slice& operator-=(const cimatrix_slice& M) { 05419 *this = A-M; 05420 return *this; 05421 } 05422 05424 scimatrix_slice& operator|=(const srmatrix_slice& M) { 05425 *this = A|M.A; 05426 return *this; 05427 } 05428 05430 scimatrix_slice& operator|=(const scmatrix_slice& M) { 05431 *this = A|M.A; 05432 return *this; 05433 } 05434 05436 scimatrix_slice& operator|=(const simatrix_slice& M) { 05437 *this = A|M.A; 05438 return *this; 05439 } 05440 05442 scimatrix_slice& operator|=(const scimatrix_slice& M) { 05443 *this = A|M.A; 05444 return *this; 05445 } 05446 05448 scimatrix_slice& operator|=(const srmatrix& M) { 05449 *this = A|M; 05450 return *this; 05451 } 05452 05454 scimatrix_slice& operator|=(const scmatrix& M) { 05455 *this = A|M; 05456 return *this; 05457 } 05458 05460 scimatrix_slice& operator|=(const simatrix& M) { 05461 *this = A|M; 05462 return *this; 05463 } 05464 05466 scimatrix_slice& operator|=(const scimatrix& M) { 05467 *this = A|M; 05468 return *this; 05469 } 05470 05472 scimatrix_slice& operator|=(const rmatrix& M) { 05473 *this = A|M; 05474 return *this; 05475 } 05476 05478 scimatrix_slice& operator|=(const cmatrix& M) { 05479 *this = A|M; 05480 return *this; 05481 } 05482 05484 scimatrix_slice& operator|=(const imatrix& M) { 05485 *this = A|M; 05486 return *this; 05487 } 05488 05490 scimatrix_slice& operator|=(const cimatrix& M) { 05491 *this = A|M; 05492 return *this; 05493 } 05494 05496 scimatrix_slice& operator|=(const rmatrix_slice& M) { 05497 *this = A|M; 05498 return *this; 05499 } 05500 05502 scimatrix_slice& operator|=(const cmatrix_slice& M) { 05503 *this = A|M; 05504 return *this; 05505 } 05506 05508 scimatrix_slice& operator|=(const imatrix_slice& M) { 05509 *this = A|M; 05510 return *this; 05511 } 05512 05514 scimatrix_slice& operator|=(const cimatrix_slice& M) { 05515 *this = A|M; 05516 return *this; 05517 } 05518 05520 05524 const cinterval operator()(const int i, const int j) const { 05525 #if(CXSC_INDEX_CHECK) 05526 if(i<A.lb1 || i>A.ub1 || j<A.lb2 || j>A.ub2) 05527 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_slice::operator()(int, int)")); 05528 #endif 05529 cinterval r = A(i,j); 05530 return r; 05531 } 05532 05534 05538 cinterval& element(const int i, const int j) { 05539 #if(CXSC_INDEX_CHECK) 05540 if(i<A.lb1 || i>A.ub1 || j<A.lb2 || j>A.ub2) 05541 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_slice::element(int, int)")); 05542 #endif 05543 return M->element(i,j); 05544 } 05545 05547 scimatrix_subv operator[](const int); 05549 scimatrix_subv operator[](const cxscmatrix_column&); 05551 const scimatrix_subv operator[](const int) const; 05553 const scimatrix_subv operator[](const cxscmatrix_column&) const; 05554 05555 friend std::ostream& operator<<(std::ostream&, const scimatrix_slice&); 05556 05557 friend int Lb(const scimatrix_slice&, const int); 05558 friend int Ub(const scimatrix_slice&, const int); 05559 friend simatrix Re(const scimatrix_slice&); 05560 friend simatrix Im(const scimatrix_slice&); 05561 friend scmatrix Inf(const scimatrix_slice&); 05562 friend scmatrix Sup(const scimatrix_slice&); 05563 friend srmatrix InfRe(const scimatrix_slice&); 05564 friend srmatrix InfIm(const scimatrix_slice&); 05565 friend srmatrix SupRe(const scimatrix_slice&); 05566 friend srmatrix SupIm(const scimatrix_slice&); 05567 friend int RowLen(const scimatrix_slice&); 05568 friend int ColLen(const scimatrix_slice&); 05569 05570 friend class srmatrix; 05571 friend class srmatrix_subv; 05572 friend class srvector; 05573 friend class scmatrix; 05574 friend class scmatrix_subv; 05575 friend class scvector; 05576 friend class simatrix; 05577 friend class simatrix_subv; 05578 friend class sivector; 05579 friend class scimatrix; 05580 friend class scimatrix_subv; 05581 friend class scivector; 05582 05583 #include "matrix_friend_declarations.inl" 05584 }; 05585 05586 inline cimatrix::cimatrix(const srmatrix_slice& A) { 05587 dat = new cinterval[A.A.m*A.A.n]; 05588 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2; 05589 xsize = A.A.n; 05590 ysize = A.A.m; 05591 *this = 0.0; 05592 for(int j=0 ; j<A.A.n ; j++) { 05593 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) { 05594 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k]; 05595 } 05596 } 05597 } 05598 05599 inline cimatrix::cimatrix(const scmatrix_slice& A) { 05600 dat = new cinterval[A.A.m*A.A.n]; 05601 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2; 05602 xsize = A.A.n; 05603 ysize = A.A.m; 05604 *this = 0.0; 05605 for(int j=0 ; j<A.A.n ; j++) { 05606 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) { 05607 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k]; 05608 } 05609 } 05610 } 05611 05612 inline cimatrix::cimatrix(const simatrix_slice& A) { 05613 dat = new cinterval[A.A.m*A.A.n]; 05614 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2; 05615 xsize = A.A.n; 05616 ysize = A.A.m; 05617 *this = 0.0; 05618 for(int j=0 ; j<A.A.n ; j++) { 05619 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) { 05620 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k]; 05621 } 05622 } 05623 } 05624 05625 inline cimatrix::cimatrix(const scimatrix_slice& A) { 05626 dat = new cinterval[A.A.m*A.A.n]; 05627 lb1 = A.A.lb1; lb2 = A.A.lb2; ub1 = A.A.ub1; ub2 = A.A.ub2; 05628 xsize = A.A.n; 05629 ysize = A.A.m; 05630 *this = 0.0; 05631 for(int j=0 ; j<A.A.n ; j++) { 05632 for(int k=A.A.p[j] ; k<A.A.p[j+1] ; k++) { 05633 dat[A.A.ind[k]*A.A.n+j] = A.A.x[k]; 05634 } 05635 } 05636 } 05637 05639 inline int RowLen(const scimatrix_slice& S) { 05640 return RowLen(S.A); 05641 } 05642 05644 inline int ColLen(const scimatrix_slice& S) { 05645 return ColLen(S.A); 05646 } 05647 05648 inline scimatrix_slice scimatrix::operator()(const int i, const int j, const int k, const int l) { 05649 #if(CXSC_INDEX_CHECK) 05650 if(i<lb1 || j>ub1 || k<lb2 || l>ub2) 05651 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator()(int, int, int, int)")); 05652 #endif 05653 return scimatrix_slice(*this, i, j, k, l); 05654 } 05655 05656 inline const scimatrix_slice scimatrix::operator()(const int i, const int j, const int k, const int l) const{ 05657 #if(CXSC_INDEX_CHECK) 05658 if(i<lb1 || j>ub1 || k<lb2 || l>ub2) 05659 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator()(int, int, int, int) const")); 05660 #endif 05661 return scimatrix_slice(*this, i, j, k, l); 05662 } 05663 05664 inline scimatrix& scimatrix::operator=(const srmatrix_slice& S) { 05665 *this = S.A; 05666 return *this; 05667 } 05668 05669 inline scimatrix& scimatrix::operator=(const scmatrix_slice& S) { 05670 *this = S.A; 05671 return *this; 05672 } 05673 05674 inline scimatrix& scimatrix::operator=(const simatrix_slice& S) { 05675 *this = S.A; 05676 return *this; 05677 } 05678 05679 inline scimatrix& scimatrix::operator=(const scimatrix_slice& S) { 05680 *this = S.A; 05681 return *this; 05682 } 05683 05685 inline int Lb(const scimatrix_slice& S, const int i) { 05686 return Lb(S.A, i); 05687 } 05688 05690 inline int Ub(const scimatrix_slice& S, const int i) { 05691 return Ub(S.A, i); 05692 } 05693 05695 inline simatrix Re(const scimatrix_slice& S) { 05696 return Re(S.A); 05697 } 05698 05700 inline simatrix Im(const scimatrix_slice& S) { 05701 return Im(S.A); 05702 } 05703 05705 inline scimatrix conj(const scimatrix_slice& S) { 05706 return conj(S.A); 05707 } 05708 05710 inline simatrix abs(const scimatrix_slice& S) { 05711 return abs(S.A); 05712 } 05713 05715 inline scmatrix mid(const scimatrix_slice& S) { 05716 return mid(S.A); 05717 } 05718 05720 inline scmatrix diam(const scimatrix_slice& S) { 05721 return diam(S.A); 05722 } 05723 05725 inline scmatrix Inf(const scimatrix_slice& S) { 05726 return Inf(S.A); 05727 } 05728 05730 inline scmatrix Sup(const scimatrix_slice& S) { 05731 return Sup(S.A); 05732 } 05733 05735 inline srmatrix InfRe(const scimatrix_slice& S) { 05736 return InfRe(S.A); 05737 } 05738 05740 inline srmatrix InfIm(const scimatrix_slice& S) { 05741 return InfIm(S.A); 05742 } 05743 05745 inline srmatrix SupRe(const scimatrix_slice& S) { 05746 return SupRe(S.A); 05747 } 05748 05750 inline srmatrix SupIm(const scimatrix_slice& S) { 05751 return SupIm(S.A); 05752 } 05753 05754 inline scimatrix::scimatrix(const srmatrix_slice& S) { 05755 m = S.A.m; 05756 n = S.A.n; 05757 lb1 = S.A.lb1; 05758 ub1 = S.A.ub1; 05759 lb2 = S.A.lb2; 05760 ub2 = S.A.ub2; 05761 *this = S.A; 05762 } 05763 05764 inline scimatrix::scimatrix(const scmatrix_slice& S) { 05765 m = S.A.m; 05766 n = S.A.n; 05767 lb1 = S.A.lb1; 05768 ub1 = S.A.ub1; 05769 lb2 = S.A.lb2; 05770 ub2 = S.A.ub2; 05771 *this = S.A; 05772 } 05773 05774 inline scimatrix::scimatrix(const simatrix_slice& S) { 05775 m = S.A.m; 05776 n = S.A.n; 05777 lb1 = S.A.lb1; 05778 ub1 = S.A.ub1; 05779 lb2 = S.A.lb2; 05780 ub2 = S.A.ub2; 05781 *this = S.A; 05782 } 05783 05784 inline scimatrix::scimatrix(const scimatrix_slice& S) { 05785 m = S.A.m; 05786 n = S.A.n; 05787 lb1 = S.A.lb1; 05788 ub1 = S.A.ub1; 05789 lb2 = S.A.lb2; 05790 ub2 = S.A.ub2; 05791 *this = S.A; 05792 } 05793 05795 inline scimatrix operator-(const scimatrix_slice& M) { 05796 return sp_m_negative<scimatrix,scimatrix>(M.A); 05797 } 05798 05800 inline scimatrix operator+(const scimatrix_slice& M) { 05801 return M.A; 05802 } 05803 05805 05811 inline scimatrix operator*(const scimatrix_slice& M1, const srmatrix_slice& M2) { 05812 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05813 } 05814 05816 05822 inline scimatrix operator*(const scimatrix_slice& M1, const simatrix_slice& M2) { 05823 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05824 } 05825 05827 05833 inline scimatrix operator*(const scimatrix_slice& M1, const scmatrix_slice& M2) { 05834 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05835 } 05836 05838 05844 inline scimatrix operator*(const scimatrix_slice& M1, const scimatrix_slice& M2) { 05845 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05846 } 05847 05849 05855 inline scimatrix operator*(const srmatrix_slice& M1, const scimatrix_slice& M2) { 05856 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05857 } 05858 05860 05866 inline scimatrix operator*(const scmatrix_slice& M1, const scimatrix_slice& M2) { 05867 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05868 } 05869 05871 05877 inline scimatrix operator*(const simatrix_slice& M1, const scimatrix_slice& M2) { 05878 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05879 } 05880 05882 05888 inline scimatrix operator*(const simatrix_slice& M1, const scmatrix_slice& M2) { 05889 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05890 } 05891 05893 05899 inline scimatrix operator*(const scmatrix_slice& M1, const simatrix_slice& M2) { 05900 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2.A); 05901 } 05902 05904 05910 inline scimatrix operator*(const scimatrix_slice& M1, const srmatrix& M2) { 05911 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05912 } 05913 05915 05921 inline scimatrix operator*(const scimatrix_slice& M1, const scmatrix& M2) { 05922 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05923 } 05924 05926 05932 inline scimatrix operator*(const scimatrix_slice& M1, const simatrix& M2) { 05933 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05934 } 05935 05937 05943 inline scimatrix operator*(const scimatrix_slice& M1, const scimatrix& M2) { 05944 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05945 } 05946 05948 05954 inline scimatrix operator*(const srmatrix_slice& M1, const scimatrix& M2) { 05955 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05956 } 05957 05959 05965 inline scimatrix operator*(const simatrix_slice& M1, const scimatrix& M2) { 05966 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05967 } 05968 05970 05976 inline scimatrix operator*(const scmatrix_slice& M1, const scimatrix& M2) { 05977 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05978 } 05979 05981 05987 inline scimatrix operator*(const simatrix_slice& M1, const scmatrix& M2) { 05988 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 05989 } 05990 05992 05998 inline scimatrix operator*(const scmatrix_slice& M1, const simatrix& M2) { 05999 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1.A,M2); 06000 } 06001 06003 06009 inline scimatrix operator*(const scimatrix& M1, const srmatrix_slice& M2) { 06010 return spsp_mm_mult<scimatrix,srmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06011 } 06012 06014 06020 inline scimatrix operator*(const scimatrix& M1, const scmatrix_slice& M2) { 06021 return spsp_mm_mult<scimatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06022 } 06023 06025 06031 inline scimatrix operator*(const scimatrix& M1, const simatrix_slice& M2) { 06032 return spsp_mm_mult<scimatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06033 } 06034 06036 06042 inline scimatrix operator*(const scimatrix& M1, const scimatrix_slice& M2) { 06043 return spsp_mm_mult<scimatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06044 } 06045 06047 06053 inline scimatrix operator*(const srmatrix& M1, const scimatrix_slice& M2) { 06054 return spsp_mm_mult<srmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06055 } 06056 06058 06064 inline scimatrix operator*(const scmatrix& M1, const scimatrix_slice& M2) { 06065 return spsp_mm_mult<scmatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06066 } 06067 06069 06075 inline scimatrix operator*(const simatrix& M1, const scimatrix_slice& M2) { 06076 return spsp_mm_mult<simatrix,scimatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06077 } 06078 06080 06086 inline scimatrix operator*(const simatrix& M1, const scmatrix_slice& M2) { 06087 return spsp_mm_mult<simatrix,scmatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06088 } 06089 06091 06097 inline scimatrix operator*(const scmatrix& M1, const simatrix_slice& M2) { 06098 return spsp_mm_mult<scmatrix,simatrix,scimatrix,sparse_cidot,cinterval>(M1,M2.A); 06099 } 06100 06102 06108 inline cimatrix operator*(const scimatrix_slice& M1, const rmatrix& M2) { 06109 return spf_mm_mult<scimatrix,rmatrix,cimatrix,sparse_cidot>(M1.A,M2); 06110 } 06111 06113 06119 inline cimatrix operator*(const scimatrix_slice& M1, const imatrix& M2) { 06120 return spf_mm_mult<scimatrix,imatrix,cimatrix,sparse_cidot>(M1.A,M2); 06121 } 06122 06124 06130 inline cimatrix operator*(const scimatrix_slice& M1, const cmatrix& M2) { 06131 return spf_mm_mult<scimatrix,cmatrix,cimatrix,sparse_cidot>(M1.A,M2); 06132 } 06133 06135 06141 inline cimatrix operator*(const scimatrix_slice& M1, const cimatrix& M2) { 06142 return spf_mm_mult<scimatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2); 06143 } 06144 06146 06152 inline cimatrix operator*(const srmatrix_slice& M1, const cimatrix& M2) { 06153 return spf_mm_mult<srmatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2); 06154 } 06155 06157 06163 inline cimatrix operator*(const simatrix_slice& M1, const cimatrix& M2) { 06164 return spf_mm_mult<simatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2); 06165 } 06166 06168 06174 inline cimatrix operator*(const scmatrix_slice& M1, const cimatrix& M2) { 06175 return spf_mm_mult<scmatrix,cimatrix,cimatrix,sparse_cidot>(M1.A,M2); 06176 } 06177 06179 06185 inline cimatrix operator*(const simatrix_slice& M1, const cmatrix& M2) { 06186 return spf_mm_mult<simatrix,cmatrix,cimatrix,sparse_cidot>(M1.A,M2); 06187 } 06188 06190 06196 inline cimatrix operator*(const scmatrix_slice& M1, const imatrix& M2) { 06197 return spf_mm_mult<scmatrix,imatrix,cimatrix,sparse_cidot>(M1.A,M2); 06198 } 06199 06201 06207 inline cimatrix operator*(const cimatrix& M1, const srmatrix_slice& M2) { 06208 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06209 } 06210 06212 06218 inline cimatrix operator*(const cimatrix& M1, const scmatrix_slice& M2) { 06219 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06220 } 06221 06223 06229 inline cimatrix operator*(const cimatrix& M1, const simatrix_slice& M2) { 06230 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A); 06231 } 06232 06234 06240 inline cimatrix operator*(const cimatrix& M1, const scimatrix_slice& M2) { 06241 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06242 } 06243 06245 06251 inline cimatrix operator*(const rmatrix& M1, const scimatrix_slice& M2) { 06252 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06253 } 06254 06256 06262 inline cimatrix operator*(const cmatrix& M1, const scimatrix_slice& M2) { 06263 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06264 } 06265 06267 06273 inline cimatrix operator*(const imatrix& M1, const scimatrix_slice& M2) { 06274 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06275 } 06276 06278 06284 inline cimatrix operator*(const imatrix& M1, const scmatrix_slice& M2) { 06285 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06286 } 06287 06289 06295 inline cimatrix operator*(const cmatrix& M1, const simatrix_slice& M2) { 06296 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A); 06297 } 06298 06300 06306 inline cimatrix operator*(const scimatrix_slice& M1, const rmatrix_slice& M2) { 06307 return spf_mm_mult<scimatrix,rmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06308 } 06309 06311 06317 inline cimatrix operator*(const scimatrix_slice& M1, const cmatrix_slice& M2) { 06318 return spf_mm_mult<scimatrix,cmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06319 } 06320 06322 06328 inline cimatrix operator*(const scimatrix_slice& M1, const imatrix_slice& M2) { 06329 return spf_mm_mult<scimatrix,imatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06330 } 06331 06333 06339 inline cimatrix operator*(const scimatrix_slice& M1, const cimatrix_slice& M2) { 06340 return spf_mm_mult<scimatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06341 } 06342 06344 06350 inline cimatrix operator*(const srmatrix_slice& M1, const cimatrix_slice& M2) { 06351 return spf_mm_mult<srmatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06352 } 06353 06355 06361 inline cimatrix operator*(const simatrix_slice& M1, const cimatrix_slice& M2) { 06362 return spf_mm_mult<simatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06363 } 06364 06366 06372 inline cimatrix operator*(const scmatrix_slice& M1, const cimatrix_slice& M2) { 06373 return spf_mm_mult<scmatrix,cimatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06374 } 06375 06377 06383 inline cimatrix operator*(const simatrix_slice& M1, const cmatrix_slice& M2) { 06384 return spf_mm_mult<simatrix,cmatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06385 } 06386 06388 06394 inline cimatrix operator*(const scmatrix_slice& M1, const imatrix_slice& M2) { 06395 return spf_mm_mult<scmatrix,imatrix_slice,cimatrix,sparse_cidot>(M1.A,M2); 06396 } 06397 06399 06405 inline cimatrix operator*(const cimatrix_slice& M1, const srmatrix_slice& M2) { 06406 return fsp_mm_mult<cimatrix,srmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06407 } 06408 06410 06416 inline cimatrix operator*(const cimatrix_slice& M1, const scmatrix_slice& M2) { 06417 return fsp_mm_mult<cimatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06418 } 06419 06421 06427 inline cimatrix operator*(const cimatrix_slice& M1, const simatrix_slice& M2) { 06428 return fsp_mm_mult<cimatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A); 06429 } 06430 06432 06438 inline cimatrix operator*(const cimatrix_slice& M1, const scimatrix_slice& M2) { 06439 return fsp_mm_mult<cimatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06440 } 06441 06443 06449 inline cimatrix operator*(const rmatrix_slice& M1, const scimatrix_slice& M2) { 06450 return fsp_mm_mult<rmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06451 } 06452 06454 06460 inline cimatrix operator*(const imatrix_slice& M1, const scimatrix_slice& M2) { 06461 return fsp_mm_mult<imatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06462 } 06463 06465 06471 inline cimatrix operator*(const cmatrix_slice& M1, const scimatrix_slice& M2) { 06472 return fsp_mm_mult<cmatrix,scimatrix,cimatrix,sparse_cidot>(M1,M2.A); 06473 } 06474 06476 06482 inline cimatrix operator*(const imatrix_slice& M1, const scmatrix_slice& M2) { 06483 return fsp_mm_mult<imatrix,scmatrix,cimatrix,sparse_cidot>(M1,M2.A); 06484 } 06485 06487 06493 inline cimatrix operator*(const cmatrix_slice& M1, const simatrix_slice& M2) { 06494 return fsp_mm_mult<cmatrix,simatrix,cimatrix,sparse_cidot>(M1,M2.A); 06495 } 06496 06498 06504 inline scivector operator*(const scimatrix_slice& M, const srvector& v) { 06505 return spsp_mv_mult<scimatrix,srvector,scivector,sparse_cidot,cinterval>(M.A,v); 06506 } 06507 06509 06515 inline scivector operator*(const scimatrix_slice& M, const sivector& v) { 06516 return spsp_mv_mult<scimatrix,sivector,scivector,sparse_cidot,cinterval>(M.A,v); 06517 } 06518 06520 06526 inline scivector operator*(const scimatrix_slice& M, const scvector& v) { 06527 return spsp_mv_mult<scimatrix,scvector,scivector,sparse_cidot,cinterval>(M.A,v); 06528 } 06529 06531 06537 inline scivector operator*(const scimatrix_slice& M, const scivector& v) { 06538 return spsp_mv_mult<scimatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v); 06539 } 06540 06542 06548 inline scivector operator*(const srmatrix_slice& M, const scivector& v) { 06549 return spsp_mv_mult<srmatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v); 06550 } 06551 06553 06559 inline scivector operator*(const simatrix_slice& M, const scivector& v) { 06560 return spsp_mv_mult<simatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v); 06561 } 06562 06564 06570 inline scivector operator*(const scmatrix_slice& M, const scivector& v) { 06571 return spsp_mv_mult<scmatrix,scivector,scivector,sparse_cidot,cinterval>(M.A,v); 06572 } 06573 06575 06581 inline scivector operator*(const simatrix_slice& M, const scvector& v) { 06582 return spsp_mv_mult<simatrix,scvector,scivector,sparse_cidot,cinterval>(M.A,v); 06583 } 06584 06586 06592 inline scivector operator*(const scmatrix_slice& M, const sivector& v) { 06593 return spsp_mv_mult<scmatrix,sivector,scivector,sparse_cidot,cinterval>(M.A,v); 06594 } 06595 06597 06603 inline scivector operator*(const scimatrix_slice& M, const srvector_slice& v) { 06604 return spsl_mv_mult<scimatrix,srvector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06605 } 06606 06608 06614 inline scivector operator*(const scimatrix_slice& M, const sivector_slice& v) { 06615 return spsl_mv_mult<scimatrix,sivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06616 } 06617 06619 06625 inline scivector operator*(const scimatrix_slice& M, const scvector_slice& v) { 06626 return spsl_mv_mult<scimatrix,scvector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06627 } 06628 06630 06636 inline scivector operator*(const scimatrix_slice& M, const scivector_slice& v) { 06637 return spsl_mv_mult<scimatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06638 } 06639 06641 06647 inline scivector operator*(const srmatrix_slice& M, const scivector_slice& v) { 06648 return spsl_mv_mult<srmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06649 } 06650 06652 06658 inline scivector operator*(const scmatrix_slice& M, const scivector_slice& v) { 06659 return spsl_mv_mult<scmatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06660 } 06661 06663 06669 inline scivector operator*(const simatrix_slice& M, const scivector_slice& v) { 06670 return spsl_mv_mult<simatrix,scivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06671 } 06672 06674 06680 inline scivector operator*(const simatrix_slice& M, const scvector_slice& v) { 06681 return spsl_mv_mult<simatrix,scvector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06682 } 06683 06685 06691 inline scivector operator*(const scmatrix_slice& M, const sivector_slice& v) { 06692 return spsl_mv_mult<scmatrix,sivector_slice,scivector,sparse_cidot,cinterval>(M.A,v); 06693 } 06694 06696 06702 inline civector operator*(const scimatrix_slice& M, const rvector& v) { 06703 return spf_mv_mult<scimatrix,rvector,civector,sparse_cidot>(M.A,v); 06704 } 06705 06707 06713 inline civector operator*(const scimatrix_slice& M, const ivector& v) { 06714 return spf_mv_mult<scimatrix,ivector,civector,sparse_cidot>(M.A,v); 06715 } 06716 06718 06724 inline civector operator*(const scimatrix_slice& M, const cvector& v) { 06725 return spf_mv_mult<scimatrix,cvector,civector,sparse_cidot>(M.A,v); 06726 } 06727 06729 06735 inline civector operator*(const scimatrix_slice& M, const civector& v) { 06736 return spf_mv_mult<scimatrix,civector,civector,sparse_cidot>(M.A,v); 06737 } 06738 06740 06746 inline civector operator*(const srmatrix_slice& M, const civector& v) { 06747 return spf_mv_mult<srmatrix,civector,civector,sparse_cidot>(M.A,v); 06748 } 06749 06751 06757 inline civector operator*(const simatrix_slice& M, const civector& v) { 06758 return spf_mv_mult<simatrix,civector,civector,sparse_cidot>(M.A,v); 06759 } 06760 06762 06768 inline civector operator*(const scmatrix_slice& M, const civector& v) { 06769 return spf_mv_mult<scmatrix,civector,civector,sparse_cidot>(M.A,v); 06770 } 06771 06773 06779 inline civector operator*(const simatrix_slice& M, const cvector& v) { 06780 return spf_mv_mult<simatrix,cvector,civector,sparse_cidot>(M.A,v); 06781 } 06782 06784 06790 inline civector operator*(const scmatrix_slice& M, const ivector& v) { 06791 return spf_mv_mult<scmatrix,ivector,civector,sparse_cidot>(M.A,v); 06792 } 06793 06795 06801 inline civector operator*(const scimatrix_slice& M, const rvector_slice& v) { 06802 return spf_mv_mult<scimatrix,rvector_slice,civector,sparse_cidot>(M.A,v); 06803 } 06804 06806 06812 inline civector operator*(const scimatrix_slice& M, const ivector_slice& v) { 06813 return spf_mv_mult<scimatrix,ivector_slice,civector,sparse_cidot>(M.A,v); 06814 } 06815 06817 06823 inline civector operator*(const scimatrix_slice& M, const cvector_slice& v) { 06824 return spf_mv_mult<scimatrix,cvector_slice,civector,sparse_cidot>(M.A,v); 06825 } 06826 06828 06834 inline civector operator*(const scimatrix_slice& M, const civector_slice& v) { 06835 return spf_mv_mult<scimatrix,civector_slice,civector,sparse_cidot>(M.A,v); 06836 } 06837 06839 06845 inline civector operator*(const srmatrix_slice& M, const civector_slice& v) { 06846 return spf_mv_mult<srmatrix,civector_slice,civector,sparse_cidot>(M.A,v); 06847 } 06848 06850 06856 inline civector operator*(const scmatrix_slice& M, const civector_slice& v) { 06857 return spf_mv_mult<scmatrix,civector_slice,civector,sparse_cidot>(M.A,v); 06858 } 06859 06861 06867 inline civector operator*(const simatrix_slice& M, const civector_slice& v) { 06868 return spf_mv_mult<simatrix,civector_slice,civector,sparse_cidot>(M.A,v); 06869 } 06870 06872 06878 inline civector operator*(const simatrix_slice& M, const cvector_slice& v) { 06879 return spf_mv_mult<simatrix,cvector_slice,civector,sparse_cidot>(M.A,v); 06880 } 06881 06883 06889 inline civector operator*(const scmatrix_slice& M, const ivector_slice& v) { 06890 return spf_mv_mult<scmatrix,ivector_slice,civector,sparse_cidot>(M.A,v); 06891 } 06892 06894 inline scimatrix operator/(const scimatrix_slice& M, const real& r) { 06895 return sp_ms_div<scimatrix,real,scimatrix>(M.A,r); 06896 } 06897 06899 inline scimatrix operator/(const scimatrix_slice& M, const complex& r) { 06900 return sp_ms_div<scimatrix,complex,scimatrix>(M.A,r); 06901 } 06902 06904 inline scimatrix operator/(const scimatrix_slice& M, const interval& r) { 06905 return sp_ms_div<scimatrix,interval,scimatrix>(M.A,r); 06906 } 06907 06909 inline scimatrix operator/(const scimatrix_slice& M, const cinterval& r) { 06910 return sp_ms_div<scimatrix,cinterval,scimatrix>(M.A,r); 06911 } 06912 06914 inline scimatrix operator/(const srmatrix_slice& M, const cinterval& r) { 06915 return sp_ms_div<srmatrix,cinterval,scimatrix>(M.A,r); 06916 } 06917 06919 inline scimatrix operator/(const simatrix_slice& M, const cinterval& r) { 06920 return sp_ms_div<simatrix,cinterval,scimatrix>(M.A,r); 06921 } 06922 06924 inline scimatrix operator/(const scmatrix_slice& M, const cinterval& r) { 06925 return sp_ms_div<scmatrix,cinterval,scimatrix>(M.A,r); 06926 } 06927 06929 inline scimatrix operator/(const simatrix_slice& M, const complex& r) { 06930 return sp_ms_div<simatrix,complex,scimatrix>(M.A,r); 06931 } 06932 06934 inline scimatrix operator/(const scmatrix_slice& M, const interval& r) { 06935 return sp_ms_div<scmatrix,interval,scimatrix>(M.A,r); 06936 } 06937 06939 inline scimatrix operator*(const scimatrix_slice& M, const real& r) { 06940 return sp_ms_mult<scimatrix,real,scimatrix>(M.A,r); 06941 } 06942 06944 inline scimatrix operator*(const scimatrix_slice& M, const complex& r) { 06945 return sp_ms_mult<scimatrix,complex,scimatrix>(M.A,r); 06946 } 06947 06949 inline scimatrix operator*(const scimatrix_slice& M, const interval& r) { 06950 return sp_ms_mult<scimatrix,interval,scimatrix>(M.A,r); 06951 } 06952 06954 inline scimatrix operator*(const scimatrix_slice& M, const cinterval& r) { 06955 return sp_ms_mult<scimatrix,cinterval,scimatrix>(M.A,r); 06956 } 06957 06959 inline scimatrix operator*(const srmatrix_slice& M, const cinterval& r) { 06960 return sp_ms_mult<srmatrix,cinterval,scimatrix>(M.A,r); 06961 } 06962 06964 inline scimatrix operator*(const simatrix_slice& M, const cinterval& r) { 06965 return sp_ms_mult<simatrix,cinterval,scimatrix>(M.A,r); 06966 } 06967 06969 inline scimatrix operator*(const scmatrix_slice& M, const cinterval& r) { 06970 return sp_ms_mult<scmatrix,cinterval,scimatrix>(M.A,r); 06971 } 06972 06974 inline scimatrix operator*(const simatrix_slice& M, const complex& r) { 06975 return sp_ms_mult<simatrix,complex,scimatrix>(M.A,r); 06976 } 06977 06979 inline scimatrix operator*(const scmatrix_slice& M, const interval& r) { 06980 return sp_ms_mult<scmatrix,interval,scimatrix>(M.A,r); 06981 } 06982 06984 inline scimatrix operator*(const real& r, const scimatrix_slice& M) { 06985 return sp_sm_mult<real,scimatrix,scimatrix>(r,M.A); 06986 } 06987 06989 inline scimatrix operator*(const complex& r, const scimatrix_slice& M) { 06990 return sp_sm_mult<complex,scimatrix,scimatrix>(r,M.A); 06991 } 06992 06994 inline scimatrix operator*(const interval& r, const scimatrix_slice& M) { 06995 return sp_sm_mult<interval,scimatrix,scimatrix>(r,M.A); 06996 } 06997 06999 inline scimatrix operator*(const cinterval& r, const scimatrix_slice& M) { 07000 return sp_sm_mult<cinterval,scimatrix,scimatrix>(r,M.A); 07001 } 07002 07004 inline scimatrix operator*(const cinterval& r, const srmatrix_slice& M) { 07005 return sp_sm_mult<cinterval,srmatrix,scimatrix>(r,M.A); 07006 } 07007 07009 inline scimatrix operator*(const cinterval& r, const simatrix_slice& M) { 07010 return sp_sm_mult<cinterval,simatrix,scimatrix>(r,M.A); 07011 } 07012 07014 inline scimatrix operator*(const cinterval& r, const scmatrix_slice& M) { 07015 return sp_sm_mult<cinterval,scmatrix,scimatrix>(r,M.A); 07016 } 07017 07019 inline scimatrix operator*(const complex& r, const simatrix_slice& M) { 07020 return sp_sm_mult<complex,simatrix,scimatrix>(r,M.A); 07021 } 07022 07024 inline scimatrix operator*(const interval& r, const scmatrix_slice& M) { 07025 return sp_sm_mult<interval,scmatrix,scimatrix>(r,M.A); 07026 } 07027 07029 inline scimatrix operator+(const scimatrix_slice& M1, const srmatrix_slice& M2) { 07030 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A); 07031 } 07032 07034 inline scimatrix operator+(const scimatrix_slice& M1, const scmatrix_slice& M2) { 07035 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07036 } 07037 07039 inline scimatrix operator+(const scimatrix_slice& M1, const simatrix_slice& M2) { 07040 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07041 } 07042 07044 inline scimatrix operator+(const scimatrix_slice& M1, const scimatrix_slice& M2) { 07045 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07046 } 07047 07049 inline scimatrix operator+(const srmatrix_slice& M1, const scimatrix_slice& M2) { 07050 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07051 } 07052 07054 inline scimatrix operator+(const scmatrix_slice& M1, const scimatrix_slice& M2) { 07055 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07056 } 07057 07059 inline scimatrix operator+(const simatrix_slice& M1, const scimatrix_slice& M2) { 07060 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07061 } 07062 07064 inline scimatrix operator+(const scmatrix_slice& M1, const simatrix_slice& M2) { 07065 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07066 } 07067 07069 inline scimatrix operator+(const simatrix_slice& M1, const scmatrix_slice& M2) { 07070 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07071 } 07072 07074 inline scimatrix operator+(const scimatrix_slice& M1, const srmatrix& M2) { 07075 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2); 07076 } 07077 07079 inline scimatrix operator+(const scimatrix_slice& M1, const scmatrix& M2) { 07080 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07081 } 07082 07084 inline scimatrix operator+(const scimatrix_slice& M1, const simatrix& M2) { 07085 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07086 } 07087 07089 inline scimatrix operator+(const scimatrix_slice& M1, const scimatrix& M2) { 07090 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07091 } 07092 07094 inline scimatrix operator+(const srmatrix_slice& M1, const scimatrix& M2) { 07095 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07096 } 07097 07099 inline scimatrix operator+(const simatrix_slice& M1, const scimatrix& M2) { 07100 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07101 } 07102 07104 inline scimatrix operator+(const scmatrix_slice& M1, const scimatrix& M2) { 07105 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07106 } 07107 07109 inline scimatrix operator+(const simatrix_slice& M1, const scmatrix& M2) { 07110 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07111 } 07112 07114 inline scimatrix operator+(const scmatrix_slice& M1, const simatrix& M2) { 07115 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07116 } 07117 07119 inline scimatrix operator+(const scimatrix& M1, const srmatrix_slice& M2) { 07120 return spsp_mm_add<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A); 07121 } 07122 07124 inline scimatrix operator+(const scimatrix& M1, const scmatrix_slice& M2) { 07125 return spsp_mm_add<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07126 } 07127 07129 inline scimatrix operator+(const scimatrix& M1, const simatrix_slice& M2) { 07130 return spsp_mm_add<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07131 } 07132 07134 inline scimatrix operator+(const scimatrix& M1, const scimatrix_slice& M2) { 07135 return spsp_mm_add<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07136 } 07137 07139 inline scimatrix operator+(const srmatrix& M1, const scimatrix_slice& M2) { 07140 return spsp_mm_add<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07141 } 07142 07144 inline scimatrix operator+(const simatrix& M1, const scimatrix_slice& M2) { 07145 return spsp_mm_add<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07146 } 07147 07149 inline scimatrix operator+(const scmatrix& M1, const scimatrix_slice& M2) { 07150 return spsp_mm_add<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07151 } 07152 07154 inline scimatrix operator+(const simatrix& M1, const scmatrix_slice& M2) { 07155 return spsp_mm_add<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07156 } 07157 07159 inline scimatrix operator+(const scmatrix& M1, const simatrix_slice& M2) { 07160 return spsp_mm_add<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07161 } 07162 07164 inline cimatrix operator+(const scimatrix_slice& M1, const rmatrix& M2) { 07165 return spf_mm_add<scimatrix,rmatrix,cimatrix>(M1.A,M2); 07166 } 07167 07169 inline cimatrix operator+(const scimatrix_slice& M1, const imatrix& M2) { 07170 return spf_mm_add<scimatrix,imatrix,cimatrix>(M1.A,M2); 07171 } 07172 07174 inline cimatrix operator+(const scimatrix_slice& M1, const cmatrix& M2) { 07175 return spf_mm_add<scimatrix,cmatrix,cimatrix>(M1.A,M2); 07176 } 07177 07179 inline cimatrix operator+(const scimatrix_slice& M1, const cimatrix& M2) { 07180 return spf_mm_add<scimatrix,cimatrix,cimatrix>(M1.A,M2); 07181 } 07182 07184 inline cimatrix operator+(const srmatrix_slice& M1, const cimatrix& M2) { 07185 return spf_mm_add<srmatrix,cimatrix,cimatrix>(M1.A,M2); 07186 } 07187 07189 inline cimatrix operator+(const simatrix_slice& M1, const cimatrix& M2) { 07190 return spf_mm_add<simatrix,cimatrix,cimatrix>(M1.A,M2); 07191 } 07192 07194 inline cimatrix operator+(const scmatrix_slice& M1, const cimatrix& M2) { 07195 return spf_mm_add<scmatrix,cimatrix,cimatrix>(M1.A,M2); 07196 } 07197 07199 inline cimatrix operator+(const simatrix_slice& M1, const cmatrix& M2) { 07200 return spf_mm_add<simatrix,cmatrix,cimatrix>(M1.A,M2); 07201 } 07202 07204 inline cimatrix operator+(const scmatrix_slice& M1, const imatrix& M2) { 07205 return spf_mm_add<scmatrix,imatrix,cimatrix>(M1.A,M2); 07206 } 07207 07209 inline cimatrix operator+(const cimatrix& M1, const srmatrix_slice& M2) { 07210 return fsp_mm_add<cimatrix,srmatrix,cimatrix>(M1,M2.A); 07211 } 07212 07214 inline cimatrix operator+(const cimatrix& M1, const simatrix_slice& M2) { 07215 return fsp_mm_add<cimatrix,simatrix,cimatrix>(M1,M2.A); 07216 } 07217 07219 inline cimatrix operator+(const cimatrix& M1, const scmatrix_slice& M2) { 07220 return fsp_mm_add<cimatrix,scmatrix,cimatrix>(M1,M2.A); 07221 } 07222 07224 inline cimatrix operator+(const cimatrix& M1, const scimatrix_slice& M2) { 07225 return fsp_mm_add<cimatrix,scimatrix,cimatrix>(M1,M2.A); 07226 } 07227 07229 inline cimatrix operator+(const rmatrix& M1, const scimatrix_slice& M2) { 07230 return fsp_mm_add<rmatrix,scimatrix,cimatrix>(M1,M2.A); 07231 } 07232 07234 inline cimatrix operator+(const imatrix& M1, const scimatrix_slice& M2) { 07235 return fsp_mm_add<imatrix,scimatrix,cimatrix>(M1,M2.A); 07236 } 07237 07239 inline cimatrix operator+(const cmatrix& M1, const scimatrix_slice& M2) { 07240 return fsp_mm_add<cmatrix,scimatrix,cimatrix>(M1,M2.A); 07241 } 07242 07244 inline cimatrix operator+(const imatrix& M1, const scmatrix_slice& M2) { 07245 return fsp_mm_add<imatrix,scmatrix,cimatrix>(M1,M2.A); 07246 } 07247 07249 inline cimatrix operator+(const cmatrix& M1, const simatrix_slice& M2) { 07250 return fsp_mm_add<cmatrix,simatrix,cimatrix>(M1,M2.A); 07251 } 07252 07254 inline cimatrix operator+(const scimatrix_slice& M1, const rmatrix_slice& M2) { 07255 return spf_mm_add<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2); 07256 } 07257 07259 inline cimatrix operator+(const scimatrix_slice& M1, const cmatrix_slice& M2) { 07260 return spf_mm_add<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07261 } 07262 07264 inline cimatrix operator+(const scimatrix_slice& M1, const imatrix_slice& M2) { 07265 return spf_mm_add<scimatrix,imatrix_slice,cimatrix>(M1.A,M2); 07266 } 07267 07269 inline cimatrix operator+(const scimatrix_slice& M1, const cimatrix_slice& M2) { 07270 return spf_mm_add<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07271 } 07272 07274 inline cimatrix operator+(const srmatrix_slice& M1, const cimatrix_slice& M2) { 07275 return spf_mm_add<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07276 } 07277 07279 inline cimatrix operator+(const simatrix_slice& M1, const cimatrix_slice& M2) { 07280 return spf_mm_add<simatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07281 } 07282 07284 inline cimatrix operator+(const scmatrix_slice& M1, const cimatrix_slice& M2) { 07285 return spf_mm_add<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07286 } 07287 07289 inline cimatrix operator+(const simatrix_slice& M1, const cmatrix_slice& M2) { 07290 return spf_mm_add<simatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07291 } 07292 07294 inline cimatrix operator+(const scmatrix_slice& M1, const imatrix_slice& M2) { 07295 return spf_mm_add<scmatrix,imatrix_slice,cimatrix>(M1.A,M2); 07296 } 07297 07299 inline cimatrix operator+(const cimatrix_slice& M1, const srmatrix_slice& M2) { 07300 return fsp_mm_add<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A); 07301 } 07302 07304 inline cimatrix operator+(const cimatrix_slice& M1, const simatrix_slice& M2) { 07305 return fsp_mm_add<cimatrix_slice,simatrix,cimatrix>(M1,M2.A); 07306 } 07307 07309 inline cimatrix operator+(const cimatrix_slice& M1, const scmatrix_slice& M2) { 07310 return fsp_mm_add<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07311 } 07312 07314 inline cimatrix operator+(const cimatrix_slice& M1, const scimatrix_slice& M2) { 07315 return fsp_mm_add<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07316 } 07317 07319 inline cimatrix operator+(const rmatrix_slice& M1, const scimatrix_slice& M2) { 07320 return fsp_mm_add<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07321 } 07322 07324 inline cimatrix operator+(const imatrix_slice& M1, const scimatrix_slice& M2) { 07325 return fsp_mm_add<imatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07326 } 07327 07329 inline cimatrix operator+(const cmatrix_slice& M1, const scimatrix_slice& M2) { 07330 return fsp_mm_add<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07331 } 07332 07334 inline cimatrix operator+(const imatrix_slice& M1, const scmatrix_slice& M2) { 07335 return fsp_mm_add<imatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07336 } 07337 07339 inline cimatrix operator+(const cmatrix_slice& M1, const simatrix_slice& M2) { 07340 return fsp_mm_add<cmatrix_slice,simatrix,cimatrix>(M1,M2.A); 07341 } 07342 07344 inline scimatrix operator-(const scimatrix_slice& M1, const srmatrix_slice& M2) { 07345 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A); 07346 } 07347 07349 inline scimatrix operator-(const scimatrix_slice& M1, const scmatrix_slice& M2) { 07350 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07351 } 07352 07354 inline scimatrix operator-(const scimatrix_slice& M1, const simatrix_slice& M2) { 07355 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07356 } 07357 07359 inline scimatrix operator-(const scimatrix_slice& M1, const scimatrix_slice& M2) { 07360 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07361 } 07362 07364 inline scimatrix operator-(const srmatrix_slice& M1, const scimatrix_slice& M2) { 07365 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07366 } 07367 07369 inline scimatrix operator-(const scmatrix_slice& M1, const scimatrix_slice& M2) { 07370 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07371 } 07372 07374 inline scimatrix operator-(const simatrix_slice& M1, const scimatrix_slice& M2) { 07375 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07376 } 07377 07379 inline scimatrix operator-(const scmatrix_slice& M1, const simatrix_slice& M2) { 07380 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07381 } 07382 07384 inline scimatrix operator-(const simatrix_slice& M1, const scmatrix_slice& M2) { 07385 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07386 } 07387 07389 inline scimatrix operator-(const scimatrix_slice& M1, const srmatrix& M2) { 07390 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2); 07391 } 07392 07394 inline scimatrix operator-(const scimatrix_slice& M1, const scmatrix& M2) { 07395 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07396 } 07397 07399 inline scimatrix operator-(const scimatrix_slice& M1, const simatrix& M2) { 07400 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07401 } 07402 07404 inline scimatrix operator-(const scimatrix_slice& M1, const scimatrix& M2) { 07405 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07406 } 07407 07409 inline scimatrix operator-(const srmatrix_slice& M1, const scimatrix& M2) { 07410 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07411 } 07412 07414 inline scimatrix operator-(const simatrix_slice& M1, const scimatrix& M2) { 07415 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07416 } 07417 07419 inline scimatrix operator-(const scmatrix_slice& M1, const scimatrix& M2) { 07420 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07421 } 07422 07424 inline scimatrix operator-(const simatrix_slice& M1, const scmatrix& M2) { 07425 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07426 } 07427 07429 inline scimatrix operator-(const scmatrix_slice& M1, const simatrix& M2) { 07430 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07431 } 07432 07434 inline scimatrix operator-(const scimatrix& M1, const srmatrix_slice& M2) { 07435 return spsp_mm_sub<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A); 07436 } 07437 07439 inline scimatrix operator-(const scimatrix& M1, const scmatrix_slice& M2) { 07440 return spsp_mm_sub<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07441 } 07442 07444 inline scimatrix operator-(const scimatrix& M1, const simatrix_slice& M2) { 07445 return spsp_mm_sub<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07446 } 07447 07449 inline scimatrix operator-(const scimatrix& M1, const scimatrix_slice& M2) { 07450 return spsp_mm_sub<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07451 } 07452 07454 inline scimatrix operator-(const srmatrix& M1, const scimatrix_slice& M2) { 07455 return spsp_mm_sub<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07456 } 07457 07459 inline scimatrix operator-(const simatrix& M1, const scimatrix_slice& M2) { 07460 return spsp_mm_sub<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07461 } 07462 07464 inline scimatrix operator-(const scmatrix& M1, const scimatrix_slice& M2) { 07465 return spsp_mm_sub<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07466 } 07467 07469 inline scimatrix operator-(const simatrix& M1, const scmatrix_slice& M2) { 07470 return spsp_mm_sub<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07471 } 07472 07474 inline scimatrix operator-(const scmatrix& M1, const simatrix_slice& M2) { 07475 return spsp_mm_sub<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07476 } 07477 07479 inline cimatrix operator-(const scimatrix_slice& M1, const rmatrix& M2) { 07480 return spf_mm_sub<scimatrix,rmatrix,cimatrix>(M1.A,M2); 07481 } 07482 07484 inline cimatrix operator-(const scimatrix_slice& M1, const imatrix& M2) { 07485 return spf_mm_sub<scimatrix,imatrix,cimatrix>(M1.A,M2); 07486 } 07487 07489 inline cimatrix operator-(const scimatrix_slice& M1, const cmatrix& M2) { 07490 return spf_mm_sub<scimatrix,cmatrix,cimatrix>(M1.A,M2); 07491 } 07492 07494 inline cimatrix operator-(const scimatrix_slice& M1, const cimatrix& M2) { 07495 return spf_mm_sub<scimatrix,cimatrix,cimatrix>(M1.A,M2); 07496 } 07497 07499 inline cimatrix operator-(const srmatrix_slice& M1, const cimatrix& M2) { 07500 return spf_mm_sub<srmatrix,cimatrix,cimatrix>(M1.A,M2); 07501 } 07502 07504 inline cimatrix operator-(const simatrix_slice& M1, const cimatrix& M2) { 07505 return spf_mm_sub<simatrix,cimatrix,cimatrix>(M1.A,M2); 07506 } 07507 07509 inline cimatrix operator-(const scmatrix_slice& M1, const cimatrix& M2) { 07510 return spf_mm_sub<scmatrix,cimatrix,cimatrix>(M1.A,M2); 07511 } 07512 07514 inline cimatrix operator-(const simatrix_slice& M1, const cmatrix& M2) { 07515 return spf_mm_sub<simatrix,cmatrix,cimatrix>(M1.A,M2); 07516 } 07517 07519 inline cimatrix operator-(const scmatrix_slice& M1, const imatrix& M2) { 07520 return spf_mm_sub<scmatrix,imatrix,cimatrix>(M1.A,M2); 07521 } 07522 07524 inline cimatrix operator-(const cimatrix& M1, const srmatrix_slice& M2) { 07525 return fsp_mm_sub<cimatrix,srmatrix,cimatrix>(M1,M2.A); 07526 } 07527 07529 inline cimatrix operator-(const cimatrix& M1, const simatrix_slice& M2) { 07530 return fsp_mm_sub<cimatrix,simatrix,cimatrix>(M1,M2.A); 07531 } 07532 07534 inline cimatrix operator-(const cimatrix& M1, const scmatrix_slice& M2) { 07535 return fsp_mm_sub<cimatrix,scmatrix,cimatrix>(M1,M2.A); 07536 } 07537 07539 inline cimatrix operator-(const cimatrix& M1, const scimatrix_slice& M2) { 07540 return fsp_mm_sub<cimatrix,scimatrix,cimatrix>(M1,M2.A); 07541 } 07542 07544 inline cimatrix operator-(const rmatrix& M1, const scimatrix_slice& M2) { 07545 return fsp_mm_sub<rmatrix,scimatrix,cimatrix>(M1,M2.A); 07546 } 07547 07549 inline cimatrix operator-(const imatrix& M1, const scimatrix_slice& M2) { 07550 return fsp_mm_sub<imatrix,scimatrix,cimatrix>(M1,M2.A); 07551 } 07552 07554 inline cimatrix operator-(const cmatrix& M1, const scimatrix_slice& M2) { 07555 return fsp_mm_sub<cmatrix,scimatrix,cimatrix>(M1,M2.A); 07556 } 07557 07559 inline cimatrix operator-(const imatrix& M1, const scmatrix_slice& M2) { 07560 return fsp_mm_sub<imatrix,scmatrix,cimatrix>(M1,M2.A); 07561 } 07562 07564 inline cimatrix operator-(const cmatrix& M1, const simatrix_slice& M2) { 07565 return fsp_mm_sub<cmatrix,simatrix,cimatrix>(M1,M2.A); 07566 } 07567 07569 inline cimatrix operator-(const scimatrix_slice& M1, const rmatrix_slice& M2) { 07570 return spf_mm_sub<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2); 07571 } 07572 07574 inline cimatrix operator-(const scimatrix_slice& M1, const cmatrix_slice& M2) { 07575 return spf_mm_sub<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07576 } 07577 07579 inline cimatrix operator-(const scimatrix_slice& M1, const imatrix_slice& M2) { 07580 return spf_mm_sub<scimatrix,imatrix_slice,cimatrix>(M1.A,M2); 07581 } 07582 07584 inline cimatrix operator-(const scimatrix_slice& M1, const cimatrix_slice& M2) { 07585 return spf_mm_sub<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07586 } 07587 07589 inline cimatrix operator-(const srmatrix_slice& M1, const cimatrix_slice& M2) { 07590 return spf_mm_sub<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07591 } 07592 07594 inline cimatrix operator-(const simatrix_slice& M1, const cimatrix_slice& M2) { 07595 return spf_mm_sub<simatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07596 } 07597 07599 inline cimatrix operator-(const scmatrix_slice& M1, const cimatrix_slice& M2) { 07600 return spf_mm_sub<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07601 } 07602 07604 inline cimatrix operator-(const simatrix_slice& M1, const cmatrix_slice& M2) { 07605 return spf_mm_sub<simatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07606 } 07607 07609 inline cimatrix operator-(const scmatrix_slice& M1, const imatrix_slice& M2) { 07610 return spf_mm_sub<scmatrix,imatrix_slice,cimatrix>(M1.A,M2); 07611 } 07612 07614 inline cimatrix operator-(const cimatrix_slice& M1, const srmatrix_slice& M2) { 07615 return fsp_mm_sub<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A); 07616 } 07617 07619 inline cimatrix operator-(const cimatrix_slice& M1, const simatrix_slice& M2) { 07620 return fsp_mm_sub<cimatrix_slice,simatrix,cimatrix>(M1,M2.A); 07621 } 07622 07624 inline cimatrix operator-(const cimatrix_slice& M1, const scmatrix_slice& M2) { 07625 return fsp_mm_sub<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07626 } 07627 07629 inline cimatrix operator-(const cimatrix_slice& M1, const scimatrix_slice& M2) { 07630 return fsp_mm_sub<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07631 } 07632 07634 inline cimatrix operator-(const rmatrix_slice& M1, const scimatrix_slice& M2) { 07635 return fsp_mm_sub<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07636 } 07637 07639 inline cimatrix operator-(const imatrix_slice& M1, const scimatrix_slice& M2) { 07640 return fsp_mm_sub<imatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07641 } 07642 07644 inline cimatrix operator-(const cmatrix_slice& M1, const scimatrix_slice& M2) { 07645 return fsp_mm_sub<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07646 } 07647 07649 inline cimatrix operator-(const imatrix_slice& M1, const scmatrix_slice& M2) { 07650 return fsp_mm_sub<imatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07651 } 07652 07654 inline cimatrix operator-(const cmatrix_slice& M1, const simatrix_slice& M2) { 07655 return fsp_mm_sub<cmatrix_slice,simatrix,cimatrix>(M1,M2.A); 07656 } 07657 07659 inline scimatrix operator|(const scimatrix_slice& M1, const srmatrix_slice& M2) { 07660 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A); 07661 } 07662 07664 inline scimatrix operator|(const scimatrix_slice& M1, const scmatrix_slice& M2) { 07665 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07666 } 07667 07669 inline scimatrix operator|(const scimatrix_slice& M1, const simatrix_slice& M2) { 07670 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07671 } 07672 07674 inline scimatrix operator|(const scimatrix_slice& M1, const scimatrix_slice& M2) { 07675 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07676 } 07677 07679 inline scimatrix operator|(const srmatrix_slice& M1, const scimatrix_slice& M2) { 07680 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07681 } 07682 07684 inline scimatrix operator|(const scmatrix_slice& M1, const scimatrix_slice& M2) { 07685 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07686 } 07687 07689 inline scimatrix operator|(const simatrix_slice& M1, const scimatrix_slice& M2) { 07690 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 07691 } 07692 07694 inline scimatrix operator|(const scmatrix_slice& M1, const simatrix_slice& M2) { 07695 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 07696 } 07697 07699 inline scimatrix operator|(const simatrix_slice& M1, const scmatrix_slice& M2) { 07700 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07701 } 07702 07704 inline scimatrix operator|(const scimatrix_slice& M1, const srmatrix& M2) { 07705 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1.A,M2); 07706 } 07707 07709 inline scimatrix operator|(const scimatrix_slice& M1, const scmatrix& M2) { 07710 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07711 } 07712 07714 inline scimatrix operator|(const scimatrix_slice& M1, const simatrix& M2) { 07715 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07716 } 07717 07719 inline scimatrix operator|(const scimatrix_slice& M1, const scimatrix& M2) { 07720 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07721 } 07722 07724 inline scimatrix operator|(const srmatrix_slice& M1, const scimatrix& M2) { 07725 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07726 } 07727 07729 inline scimatrix operator|(const simatrix_slice& M1, const scimatrix& M2) { 07730 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07731 } 07732 07734 inline scimatrix operator|(const scmatrix_slice& M1, const scimatrix& M2) { 07735 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 07736 } 07737 07739 inline scimatrix operator|(const simatrix_slice& M1, const scmatrix& M2) { 07740 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07741 } 07742 07744 inline scimatrix operator|(const scmatrix_slice& M1, const simatrix& M2) { 07745 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 07746 } 07747 07749 inline scimatrix operator|(const scimatrix& M1, const srmatrix_slice& M2) { 07750 return spsp_mm_hull<scimatrix,srmatrix,scimatrix,cinterval>(M1,M2.A); 07751 } 07752 07754 inline scimatrix operator|(const scimatrix& M1, const scmatrix_slice& M2) { 07755 return spsp_mm_hull<scimatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07756 } 07757 07759 inline scimatrix operator|(const scimatrix& M1, const simatrix_slice& M2) { 07760 return spsp_mm_hull<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07761 } 07762 07764 inline scimatrix operator|(const scimatrix& M1, const scimatrix_slice& M2) { 07765 return spsp_mm_hull<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07766 } 07767 07769 inline scimatrix operator|(const srmatrix& M1, const scimatrix_slice& M2) { 07770 return spsp_mm_hull<srmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07771 } 07772 07774 inline scimatrix operator|(const simatrix& M1, const scimatrix_slice& M2) { 07775 return spsp_mm_hull<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07776 } 07777 07779 inline scimatrix operator|(const scmatrix& M1, const scimatrix_slice& M2) { 07780 return spsp_mm_hull<scmatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 07781 } 07782 07784 inline scimatrix operator|(const simatrix& M1, const scmatrix_slice& M2) { 07785 return spsp_mm_hull<simatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 07786 } 07787 07789 inline scimatrix operator|(const scmatrix& M1, const simatrix_slice& M2) { 07790 return spsp_mm_hull<scmatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 07791 } 07792 07794 inline cimatrix operator|(const scimatrix_slice& M1, const rmatrix& M2) { 07795 return spf_mm_hull<scimatrix,rmatrix,cimatrix>(M1.A,M2); 07796 } 07797 07799 inline cimatrix operator|(const scimatrix_slice& M1, const imatrix& M2) { 07800 return spf_mm_hull<scimatrix,imatrix,cimatrix>(M1.A,M2); 07801 } 07802 07804 inline cimatrix operator|(const scimatrix_slice& M1, const cmatrix& M2) { 07805 return spf_mm_hull<scimatrix,cmatrix,cimatrix>(M1.A,M2); 07806 } 07807 07809 inline cimatrix operator|(const scimatrix_slice& M1, const cimatrix& M2) { 07810 return spf_mm_hull<scimatrix,cimatrix,cimatrix>(M1.A,M2); 07811 } 07812 07814 inline cimatrix operator|(const srmatrix_slice& M1, const cimatrix& M2) { 07815 return spf_mm_hull<srmatrix,cimatrix,cimatrix>(M1.A,M2); 07816 } 07817 07819 inline cimatrix operator|(const simatrix_slice& M1, const cimatrix& M2) { 07820 return spf_mm_hull<simatrix,cimatrix,cimatrix>(M1.A,M2); 07821 } 07822 07824 inline cimatrix operator|(const scmatrix_slice& M1, const cimatrix& M2) { 07825 return spf_mm_hull<scmatrix,cimatrix,cimatrix>(M1.A,M2); 07826 } 07827 07829 inline cimatrix operator|(const simatrix_slice& M1, const cmatrix& M2) { 07830 return spf_mm_hull<simatrix,cmatrix,cimatrix>(M1.A,M2); 07831 } 07832 07834 inline cimatrix operator|(const scmatrix_slice& M1, const imatrix& M2) { 07835 return spf_mm_hull<scmatrix,imatrix,cimatrix>(M1.A,M2); 07836 } 07837 07839 inline cimatrix operator|(const cimatrix& M1, const srmatrix_slice& M2) { 07840 return fsp_mm_hull<cimatrix,srmatrix,cimatrix>(M1,M2.A); 07841 } 07842 07844 inline cimatrix operator|(const cimatrix& M1, const simatrix_slice& M2) { 07845 return fsp_mm_hull<cimatrix,simatrix,cimatrix>(M1,M2.A); 07846 } 07847 07849 inline cimatrix operator|(const cimatrix& M1, const scmatrix_slice& M2) { 07850 return fsp_mm_hull<cimatrix,scmatrix,cimatrix>(M1,M2.A); 07851 } 07852 07854 inline cimatrix operator|(const cimatrix& M1, const scimatrix_slice& M2) { 07855 return fsp_mm_hull<cimatrix,scimatrix,cimatrix>(M1,M2.A); 07856 } 07857 07859 inline cimatrix operator|(const rmatrix& M1, const scimatrix_slice& M2) { 07860 return fsp_mm_hull<rmatrix,scimatrix,cimatrix>(M1,M2.A); 07861 } 07862 07864 inline cimatrix operator|(const imatrix& M1, const scimatrix_slice& M2) { 07865 return fsp_mm_hull<imatrix,scimatrix,cimatrix>(M1,M2.A); 07866 } 07867 07869 inline cimatrix operator|(const cmatrix& M1, const scimatrix_slice& M2) { 07870 return fsp_mm_hull<cmatrix,scimatrix,cimatrix>(M1,M2.A); 07871 } 07872 07874 inline cimatrix operator|(const imatrix& M1, const scmatrix_slice& M2) { 07875 return fsp_mm_hull<imatrix,scmatrix,cimatrix>(M1,M2.A); 07876 } 07877 07879 inline cimatrix operator|(const cmatrix& M1, const simatrix_slice& M2) { 07880 return fsp_mm_hull<cmatrix,simatrix,cimatrix>(M1,M2.A); 07881 } 07882 07884 inline cimatrix operator|(const scimatrix_slice& M1, const rmatrix_slice& M2) { 07885 return spf_mm_hull<scimatrix,rmatrix_slice,cimatrix>(M1.A,M2); 07886 } 07887 07889 inline cimatrix operator|(const scimatrix_slice& M1, const cmatrix_slice& M2) { 07890 return spf_mm_hull<scimatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07891 } 07892 07894 inline cimatrix operator|(const scimatrix_slice& M1, const imatrix_slice& M2) { 07895 return spf_mm_hull<scimatrix,imatrix_slice,cimatrix>(M1.A,M2); 07896 } 07897 07899 inline cimatrix operator|(const scimatrix_slice& M1, const cimatrix_slice& M2) { 07900 return spf_mm_hull<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07901 } 07902 07904 inline cimatrix operator|(const srmatrix_slice& M1, const cimatrix_slice& M2) { 07905 return spf_mm_hull<srmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07906 } 07907 07909 inline cimatrix operator|(const simatrix_slice& M1, const cimatrix_slice& M2) { 07910 return spf_mm_hull<simatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07911 } 07912 07914 inline cimatrix operator|(const scmatrix_slice& M1, const cimatrix_slice& M2) { 07915 return spf_mm_hull<scmatrix,cimatrix_slice,cimatrix>(M1.A,M2); 07916 } 07917 07919 inline cimatrix operator|(const simatrix_slice& M1, const cmatrix_slice& M2) { 07920 return spf_mm_hull<simatrix,cmatrix_slice,cimatrix>(M1.A,M2); 07921 } 07922 07924 inline cimatrix operator|(const scmatrix_slice& M1, const imatrix_slice& M2) { 07925 return spf_mm_hull<scmatrix,imatrix_slice,cimatrix>(M1.A,M2); 07926 } 07927 07929 inline cimatrix operator|(const cimatrix_slice& M1, const srmatrix_slice& M2) { 07930 return fsp_mm_hull<cimatrix_slice,srmatrix,cimatrix>(M1,M2.A); 07931 } 07932 07934 inline cimatrix operator|(const cimatrix_slice& M1, const simatrix_slice& M2) { 07935 return fsp_mm_hull<cimatrix_slice,simatrix,cimatrix>(M1,M2.A); 07936 } 07937 07939 inline cimatrix operator|(const cimatrix_slice& M1, const scmatrix_slice& M2) { 07940 return fsp_mm_hull<cimatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07941 } 07942 07944 inline cimatrix operator|(const cimatrix_slice& M1, const scimatrix_slice& M2) { 07945 return fsp_mm_hull<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07946 } 07947 07949 inline cimatrix operator|(const rmatrix_slice& M1, const scimatrix_slice& M2) { 07950 return fsp_mm_hull<rmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07951 } 07952 07954 inline cimatrix operator|(const imatrix_slice& M1, const scimatrix_slice& M2) { 07955 return fsp_mm_hull<imatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07956 } 07957 07959 inline cimatrix operator|(const cmatrix_slice& M1, const scimatrix_slice& M2) { 07960 return fsp_mm_hull<cmatrix_slice,scimatrix,cimatrix>(M1,M2.A); 07961 } 07962 07964 inline cimatrix operator|(const imatrix_slice& M1, const scmatrix_slice& M2) { 07965 return fsp_mm_hull<imatrix_slice,scmatrix,cimatrix>(M1,M2.A); 07966 } 07967 07969 inline cimatrix operator|(const cmatrix_slice& M1, const simatrix_slice& M2) { 07970 return fsp_mm_hull<cmatrix_slice,simatrix,cimatrix>(M1,M2.A); 07971 } 07972 07974 inline scimatrix operator|(const scmatrix_slice& M1, const srmatrix_slice& M2) { 07975 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1.A,M2.A); 07976 } 07977 07979 inline scimatrix operator|(const srmatrix_slice& M1, const scmatrix_slice& M2) { 07980 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07981 } 07982 07984 inline scimatrix operator|(const scmatrix_slice& M1, const scmatrix_slice& M2) { 07985 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2.A); 07986 } 07987 07989 inline scimatrix operator|(const scmatrix_slice& M1, const srmatrix& M2) { 07990 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1.A,M2); 07991 } 07992 07994 inline scimatrix operator|(const srmatrix_slice& M1, const scmatrix& M2) { 07995 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 07996 } 07997 07999 inline scimatrix operator|(const scmatrix_slice& M1, const scmatrix& M2) { 08000 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1.A,M2); 08001 } 08002 08004 inline scimatrix operator|(const scmatrix& M1, const srmatrix_slice& M2) { 08005 return spsp_mm_hull<scmatrix,srmatrix,scimatrix,cinterval>(M1,M2.A); 08006 } 08007 08009 inline scimatrix operator|(const srmatrix& M1, const scmatrix_slice& M2) { 08010 return spsp_mm_hull<srmatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 08011 } 08012 08014 inline scimatrix operator|(const scmatrix& M1, const scmatrix_slice& M2) { 08015 return spsp_mm_hull<scmatrix,scmatrix,scimatrix,cinterval>(M1,M2.A); 08016 } 08017 08019 inline cimatrix operator|(const scmatrix_slice& M1, const rmatrix& M2) { 08020 return spf_mm_hull<scmatrix,rmatrix,cimatrix>(M1.A,M2); 08021 } 08022 08024 inline cimatrix operator|(const srmatrix_slice& M1, const cmatrix& M2) { 08025 return spf_mm_hull<srmatrix,cmatrix,cimatrix>(M1.A,M2); 08026 } 08027 08029 inline cimatrix operator|(const scmatrix_slice& M1, const cmatrix& M2) { 08030 return spf_mm_hull<scmatrix,cmatrix,cimatrix>(M1.A,M2); 08031 } 08032 08034 inline cimatrix operator|(const cmatrix& M1, const srmatrix_slice& M2) { 08035 return fsp_mm_hull<cmatrix,srmatrix,cimatrix>(M1,M2.A); 08036 } 08037 08039 inline cimatrix operator|(const rmatrix& M1, const scmatrix_slice& M2) { 08040 return fsp_mm_hull<rmatrix,scmatrix,cimatrix>(M1,M2.A); 08041 } 08042 08044 inline cimatrix operator|(const cmatrix& M1, const scmatrix_slice& M2) { 08045 return fsp_mm_hull<cmatrix,scmatrix,cimatrix>(M1,M2.A); 08046 } 08047 08049 inline cimatrix operator|(const scmatrix_slice& M1, const rmatrix_slice& M2) { 08050 return spf_mm_hull<scmatrix,rmatrix_slice,cimatrix>(M1.A,M2); 08051 } 08052 08054 inline cimatrix operator|(const srmatrix_slice& M1, const cmatrix_slice& M2) { 08055 return spf_mm_hull<srmatrix,cmatrix_slice,cimatrix>(M1.A,M2); 08056 } 08057 08059 inline cimatrix operator|(const scmatrix_slice& M1, const cmatrix_slice& M2) { 08060 return spf_mm_hull<scmatrix,cmatrix_slice,cimatrix>(M1.A,M2); 08061 } 08062 08064 inline cimatrix operator|(const cmatrix_slice& M1, const srmatrix_slice& M2) { 08065 return fsp_mm_hull<cmatrix_slice,srmatrix,cimatrix>(M1,M2.A); 08066 } 08067 08069 inline cimatrix operator|(const rmatrix_slice& M1, const scmatrix_slice& M2) { 08070 return fsp_mm_hull<rmatrix_slice,scmatrix,cimatrix>(M1,M2.A); 08071 } 08072 08074 inline cimatrix operator|(const cmatrix_slice& M1, const scmatrix_slice& M2) { 08075 return fsp_mm_hull<cmatrix_slice,scmatrix,cimatrix>(M1,M2.A); 08076 } 08077 08079 inline scimatrix operator&(const scimatrix_slice& M1, const simatrix_slice& M2) { 08080 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2.A); 08081 } 08082 08084 inline scimatrix operator&(const scimatrix_slice& M1, const scimatrix_slice& M2) { 08085 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 08086 } 08087 08089 inline scimatrix operator&(const simatrix_slice& M1, const scimatrix_slice& M2) { 08090 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2.A); 08091 } 08092 08094 inline scimatrix operator&(const scimatrix_slice& M1, const simatrix& M2) { 08095 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1.A,M2); 08096 } 08097 08099 inline scimatrix operator&(const scimatrix_slice& M1, const scimatrix& M2) { 08100 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 08101 } 08102 08104 inline scimatrix operator&(const simatrix_slice& M1, const scimatrix& M2) { 08105 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1.A,M2); 08106 } 08107 08109 inline scimatrix operator&(const scimatrix& M1, const simatrix_slice& M2) { 08110 return spsp_mm_intersect<scimatrix,simatrix,scimatrix,cinterval>(M1,M2.A); 08111 } 08112 08114 inline scimatrix operator&(const scimatrix& M1, const scimatrix_slice& M2) { 08115 return spsp_mm_intersect<scimatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 08116 } 08117 08119 inline scimatrix operator&(const simatrix& M1, const scimatrix_slice& M2) { 08120 return spsp_mm_intersect<simatrix,scimatrix,scimatrix,cinterval>(M1,M2.A); 08121 } 08122 08124 inline cimatrix operator&(const scimatrix_slice& M1, const imatrix& M2) { 08125 return spf_mm_intersect<scimatrix,imatrix,cimatrix>(M1.A,M2); 08126 } 08127 08129 inline cimatrix operator&(const scimatrix_slice& M1, const cimatrix& M2) { 08130 return spf_mm_intersect<scimatrix,cimatrix,cimatrix>(M1.A,M2); 08131 } 08132 08134 inline cimatrix operator&(const simatrix_slice& M1, const cimatrix& M2) { 08135 return spf_mm_intersect<simatrix,cimatrix,cimatrix>(M1.A,M2); 08136 } 08137 08139 inline cimatrix operator&(const cimatrix& M1, const simatrix_slice& M2) { 08140 return fsp_mm_intersect<cimatrix,simatrix,cimatrix>(M1,M2.A); 08141 } 08142 08144 inline cimatrix operator&(const cimatrix& M1, const scimatrix_slice& M2) { 08145 return fsp_mm_intersect<cimatrix,scimatrix,cimatrix>(M1,M2.A); 08146 } 08147 08149 inline cimatrix operator&(const imatrix& M1, const scimatrix_slice& M2) { 08150 return fsp_mm_intersect<imatrix,scimatrix,cimatrix>(M1,M2.A); 08151 } 08152 08154 inline cimatrix operator&(const scimatrix_slice& M1, const imatrix_slice& M2) { 08155 return spf_mm_intersect<scimatrix,imatrix_slice,cimatrix>(M1.A,M2); 08156 } 08157 08159 inline cimatrix operator&(const scimatrix_slice& M1, const cimatrix_slice& M2) { 08160 return spf_mm_intersect<scimatrix,cimatrix_slice,cimatrix>(M1.A,M2); 08161 } 08162 08164 inline cimatrix operator&(const simatrix_slice& M1, const cimatrix_slice& M2) { 08165 return spf_mm_intersect<simatrix,cimatrix_slice,cimatrix>(M1.A,M2); 08166 } 08167 08169 inline cimatrix operator&(const cimatrix_slice& M1, const simatrix_slice& M2) { 08170 return fsp_mm_intersect<cimatrix_slice,simatrix,cimatrix>(M1,M2.A); 08171 } 08172 08174 inline cimatrix operator&(const cimatrix_slice& M1, const scimatrix_slice& M2) { 08175 return fsp_mm_intersect<cimatrix_slice,scimatrix,cimatrix>(M1,M2.A); 08176 } 08177 08179 inline cimatrix operator&(const imatrix_slice& M1, const scimatrix_slice& M2) { 08180 return fsp_mm_intersect<imatrix_slice,scimatrix,cimatrix>(M1,M2.A); 08181 } 08182 08183 inline cimatrix& cimatrix::operator=(const srmatrix_slice& M) { 08184 *this = rmatrix(M); 08185 return *this; 08186 } 08187 08188 inline cimatrix_slice& cimatrix_slice::operator=(const srmatrix_slice& M) { 08189 *this = rmatrix(M); 08190 return *this; 08191 } 08192 08193 inline cimatrix& cimatrix::operator=(const simatrix_slice& M) { 08194 *this = imatrix(M); 08195 return *this; 08196 } 08197 08198 inline cimatrix_slice& cimatrix_slice::operator=(const simatrix_slice& M) { 08199 *this = imatrix(M); 08200 return *this; 08201 } 08202 08203 inline cimatrix& cimatrix::operator=(const scmatrix_slice& M) { 08204 *this = cmatrix(M); 08205 return *this; 08206 } 08207 08208 inline cimatrix_slice& cimatrix_slice::operator=(const scmatrix_slice& M) { 08209 *this = cmatrix(M); 08210 return *this; 08211 } 08212 08213 inline cimatrix& cimatrix::operator=(const scimatrix_slice& M) { 08214 *this = cimatrix(M); 08215 return *this; 08216 } 08217 08218 inline cimatrix_slice& cimatrix_slice::operator=(const scimatrix_slice& M) { 08219 *this = cimatrix(M); 08220 return *this; 08221 } 08222 08223 inline cimatrix& cimatrix::operator+=(const srmatrix_slice& M) { 08224 *this += M.A; 08225 return *this; 08226 } 08227 08228 inline cimatrix_slice& cimatrix_slice::operator+=(const srmatrix_slice& M) { 08229 *this += M.A; 08230 return *this; 08231 } 08232 08233 inline cimatrix& cimatrix::operator+=(const scmatrix_slice& M) { 08234 *this += M.A; 08235 return *this; 08236 } 08237 08238 inline cimatrix_slice& cimatrix_slice::operator+=(const scmatrix_slice& M) { 08239 *this += M.A; 08240 return *this; 08241 } 08242 08243 inline cimatrix& cimatrix::operator+=(const simatrix_slice& M) { 08244 *this += M.A; 08245 return *this; 08246 } 08247 08248 inline cimatrix_slice& cimatrix_slice::operator+=(const simatrix_slice& M) { 08249 *this += M.A; 08250 return *this; 08251 } 08252 08253 inline cimatrix& cimatrix::operator+=(const scimatrix_slice& M) { 08254 *this += M.A; 08255 return *this; 08256 } 08257 08258 inline cimatrix_slice& cimatrix_slice::operator+=(const scimatrix_slice& M) { 08259 *this += M.A; 08260 return *this; 08261 } 08262 08263 inline cimatrix& cimatrix::operator-=(const srmatrix_slice& M) { 08264 *this -= M.A; 08265 return *this; 08266 } 08267 08268 inline cimatrix_slice& cimatrix_slice::operator-=(const srmatrix_slice& M) { 08269 *this -= M.A; 08270 return *this; 08271 } 08272 08273 inline cimatrix& cimatrix::operator-=(const scmatrix_slice& M) { 08274 *this -= M.A; 08275 return *this; 08276 } 08277 08278 inline cimatrix_slice& cimatrix_slice::operator-=(const scmatrix_slice& M) { 08279 *this -= M.A; 08280 return *this; 08281 } 08282 08283 inline cimatrix& cimatrix::operator-=(const simatrix_slice& M) { 08284 *this -= M.A; 08285 return *this; 08286 } 08287 08288 inline cimatrix_slice& cimatrix_slice::operator-=(const simatrix_slice& M) { 08289 *this -= M.A; 08290 return *this; 08291 } 08292 08293 inline cimatrix& cimatrix::operator-=(const scimatrix_slice& M) { 08294 *this -= M.A; 08295 return *this; 08296 } 08297 08298 inline cimatrix_slice& cimatrix_slice::operator-=(const scimatrix_slice& M) { 08299 *this -= M.A; 08300 return *this; 08301 } 08302 08303 inline cimatrix& cimatrix::operator*=(const srmatrix_slice& M) { 08304 *this *= M.A; 08305 return *this; 08306 } 08307 08308 inline cimatrix_slice& cimatrix_slice::operator*=(const srmatrix_slice& M) { 08309 *this *= M.A; 08310 return *this; 08311 } 08312 08313 inline cimatrix& cimatrix::operator*=(const scmatrix_slice& M) { 08314 *this *= M.A; 08315 return *this; 08316 } 08317 08318 inline cimatrix_slice& cimatrix_slice::operator*=(const scmatrix_slice& M) { 08319 *this *= M.A; 08320 return *this; 08321 } 08322 08323 inline cimatrix& cimatrix::operator*=(const simatrix_slice& M) { 08324 *this *= M.A; 08325 return *this; 08326 } 08327 08328 inline cimatrix_slice& cimatrix_slice::operator*=(const simatrix_slice& M) { 08329 *this *= M.A; 08330 return *this; 08331 } 08332 08333 inline cimatrix& cimatrix::operator*=(const scimatrix_slice& M) { 08334 *this *= M.A; 08335 return *this; 08336 } 08337 08338 inline cimatrix_slice& cimatrix_slice::operator*=(const scimatrix_slice& M) { 08339 *this *= M.A; 08340 return *this; 08341 } 08342 08343 inline cimatrix& cimatrix::operator|=(const srmatrix_slice& M) { 08344 *this |= M.A; 08345 return *this; 08346 } 08347 08348 inline cimatrix_slice& cimatrix_slice::operator|=(const srmatrix_slice& M) { 08349 *this |= M.A; 08350 return *this; 08351 } 08352 08353 inline cimatrix& cimatrix::operator|=(const scmatrix_slice& M) { 08354 *this |= M.A; 08355 return *this; 08356 } 08357 08358 inline cimatrix_slice& cimatrix_slice::operator|=(const scmatrix_slice& M) { 08359 *this |= M.A; 08360 return *this; 08361 } 08362 08363 inline cimatrix& cimatrix::operator|=(const simatrix_slice& M) { 08364 *this |= M.A; 08365 return *this; 08366 } 08367 08368 inline cimatrix_slice& cimatrix_slice::operator|=(const simatrix_slice& M) { 08369 *this |= M.A; 08370 return *this; 08371 } 08372 08373 inline cimatrix& cimatrix::operator|=(const scimatrix_slice& M) { 08374 *this |= M.A; 08375 return *this; 08376 } 08377 08378 inline cimatrix_slice& cimatrix_slice::operator|=(const scimatrix_slice& M) { 08379 *this |= M.A; 08380 return *this; 08381 } 08382 08383 inline cimatrix& cimatrix::operator&=(const simatrix_slice& M) { 08384 *this &= M.A; 08385 return *this; 08386 } 08387 08388 inline cimatrix_slice& cimatrix_slice::operator&=(const simatrix_slice& M) { 08389 *this &= M.A; 08390 return *this; 08391 } 08392 08393 inline cimatrix& cimatrix::operator&=(const scimatrix_slice& M) { 08394 *this &= M.A; 08395 return *this; 08396 } 08397 08398 inline cimatrix_slice& cimatrix_slice::operator&=(const scimatrix_slice& M) { 08399 *this &= M.A; 08400 return *this; 08401 } 08402 08404 inline bool operator==(const scimatrix_slice& M1, const srmatrix_slice& M2) { 08405 return spsp_mm_comp(M1.A,M2.A); 08406 } 08407 08409 inline bool operator==(const scimatrix_slice& M1, const scmatrix_slice& M2) { 08410 return spsp_mm_comp(M1.A,M2.A); 08411 } 08412 08414 inline bool operator==(const scimatrix_slice& M1, const simatrix_slice& M2) { 08415 return spsp_mm_comp(M1.A,M2.A); 08416 } 08417 08419 inline bool operator==(const scimatrix_slice& M1, const scimatrix_slice& M2) { 08420 return spsp_mm_comp(M1.A,M2.A); 08421 } 08422 08424 inline bool operator==(const srmatrix_slice& M1, const scimatrix_slice& M2) { 08425 return spsp_mm_comp(M1.A,M2.A); 08426 } 08427 08429 inline bool operator==(const scmatrix_slice& M1, const scimatrix_slice& M2) { 08430 return spsp_mm_comp(M1.A,M2.A); 08431 } 08432 08434 inline bool operator==(const simatrix_slice& M1, const scimatrix_slice& M2) { 08435 return spsp_mm_comp(M1.A,M2.A); 08436 } 08437 08439 inline bool operator==(const scimatrix_slice& M1, const srmatrix& M2) { 08440 return spsp_mm_comp(M1.A,M2); 08441 } 08442 08444 inline bool operator==(const scimatrix_slice& M1, const scmatrix& M2) { 08445 return spsp_mm_comp(M1.A,M2); 08446 } 08447 08449 inline bool operator==(const scimatrix_slice& M1, const simatrix& M2) { 08450 return spsp_mm_comp(M1.A,M2); 08451 } 08452 08454 inline bool operator==(const scimatrix_slice& M1, const scimatrix& M2) { 08455 return spsp_mm_comp(M1.A,M2); 08456 } 08457 08459 inline bool operator==(const srmatrix_slice& M1, const scimatrix& M2) { 08460 return spsp_mm_comp(M1.A,M2); 08461 } 08462 08464 inline bool operator==(const scmatrix_slice& M1, const scimatrix& M2) { 08465 return spsp_mm_comp(M1.A,M2); 08466 } 08467 08469 inline bool operator==(const simatrix_slice& M1, const scimatrix& M2) { 08470 return spsp_mm_comp(M1.A,M2); 08471 } 08472 08474 inline bool operator==(const scimatrix& M1, const srmatrix_slice& M2) { 08475 return spsp_mm_comp(M1,M2.A); 08476 } 08477 08479 inline bool operator==(const scimatrix& M1, const scmatrix_slice& M2) { 08480 return spsp_mm_comp(M1,M2.A); 08481 } 08482 08484 inline bool operator==(const scimatrix& M1, const simatrix_slice& M2) { 08485 return spsp_mm_comp(M1,M2.A); 08486 } 08487 08489 inline bool operator==(const scimatrix& M1, const scimatrix_slice& M2) { 08490 return spsp_mm_comp(M1,M2.A); 08491 } 08492 08494 inline bool operator==(const srmatrix& M1, const scimatrix_slice& M2) { 08495 return spsp_mm_comp(M1,M2.A); 08496 } 08497 08499 inline bool operator==(const scmatrix& M1, const scimatrix_slice& M2) { 08500 return spsp_mm_comp(M1,M2.A); 08501 } 08502 08504 inline bool operator==(const simatrix& M1, const scimatrix_slice& M2) { 08505 return spsp_mm_comp(M1,M2.A); 08506 } 08507 08509 inline bool operator==(const scimatrix_slice& M1, const rmatrix& M2) { 08510 return spf_mm_comp(M1.A,M2); 08511 } 08512 08514 inline bool operator==(const scimatrix_slice& M1, const cmatrix& M2) { 08515 return spf_mm_comp(M1.A,M2); 08516 } 08517 08519 inline bool operator==(const scimatrix_slice& M1, const imatrix& M2) { 08520 return spf_mm_comp(M1.A,M2); 08521 } 08522 08524 inline bool operator==(const scimatrix_slice& M1, const cimatrix& M2) { 08525 return spf_mm_comp(M1.A,M2); 08526 } 08527 08529 inline bool operator==(const srmatrix_slice& M1, const cimatrix& M2) { 08530 return spf_mm_comp(M1.A,M2); 08531 } 08532 08534 inline bool operator==(const scmatrix_slice& M1, const cimatrix& M2) { 08535 return spf_mm_comp(M1.A,M2); 08536 } 08537 08539 inline bool operator==(const simatrix_slice& M1, const cimatrix& M2) { 08540 return spf_mm_comp(M1.A,M2); 08541 } 08542 08544 inline bool operator==(const cimatrix& M1, const srmatrix_slice& M2) { 08545 return fsp_mm_comp(M1,M2.A); 08546 } 08547 08549 inline bool operator==(const cimatrix& M1, const simatrix_slice& M2) { 08550 return fsp_mm_comp(M1,M2.A); 08551 } 08552 08554 inline bool operator==(const cimatrix& M1, const scmatrix_slice& M2) { 08555 return fsp_mm_comp(M1,M2.A); 08556 } 08557 08559 inline bool operator==(const cimatrix& M1, const scimatrix_slice& M2) { 08560 return fsp_mm_comp(M1,M2.A); 08561 } 08562 08564 inline bool operator==(const rmatrix& M1, const scimatrix_slice& M2) { 08565 return fsp_mm_comp(M1,M2.A); 08566 } 08567 08569 inline bool operator==(const imatrix& M1, const scimatrix_slice& M2) { 08570 return fsp_mm_comp(M1,M2.A); 08571 } 08572 08574 inline bool operator==(const cmatrix& M1, const scimatrix_slice& M2) { 08575 return fsp_mm_comp(M1,M2.A); 08576 } 08577 08579 inline bool operator==(const cimatrix_slice& M1, const srmatrix_slice& M2) { 08580 return fsp_mm_comp(M1,M2.A); 08581 } 08582 08584 inline bool operator==(const cimatrix_slice& M1, const simatrix_slice& M2) { 08585 return fsp_mm_comp(M1,M2.A); 08586 } 08587 08589 inline bool operator==(const cimatrix_slice& M1, const scmatrix_slice& M2) { 08590 return fsp_mm_comp(M1,M2.A); 08591 } 08592 08594 inline bool operator==(const cimatrix_slice& M1, const scimatrix_slice& M2) { 08595 return fsp_mm_comp(M1,M2.A); 08596 } 08597 08599 inline bool operator==(const rmatrix_slice& M1, const scimatrix_slice& M2) { 08600 return fsp_mm_comp(M1,M2.A); 08601 } 08602 08604 inline bool operator==(const imatrix_slice& M1, const scimatrix_slice& M2) { 08605 return fsp_mm_comp(M1,M2.A); 08606 } 08607 08609 inline bool operator==(const cmatrix_slice& M1, const scimatrix_slice& M2) { 08610 return fsp_mm_comp(M1,M2.A); 08611 } 08612 08614 inline bool operator==(const scimatrix_slice& M1, const rmatrix_slice& M2) { 08615 return spf_mm_comp(M1.A,M2); 08616 } 08617 08619 inline bool operator==(const scimatrix_slice& M1, const cmatrix_slice& M2) { 08620 return spf_mm_comp(M1.A,M2); 08621 } 08622 08624 inline bool operator==(const scimatrix_slice& M1, const imatrix_slice& M2) { 08625 return spf_mm_comp(M1.A,M2); 08626 } 08627 08629 inline bool operator==(const scimatrix_slice& M1, const cimatrix_slice& M2) { 08630 return spf_mm_comp(M1.A,M2); 08631 } 08632 08634 inline bool operator==(const srmatrix_slice& M1, const cimatrix_slice& M2) { 08635 return spf_mm_comp(M1.A,M2); 08636 } 08637 08639 inline bool operator==(const simatrix_slice& M1, const cimatrix_slice& M2) { 08640 return spf_mm_comp(M1.A,M2); 08641 } 08642 08644 inline bool operator==(const scmatrix_slice& M1, const cimatrix_slice& M2) { 08645 return spf_mm_comp(M1.A,M2); 08646 } 08647 08649 inline bool operator!=(const scimatrix_slice& M1, const srmatrix_slice& M2) { 08650 return !spsp_mm_comp(M1.A,M2.A); 08651 } 08652 08654 inline bool operator!=(const scimatrix_slice& M1, const scmatrix_slice& M2) { 08655 return !spsp_mm_comp(M1.A,M2.A); 08656 } 08657 08659 inline bool operator!=(const scimatrix_slice& M1, const simatrix_slice& M2) { 08660 return !spsp_mm_comp(M1.A,M2.A); 08661 } 08662 08664 inline bool operator!=(const scimatrix_slice& M1, const scimatrix_slice& M2) { 08665 return !spsp_mm_comp(M1.A,M2.A); 08666 } 08667 08669 inline bool operator!=(const srmatrix_slice& M1, const scimatrix_slice& M2) { 08670 return !spsp_mm_comp(M1.A,M2.A); 08671 } 08672 08674 inline bool operator!=(const scmatrix_slice& M1, const scimatrix_slice& M2) { 08675 return !spsp_mm_comp(M1.A,M2.A); 08676 } 08677 08679 inline bool operator!=(const simatrix_slice& M1, const scimatrix_slice& M2) { 08680 return !spsp_mm_comp(M1.A,M2.A); 08681 } 08682 08684 inline bool operator!=(const scimatrix_slice& M1, const srmatrix& M2) { 08685 return !spsp_mm_comp(M1.A,M2); 08686 } 08687 08689 inline bool operator!=(const scimatrix_slice& M1, const scmatrix& M2) { 08690 return !spsp_mm_comp(M1.A,M2); 08691 } 08692 08694 inline bool operator!=(const scimatrix_slice& M1, const simatrix& M2) { 08695 return !spsp_mm_comp(M1.A,M2); 08696 } 08697 08699 inline bool operator!=(const scimatrix_slice& M1, const scimatrix& M2) { 08700 return !spsp_mm_comp(M1.A,M2); 08701 } 08702 08704 inline bool operator!=(const srmatrix_slice& M1, const scimatrix& M2) { 08705 return !spsp_mm_comp(M1.A,M2); 08706 } 08707 08709 inline bool operator!=(const scmatrix_slice& M1, const scimatrix& M2) { 08710 return !spsp_mm_comp(M1.A,M2); 08711 } 08712 08714 inline bool operator!=(const simatrix_slice& M1, const scimatrix& M2) { 08715 return !spsp_mm_comp(M1.A,M2); 08716 } 08717 08719 inline bool operator!=(const scimatrix& M1, const srmatrix_slice& M2) { 08720 return !spsp_mm_comp(M1,M2.A); 08721 } 08722 08724 inline bool operator!=(const scimatrix& M1, const scmatrix_slice& M2) { 08725 return !spsp_mm_comp(M1,M2.A); 08726 } 08727 08729 inline bool operator!=(const scimatrix& M1, const simatrix_slice& M2) { 08730 return !spsp_mm_comp(M1,M2.A); 08731 } 08732 08734 inline bool operator!=(const scimatrix& M1, const scimatrix_slice& M2) { 08735 return !spsp_mm_comp(M1,M2.A); 08736 } 08737 08739 inline bool operator!=(const srmatrix& M1, const scimatrix_slice& M2) { 08740 return !spsp_mm_comp(M1,M2.A); 08741 } 08742 08744 inline bool operator!=(const scmatrix& M1, const scimatrix_slice& M2) { 08745 return !spsp_mm_comp(M1,M2.A); 08746 } 08747 08749 inline bool operator!=(const simatrix& M1, const scimatrix_slice& M2) { 08750 return !spsp_mm_comp(M1,M2.A); 08751 } 08752 08754 inline bool operator!=(const scimatrix_slice& M1, const rmatrix& M2) { 08755 return !spf_mm_comp(M1.A,M2); 08756 } 08757 08759 inline bool operator!=(const scimatrix_slice& M1, const cmatrix& M2) { 08760 return !spf_mm_comp(M1.A,M2); 08761 } 08762 08764 inline bool operator!=(const scimatrix_slice& M1, const imatrix& M2) { 08765 return !spf_mm_comp(M1.A,M2); 08766 } 08767 08769 inline bool operator!=(const scimatrix_slice& M1, const cimatrix& M2) { 08770 return !spf_mm_comp(M1.A,M2); 08771 } 08772 08774 inline bool operator!=(const srmatrix_slice& M1, const cimatrix& M2) { 08775 return !spf_mm_comp(M1.A,M2); 08776 } 08777 08779 inline bool operator!=(const scmatrix_slice& M1, const cimatrix& M2) { 08780 return !spf_mm_comp(M1.A,M2); 08781 } 08782 08784 inline bool operator!=(const simatrix_slice& M1, const cimatrix& M2) { 08785 return !spf_mm_comp(M1.A,M2); 08786 } 08787 08789 inline bool operator!=(const cimatrix& M1, const srmatrix_slice& M2) { 08790 return !fsp_mm_comp(M1,M2.A); 08791 } 08792 08794 inline bool operator!=(const cimatrix& M1, const simatrix_slice& M2) { 08795 return !fsp_mm_comp(M1,M2.A); 08796 } 08797 08799 inline bool operator!=(const cimatrix& M1, const scmatrix_slice& M2) { 08800 return !fsp_mm_comp(M1,M2.A); 08801 } 08802 08804 inline bool operator!=(const cimatrix& M1, const scimatrix_slice& M2) { 08805 return !fsp_mm_comp(M1,M2.A); 08806 } 08807 08809 inline bool operator!=(const rmatrix& M1, const scimatrix_slice& M2) { 08810 return !fsp_mm_comp(M1,M2.A); 08811 } 08812 08814 inline bool operator!=(const imatrix& M1, const scimatrix_slice& M2) { 08815 return !fsp_mm_comp(M1,M2.A); 08816 } 08817 08819 inline bool operator!=(const cmatrix& M1, const scimatrix_slice& M2) { 08820 return !fsp_mm_comp(M1,M2.A); 08821 } 08822 08824 inline bool operator!=(const cimatrix_slice& M1, const srmatrix_slice& M2) { 08825 return !fsp_mm_comp(M1,M2.A); 08826 } 08827 08829 inline bool operator!=(const cimatrix_slice& M1, const simatrix_slice& M2) { 08830 return !fsp_mm_comp(M1,M2.A); 08831 } 08832 08834 inline bool operator!=(const cimatrix_slice& M1, const scmatrix_slice& M2) { 08835 return !fsp_mm_comp(M1,M2.A); 08836 } 08837 08839 inline bool operator!=(const cimatrix_slice& M1, const scimatrix_slice& M2) { 08840 return !fsp_mm_comp(M1,M2.A); 08841 } 08842 08844 inline bool operator!=(const rmatrix_slice& M1, const scimatrix_slice& M2) { 08845 return !fsp_mm_comp(M1,M2.A); 08846 } 08847 08849 inline bool operator!=(const imatrix_slice& M1, const scimatrix_slice& M2) { 08850 return !fsp_mm_comp(M1,M2.A); 08851 } 08852 08854 inline bool operator!=(const cmatrix_slice& M1, const scimatrix_slice& M2) { 08855 return !fsp_mm_comp(M1,M2.A); 08856 } 08857 08859 inline bool operator!=(const scimatrix_slice& M1, const rmatrix_slice& M2) { 08860 return !spf_mm_comp(M1.A,M2); 08861 } 08862 08864 inline bool operator!=(const scimatrix_slice& M1, const cmatrix_slice& M2) { 08865 return !spf_mm_comp(M1.A,M2); 08866 } 08867 08869 inline bool operator!=(const scimatrix_slice& M1, const imatrix_slice& M2) { 08870 return !spf_mm_comp(M1.A,M2); 08871 } 08872 08874 inline bool operator!=(const scimatrix_slice& M1, const cimatrix_slice& M2) { 08875 return !spf_mm_comp(M1.A,M2); 08876 } 08877 08879 inline bool operator!=(const srmatrix_slice& M1, const cimatrix_slice& M2) { 08880 return !spf_mm_comp(M1.A,M2); 08881 } 08882 08884 inline bool operator!=(const simatrix_slice& M1, const cimatrix_slice& M2) { 08885 return !spf_mm_comp(M1.A,M2); 08886 } 08887 08889 inline bool operator!=(const scmatrix_slice& M1, const cimatrix_slice& M2) { 08890 return !spf_mm_comp(M1.A,M2); 08891 } 08892 08894 inline bool operator<(const scimatrix_slice& M1, const simatrix_slice& M2) { 08895 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1.A,M2.A); 08896 } 08897 08899 inline bool operator<(const scimatrix_slice& M1, const scimatrix_slice& M2) { 08900 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1.A,M2.A); 08901 } 08902 08904 inline bool operator<(const srmatrix_slice& M1, const scimatrix_slice& M2) { 08905 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1.A,M2.A); 08906 } 08907 08909 inline bool operator<(const scmatrix_slice& M1, const scimatrix_slice& M2) { 08910 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1.A,M2.A); 08911 } 08912 08914 inline bool operator<(const simatrix_slice& M1, const scimatrix_slice& M2) { 08915 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1.A,M2.A); 08916 } 08917 08919 inline bool operator<(const scimatrix_slice& M1, const simatrix& M2) { 08920 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1.A,M2); 08921 } 08922 08924 inline bool operator<(const scimatrix_slice& M1, const scimatrix& M2) { 08925 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1.A,M2); 08926 } 08927 08929 inline bool operator<(const srmatrix_slice& M1, const scimatrix& M2) { 08930 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1.A,M2); 08931 } 08932 08934 inline bool operator<(const scmatrix_slice& M1, const scimatrix& M2) { 08935 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1.A,M2); 08936 } 08937 08939 inline bool operator<(const simatrix_slice& M1, const scimatrix& M2) { 08940 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1.A,M2); 08941 } 08942 08944 inline bool operator<(const scimatrix& M1, const simatrix_slice& M2) { 08945 return spsp_mm_less<scimatrix,simatrix,cinterval>(M1,M2.A); 08946 } 08947 08949 inline bool operator<(const scimatrix& M1, const scimatrix_slice& M2) { 08950 return spsp_mm_less<scimatrix,scimatrix,cinterval>(M1,M2.A); 08951 } 08952 08954 inline bool operator<(const srmatrix& M1, const scimatrix_slice& M2) { 08955 return spsp_mm_less<srmatrix,scimatrix,cinterval>(M1,M2.A); 08956 } 08957 08959 inline bool operator<(const scmatrix& M1, const scimatrix_slice& M2) { 08960 return spsp_mm_less<scmatrix,scimatrix,cinterval>(M1,M2.A); 08961 } 08962 08964 inline bool operator<(const simatrix& M1, const scimatrix_slice& M2) { 08965 return spsp_mm_less<simatrix,scimatrix,cinterval>(M1,M2.A); 08966 } 08967 08969 inline bool operator<(const scimatrix_slice& M1, const imatrix& M2) { 08970 return spf_mm_less<scimatrix,imatrix,cinterval>(M1.A,M2); 08971 } 08972 08974 inline bool operator<(const scimatrix_slice& M1, const cimatrix& M2) { 08975 return spf_mm_less<scimatrix,cimatrix,cinterval>(M1.A,M2); 08976 } 08977 08979 inline bool operator<(const srmatrix_slice& M1, const cimatrix& M2) { 08980 return spf_mm_less<srmatrix,cimatrix,cinterval>(M1.A,M2); 08981 } 08982 08984 inline bool operator<(const scmatrix_slice& M1, const cimatrix& M2) { 08985 return spf_mm_less<scmatrix,cimatrix,cinterval>(M1.A,M2); 08986 } 08987 08989 inline bool operator<(const simatrix_slice& M1, const cimatrix& M2) { 08990 return spf_mm_less<simatrix,cimatrix,cinterval>(M1.A,M2); 08991 } 08992 08994 inline bool operator<(const cimatrix& M1, const simatrix_slice& M2) { 08995 return fsp_mm_less<cimatrix,simatrix,cinterval>(M1,M2.A); 08996 } 08997 08999 inline bool operator<(const cimatrix& M1, const scimatrix_slice& M2) { 09000 return fsp_mm_less<cimatrix,scimatrix,cinterval>(M1,M2.A); 09001 } 09002 09004 inline bool operator<(const rmatrix& M1, const scimatrix_slice& M2) { 09005 return fsp_mm_less<rmatrix,scimatrix,cinterval>(M1,M2.A); 09006 } 09007 09009 inline bool operator<(const imatrix& M1, const scimatrix_slice& M2) { 09010 return fsp_mm_less<imatrix,scimatrix,cinterval>(M1,M2.A); 09011 } 09012 09014 inline bool operator<(const cmatrix& M1, const scimatrix_slice& M2) { 09015 return fsp_mm_less<cmatrix,scimatrix,cinterval>(M1,M2.A); 09016 } 09017 09019 inline bool operator<(const cimatrix_slice& M1, const simatrix_slice& M2) { 09020 return fsp_mm_less<cimatrix_slice,simatrix,cinterval>(M1,M2.A); 09021 } 09022 09024 inline bool operator<(const cimatrix_slice& M1, const scimatrix_slice& M2) { 09025 return fsp_mm_less<cimatrix_slice,scimatrix,cinterval>(M1,M2.A); 09026 } 09027 09029 inline bool operator<(const rmatrix_slice& M1, const scimatrix_slice& M2) { 09030 return fsp_mm_less<rmatrix_slice,scimatrix,cinterval>(M1,M2.A); 09031 } 09032 09034 inline bool operator<(const imatrix_slice& M1, const scimatrix_slice& M2) { 09035 return fsp_mm_less<imatrix_slice,scimatrix,cinterval>(M1,M2.A); 09036 } 09037 09039 inline bool operator<(const cmatrix_slice& M1, const scimatrix_slice& M2) { 09040 return fsp_mm_less<cmatrix_slice,scimatrix,cinterval>(M1,M2.A); 09041 } 09042 09044 inline bool operator<(const scimatrix_slice& M1, const imatrix_slice& M2) { 09045 return spf_mm_less<scimatrix,imatrix_slice,cinterval>(M1.A,M2); 09046 } 09047 09049 inline bool operator<(const scimatrix_slice& M1, const cimatrix_slice& M2) { 09050 return spf_mm_less<scimatrix,cimatrix_slice,cinterval>(M1.A,M2); 09051 } 09052 09054 inline bool operator<(const srmatrix_slice& M1, const cimatrix_slice& M2) { 09055 return spf_mm_less<srmatrix,cimatrix_slice,cinterval>(M1.A,M2); 09056 } 09057 09059 inline bool operator<(const simatrix_slice& M1, const cimatrix_slice& M2) { 09060 return spf_mm_less<simatrix,cimatrix_slice,cinterval>(M1.A,M2); 09061 } 09062 09064 inline bool operator<(const scmatrix_slice& M1, const cimatrix_slice& M2) { 09065 return spf_mm_less<scmatrix,cimatrix_slice,cinterval>(M1.A,M2); 09066 } 09067 09069 inline bool operator<=(const scimatrix_slice& M1, const simatrix_slice& M2) { 09070 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1.A,M2.A); 09071 } 09072 09074 inline bool operator<=(const scimatrix_slice& M1, const scimatrix_slice& M2) { 09075 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1.A,M2.A); 09076 } 09077 09079 inline bool operator<=(const srmatrix_slice& M1, const scimatrix_slice& M2) { 09080 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1.A,M2.A); 09081 } 09082 09084 inline bool operator<=(const scmatrix_slice& M1, const scimatrix_slice& M2) { 09085 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1.A,M2.A); 09086 } 09087 09089 inline bool operator<=(const simatrix_slice& M1, const scimatrix_slice& M2) { 09090 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1.A,M2.A); 09091 } 09092 09094 inline bool operator<=(const scimatrix_slice& M1, const simatrix& M2) { 09095 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1.A,M2); 09096 } 09097 09099 inline bool operator<=(const scimatrix_slice& M1, const scimatrix& M2) { 09100 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1.A,M2); 09101 } 09102 09104 inline bool operator<=(const srmatrix_slice& M1, const scimatrix& M2) { 09105 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1.A,M2); 09106 } 09107 09109 inline bool operator<=(const scmatrix_slice& M1, const scimatrix& M2) { 09110 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1.A,M2); 09111 } 09112 09114 inline bool operator<=(const simatrix_slice& M1, const scimatrix& M2) { 09115 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1.A,M2); 09116 } 09117 09119 inline bool operator<=(const scimatrix& M1, const simatrix_slice& M2) { 09120 return spsp_mm_leq<scimatrix,simatrix,cinterval>(M1,M2.A); 09121 } 09122 09124 inline bool operator<=(const scimatrix& M1, const scimatrix_slice& M2) { 09125 return spsp_mm_leq<scimatrix,scimatrix,cinterval>(M1,M2.A); 09126 } 09127 09129 inline bool operator<=(const srmatrix& M1, const scimatrix_slice& M2) { 09130 return spsp_mm_leq<srmatrix,scimatrix,cinterval>(M1,M2.A); 09131 } 09132 09134 inline bool operator<=(const scmatrix& M1, const scimatrix_slice& M2) { 09135 return spsp_mm_leq<scmatrix,scimatrix,cinterval>(M1,M2.A); 09136 } 09137 09139 inline bool operator<=(const simatrix& M1, const scimatrix_slice& M2) { 09140 return spsp_mm_leq<simatrix,scimatrix,cinterval>(M1,M2.A); 09141 } 09142 09144 inline bool operator<=(const scimatrix_slice& M1, const imatrix& M2) { 09145 return spf_mm_leq<scimatrix,imatrix,cinterval>(M1.A,M2); 09146 } 09147 09149 inline bool operator<=(const scimatrix_slice& M1, const cimatrix& M2) { 09150 return spf_mm_leq<scimatrix,cimatrix,cinterval>(M1.A,M2); 09151 } 09152 09154 inline bool operator<=(const srmatrix_slice& M1, const cimatrix& M2) { 09155 return spf_mm_leq<srmatrix,cimatrix,cinterval>(M1.A,M2); 09156 } 09157 09159 inline bool operator<=(const scmatrix_slice& M1, const cimatrix& M2) { 09160 return spf_mm_leq<scmatrix,cimatrix,cinterval>(M1.A,M2); 09161 } 09162 09164 inline bool operator<=(const simatrix_slice& M1, const cimatrix& M2) { 09165 return spf_mm_leq<simatrix,cimatrix,cinterval>(M1.A,M2); 09166 } 09167 09169 inline bool operator<=(const cimatrix& M1, const simatrix_slice& M2) { 09170 return fsp_mm_leq<cimatrix,simatrix,cinterval>(M1,M2.A); 09171 } 09172 09174 inline bool operator<=(const cimatrix& M1, const scimatrix_slice& M2) { 09175 return fsp_mm_leq<cimatrix,scimatrix,cinterval>(M1,M2.A); 09176 } 09177 09179 inline bool operator<=(const rmatrix& M1, const scimatrix_slice& M2) { 09180 return fsp_mm_leq<rmatrix,scimatrix,cinterval>(M1,M2.A); 09181 } 09182 09184 inline bool operator<=(const imatrix& M1, const scimatrix_slice& M2) { 09185 return fsp_mm_leq<imatrix,scimatrix,cinterval>(M1,M2.A); 09186 } 09187 09189 inline bool operator<=(const cmatrix& M1, const scimatrix_slice& M2) { 09190 return fsp_mm_leq<cmatrix,scimatrix,cinterval>(M1,M2.A); 09191 } 09192 09194 inline bool operator<=(const cimatrix_slice& M1, const simatrix_slice& M2) { 09195 return fsp_mm_leq<cimatrix_slice,simatrix,cinterval>(M1,M2.A); 09196 } 09197 09199 inline bool operator<=(const cimatrix_slice& M1, const scimatrix_slice& M2) { 09200 return fsp_mm_leq<cimatrix_slice,scimatrix,cinterval>(M1,M2.A); 09201 } 09202 09204 inline bool operator<=(const rmatrix_slice& M1, const scimatrix_slice& M2) { 09205 return fsp_mm_leq<rmatrix_slice,scimatrix,cinterval>(M1,M2.A); 09206 } 09207 09209 inline bool operator<=(const imatrix_slice& M1, const scimatrix_slice& M2) { 09210 return fsp_mm_leq<imatrix_slice,scimatrix,cinterval>(M1,M2.A); 09211 } 09212 09214 inline bool operator<=(const cmatrix_slice& M1, const scimatrix_slice& M2) { 09215 return fsp_mm_leq<cmatrix_slice,scimatrix,cinterval>(M1,M2.A); 09216 } 09217 09219 inline bool operator<=(const scimatrix_slice& M1, const imatrix_slice& M2) { 09220 return spf_mm_leq<scimatrix,imatrix_slice,cinterval>(M1.A,M2); 09221 } 09222 09224 inline bool operator<=(const scimatrix_slice& M1, const cimatrix_slice& M2) { 09225 return spf_mm_leq<scimatrix,cimatrix_slice,cinterval>(M1.A,M2); 09226 } 09227 09229 inline bool operator<=(const srmatrix_slice& M1, const cimatrix_slice& M2) { 09230 return spf_mm_leq<srmatrix,cimatrix_slice,cinterval>(M1.A,M2); 09231 } 09232 09234 inline bool operator<=(const simatrix_slice& M1, const cimatrix_slice& M2) { 09235 return spf_mm_leq<simatrix,cimatrix_slice,cinterval>(M1.A,M2); 09236 } 09237 09239 inline bool operator<=(const scmatrix_slice& M1, const cimatrix_slice& M2) { 09240 return spf_mm_leq<scmatrix,cimatrix_slice,cinterval>(M1.A,M2); 09241 } 09242 09244 inline bool operator>(const scimatrix_slice& M1, const srmatrix_slice& M2) { 09245 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1.A,M2.A); 09246 } 09247 09249 inline bool operator>(const scimatrix_slice& M1, const scmatrix_slice& M2) { 09250 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1.A,M2.A); 09251 } 09252 09254 inline bool operator>(const scimatrix_slice& M1, const simatrix_slice& M2) { 09255 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1.A,M2.A); 09256 } 09257 09259 inline bool operator>(const scimatrix_slice& M1, const scimatrix_slice& M2) { 09260 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1.A,M2.A); 09261 } 09262 09264 inline bool operator>(const simatrix_slice& M1, const scimatrix_slice& M2) { 09265 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1.A,M2.A); 09266 } 09267 09269 inline bool operator>(const scimatrix_slice& M1, const srmatrix& M2) { 09270 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1.A,M2); 09271 } 09272 09274 inline bool operator>(const scimatrix_slice& M1, const scmatrix& M2) { 09275 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1.A,M2); 09276 } 09277 09279 inline bool operator>(const scimatrix_slice& M1, const simatrix& M2) { 09280 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1.A,M2); 09281 } 09282 09284 inline bool operator>(const scimatrix_slice& M1, const scimatrix& M2) { 09285 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1.A,M2); 09286 } 09287 09289 inline bool operator>(const simatrix_slice& M1, const scimatrix& M2) { 09290 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1.A,M2); 09291 } 09292 09294 inline bool operator>(const scimatrix& M1, const srmatrix_slice& M2) { 09295 return spsp_mm_greater<scimatrix,srmatrix,cinterval>(M1,M2.A); 09296 } 09297 09299 inline bool operator>(const scimatrix& M1, const scmatrix_slice& M2) { 09300 return spsp_mm_greater<scimatrix,scmatrix,cinterval>(M1,M2.A); 09301 } 09302 09304 inline bool operator>(const scimatrix& M1, const simatrix_slice& M2) { 09305 return spsp_mm_greater<scimatrix,simatrix,cinterval>(M1,M2.A); 09306 } 09307 09309 inline bool operator>(const scimatrix& M1, const scimatrix_slice& M2) { 09310 return spsp_mm_greater<scimatrix,scimatrix,cinterval>(M1,M2.A); 09311 } 09312 09314 inline bool operator>(const simatrix& M1, const scimatrix_slice& M2) { 09315 return spsp_mm_greater<simatrix,scimatrix,cinterval>(M1,M2.A); 09316 } 09317 09319 inline bool operator>(const scimatrix_slice& M1, const rmatrix& M2) { 09320 return spf_mm_greater<scimatrix,rmatrix,cinterval>(M1.A,M2); 09321 } 09322 09324 inline bool operator>(const scimatrix_slice& M1, const cmatrix& M2) { 09325 return spf_mm_greater<scimatrix,cmatrix,cinterval>(M1.A,M2); 09326 } 09327 09329 inline bool operator>(const scimatrix_slice& M1, const imatrix& M2) { 09330 return spf_mm_greater<scimatrix,imatrix,cinterval>(M1.A,M2); 09331 } 09332 09334 inline bool operator>(const scimatrix_slice& M1, const cimatrix& M2) { 09335 return spf_mm_greater<scimatrix,cimatrix,cinterval>(M1.A,M2); 09336 } 09337 09339 inline bool operator>(const simatrix_slice& M1, const cimatrix& M2) { 09340 return spf_mm_greater<simatrix,cimatrix,cinterval>(M1.A,M2); 09341 } 09342 09344 inline bool operator>(const cimatrix& M1, const srmatrix_slice& M2) { 09345 return fsp_mm_greater<cimatrix,srmatrix,cinterval>(M1,M2.A); 09346 } 09347 09349 inline bool operator>(const cimatrix& M1, const simatrix_slice& M2) { 09350 return fsp_mm_greater<cimatrix,simatrix,cinterval>(M1,M2.A); 09351 } 09352 09354 inline bool operator>(const cimatrix& M1, const scmatrix_slice& M2) { 09355 return fsp_mm_greater<cimatrix,scmatrix,cinterval>(M1,M2.A); 09356 } 09357 09359 inline bool operator>(const cimatrix& M1, const scimatrix_slice& M2) { 09360 return fsp_mm_greater<cimatrix,scimatrix,cinterval>(M1,M2.A); 09361 } 09362 09364 inline bool operator>(const imatrix& M1, const scimatrix_slice& M2) { 09365 return fsp_mm_greater<imatrix,scimatrix,cinterval>(M1,M2.A); 09366 } 09367 09369 inline bool operator>(const cimatrix_slice& M1, const srmatrix_slice& M2) { 09370 return fsp_mm_greater<cimatrix_slice,srmatrix,cinterval>(M1,M2.A); 09371 } 09372 09374 inline bool operator>(const cimatrix_slice& M1, const simatrix_slice& M2) { 09375 return fsp_mm_greater<cimatrix_slice,simatrix,cinterval>(M1,M2.A); 09376 } 09377 09379 inline bool operator>(const cimatrix_slice& M1, const scmatrix_slice& M2) { 09380 return fsp_mm_greater<cimatrix_slice,scmatrix,cinterval>(M1,M2.A); 09381 } 09382 09384 inline bool operator>(const cimatrix_slice& M1, const scimatrix_slice& M2) { 09385 return fsp_mm_greater<cimatrix_slice,scimatrix,cinterval>(M1,M2.A); 09386 } 09387 09389 inline bool operator>(const imatrix_slice& M1, const scimatrix_slice& M2) { 09390 return fsp_mm_greater<imatrix_slice,scimatrix,cinterval>(M1,M2.A); 09391 } 09392 09394 inline bool operator>(const scimatrix_slice& M1, const rmatrix_slice& M2) { 09395 return spf_mm_greater<scimatrix,rmatrix_slice,cinterval>(M1.A,M2); 09396 } 09397 09399 inline bool operator>(const scimatrix_slice& M1, const cmatrix_slice& M2) { 09400 return spf_mm_greater<scimatrix,cmatrix_slice,cinterval>(M1.A,M2); 09401 } 09402 09404 inline bool operator>(const scimatrix_slice& M1, const imatrix_slice& M2) { 09405 return spf_mm_greater<scimatrix,imatrix_slice,cinterval>(M1.A,M2); 09406 } 09407 09409 inline bool operator>(const scimatrix_slice& M1, const cimatrix_slice& M2) { 09410 return spf_mm_greater<scimatrix,cimatrix_slice,cinterval>(M1.A,M2); 09411 } 09412 09414 inline bool operator>(const simatrix_slice& M1, const cimatrix_slice& M2) { 09415 return spf_mm_greater<simatrix,cimatrix_slice,cinterval>(M1.A,M2); 09416 } 09417 09419 inline bool operator>=(const scimatrix_slice& M1, const srmatrix_slice& M2) { 09420 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1.A,M2.A); 09421 } 09422 09424 inline bool operator>=(const scimatrix_slice& M1, const scmatrix_slice& M2) { 09425 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1.A,M2.A); 09426 } 09427 09429 inline bool operator>=(const scimatrix_slice& M1, const simatrix_slice& M2) { 09430 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1.A,M2.A); 09431 } 09432 09434 inline bool operator>=(const scimatrix_slice& M1, const scimatrix_slice& M2) { 09435 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1.A,M2.A); 09436 } 09437 09439 inline bool operator>=(const simatrix_slice& M1, const scimatrix_slice& M2) { 09440 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1.A,M2.A); 09441 } 09442 09444 inline bool operator>=(const scimatrix_slice& M1, const srmatrix& M2) { 09445 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1.A,M2); 09446 } 09447 09449 inline bool operator>=(const scimatrix_slice& M1, const scmatrix& M2) { 09450 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1.A,M2); 09451 } 09452 09454 inline bool operator>=(const scimatrix_slice& M1, const simatrix& M2) { 09455 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1.A,M2); 09456 } 09457 09459 inline bool operator>=(const scimatrix_slice& M1, const scimatrix& M2) { 09460 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1.A,M2); 09461 } 09462 09464 inline bool operator>=(const simatrix_slice& M1, const scimatrix& M2) { 09465 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1.A,M2); 09466 } 09467 09469 inline bool operator>=(const scimatrix& M1, const srmatrix_slice& M2) { 09470 return spsp_mm_geq<scimatrix,srmatrix,cinterval>(M1,M2.A); 09471 } 09472 09474 inline bool operator>=(const scimatrix& M1, const scmatrix_slice& M2) { 09475 return spsp_mm_geq<scimatrix,scmatrix,cinterval>(M1,M2.A); 09476 } 09477 09479 inline bool operator>=(const scimatrix& M1, const simatrix_slice& M2) { 09480 return spsp_mm_geq<scimatrix,simatrix,cinterval>(M1,M2.A); 09481 } 09482 09484 inline bool operator>=(const scimatrix& M1, const scimatrix_slice& M2) { 09485 return spsp_mm_geq<scimatrix,scimatrix,cinterval>(M1,M2.A); 09486 } 09487 09489 inline bool operator>=(const simatrix& M1, const scimatrix_slice& M2) { 09490 return spsp_mm_geq<simatrix,scimatrix,cinterval>(M1,M2.A); 09491 } 09492 09494 inline bool operator>=(const scimatrix_slice& M1, const rmatrix& M2) { 09495 return spf_mm_geq<scimatrix,rmatrix,cinterval>(M1.A,M2); 09496 } 09497 09499 inline bool operator>=(const scimatrix_slice& M1, const cmatrix& M2) { 09500 return spf_mm_geq<scimatrix,cmatrix,cinterval>(M1.A,M2); 09501 } 09502 09504 inline bool operator>=(const scimatrix_slice& M1, const imatrix& M2) { 09505 return spf_mm_geq<scimatrix,imatrix,cinterval>(M1.A,M2); 09506 } 09507 09509 inline bool operator>=(const scimatrix_slice& M1, const cimatrix& M2) { 09510 return spf_mm_geq<scimatrix,cimatrix,cinterval>(M1.A,M2); 09511 } 09512 09514 inline bool operator>=(const simatrix_slice& M1, const cimatrix& M2) { 09515 return spf_mm_geq<simatrix,cimatrix,cinterval>(M1.A,M2); 09516 } 09517 09519 inline bool operator>=(const cimatrix& M1, const srmatrix_slice& M2) { 09520 return fsp_mm_geq<cimatrix,srmatrix,cinterval>(M1,M2.A); 09521 } 09522 09524 inline bool operator>=(const cimatrix& M1, const simatrix_slice& M2) { 09525 return fsp_mm_geq<cimatrix,simatrix,cinterval>(M1,M2.A); 09526 } 09527 09529 inline bool operator>=(const cimatrix& M1, const scmatrix_slice& M2) { 09530 return fsp_mm_geq<cimatrix,scmatrix,cinterval>(M1,M2.A); 09531 } 09532 09534 inline bool operator>=(const cimatrix& M1, const scimatrix_slice& M2) { 09535 return fsp_mm_geq<cimatrix,scimatrix,cinterval>(M1,M2.A); 09536 } 09537 09539 inline bool operator>=(const imatrix& M1, const scimatrix_slice& M2) { 09540 return fsp_mm_geq<imatrix,scimatrix,cinterval>(M1,M2.A); 09541 } 09542 09544 inline bool operator>=(const cimatrix_slice& M1, const srmatrix_slice& M2) { 09545 return fsp_mm_geq<cimatrix_slice,srmatrix,cinterval>(M1,M2.A); 09546 } 09547 09549 inline bool operator>=(const cimatrix_slice& M1, const simatrix_slice& M2) { 09550 return fsp_mm_geq<cimatrix_slice,simatrix,cinterval>(M1,M2.A); 09551 } 09552 09554 inline bool operator>=(const cimatrix_slice& M1, const scmatrix_slice& M2) { 09555 return fsp_mm_geq<cimatrix_slice,scmatrix,cinterval>(M1,M2.A); 09556 } 09557 09559 inline bool operator>=(const cimatrix_slice& M1, const scimatrix_slice& M2) { 09560 return fsp_mm_geq<cimatrix_slice,scimatrix,cinterval>(M1,M2.A); 09561 } 09562 09564 inline bool operator>=(const imatrix_slice& M1, const scimatrix_slice& M2) { 09565 return fsp_mm_geq<imatrix_slice,scimatrix,cinterval>(M1,M2.A); 09566 } 09567 09569 inline bool operator>=(const scimatrix_slice& M1, const rmatrix_slice& M2) { 09570 return spf_mm_geq<scimatrix,rmatrix_slice,cinterval>(M1.A,M2); 09571 } 09572 09574 inline bool operator>=(const scimatrix_slice& M1, const cmatrix_slice& M2) { 09575 return spf_mm_geq<scimatrix,cmatrix_slice,cinterval>(M1.A,M2); 09576 } 09577 09579 inline bool operator>=(const scimatrix_slice& M1, const imatrix_slice& M2) { 09580 return spf_mm_geq<scimatrix,imatrix_slice,cinterval>(M1.A,M2); 09581 } 09582 09584 inline bool operator>=(const scimatrix_slice& M1, const cimatrix_slice& M2) { 09585 return spf_mm_geq<scimatrix,cimatrix_slice,cinterval>(M1.A,M2); 09586 } 09587 09589 inline bool operator>=(const simatrix_slice& M1, const cimatrix_slice& M2) { 09590 return spf_mm_geq<simatrix,cimatrix_slice,cinterval>(M1.A,M2); 09591 } 09592 09594 inline bool operator!(const scimatrix_slice& M) { 09595 return sp_m_not(M.A); 09596 } 09597 09599 09604 inline std::ostream& operator<<(std::ostream& os, const scimatrix_slice& M) { 09605 return sp_m_output<scimatrix,cinterval>(os, M.A); 09606 } 09607 09609 09614 inline std::istream& operator>>(std::istream& is, scimatrix_slice& M) { 09615 scimatrix tmp(M.A.m,M.A.n); 09616 is >> tmp; 09617 M = tmp; 09618 return is; 09619 } 09620 09621 09623 09628 class scimatrix_subv { 09629 private: 09630 scimatrix_slice dat; 09631 bool row; 09632 int index; 09633 09634 scimatrix_subv(scimatrix& A, bool r, int i, int j, int k, int l) : dat(A,i,j,k,l), row(r) { 09635 if(row) index=i; else index=k; 09636 } 09637 09638 scimatrix_subv(const scimatrix& A, bool r, int i, int j, int k, int l) : dat(A,i,j,k,l), row(r) { 09639 if(row) index=i; else index=k; 09640 } 09641 09642 public: 09644 09648 cinterval& operator[](const int i) { 09649 if(row) { 09650 #if(CXSC_INDEX_CHECK) 09651 if(i<dat.A.lb2 || i>dat.A.ub2) 09652 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)")); 09653 #endif 09654 return dat.element(index,i); 09655 } else { 09656 #if(CXSC_INDEX_CHECK) 09657 if(i<dat.A.lb1 || i>dat.A.ub1) 09658 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)")); 09659 #endif 09660 return dat.element(i,index); 09661 } 09662 } 09663 09665 09668 const cinterval operator[](const int i) const { 09669 if(row) { 09670 #if(CXSC_INDEX_CHECK) 09671 if(i<dat.A.lb2 || i>dat.A.ub2) 09672 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)")); 09673 #endif 09674 return dat(index,i); 09675 } else { 09676 #if(CXSC_INDEX_CHECK) 09677 if(i<dat.A.lb1 || i>dat.A.ub1) 09678 cxscthrow(ELEMENT_NOT_IN_VEC("scimatrix_subv::operator[](int)")); 09679 #endif 09680 return dat(i,index); 09681 } 09682 } 09683 09685 scimatrix_subv& operator=(const real& v) { 09686 return sv_vs_assign(*this,v); 09687 } 09688 09690 scimatrix_subv& operator=(const complex& v) { 09691 return sv_vs_assign(*this,v); 09692 } 09693 09695 scimatrix_subv& operator=(const interval& v) { 09696 return sv_vs_assign(*this,v); 09697 } 09698 09700 scimatrix_subv& operator=(const cinterval& v) { 09701 return sv_vs_assign(*this,v); 09702 } 09703 09705 scimatrix_subv& operator=(const srvector& v) { 09706 return svsp_vv_assign(*this,v); 09707 } 09708 09710 scimatrix_subv& operator=(const scvector& v) { 09711 return svsp_vv_assign(*this,v); 09712 } 09713 09715 scimatrix_subv& operator=(const sivector& v) { 09716 return svsp_vv_assign(*this,v); 09717 } 09718 09720 scimatrix_subv& operator=(const scivector& v) { 09721 return svsp_vv_assign(*this,v); 09722 } 09723 09725 scimatrix_subv& operator=(const srvector_slice& v) { 09726 return svsl_vv_assign(*this,v); 09727 } 09728 09730 scimatrix_subv& operator=(const scvector_slice& v) { 09731 return svsl_vv_assign(*this,v); 09732 } 09733 09735 scimatrix_subv& operator=(const sivector_slice& v) { 09736 return svsl_vv_assign(*this,v); 09737 } 09738 09740 scimatrix_subv& operator=(const scivector_slice& v) { 09741 return svsl_vv_assign(*this,v); 09742 } 09743 09745 scimatrix_subv& operator=(const rvector& v) { 09746 return svf_vv_assign(*this,v); 09747 } 09748 09750 scimatrix_subv& operator=(const cvector& v) { 09751 return svf_vv_assign(*this,v); 09752 } 09753 09755 scimatrix_subv& operator=(const ivector& v) { 09756 return svf_vv_assign(*this,v); 09757 } 09758 09760 scimatrix_subv& operator=(const civector& v) { 09761 return svf_vv_assign(*this,v); 09762 } 09763 09765 scimatrix_subv& operator=(const rvector_slice& v) { 09766 return svf_vv_assign(*this,v); 09767 } 09768 09770 scimatrix_subv& operator=(const cvector_slice& v) { 09771 return svf_vv_assign(*this,v); 09772 } 09773 09775 scimatrix_subv& operator=(const ivector_slice& v) { 09776 return svf_vv_assign(*this,v); 09777 } 09778 09780 scimatrix_subv& operator=(const civector_slice& v) { 09781 return svf_vv_assign(*this,v); 09782 } 09783 09785 scimatrix_subv& operator=(const srmatrix_subv& v) { 09786 return svsp_vv_assign(*this,srvector(v)); 09787 } 09788 09790 scimatrix_subv& operator=(const simatrix_subv& v) { 09791 return svsp_vv_assign(*this,sivector(v)); 09792 } 09793 09795 scimatrix_subv& operator=(const scmatrix_subv& v) { 09796 return svsp_vv_assign(*this,scvector(v)); 09797 } 09798 09800 scimatrix_subv& operator=(const scimatrix_subv& v) { 09801 return svsp_vv_assign(*this,scivector(v)); 09802 } 09803 09805 scimatrix_subv& operator*=(const real&); 09807 scimatrix_subv& operator*=(const complex&); 09809 scimatrix_subv& operator*=(const interval&); 09811 scimatrix_subv& operator*=(const cinterval&); 09813 scimatrix_subv& operator/=(const real&); 09815 scimatrix_subv& operator/=(const complex&); 09817 scimatrix_subv& operator/=(const interval&); 09819 scimatrix_subv& operator/=(const cinterval&); 09821 scimatrix_subv& operator+=(const srvector&); 09823 scimatrix_subv& operator+=(const srvector_slice&); 09825 scimatrix_subv& operator+=(const rvector&); 09827 scimatrix_subv& operator+=(const rvector_slice&); 09829 scimatrix_subv& operator-=(const srvector&); 09831 scimatrix_subv& operator-=(const srvector_slice&); 09833 scimatrix_subv& operator-=(const rvector&); 09835 scimatrix_subv& operator-=(const rvector_slice&); 09837 scimatrix_subv& operator+=(const scvector&); 09839 scimatrix_subv& operator+=(const scvector_slice&); 09841 scimatrix_subv& operator+=(const cvector&); 09843 scimatrix_subv& operator+=(const cvector_slice&); 09845 scimatrix_subv& operator-=(const scvector&); 09847 scimatrix_subv& operator-=(const scvector_slice&); 09849 scimatrix_subv& operator-=(const cvector&); 09851 scimatrix_subv& operator-=(const cvector_slice&); 09853 scimatrix_subv& operator+=(const sivector&); 09855 scimatrix_subv& operator+=(const sivector_slice&); 09857 scimatrix_subv& operator+=(const ivector&); 09859 scimatrix_subv& operator+=(const ivector_slice&); 09861 scimatrix_subv& operator-=(const sivector&); 09863 scimatrix_subv& operator-=(const sivector_slice&); 09865 scimatrix_subv& operator-=(const ivector&); 09867 scimatrix_subv& operator-=(const ivector_slice&); 09869 scimatrix_subv& operator+=(const scivector&); 09871 scimatrix_subv& operator+=(const scivector_slice&); 09873 scimatrix_subv& operator+=(const civector&); 09875 scimatrix_subv& operator+=(const civector_slice&); 09877 scimatrix_subv& operator-=(const scivector&); 09879 scimatrix_subv& operator-=(const scivector_slice&); 09881 scimatrix_subv& operator-=(const civector&); 09883 scimatrix_subv& operator-=(const civector_slice&); 09885 scimatrix_subv& operator|=(const srvector&); 09887 scimatrix_subv& operator|=(const srvector_slice&); 09889 scimatrix_subv& operator|=(const rvector&); 09891 scimatrix_subv& operator|=(const rvector_slice&); 09893 scimatrix_subv& operator|=(const scvector&); 09895 scimatrix_subv& operator|=(const scvector_slice&); 09897 scimatrix_subv& operator|=(const cvector&); 09899 scimatrix_subv& operator|=(const cvector_slice&); 09901 scimatrix_subv& operator|=(const sivector&); 09903 scimatrix_subv& operator|=(const sivector_slice&); 09905 scimatrix_subv& operator|=(const ivector&); 09907 scimatrix_subv& operator|=(const ivector_slice&); 09909 scimatrix_subv& operator|=(const scivector&); 09911 scimatrix_subv& operator|=(const scivector_slice&); 09913 scimatrix_subv& operator|=(const civector&); 09915 scimatrix_subv& operator|=(const civector_slice&); 09916 09917 friend scivector operator-(const scimatrix_subv&); 09918 09919 friend std::istream& operator>>(std::istream&, scimatrix_subv&); 09920 09921 friend int Lb(const scimatrix_subv&); 09922 friend int Ub(const scimatrix_subv&); 09923 friend int VecLen(const scimatrix_subv&); 09924 friend sivector Re(const scimatrix_subv&); 09925 friend sivector Im(const scimatrix_subv&); 09926 friend scvector Inf(const scimatrix_subv&); 09927 friend scvector Sup(const scimatrix_subv&); 09928 friend srvector InfRe(const scimatrix_subv&); 09929 friend srvector InfIm(const scimatrix_subv&); 09930 friend srvector SupRe(const scimatrix_subv&); 09931 friend srvector SupIm(const scimatrix_subv&); 09932 09933 friend class srvector; 09934 friend class srmatrix; 09935 friend class srmatrix_slice; 09936 friend class scvector; 09937 friend class scmatrix; 09938 friend class scmatrix_slice; 09939 friend class sivector; 09940 friend class simatrix; 09941 friend class simatrix_slice; 09942 friend class scivector; 09943 friend class scimatrix; 09944 friend class scimatrix_slice; 09945 09946 #include "vector_friend_declarations.inl" 09947 }; 09948 09950 inline int Lb(const scimatrix_subv& S) { 09951 if(S.row) 09952 return Lb(S.dat, 2); 09953 else 09954 return Lb(S.dat, 1); 09955 } 09956 09958 inline int Ub(const scimatrix_subv& S) { 09959 if(S.row) 09960 return Ub(S.dat, 2); 09961 else 09962 return Ub(S.dat, 1); 09963 } 09964 09966 inline int VecLen(const scimatrix_subv& S) { 09967 return Ub(S)-Lb(S)+1; 09968 } 09969 09971 inline sivector Re(const scimatrix_subv& S) { 09972 return Re(scivector(S)); 09973 } 09974 09976 inline sivector Im(const scimatrix_subv& S) { 09977 return Im(scivector(S)); 09978 } 09979 09981 inline scivector conj(const scimatrix_subv& S) { 09982 return conj(scivector(S)); 09983 } 09984 09986 inline sivector abs(const scimatrix_subv& S) { 09987 return abs(scivector(S)); 09988 } 09989 09991 inline scvector mid(const scimatrix_subv& S) { 09992 return mid(scivector(S)); 09993 } 09994 09996 inline scvector diam(const scimatrix_subv& S) { 09997 return diam(scivector(S)); 09998 } 09999 10001 inline scvector Inf(const scimatrix_subv& S) { 10002 return Inf(scivector(S)); 10003 } 10004 10006 inline scvector Sup(const scimatrix_subv& S) { 10007 return Sup(scivector(S)); 10008 } 10009 10011 inline srvector InfRe(const scimatrix_subv& S) { 10012 return InfRe(scivector(S)); 10013 } 10014 10016 inline srvector InfIm(const scimatrix_subv& S) { 10017 return InfIm(scivector(S)); 10018 } 10019 10021 inline srvector SupRe(const scimatrix_subv& S) { 10022 return SupRe(scivector(S)); 10023 } 10024 10026 inline srvector SupIm(const scimatrix_subv& S) { 10027 return SupIm(scivector(S)); 10028 } 10029 10031 inline std::ostream& operator<<(std::ostream& os, const scimatrix_subv& v) { 10032 os << scivector(v); 10033 return os; 10034 } 10035 10037 inline std::istream& operator>>(std::istream& is, scimatrix_subv& v) { 10038 int n=0; 10039 if(v.row) n=v.dat.A.n; else n=v.dat.A.m; 10040 scivector tmp(n); 10041 is >> tmp; 10042 v = tmp; 10043 return is; 10044 } 10045 10046 inline scimatrix_subv scimatrix::operator[](const cxscmatrix_column& c) { 10047 #if(CXSC_INDEX_CHECK) 10048 if(c.col()<lb2 || c.col()>ub2) 10049 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const cxscmatrix_column&)")); 10050 #endif 10051 return scimatrix_subv(*this, false, lb1, ub1, c.col(), c.col()); 10052 } 10053 10054 inline scimatrix_subv scimatrix::operator[](const int i) { 10055 #if(CXSC_INDEX_CHECK) 10056 if(i<lb1 || i>ub1) 10057 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const int)")); 10058 #endif 10059 return scimatrix_subv(*this, true, i, i, lb2, ub2); 10060 } 10061 10062 inline const scimatrix_subv scimatrix::operator[](const cxscmatrix_column& c) const{ 10063 #if(CXSC_INDEX_CHECK) 10064 if(c.col()<lb2 || c.col()>ub2) 10065 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const cxscmatrix_column&)")); 10066 #endif 10067 return scimatrix_subv(*this, false, lb1, ub1, c.col(), c.col()); 10068 } 10069 10070 inline const scimatrix_subv scimatrix::operator[](const int i) const{ 10071 #if(CXSC_INDEX_CHECK) 10072 if(i<lb1 || i>ub1) 10073 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix::operator[](const int)")); 10074 #endif 10075 return scimatrix_subv(*this, true, i, i, lb2, ub2); 10076 } 10077 10078 inline scimatrix_subv scimatrix_slice::operator[](const int i) { 10079 #if(CXSC_INDEX_CHECK) 10080 if(i<A.lb1 || i>A.ub1) 10081 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const int)")); 10082 #endif 10083 return scimatrix_subv(*M, true, i, i, A.lb2, A.ub2); 10084 } 10085 10086 inline scimatrix_subv scimatrix_slice::operator[](const cxscmatrix_column& c) { 10087 #if(CXSC_INDEX_CHECK) 10088 if(c.col()<A.lb2 || c.col()>A.ub2) 10089 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const cxscmatrix_column&)")); 10090 #endif 10091 return scimatrix_subv(*M, false, A.lb1, A.ub1, c.col(), c.col()); 10092 } 10093 10094 inline const scimatrix_subv scimatrix_slice::operator[](const int i) const { 10095 #if(CXSC_INDEX_CHECK) 10096 if(i<A.lb1 || i>A.ub1) 10097 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const int)")); 10098 #endif 10099 return scimatrix_subv(*M, true, i, i, A.lb2, A.ub2); 10100 } 10101 10102 inline const scimatrix_subv scimatrix_slice::operator[](const cxscmatrix_column& c) const { 10103 #if(CXSC_INDEX_CHECK) 10104 if(c.col()<A.lb2 || c.col()>A.ub2) 10105 cxscthrow(ROW_OR_COL_NOT_IN_MAT("scimatrix_slice::operator[](const cxscmatrix_column&)")); 10106 #endif 10107 return scimatrix_subv(*M, false, A.lb1, A.ub1, c.col(), c.col()); 10108 } 10109 10110 inline scivector::scivector(const scimatrix_subv& A) { 10111 int nnz = A.dat.A.get_nnz(); 10112 p.reserve(nnz); 10113 x.reserve(nnz); 10114 10115 if(A.row) { 10116 lb = A.dat.A.lb2; 10117 ub = A.dat.A.ub2; 10118 n = ub-lb+1; 10119 10120 for(int j=0 ; j<n ; j++) { 10121 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) { 10122 p.push_back(j); 10123 x.push_back(A.dat.A.x[k]); 10124 } 10125 } 10126 10127 } else { 10128 lb = A.dat.A.lb1; 10129 ub = A.dat.A.ub1; 10130 n = ub-lb+1; 10131 10132 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) { 10133 p.push_back(A.dat.A.ind[k]); 10134 x.push_back(A.dat.A.x[k]); 10135 } 10136 } 10137 } 10138 10139 inline scivector::scivector(const srmatrix_subv& A) { 10140 int nnz = A.dat.A.get_nnz(); 10141 p.reserve(nnz); 10142 x.reserve(nnz); 10143 10144 if(A.row) { 10145 lb = A.dat.A.lb2; 10146 ub = A.dat.A.ub2; 10147 n = ub-lb+1; 10148 10149 for(int j=0 ; j<n ; j++) { 10150 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) { 10151 p.push_back(j); 10152 x.push_back(cinterval(A.dat.A.x[k])); 10153 } 10154 } 10155 10156 } else { 10157 lb = A.dat.A.lb1; 10158 ub = A.dat.A.ub1; 10159 n = ub-lb+1; 10160 10161 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) { 10162 p.push_back(A.dat.A.ind[k]); 10163 x.push_back(cinterval(A.dat.A.x[k])); 10164 } 10165 } 10166 } 10167 10168 inline scivector::scivector(const simatrix_subv& A) { 10169 int nnz = A.dat.A.get_nnz(); 10170 p.reserve(nnz); 10171 x.reserve(nnz); 10172 10173 if(A.row) { 10174 lb = A.dat.A.lb2; 10175 ub = A.dat.A.ub2; 10176 n = ub-lb+1; 10177 10178 for(int j=0 ; j<n ; j++) { 10179 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) { 10180 p.push_back(j); 10181 x.push_back(cinterval(A.dat.A.x[k])); 10182 } 10183 } 10184 10185 } else { 10186 lb = A.dat.A.lb1; 10187 ub = A.dat.A.ub1; 10188 n = ub-lb+1; 10189 10190 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) { 10191 p.push_back(A.dat.A.ind[k]); 10192 x.push_back(cinterval(A.dat.A.x[k])); 10193 } 10194 } 10195 } 10196 10197 inline scivector::scivector(const scmatrix_subv& A) { 10198 int nnz = A.dat.A.get_nnz(); 10199 p.reserve(nnz); 10200 x.reserve(nnz); 10201 10202 if(A.row) { 10203 lb = A.dat.A.lb2; 10204 ub = A.dat.A.ub2; 10205 n = ub-lb+1; 10206 10207 for(int j=0 ; j<n ; j++) { 10208 for(int k=A.dat.A.p[j] ; k<A.dat.A.p[j+1] ; k++) { 10209 p.push_back(j); 10210 x.push_back(cinterval(A.dat.A.x[k])); 10211 } 10212 } 10213 10214 } else { 10215 lb = A.dat.A.lb1; 10216 ub = A.dat.A.ub1; 10217 n = ub-lb+1; 10218 10219 for(unsigned int k=0 ; k<A.dat.A.ind.size() ; k++) { 10220 p.push_back(A.dat.A.ind[k]); 10221 x.push_back(cinterval(A.dat.A.x[k])); 10222 } 10223 } 10224 } 10225 10227 inline scivector operator-(const scimatrix_subv& v) { 10228 scivector s(v); 10229 return -s; 10230 } 10231 10233 inline scivector operator/(const scimatrix_subv& v1, const real& v2) { 10234 return scivector(v1) / v2; 10235 } 10236 10238 inline scivector operator/(const scimatrix_subv& v1, const complex& v2) { 10239 return scivector(v1) / v2; 10240 } 10241 10243 inline scivector operator/(const scimatrix_subv& v1, const interval& v2) { 10244 return scivector(v1) / v2; 10245 } 10246 10248 inline scivector operator/(const scimatrix_subv& v1, const cinterval& v2) { 10249 return scivector(v1) / v2; 10250 } 10251 10253 inline scivector operator/(const srmatrix_subv& v1, const cinterval& v2) { 10254 return srvector(v1) / v2; 10255 } 10256 10258 inline scivector operator/(const scmatrix_subv& v1, const cinterval& v2) { 10259 return scvector(v1) / v2; 10260 } 10261 10263 inline scivector operator/(const simatrix_subv& v1, const cinterval& v2) { 10264 return sivector(v1) / v2; 10265 } 10266 10268 inline scivector operator/(const simatrix_subv& v1, const complex& v2) { 10269 return sivector(v1) / v2; 10270 } 10271 10273 inline scivector operator/(const scmatrix_subv& v1, const interval& v2) { 10274 return scvector(v1) / v2; 10275 } 10276 10278 inline scivector operator*(const scimatrix_subv& v1, const real& v2) { 10279 return scivector(v1) * v2; 10280 } 10281 10283 inline scivector operator*(const scimatrix_subv& v1, const complex& v2) { 10284 return scivector(v1) * v2; 10285 } 10286 10288 inline scivector operator*(const scimatrix_subv& v1, const interval& v2) { 10289 return scivector(v1) * v2; 10290 } 10291 10293 inline scivector operator*(const scimatrix_subv& v1, const cinterval& v2) { 10294 return scivector(v1) * v2; 10295 } 10296 10298 inline scivector operator*(const srmatrix_subv& v1, const cinterval& v2) { 10299 return srvector(v1) * v2; 10300 } 10301 10303 inline scivector operator*(const scmatrix_subv& v1, const cinterval& v2) { 10304 return scvector(v1) * v2; 10305 } 10306 10308 inline scivector operator*(const simatrix_subv& v1, const cinterval& v2) { 10309 return sivector(v1) * v2; 10310 } 10311 10313 inline scivector operator*(const simatrix_subv& v1, const complex& v2) { 10314 return sivector(v1) * v2; 10315 } 10316 10318 inline scivector operator*(const scmatrix_subv& v1, const interval& v2) { 10319 return scvector(v1) * v2; 10320 } 10321 10323 inline scivector operator*(const real& v1, const scimatrix_subv& v2) { 10324 return v1 * scivector(v2); 10325 } 10326 10328 inline scivector operator*(const complex& v1, const scimatrix_subv& v2) { 10329 return v1 * scivector(v2); 10330 } 10331 10333 inline scivector operator*(const interval& v1, const scimatrix_subv& v2) { 10334 return v1 * scivector(v2); 10335 } 10336 10338 inline scivector operator*(const cinterval& v1, const scimatrix_subv& v2) { 10339 return v1 * scivector(v2); 10340 } 10341 10343 inline scivector operator*(const cinterval& v1, const srmatrix_subv& v2) { 10344 return v1 * srvector(v2); 10345 } 10346 10348 inline scivector operator*(const cinterval& v1, const scmatrix_subv& v2) { 10349 return v1 * scvector(v2); 10350 } 10351 10353 inline scivector operator*(const cinterval& v1, const simatrix_subv& v2) { 10354 return v1 * sivector(v2); 10355 } 10356 10358 inline scivector operator*(const complex& v1, const simatrix_subv& v2) { 10359 return v1 * sivector(v2); 10360 } 10361 10363 inline scivector operator*(const interval& v1, const scmatrix_subv& v2) { 10364 return v1 * scvector(v2); 10365 } 10366 10368 10374 inline cinterval operator*(const scimatrix_subv& v1, const srvector& v2) { 10375 return scivector(v1) * v2; 10376 } 10377 10379 10385 inline cinterval operator*(const scimatrix_subv& v1, const scvector& v2) { 10386 return scivector(v1) * v2; 10387 } 10388 10390 10396 inline cinterval operator*(const scimatrix_subv& v1, const sivector& v2) { 10397 return scivector(v1) * v2; 10398 } 10399 10401 10407 inline cinterval operator*(const scimatrix_subv& v1, const scivector& v2) { 10408 return scivector(v1) * v2; 10409 } 10410 10412 10418 inline cinterval operator*(const srmatrix_subv& v1, const scivector& v2) { 10419 return srvector(v1) * v2; 10420 } 10421 10423 10429 inline cinterval operator*(const scmatrix_subv& v1, const scivector& v2) { 10430 return scvector(v1) * v2; 10431 } 10432 10434 10440 inline cinterval operator*(const simatrix_subv& v1, const scivector& v2) { 10441 return sivector(v1) * v2; 10442 } 10443 10445 10451 inline cinterval operator*(const scmatrix_subv& v1, const sivector& v2) { 10452 return scvector(v1) * v2; 10453 } 10454 10456 10462 inline cinterval operator*(const simatrix_subv& v1, const scvector& v2) { 10463 return sivector(v1) * v2; 10464 } 10465 10467 10473 inline cinterval operator*(const scimatrix_subv& v1, const srvector_slice& v2) { 10474 return scivector(v1) * v2; 10475 } 10476 10478 10484 inline cinterval operator*(const scimatrix_subv& v1, const scvector_slice& v2) { 10485 return scivector(v1) * v2; 10486 } 10487 10489 10495 inline cinterval operator*(const scimatrix_subv& v1, const sivector_slice& v2) { 10496 return scivector(v1) * v2; 10497 } 10498 10500 10506 inline cinterval operator*(const scimatrix_subv& v1, const scivector_slice& v2) { 10507 return scivector(v1) * v2; 10508 } 10509 10511 10517 inline cinterval operator*(const srmatrix_subv& v1, const scivector_slice& v2) { 10518 return srvector(v1) * v2; 10519 } 10520 10522 10528 inline cinterval operator*(const scmatrix_subv& v1, const scivector_slice& v2) { 10529 return scvector(v1) * v2; 10530 } 10531 10533 10539 inline cinterval operator*(const simatrix_subv& v1, const scivector_slice& v2) { 10540 return sivector(v1) * v2; 10541 } 10542 10544 10550 inline cinterval operator*(const scmatrix_subv& v1, const sivector_slice& v2) { 10551 return scvector(v1) * v2; 10552 } 10553 10555 10561 inline cinterval operator*(const simatrix_subv& v1, const scvector_slice& v2) { 10562 return sivector(v1) * v2; 10563 } 10564 10566 10572 inline cinterval operator*(const scimatrix_subv& v1, const rvector& v2) { 10573 return scivector(v1) * v2; 10574 } 10575 10577 10583 inline cinterval operator*(const scimatrix_subv& v1, const ivector& v2) { 10584 return scivector(v1) * v2; 10585 } 10586 10588 10594 inline cinterval operator*(const scimatrix_subv& v1, const cvector& v2) { 10595 return scivector(v1) * v2; 10596 } 10597 10599 10605 inline cinterval operator*(const scimatrix_subv& v1, const civector& v2) { 10606 return scivector(v1) * v2; 10607 } 10608 10610 10616 inline cinterval operator*(const srmatrix_subv& v1, const civector& v2) { 10617 return srvector(v1) * v2; 10618 } 10619 10621 10627 inline cinterval operator*(const simatrix_subv& v1, const civector& v2) { 10628 return sivector(v1) * v2; 10629 } 10630 10632 10638 inline cinterval operator*(const scmatrix_subv& v1, const civector& v2) { 10639 return scvector(v1) * v2; 10640 } 10641 10643 10649 inline cinterval operator*(const scmatrix_subv& v1, const ivector& v2) { 10650 return scvector(v1) * v2; 10651 } 10652 10654 10660 inline cinterval operator*(const simatrix_subv& v1, const cvector& v2) { 10661 return sivector(v1) * v2; 10662 } 10663 10665 10671 inline cinterval operator*(const scimatrix_subv& v1, const rvector_slice& v2) { 10672 return scivector(v1) * v2; 10673 } 10674 10676 10682 inline cinterval operator*(const scimatrix_subv& v1, const ivector_slice& v2) { 10683 return scivector(v1) * v2; 10684 } 10685 10687 10693 inline cinterval operator*(const scimatrix_subv& v1, const cvector_slice& v2) { 10694 return scivector(v1) * v2; 10695 } 10696 10698 10704 inline cinterval operator*(const scimatrix_subv& v1, const civector_slice& v2) { 10705 return scivector(v1) * v2; 10706 } 10707 10709 10715 inline cinterval operator*(const srmatrix_subv& v1, const civector_slice& v2) { 10716 return srvector(v1) * v2; 10717 } 10718 10720 10726 inline cinterval operator*(const scmatrix_subv& v1, const civector_slice& v2) { 10727 return scvector(v1) * v2; 10728 } 10729 10731 10737 inline cinterval operator*(const simatrix_subv& v1, const civector_slice& v2) { 10738 return sivector(v1) * v2; 10739 } 10740 10742 10748 inline cinterval operator*(const scmatrix_subv& v1, const ivector_slice& v2) { 10749 return scvector(v1) * v2; 10750 } 10751 10753 10759 inline cinterval operator*(const simatrix_subv& v1, const cvector_slice& v2) { 10760 return sivector(v1) * v2; 10761 } 10762 10764 10770 inline cinterval operator*(const scivector& v1, const srmatrix_subv& v2) { 10771 return v1 * srvector(v2); 10772 } 10773 10775 10781 inline cinterval operator*(const scivector& v1, const scmatrix_subv& v2) { 10782 return v1 * scvector(v2); 10783 } 10784 10786 10792 inline cinterval operator*(const scivector& v1, const simatrix_subv& v2) { 10793 return v1 * sivector(v2); 10794 } 10795 10797 10803 inline cinterval operator*(const scivector& v1, const scimatrix_subv& v2) { 10804 return v1 * scivector(v2); 10805 } 10806 10808 10814 inline cinterval operator*(const srvector& v1, const scimatrix_subv& v2) { 10815 return v1 * scivector(v2); 10816 } 10817 10819 10825 inline cinterval operator*(const scvector& v1, const scimatrix_subv& v2) { 10826 return v1 * scivector(v2); 10827 } 10828 10830 10836 inline cinterval operator*(const sivector& v1, const scimatrix_subv& v2) { 10837 return v1 * scivector(v2); 10838 } 10839 10841 10847 inline cinterval operator*(const scvector& v1, const simatrix_subv& v2) { 10848 return v1 * sivector(v2); 10849 } 10850 10852 10858 inline cinterval operator*(const sivector& v1, const scmatrix_subv& v2) { 10859 return v1 * scvector(v2); 10860 } 10861 10863 10869 inline cinterval operator*(const scivector_slice& v1, const srmatrix_subv& v2) { 10870 return v1 * srvector(v2); 10871 } 10872 10874 10880 inline cinterval operator*(const scivector_slice& v1, const scmatrix_subv& v2) { 10881 return v1 * scvector(v2); 10882 } 10883 10885 10891 inline cinterval operator*(const scivector_slice& v1, const simatrix_subv& v2) { 10892 return v1 * sivector(v2); 10893 } 10894 10896 10902 inline cinterval operator*(const scivector_slice& v1, const scimatrix_subv& v2) { 10903 return v1 * scivector(v2); 10904 } 10905 10907 10913 inline cinterval operator*(const srvector_slice& v1, const scimatrix_subv& v2) { 10914 return v1 * scivector(v2); 10915 } 10916 10918 10924 inline cinterval operator*(const sivector_slice& v1, const scimatrix_subv& v2) { 10925 return v1 * scivector(v2); 10926 } 10927 10929 10935 inline cinterval operator*(const scvector_slice& v1, const scimatrix_subv& v2) { 10936 return v1 * scivector(v2); 10937 } 10938 10940 10946 inline cinterval operator*(const scvector_slice& v1, const simatrix_subv& v2) { 10947 return v1 * sivector(v2); 10948 } 10949 10951 10957 inline cinterval operator*(const sivector_slice& v1, const scmatrix_subv& v2) { 10958 return v1 * scvector(v2); 10959 } 10960 10962 10968 inline cinterval operator*(const civector& v1, const srmatrix_subv& v2) { 10969 return v1 * srvector(v2); 10970 } 10971 10973 10979 inline cinterval operator*(const civector& v1, const scmatrix_subv& v2) { 10980 return v1 * scvector(v2); 10981 } 10982 10984 10990 inline cinterval operator*(const civector& v1, const simatrix_subv& v2) { 10991 return v1 * sivector(v2); 10992 } 10993 10995 11001 inline cinterval operator*(const civector& v1, const scimatrix_subv& v2) { 11002 return v1 * scivector(v2); 11003 } 11004 11006 11012 inline cinterval operator*(const rvector& v1, const scimatrix_subv& v2) { 11013 return v1 * scivector(v2); 11014 } 11015 11017 11023 inline cinterval operator*(const cvector& v1, const scimatrix_subv& v2) { 11024 return v1 * scivector(v2); 11025 } 11026 11028 11034 inline cinterval operator*(const ivector& v1, const scimatrix_subv& v2) { 11035 return v1 * scivector(v2); 11036 } 11037 11039 11045 inline cinterval operator*(const ivector& v1, const scmatrix_subv& v2) { 11046 return v1 * scvector(v2); 11047 } 11048 11050 11056 inline cinterval operator*(const cvector& v1, const simatrix_subv& v2) { 11057 return v1 * sivector(v2); 11058 } 11059 11061 11067 inline cinterval operator*(const civector_slice& v1, const srmatrix_subv& v2) { 11068 return v1 * srvector(v2); 11069 } 11070 11072 11078 inline cinterval operator*(const civector_slice& v1, const scmatrix_subv& v2) { 11079 return v1 * scvector(v2); 11080 } 11081 11083 11089 inline cinterval operator*(const civector_slice& v1, const simatrix_subv& v2) { 11090 return v1 * sivector(v2); 11091 } 11092 11094 11100 inline cinterval operator*(const civector_slice& v1, const scimatrix_subv& v2) { 11101 return v1 * scivector(v2); 11102 } 11103 11105 11111 inline cinterval operator*(const rvector_slice& v1, const scimatrix_subv& v2) { 11112 return v1 * scivector(v2); 11113 } 11114 11116 11122 inline cinterval operator*(const cvector_slice& v1, const scimatrix_subv& v2) { 11123 return v1 * scivector(v2); 11124 } 11125 11127 11133 inline cinterval operator*(const ivector_slice& v1, const scimatrix_subv& v2) { 11134 return v1 * scivector(v2); 11135 } 11136 11138 11144 inline cinterval operator*(const ivector_slice& v1, const scmatrix_subv& v2) { 11145 return v1 * scvector(v2); 11146 } 11147 11149 11155 inline cinterval operator*(const cvector_slice& v1, const simatrix_subv& v2) { 11156 return v1 * sivector(v2); 11157 } 11158 11160 inline scivector operator+(const scimatrix_subv& v1, const srvector& v2) { 11161 return scivector(v1) + v2; 11162 } 11163 11165 inline scivector operator+(const scimatrix_subv& v1, const scvector& v2) { 11166 return scivector(v1) + v2; 11167 } 11168 11170 inline scivector operator+(const scimatrix_subv& v1, const sivector& v2) { 11171 return scivector(v1) + v2; 11172 } 11173 11175 inline scivector operator+(const scimatrix_subv& v1, const scivector& v2) { 11176 return scivector(v1) + v2; 11177 } 11178 11180 inline scivector operator+(const srmatrix_subv& v1, const scivector& v2) { 11181 return srvector(v1) + v2; 11182 } 11183 11185 inline scivector operator+(const scmatrix_subv& v1, const scivector& v2) { 11186 return scvector(v1) + v2; 11187 } 11188 11190 inline scivector operator+(const simatrix_subv& v1, const scivector& v2) { 11191 return sivector(v1) + v2; 11192 } 11193 11195 inline scivector operator+(const scmatrix_subv& v1, const sivector& v2) { 11196 return scvector(v1) + v2; 11197 } 11198 11200 inline scivector operator+(const simatrix_subv& v1, const scvector& v2) { 11201 return sivector(v1) + v2; 11202 } 11203 11205 inline scivector operator+(const scimatrix_subv& v1, const srvector_slice& v2) { 11206 return scivector(v1) + v2; 11207 } 11208 11210 inline scivector operator+(const scimatrix_subv& v1, const scvector_slice& v2) { 11211 return scivector(v1) + v2; 11212 } 11213 11215 inline scivector operator+(const scimatrix_subv& v1, const sivector_slice& v2) { 11216 return scivector(v1) + v2; 11217 } 11218 11220 inline scivector operator+(const scimatrix_subv& v1, const scivector_slice& v2) { 11221 return scivector(v1) + v2; 11222 } 11223 11225 inline scivector operator+(const srmatrix_subv& v1, const scivector_slice& v2) { 11226 return srvector(v1) + v2; 11227 } 11228 11230 inline scivector operator+(const scmatrix_subv& v1, const scivector_slice& v2) { 11231 return scvector(v1) + v2; 11232 } 11233 11235 inline scivector operator+(const simatrix_subv& v1, const scivector_slice& v2) { 11236 return sivector(v1) + v2; 11237 } 11238 11240 inline scivector operator+(const simatrix_subv& v1, const scvector_slice& v2) { 11241 return sivector(v1) + v2; 11242 } 11243 11245 inline scivector operator+(const scmatrix_subv& v1, const sivector_slice& v2) { 11246 return scvector(v1) + v2; 11247 } 11248 11250 inline civector operator+(const scimatrix_subv& v1, const rvector& v2) { 11251 return scivector(v1) + v2; 11252 } 11253 11255 inline civector operator+(const scimatrix_subv& v1, const cvector& v2) { 11256 return scivector(v1) + v2; 11257 } 11258 11260 inline civector operator+(const scimatrix_subv& v1, const ivector& v2) { 11261 return scivector(v1) + v2; 11262 } 11263 11265 inline civector operator+(const scimatrix_subv& v1, const civector& v2) { 11266 return scivector(v1) + v2; 11267 } 11268 11270 inline civector operator+(const srmatrix_subv& v1, const civector& v2) { 11271 return srvector(v1) + v2; 11272 } 11273 11275 inline civector operator+(const simatrix_subv& v1, const civector& v2) { 11276 return sivector(v1) + v2; 11277 } 11278 11280 inline civector operator+(const scmatrix_subv& v1, const civector& v2) { 11281 return scvector(v1) + v2; 11282 } 11283 11285 inline civector operator+(const scmatrix_subv& v1, const ivector& v2) { 11286 return scvector(v1) + v2; 11287 } 11288 11290 inline civector operator+(const simatrix_subv& v1, const cvector& v2) { 11291 return sivector(v1) + v2; 11292 } 11293 11295 inline civector operator+(const scimatrix_subv& v1, const rvector_slice& v2) { 11296 return scivector(v1) + v2; 11297 } 11298 11300 inline civector operator+(const scimatrix_subv& v1, const cvector_slice& v2) { 11301 return scivector(v1) + v2; 11302 } 11303 11305 inline civector operator+(const scimatrix_subv& v1, const ivector_slice& v2) { 11306 return scivector(v1) + v2; 11307 } 11308 11310 inline civector operator+(const scimatrix_subv& v1, const civector_slice& v2) { 11311 return scivector(v1) + v2; 11312 } 11313 11315 inline civector operator+(const srmatrix_subv& v1, const civector_slice& v2) { 11316 return srvector(v1) + v2; 11317 } 11318 11320 inline civector operator+(const scmatrix_subv& v1, const civector_slice& v2) { 11321 return scvector(v1) + v2; 11322 } 11323 11325 inline civector operator+(const simatrix_subv& v1, const civector_slice& v2) { 11326 return sivector(v1) + v2; 11327 } 11328 11330 inline civector operator+(const simatrix_subv& v1, const cvector_slice& v2) { 11331 return sivector(v1) + v2; 11332 } 11333 11335 inline civector operator+(const scmatrix_subv& v1, const ivector_slice& v2) { 11336 return scvector(v1) + v2; 11337 } 11338 11340 inline scivector operator+(const scivector& v1, const srmatrix_subv& v2) { 11341 return v1 + srvector(v2); 11342 } 11343 11345 inline scivector operator+(const scivector& v1, const scmatrix_subv& v2) { 11346 return v1 + scvector(v2); 11347 } 11348 11350 inline scivector operator+(const scivector& v1, const simatrix_subv& v2) { 11351 return v1 + sivector(v2); 11352 } 11353 11355 inline scivector operator+(const scivector& v1, const scimatrix_subv& v2) { 11356 return v1 + scivector(v2); 11357 } 11358 11360 inline scivector operator+(const srvector& v1, const scimatrix_subv& v2) { 11361 return v1 + scivector(v2); 11362 } 11363 11365 inline scivector operator+(const scvector& v1, const scimatrix_subv& v2) { 11366 return v1 + scivector(v2); 11367 } 11368 11370 inline scivector operator+(const sivector& v1, const scimatrix_subv& v2) { 11371 return v1 + scivector(v2); 11372 } 11373 11375 inline scivector operator+(const sivector& v1, const scmatrix_subv& v2) { 11376 return v1 + scvector(v2); 11377 } 11378 11380 inline scivector operator+(const scvector& v1, const simatrix_subv& v2) { 11381 return v1 + sivector(v2); 11382 } 11383 11385 inline scivector operator+(const scivector_slice& v1, const srmatrix_subv& v2) { 11386 return v1 + srvector(v2); 11387 } 11388 11390 inline scivector operator+(const scivector_slice& v1, const scmatrix_subv& v2) { 11391 return v1 + scvector(v2); 11392 } 11393 11395 inline scivector operator+(const scivector_slice& v1, const simatrix_subv& v2) { 11396 return v1 + sivector(v2); 11397 } 11398 11400 inline scivector operator+(const scivector_slice& v1, const scimatrix_subv& v2) { 11401 return v1 + scivector(v2); 11402 } 11403 11405 inline scivector operator+(const srvector_slice& v1, const scimatrix_subv& v2) { 11406 return v1 + scivector(v2); 11407 } 11408 11410 inline scivector operator+(const scvector_slice& v1, const scimatrix_subv& v2) { 11411 return v1 + scivector(v2); 11412 } 11413 11415 inline scivector operator+(const sivector_slice& v1, const scimatrix_subv& v2) { 11416 return v1 + scivector(v2); 11417 } 11418 11420 inline scivector operator+(const sivector_slice& v1, const scmatrix_subv& v2) { 11421 return v1 + scvector(v2); 11422 } 11423 11425 inline scivector operator+(const scvector_slice& v1, const simatrix_subv& v2) { 11426 return v1 + sivector(v2); 11427 } 11428 11430 inline civector operator+(const civector& v1, const srmatrix_subv& v2) { 11431 return v1 + srvector(v2); 11432 } 11433 11435 inline civector operator+(const civector& v1, const scmatrix_subv& v2) { 11436 return v1 + scvector(v2); 11437 } 11438 11440 inline civector operator+(const civector& v1, const simatrix_subv& v2) { 11441 return v1 + sivector(v2); 11442 } 11443 11445 inline civector operator+(const civector& v1, const scimatrix_subv& v2) { 11446 return v1 + scivector(v2); 11447 } 11448 11450 inline civector operator+(const rvector& v1, const scimatrix_subv& v2) { 11451 return v1 + scivector(v2); 11452 } 11453 11455 inline civector operator+(const cvector& v1, const scimatrix_subv& v2) { 11456 return v1 + scivector(v2); 11457 } 11458 11460 inline civector operator+(const ivector& v1, const scimatrix_subv& v2) { 11461 return v1 + scivector(v2); 11462 } 11463 11465 inline civector operator+(const ivector& v1, const scmatrix_subv& v2) { 11466 return v1 + scvector(v2); 11467 } 11468 11470 inline civector operator+(const cvector& v1, const simatrix_subv& v2) { 11471 return v1 + sivector(v2); 11472 } 11473 11475 inline civector operator+(const civector_slice& v1, const srmatrix_subv& v2) { 11476 return v1 + srvector(v2); 11477 } 11478 11480 inline civector operator+(const civector_slice& v1, const scmatrix_subv& v2) { 11481 return v1 + scvector(v2); 11482 } 11483 11485 inline civector operator+(const civector_slice& v1, const simatrix_subv& v2) { 11486 return v1 + sivector(v2); 11487 } 11488 11490 inline civector operator+(const civector_slice& v1, const scimatrix_subv& v2) { 11491 return v1 + scivector(v2); 11492 } 11493 11495 inline civector operator+(const rvector_slice& v1, const scimatrix_subv& v2) { 11496 return v1 + scivector(v2); 11497 } 11498 11500 inline civector operator+(const cvector_slice& v1, const scimatrix_subv& v2) { 11501 return v1 + scivector(v2); 11502 } 11503 11505 inline civector operator+(const ivector_slice& v1, const scimatrix_subv& v2) { 11506 return v1 + scivector(v2); 11507 } 11508 11510 inline civector operator+(const ivector_slice& v1, const scmatrix_subv& v2) { 11511 return v1 + scvector(v2); 11512 } 11513 11515 inline civector operator+(const cvector_slice& v1, const simatrix_subv& v2) { 11516 return v1 + sivector(v2); 11517 } 11518 11520 inline scivector operator-(const scimatrix_subv& v1, const srvector& v2) { 11521 return scivector(v1) - v2; 11522 } 11523 11525 inline scivector operator-(const scimatrix_subv& v1, const scvector& v2) { 11526 return scivector(v1) - v2; 11527 } 11528 11530 inline scivector operator-(const scimatrix_subv& v1, const sivector& v2) { 11531 return scivector(v1) - v2; 11532 } 11533 11535 inline scivector operator-(const scimatrix_subv& v1, const scivector& v2) { 11536 return scivector(v1) - v2; 11537 } 11538 11540 inline scivector operator-(const srmatrix_subv& v1, const scivector& v2) { 11541 return srvector(v1) - v2; 11542 } 11543 11545 inline scivector operator-(const scmatrix_subv& v1, const scivector& v2) { 11546 return scvector(v1) - v2; 11547 } 11548 11550 inline scivector operator-(const simatrix_subv& v1, const scivector& v2) { 11551 return sivector(v1) - v2; 11552 } 11553 11555 inline scivector operator-(const scmatrix_subv& v1, const sivector& v2) { 11556 return scvector(v1) - v2; 11557 } 11558 11560 inline scivector operator-(const simatrix_subv& v1, const scvector& v2) { 11561 return sivector(v1) - v2; 11562 } 11563 11565 inline scivector operator-(const scimatrix_subv& v1, const srvector_slice& v2) { 11566 return scivector(v1) - v2; 11567 } 11568 11570 inline scivector operator-(const scimatrix_subv& v1, const scvector_slice& v2) { 11571 return scivector(v1) - v2; 11572 } 11573 11575 inline scivector operator-(const scimatrix_subv& v1, const sivector_slice& v2) { 11576 return scivector(v1) - v2; 11577 } 11578 11580 inline scivector operator-(const scimatrix_subv& v1, const scivector_slice& v2) { 11581 return scivector(v1) - v2; 11582 } 11583 11585 inline scivector operator-(const srmatrix_subv& v1, const scivector_slice& v2) { 11586 return srvector(v1) - v2; 11587 } 11588 11590 inline scivector operator-(const scmatrix_subv& v1, const scivector_slice& v2) { 11591 return scvector(v1) - v2; 11592 } 11593 11595 inline scivector operator-(const simatrix_subv& v1, const scivector_slice& v2) { 11596 return sivector(v1) - v2; 11597 } 11598 11600 inline scivector operator-(const simatrix_subv& v1, const scvector_slice& v2) { 11601 return sivector(v1) - v2; 11602 } 11603 11605 inline scivector operator-(const scmatrix_subv& v1, const sivector_slice& v2) { 11606 return scvector(v1) - v2; 11607 } 11608 11610 inline civector operator-(const scimatrix_subv& v1, const rvector& v2) { 11611 return scivector(v1) - v2; 11612 } 11613 11615 inline civector operator-(const scimatrix_subv& v1, const cvector& v2) { 11616 return scivector(v1) - v2; 11617 } 11618 11620 inline civector operator-(const scimatrix_subv& v1, const ivector& v2) { 11621 return scivector(v1) - v2; 11622 } 11623 11625 inline civector operator-(const scimatrix_subv& v1, const civector& v2) { 11626 return scivector(v1) - v2; 11627 } 11628 11630 inline civector operator-(const srmatrix_subv& v1, const civector& v2) { 11631 return srvector(v1) - v2; 11632 } 11633 11635 inline civector operator-(const simatrix_subv& v1, const civector& v2) { 11636 return sivector(v1) - v2; 11637 } 11638 11640 inline civector operator-(const scmatrix_subv& v1, const civector& v2) { 11641 return scvector(v1) - v2; 11642 } 11643 11645 inline civector operator-(const scmatrix_subv& v1, const ivector& v2) { 11646 return scvector(v1) - v2; 11647 } 11648 11650 inline civector operator-(const simatrix_subv& v1, const cvector& v2) { 11651 return sivector(v1) - v2; 11652 } 11653 11655 inline civector operator-(const scimatrix_subv& v1, const rvector_slice& v2) { 11656 return scivector(v1) - v2; 11657 } 11658 11660 inline civector operator-(const scimatrix_subv& v1, const cvector_slice& v2) { 11661 return scivector(v1) - v2; 11662 } 11663 11665 inline civector operator-(const scimatrix_subv& v1, const ivector_slice& v2) { 11666 return scivector(v1) - v2; 11667 } 11668 11670 inline civector operator-(const scimatrix_subv& v1, const civector_slice& v2) { 11671 return scivector(v1) - v2; 11672 } 11673 11675 inline civector operator-(const srmatrix_subv& v1, const civector_slice& v2) { 11676 return srvector(v1) - v2; 11677 } 11678 11680 inline civector operator-(const scmatrix_subv& v1, const civector_slice& v2) { 11681 return scvector(v1) - v2; 11682 } 11683 11685 inline civector operator-(const simatrix_subv& v1, const civector_slice& v2) { 11686 return sivector(v1) - v2; 11687 } 11688 11690 inline civector operator-(const simatrix_subv& v1, const cvector_slice& v2) { 11691 return sivector(v1) - v2; 11692 } 11693 11695 inline civector operator-(const scmatrix_subv& v1, const ivector_slice& v2) { 11696 return scvector(v1) - v2; 11697 } 11698 11700 inline scivector operator-(const scivector& v1, const srmatrix_subv& v2) { 11701 return v1 - srvector(v2); 11702 } 11703 11705 inline scivector operator-(const scivector& v1, const scmatrix_subv& v2) { 11706 return v1 - scvector(v2); 11707 } 11708 11710 inline scivector operator-(const scivector& v1, const simatrix_subv& v2) { 11711 return v1 - sivector(v2); 11712 } 11713 11715 inline scivector operator-(const scivector& v1, const scimatrix_subv& v2) { 11716 return v1 - scivector(v2); 11717 } 11718 11720 inline scivector operator-(const srvector& v1, const scimatrix_subv& v2) { 11721 return v1 - scivector(v2); 11722 } 11723 11725 inline scivector operator-(const scvector& v1, const scimatrix_subv& v2) { 11726 return v1 - scivector(v2); 11727 } 11728 11730 inline scivector operator-(const sivector& v1, const scimatrix_subv& v2) { 11731 return v1 - scivector(v2); 11732 } 11733 11735 inline scivector operator-(const sivector& v1, const scmatrix_subv& v2) { 11736 return v1 - scvector(v2); 11737 } 11738 11740 inline scivector operator-(const scvector& v1, const simatrix_subv& v2) { 11741 return v1 - sivector(v2); 11742 } 11743 11745 inline scivector operator-(const scivector_slice& v1, const srmatrix_subv& v2) { 11746 return v1 - srvector(v2); 11747 } 11748 11750 inline scivector operator-(const scivector_slice& v1, const scmatrix_subv& v2) { 11751 return v1 - scvector(v2); 11752 } 11753 11755 inline scivector operator-(const scivector_slice& v1, const simatrix_subv& v2) { 11756 return v1 - sivector(v2); 11757 } 11758 11760 inline scivector operator-(const scivector_slice& v1, const scimatrix_subv& v2) { 11761 return v1 - scivector(v2); 11762 } 11763 11765 inline scivector operator-(const srvector_slice& v1, const scimatrix_subv& v2) { 11766 return v1 - scivector(v2); 11767 } 11768 11770 inline scivector operator-(const scvector_slice& v1, const scimatrix_subv& v2) { 11771 return v1 - scivector(v2); 11772 } 11773 11775 inline scivector operator-(const sivector_slice& v1, const scimatrix_subv& v2) { 11776 return v1 - scivector(v2); 11777 } 11778 11780 inline scivector operator-(const sivector_slice& v1, const scmatrix_subv& v2) { 11781 return v1 - scvector(v2); 11782 } 11783 11785 inline scivector operator-(const scvector_slice& v1, const simatrix_subv& v2) { 11786 return v1 - sivector(v2); 11787 } 11788 11790 inline civector operator-(const civector& v1, const srmatrix_subv& v2) { 11791 return v1 - srvector(v2); 11792 } 11793 11795 inline civector operator-(const civector& v1, const scmatrix_subv& v2) { 11796 return v1 - scvector(v2); 11797 } 11798 11800 inline civector operator-(const civector& v1, const simatrix_subv& v2) { 11801 return v1 - sivector(v2); 11802 } 11803 11805 inline civector operator-(const civector& v1, const scimatrix_subv& v2) { 11806 return v1 - scivector(v2); 11807 } 11808 11810 inline civector operator-(const rvector& v1, const scimatrix_subv& v2) { 11811 return v1 - scivector(v2); 11812 } 11813 11815 inline civector operator-(const cvector& v1, const scimatrix_subv& v2) { 11816 return v1 - scivector(v2); 11817 } 11818 11820 inline civector operator-(const ivector& v1, const scimatrix_subv& v2) { 11821 return v1 - scivector(v2); 11822 } 11823 11825 inline civector operator-(const ivector& v1, const scmatrix_subv& v2) { 11826 return v1 - scvector(v2); 11827 } 11828 11830 inline civector operator-(const cvector& v1, const simatrix_subv& v2) { 11831 return v1 - sivector(v2); 11832 } 11833 11835 inline civector operator-(const civector_slice& v1, const srmatrix_subv& v2) { 11836 return v1 - srvector(v2); 11837 } 11838 11840 inline civector operator-(const civector_slice& v1, const scmatrix_subv& v2) { 11841 return v1 - scvector(v2); 11842 } 11843 11845 inline civector operator-(const civector_slice& v1, const simatrix_subv& v2) { 11846 return v1 - sivector(v2); 11847 } 11848 11850 inline civector operator-(const civector_slice& v1, const scimatrix_subv& v2) { 11851 return v1 - scivector(v2); 11852 } 11853 11855 inline civector operator-(const rvector_slice& v1, const scimatrix_subv& v2) { 11856 return v1 - scivector(v2); 11857 } 11858 11860 inline civector operator-(const cvector_slice& v1, const scimatrix_subv& v2) { 11861 return v1 - scivector(v2); 11862 } 11863 11865 inline civector operator-(const ivector_slice& v1, const scimatrix_subv& v2) { 11866 return v1 - scivector(v2); 11867 } 11868 11870 inline civector operator-(const ivector_slice& v1, const scmatrix_subv& v2) { 11871 return v1 - scvector(v2); 11872 } 11873 11875 inline civector operator-(const cvector_slice& v1, const simatrix_subv& v2) { 11876 return v1 - sivector(v2); 11877 } 11878 11880 inline scivector operator|(const scimatrix_subv& v1, const srvector& v2) { 11881 return scivector(v1) | v2; 11882 } 11883 11885 inline scivector operator|(const scimatrix_subv& v1, const scvector& v2) { 11886 return scivector(v1) | v2; 11887 } 11888 11890 inline scivector operator|(const scimatrix_subv& v1, const sivector& v2) { 11891 return scivector(v1) | v2; 11892 } 11893 11895 inline scivector operator|(const scimatrix_subv& v1, const scivector& v2) { 11896 return scivector(v1) | v2; 11897 } 11898 11900 inline scivector operator|(const srmatrix_subv& v1, const scivector& v2) { 11901 return srvector(v1) | v2; 11902 } 11903 11905 inline scivector operator|(const scmatrix_subv& v1, const scivector& v2) { 11906 return scvector(v1) | v2; 11907 } 11908 11910 inline scivector operator|(const simatrix_subv& v1, const scivector& v2) { 11911 return sivector(v1) | v2; 11912 } 11913 11915 inline scivector operator|(const scmatrix_subv& v1, const sivector& v2) { 11916 return scvector(v1) | v2; 11917 } 11918 11920 inline scivector operator|(const simatrix_subv& v1, const scvector& v2) { 11921 return sivector(v1) | v2; 11922 } 11923 11925 inline scivector operator|(const scimatrix_subv& v1, const srvector_slice& v2) { 11926 return scivector(v1) | v2; 11927 } 11928 11930 inline scivector operator|(const scimatrix_subv& v1, const scvector_slice& v2) { 11931 return scivector(v1) | v2; 11932 } 11933 11935 inline scivector operator|(const scimatrix_subv& v1, const sivector_slice& v2) { 11936 return scivector(v1) | v2; 11937 } 11938 11940 inline scivector operator|(const scimatrix_subv& v1, const scivector_slice& v2) { 11941 return scivector(v1) | v2; 11942 } 11943 11945 inline scivector operator|(const srmatrix_subv& v1, const scivector_slice& v2) { 11946 return srvector(v1) | v2; 11947 } 11948 11950 inline scivector operator|(const scmatrix_subv& v1, const scivector_slice& v2) { 11951 return scvector(v1) | v2; 11952 } 11953 11955 inline scivector operator|(const simatrix_subv& v1, const scivector_slice& v2) { 11956 return sivector(v1) | v2; 11957 } 11958 11960 inline scivector operator|(const simatrix_subv& v1, const scvector_slice& v2) { 11961 return sivector(v1) | v2; 11962 } 11963 11965 inline scivector operator|(const scmatrix_subv& v1, const sivector_slice& v2) { 11966 return scvector(v1) | v2; 11967 } 11968 11970 inline civector operator|(const scimatrix_subv& v1, const rvector& v2) { 11971 return scivector(v1) | v2; 11972 } 11973 11975 inline civector operator|(const scimatrix_subv& v1, const cvector& v2) { 11976 return scivector(v1) | v2; 11977 } 11978 11980 inline civector operator|(const scimatrix_subv& v1, const ivector& v2) { 11981 return scivector(v1) | v2; 11982 } 11983 11985 inline civector operator|(const scimatrix_subv& v1, const civector& v2) { 11986 return scivector(v1) | v2; 11987 } 11988 11990 inline civector operator|(const srmatrix_subv& v1, const civector& v2) { 11991 return srvector(v1) | v2; 11992 } 11993 11995 inline civector operator|(const simatrix_subv& v1, const civector& v2) { 11996 return sivector(v1) | v2; 11997 } 11998 12000 inline civector operator|(const scmatrix_subv& v1, const civector& v2) { 12001 return scvector(v1) | v2; 12002 } 12003 12005 inline civector operator|(const scmatrix_subv& v1, const ivector& v2) { 12006 return scvector(v1) | v2; 12007 } 12008 12010 inline civector operator|(const simatrix_subv& v1, const cvector& v2) { 12011 return sivector(v1) | v2; 12012 } 12013 12015 inline civector operator|(const scimatrix_subv& v1, const rvector_slice& v2) { 12016 return scivector(v1) | v2; 12017 } 12018 12020 inline civector operator|(const scimatrix_subv& v1, const cvector_slice& v2) { 12021 return scivector(v1) | v2; 12022 } 12023 12025 inline civector operator|(const scimatrix_subv& v1, const ivector_slice& v2) { 12026 return scivector(v1) | v2; 12027 } 12028 12030 inline civector operator|(const scimatrix_subv& v1, const civector_slice& v2) { 12031 return scivector(v1) | v2; 12032 } 12033 12035 inline civector operator|(const srmatrix_subv& v1, const civector_slice& v2) { 12036 return srvector(v1) | v2; 12037 } 12038 12040 inline civector operator|(const scmatrix_subv& v1, const civector_slice& v2) { 12041 return scvector(v1) | v2; 12042 } 12043 12045 inline civector operator|(const simatrix_subv& v1, const civector_slice& v2) { 12046 return sivector(v1) | v2; 12047 } 12048 12050 inline civector operator|(const simatrix_subv& v1, const cvector_slice& v2) { 12051 return sivector(v1) | v2; 12052 } 12053 12055 inline civector operator|(const scmatrix_subv& v1, const ivector_slice& v2) { 12056 return scvector(v1) | v2; 12057 } 12058 12060 inline scivector operator|(const scivector& v1, const srmatrix_subv& v2) { 12061 return v1 | srvector(v2); 12062 } 12063 12065 inline scivector operator|(const scivector& v1, const scmatrix_subv& v2) { 12066 return v1 | scvector(v2); 12067 } 12068 12070 inline scivector operator|(const scivector& v1, const simatrix_subv& v2) { 12071 return v1 | sivector(v2); 12072 } 12073 12075 inline scivector operator|(const scivector& v1, const scimatrix_subv& v2) { 12076 return v1 | scivector(v2); 12077 } 12078 12080 inline scivector operator|(const srvector& v1, const scimatrix_subv& v2) { 12081 return v1 | scivector(v2); 12082 } 12083 12085 inline scivector operator|(const scvector& v1, const scimatrix_subv& v2) { 12086 return v1 | scivector(v2); 12087 } 12088 12090 inline scivector operator|(const sivector& v1, const scimatrix_subv& v2) { 12091 return v1 | scivector(v2); 12092 } 12093 12095 inline scivector operator|(const sivector& v1, const scmatrix_subv& v2) { 12096 return v1 | scvector(v2); 12097 } 12098 12100 inline scivector operator|(const scvector& v1, const simatrix_subv& v2) { 12101 return v1 | sivector(v2); 12102 } 12103 12105 inline scivector operator|(const scivector_slice& v1, const srmatrix_subv& v2) { 12106 return v1 | srvector(v2); 12107 } 12108 12110 inline scivector operator|(const scivector_slice& v1, const scmatrix_subv& v2) { 12111 return v1 | scvector(v2); 12112 } 12113 12115 inline scivector operator|(const scivector_slice& v1, const simatrix_subv& v2) { 12116 return v1 | sivector(v2); 12117 } 12118 12120 inline scivector operator|(const scivector_slice& v1, const scimatrix_subv& v2) { 12121 return v1 | scivector(v2); 12122 } 12123 12125 inline scivector operator|(const srvector_slice& v1, const scimatrix_subv& v2) { 12126 return v1 | scivector(v2); 12127 } 12128 12130 inline scivector operator|(const scvector_slice& v1, const scimatrix_subv& v2) { 12131 return v1 | scivector(v2); 12132 } 12133 12135 inline scivector operator|(const sivector_slice& v1, const scimatrix_subv& v2) { 12136 return v1 | scivector(v2); 12137 } 12138 12140 inline scivector operator|(const sivector_slice& v1, const scmatrix_subv& v2) { 12141 return v1 | scvector(v2); 12142 } 12143 12145 inline scivector operator|(const scvector_slice& v1, const simatrix_subv& v2) { 12146 return v1 | sivector(v2); 12147 } 12148 12150 inline civector operator|(const civector& v1, const srmatrix_subv& v2) { 12151 return v1 | srvector(v2); 12152 } 12153 12155 inline civector operator|(const civector& v1, const scmatrix_subv& v2) { 12156 return v1 | scvector(v2); 12157 } 12158 12160 inline civector operator|(const civector& v1, const simatrix_subv& v2) { 12161 return v1 | sivector(v2); 12162 } 12163 12165 inline civector operator|(const civector& v1, const scimatrix_subv& v2) { 12166 return v1 | scivector(v2); 12167 } 12168 12170 inline civector operator|(const rvector& v1, const scimatrix_subv& v2) { 12171 return v1 | scivector(v2); 12172 } 12173 12175 inline civector operator|(const cvector& v1, const scimatrix_subv& v2) { 12176 return v1 | scivector(v2); 12177 } 12178 12180 inline civector operator|(const ivector& v1, const scimatrix_subv& v2) { 12181 return v1 | scivector(v2); 12182 } 12183 12185 inline civector operator|(const ivector& v1, const scmatrix_subv& v2) { 12186 return v1 | scvector(v2); 12187 } 12188 12190 inline civector operator|(const cvector& v1, const simatrix_subv& v2) { 12191 return v1 | sivector(v2); 12192 } 12193 12195 inline civector operator|(const civector_slice& v1, const srmatrix_subv& v2) { 12196 return v1 | srvector(v2); 12197 } 12198 12200 inline civector operator|(const civector_slice& v1, const scmatrix_subv& v2) { 12201 return v1 | scvector(v2); 12202 } 12203 12205 inline civector operator|(const civector_slice& v1, const simatrix_subv& v2) { 12206 return v1 | sivector(v2); 12207 } 12208 12210 inline civector operator|(const civector_slice& v1, const scimatrix_subv& v2) { 12211 return v1 | scivector(v2); 12212 } 12213 12215 inline civector operator|(const rvector_slice& v1, const scimatrix_subv& v2) { 12216 return v1 | scivector(v2); 12217 } 12218 12220 inline civector operator|(const cvector_slice& v1, const scimatrix_subv& v2) { 12221 return v1 | scivector(v2); 12222 } 12223 12225 inline civector operator|(const ivector_slice& v1, const scimatrix_subv& v2) { 12226 return v1 | scivector(v2); 12227 } 12228 12230 inline civector operator|(const ivector_slice& v1, const scmatrix_subv& v2) { 12231 return v1 | scvector(v2); 12232 } 12233 12235 inline civector operator|(const cvector_slice& v1, const simatrix_subv& v2) { 12236 return v1 | sivector(v2); 12237 } 12238 12240 inline scivector operator|(const scmatrix_subv& v1, const srvector& v2) { 12241 return scvector(v1) | v2; 12242 } 12243 12245 inline scivector operator|(const srmatrix_subv& v1, const scvector& v2) { 12246 return srvector(v1) | v2; 12247 } 12248 12250 inline scivector operator|(const scmatrix_subv& v1, const scvector& v2) { 12251 return scvector(v1) | v2; 12252 } 12253 12255 inline scivector operator|(const scmatrix_subv& v1, const srvector_slice& v2) { 12256 return scvector(v1) | v2; 12257 } 12258 12260 inline scivector operator|(const srmatrix_subv& v1, const scvector_slice& v2) { 12261 return srvector(v1) | v2; 12262 } 12263 12265 inline scivector operator|(const scmatrix_subv& v1, const scvector_slice& v2) { 12266 return scvector(v1) | v2; 12267 } 12268 12270 inline civector operator|(const scmatrix_subv& v1, const rvector& v2) { 12271 return scvector(v1) | v2; 12272 } 12273 12275 inline civector operator|(const srmatrix_subv& v1, const cvector& v2) { 12276 return srvector(v1) | v2; 12277 } 12278 12280 inline civector operator|(const scmatrix_subv& v1, const cvector& v2) { 12281 return scvector(v1) | v2; 12282 } 12283 12285 inline civector operator|(const scmatrix_subv& v1, const rvector_slice& v2) { 12286 return scvector(v1) | v2; 12287 } 12288 12290 inline civector operator|(const srmatrix_subv& v1, const cvector_slice& v2) { 12291 return srvector(v1) | v2; 12292 } 12293 12295 inline civector operator|(const scmatrix_subv& v1, const cvector_slice& v2) { 12296 return scvector(v1) | v2; 12297 } 12298 12300 inline scivector operator|(const scvector& v1, const srmatrix_subv& v2) { 12301 return v1 | srvector(v2); 12302 } 12303 12305 inline scivector operator|(const srvector& v1, const scmatrix_subv& v2) { 12306 return v1 | scvector(v2); 12307 } 12308 12310 inline scivector operator|(const scvector& v1, const scmatrix_subv& v2) { 12311 return v1 | scvector(v2); 12312 } 12313 12315 inline scivector operator|(const scvector_slice& v1, const srmatrix_subv& v2) { 12316 return v1 | srvector(v2); 12317 } 12318 12320 inline scivector operator|(const srvector_slice& v1, const scmatrix_subv& v2) { 12321 return v1 | scvector(v2); 12322 } 12323 12325 inline scivector operator|(const scvector_slice& v1, const scmatrix_subv& v2) { 12326 return v1 | scvector(v2); 12327 } 12328 12330 inline civector operator|(const cvector& v1, const srmatrix_subv& v2) { 12331 return v1 | srvector(v2); 12332 } 12333 12335 inline civector operator|(const rvector& v1, const scmatrix_subv& v2) { 12336 return v1 | scvector(v2); 12337 } 12338 12340 inline civector operator|(const cvector& v1, const scmatrix_subv& v2) { 12341 return v1 | scvector(v2); 12342 } 12343 12345 inline civector operator|(const cvector_slice& v1, const srmatrix_subv& v2) { 12346 return v1 | srvector(v2); 12347 } 12348 12350 inline civector operator|(const rvector_slice& v1, const scmatrix_subv& v2) { 12351 return v1 | scvector(v2); 12352 } 12353 12355 inline civector operator|(const cvector_slice& v1, const scmatrix_subv& v2) { 12356 return v1 | scvector(v2); 12357 } 12358 12359 inline scimatrix_subv& scimatrix_subv::operator*=(const real& v) { 12360 *this = *this * v; 12361 return *this; 12362 } 12363 12364 inline scimatrix_subv& scimatrix_subv::operator*=(const complex& v) { 12365 *this = *this * v; 12366 return *this; 12367 } 12368 12369 inline scimatrix_subv& scimatrix_subv::operator*=(const interval& v) { 12370 *this = *this * v; 12371 return *this; 12372 } 12373 12374 inline scimatrix_subv& scimatrix_subv::operator*=(const cinterval& v) { 12375 *this = *this * v; 12376 return *this; 12377 } 12378 12379 inline scimatrix_subv& scimatrix_subv::operator/=(const real& v) { 12380 *this = *this / v; 12381 return *this; 12382 } 12383 12384 inline scimatrix_subv& scimatrix_subv::operator/=(const complex& v) { 12385 *this = *this / v; 12386 return *this; 12387 } 12388 12389 inline scimatrix_subv& scimatrix_subv::operator/=(const interval& v) { 12390 *this = *this / v; 12391 return *this; 12392 } 12393 12394 inline scimatrix_subv& scimatrix_subv::operator/=(const cinterval& v) { 12395 *this = *this / v; 12396 return *this; 12397 } 12398 12399 inline scimatrix_subv& scimatrix_subv::operator+=(const srvector& v) { 12400 *this = *this + v; 12401 return *this; 12402 } 12403 12404 inline scimatrix_subv& scimatrix_subv::operator+=(const srvector_slice& v) { 12405 *this = *this + v; 12406 return *this; 12407 } 12408 12409 inline scimatrix_subv& scimatrix_subv::operator+=(const rvector& v) { 12410 *this = *this + v; 12411 return *this; 12412 } 12413 12414 inline scimatrix_subv& scimatrix_subv::operator+=(const rvector_slice& v) { 12415 *this = *this + v; 12416 return *this; 12417 } 12418 12419 inline scimatrix_subv& scimatrix_subv::operator-=(const srvector& v) { 12420 *this = *this - v; 12421 return *this; 12422 } 12423 12424 inline scimatrix_subv& scimatrix_subv::operator-=(const srvector_slice& v) { 12425 *this = *this - v; 12426 return *this; 12427 } 12428 12429 inline scimatrix_subv& scimatrix_subv::operator-=(const rvector& v) { 12430 *this = *this - v; 12431 return *this; 12432 } 12433 12434 inline scimatrix_subv& scimatrix_subv::operator-=(const rvector_slice& v) { 12435 *this = *this - v; 12436 return *this; 12437 } 12438 12439 inline scimatrix_subv& scimatrix_subv::operator+=(const scvector& v) { 12440 *this = *this + v; 12441 return *this; 12442 } 12443 12444 inline scimatrix_subv& scimatrix_subv::operator+=(const scvector_slice& v) { 12445 *this = *this + v; 12446 return *this; 12447 } 12448 12449 inline scimatrix_subv& scimatrix_subv::operator+=(const cvector& v) { 12450 *this = *this + v; 12451 return *this; 12452 } 12453 12454 inline scimatrix_subv& scimatrix_subv::operator+=(const cvector_slice& v) { 12455 *this = *this + v; 12456 return *this; 12457 } 12458 12459 inline scimatrix_subv& scimatrix_subv::operator-=(const scvector& v) { 12460 *this = *this - v; 12461 return *this; 12462 } 12463 12464 inline scimatrix_subv& scimatrix_subv::operator-=(const scvector_slice& v) { 12465 *this = *this - v; 12466 return *this; 12467 } 12468 12469 inline scimatrix_subv& scimatrix_subv::operator-=(const cvector& v) { 12470 *this = *this - v; 12471 return *this; 12472 } 12473 12474 inline scimatrix_subv& scimatrix_subv::operator-=(const cvector_slice& v) { 12475 *this = *this - v; 12476 return *this; 12477 } 12478 12479 inline scimatrix_subv& scimatrix_subv::operator+=(const sivector& v) { 12480 *this = *this + v; 12481 return *this; 12482 } 12483 12484 inline scimatrix_subv& scimatrix_subv::operator+=(const sivector_slice& v) { 12485 *this = *this + v; 12486 return *this; 12487 } 12488 12489 inline scimatrix_subv& scimatrix_subv::operator+=(const ivector& v) { 12490 *this = *this + v; 12491 return *this; 12492 } 12493 12494 inline scimatrix_subv& scimatrix_subv::operator+=(const ivector_slice& v) { 12495 *this = *this + v; 12496 return *this; 12497 } 12498 12499 inline scimatrix_subv& scimatrix_subv::operator-=(const sivector& v) { 12500 *this = *this - v; 12501 return *this; 12502 } 12503 12504 inline scimatrix_subv& scimatrix_subv::operator-=(const sivector_slice& v) { 12505 *this = *this - v; 12506 return *this; 12507 } 12508 12509 inline scimatrix_subv& scimatrix_subv::operator-=(const ivector& v) { 12510 *this = *this - v; 12511 return *this; 12512 } 12513 12514 inline scimatrix_subv& scimatrix_subv::operator-=(const ivector_slice& v) { 12515 *this = *this - v; 12516 return *this; 12517 } 12518 12519 inline scimatrix_subv& scimatrix_subv::operator+=(const scivector& v) { 12520 *this = *this + v; 12521 return *this; 12522 } 12523 12524 inline scimatrix_subv& scimatrix_subv::operator+=(const scivector_slice& v) { 12525 *this = *this + v; 12526 return *this; 12527 } 12528 12529 inline scimatrix_subv& scimatrix_subv::operator+=(const civector& v) { 12530 *this = *this + v; 12531 return *this; 12532 } 12533 12534 inline scimatrix_subv& scimatrix_subv::operator+=(const civector_slice& v) { 12535 *this = *this + v; 12536 return *this; 12537 } 12538 12539 inline scimatrix_subv& scimatrix_subv::operator-=(const scivector& v) { 12540 *this = *this - v; 12541 return *this; 12542 } 12543 12544 inline scimatrix_subv& scimatrix_subv::operator-=(const scivector_slice& v) { 12545 *this = *this - v; 12546 return *this; 12547 } 12548 12549 inline scimatrix_subv& scimatrix_subv::operator-=(const civector& v) { 12550 *this = *this - v; 12551 return *this; 12552 } 12553 12554 inline scimatrix_subv& scimatrix_subv::operator-=(const civector_slice& v) { 12555 *this = *this - v; 12556 return *this; 12557 } 12558 12559 inline scimatrix_subv& scimatrix_subv::operator|=(const srvector& v) { 12560 *this = *this | v; 12561 return *this; 12562 } 12563 12564 inline scimatrix_subv& scimatrix_subv::operator|=(const srvector_slice& v) { 12565 *this = *this | v; 12566 return *this; 12567 } 12568 12569 inline scimatrix_subv& scimatrix_subv::operator|=(const rvector& v) { 12570 *this = *this | v; 12571 return *this; 12572 } 12573 12574 inline scimatrix_subv& scimatrix_subv::operator|=(const rvector_slice& v) { 12575 *this = *this | v; 12576 return *this; 12577 } 12578 12579 inline scimatrix_subv& scimatrix_subv::operator|=(const sivector& v) { 12580 *this = *this | v; 12581 return *this; 12582 } 12583 12584 inline scimatrix_subv& scimatrix_subv::operator|=(const sivector_slice& v) { 12585 *this = *this | v; 12586 return *this; 12587 } 12588 12589 inline scimatrix_subv& scimatrix_subv::operator|=(const ivector& v) { 12590 *this = *this | v; 12591 return *this; 12592 } 12593 12594 inline scimatrix_subv& scimatrix_subv::operator|=(const ivector_slice& v) { 12595 *this = *this | v; 12596 return *this; 12597 } 12598 12599 inline scimatrix_subv& scimatrix_subv::operator|=(const scvector& v) { 12600 *this = *this | v; 12601 return *this; 12602 } 12603 12604 inline scimatrix_subv& scimatrix_subv::operator|=(const scvector_slice& v) { 12605 *this = *this | v; 12606 return *this; 12607 } 12608 12609 inline scimatrix_subv& scimatrix_subv::operator|=(const cvector& v) { 12610 *this = *this | v; 12611 return *this; 12612 } 12613 12614 inline scimatrix_subv& scimatrix_subv::operator|=(const cvector_slice& v) { 12615 *this = *this | v; 12616 return *this; 12617 } 12618 12619 inline scimatrix_subv& scimatrix_subv::operator|=(const scivector& v) { 12620 *this = *this | v; 12621 return *this; 12622 } 12623 12624 inline scimatrix_subv& scimatrix_subv::operator|=(const scivector_slice& v) { 12625 *this = *this | v; 12626 return *this; 12627 } 12628 12629 inline scimatrix_subv& scimatrix_subv::operator|=(const civector& v) { 12630 *this = *this | v; 12631 return *this; 12632 } 12633 12634 inline scimatrix_subv& scimatrix_subv::operator|=(const civector_slice& v) { 12635 *this = *this | v; 12636 return *this; 12637 } 12638 12639 inline cimatrix_subv& cimatrix_subv::operator+=(const srmatrix_subv& v) { 12640 *this += rvector(v); 12641 return *this; 12642 } 12643 12644 inline cimatrix_subv& cimatrix_subv::operator+=(const scmatrix_subv& v) { 12645 *this += cvector(v); 12646 return *this; 12647 } 12648 12649 inline cimatrix_subv& cimatrix_subv::operator+=(const simatrix_subv& v) { 12650 *this += ivector(v); 12651 return *this; 12652 } 12653 12654 inline cimatrix_subv& cimatrix_subv::operator+=(const scimatrix_subv& v) { 12655 *this += civector(v); 12656 return *this; 12657 } 12658 12659 inline cimatrix_subv& cimatrix_subv::operator+=(const srvector& v) { 12660 *this += rvector(v); 12661 return *this; 12662 } 12663 12664 inline cimatrix_subv& cimatrix_subv::operator+=(const scvector& v) { 12665 *this += cvector(v); 12666 return *this; 12667 } 12668 12669 inline cimatrix_subv& cimatrix_subv::operator+=(const sivector& v) { 12670 *this += ivector(v); 12671 return *this; 12672 } 12673 12674 inline cimatrix_subv& cimatrix_subv::operator+=(const scivector& v) { 12675 *this += civector(v); 12676 return *this; 12677 } 12678 12679 inline cimatrix_subv& cimatrix_subv::operator+=(const srvector_slice& v) { 12680 *this += rvector(v); 12681 return *this; 12682 } 12683 12684 inline cimatrix_subv& cimatrix_subv::operator+=(const scvector_slice& v) { 12685 *this += cvector(v); 12686 return *this; 12687 } 12688 12689 inline cimatrix_subv& cimatrix_subv::operator+=(const sivector_slice& v) { 12690 *this += ivector(v); 12691 return *this; 12692 } 12693 12694 inline cimatrix_subv& cimatrix_subv::operator+=(const scivector_slice& v) { 12695 *this += civector(v); 12696 return *this; 12697 } 12698 12699 inline cimatrix_subv& cimatrix_subv::operator-=(const srmatrix_subv& v) { 12700 *this -= rvector(v); 12701 return *this; 12702 } 12703 12704 inline cimatrix_subv& cimatrix_subv::operator-=(const scmatrix_subv& v) { 12705 *this -= cvector(v); 12706 return *this; 12707 } 12708 12709 inline cimatrix_subv& cimatrix_subv::operator-=(const simatrix_subv& v) { 12710 *this -= ivector(v); 12711 return *this; 12712 } 12713 12714 inline cimatrix_subv& cimatrix_subv::operator-=(const scimatrix_subv& v) { 12715 *this -= civector(v); 12716 return *this; 12717 } 12718 12719 inline cimatrix_subv& cimatrix_subv::operator-=(const srvector& v) { 12720 *this -= rvector(v); 12721 return *this; 12722 } 12723 12724 inline cimatrix_subv& cimatrix_subv::operator-=(const scvector& v) { 12725 *this -= cvector(v); 12726 return *this; 12727 } 12728 12729 inline cimatrix_subv& cimatrix_subv::operator-=(const sivector& v) { 12730 *this -= ivector(v); 12731 return *this; 12732 } 12733 12734 inline cimatrix_subv& cimatrix_subv::operator-=(const scivector& v) { 12735 *this -= civector(v); 12736 return *this; 12737 } 12738 12739 inline cimatrix_subv& cimatrix_subv::operator-=(const srvector_slice& v) { 12740 *this -= rvector(v); 12741 return *this; 12742 } 12743 12744 inline cimatrix_subv& cimatrix_subv::operator-=(const scvector_slice& v) { 12745 *this -= cvector(v); 12746 return *this; 12747 } 12748 12749 inline cimatrix_subv& cimatrix_subv::operator-=(const sivector_slice& v) { 12750 *this -= ivector(v); 12751 return *this; 12752 } 12753 12754 inline cimatrix_subv& cimatrix_subv::operator-=(const scivector_slice& v) { 12755 *this -= civector(v); 12756 return *this; 12757 } 12758 12759 inline cimatrix_subv& cimatrix_subv::operator|=(const srmatrix_subv& v) { 12760 *this |= rvector(v); 12761 return *this; 12762 } 12763 12764 inline cimatrix_subv& cimatrix_subv::operator|=(const scmatrix_subv& v) { 12765 *this |= cvector(v); 12766 return *this; 12767 } 12768 12769 inline cimatrix_subv& cimatrix_subv::operator|=(const simatrix_subv& v) { 12770 *this |= ivector(v); 12771 return *this; 12772 } 12773 12774 inline cimatrix_subv& cimatrix_subv::operator|=(const scimatrix_subv& v) { 12775 *this |= civector(v); 12776 return *this; 12777 } 12778 12779 inline cimatrix_subv& cimatrix_subv::operator|=(const srvector& v) { 12780 *this |= rvector(v); 12781 return *this; 12782 } 12783 12784 inline cimatrix_subv& cimatrix_subv::operator|=(const scvector& v) { 12785 *this |= cvector(v); 12786 return *this; 12787 } 12788 12789 inline cimatrix_subv& cimatrix_subv::operator|=(const sivector& v) { 12790 *this |= ivector(v); 12791 return *this; 12792 } 12793 12794 inline cimatrix_subv& cimatrix_subv::operator|=(const scivector& v) { 12795 *this |= civector(v); 12796 return *this; 12797 } 12798 12799 inline cimatrix_subv& cimatrix_subv::operator|=(const srvector_slice& v) { 12800 *this |= rvector(v); 12801 return *this; 12802 } 12803 12804 inline cimatrix_subv& cimatrix_subv::operator|=(const scvector_slice& v) { 12805 *this |= cvector(v); 12806 return *this; 12807 } 12808 12809 inline cimatrix_subv& cimatrix_subv::operator|=(const sivector_slice& v) { 12810 *this |= ivector(v); 12811 return *this; 12812 } 12813 12814 inline cimatrix_subv& cimatrix_subv::operator|=(const scivector_slice& v) { 12815 *this |= civector(v); 12816 return *this; 12817 } 12818 12819 inline cimatrix_subv& cimatrix_subv::operator=(const srvector& v) { 12820 *this = rvector(v); 12821 return *this; 12822 } 12823 12824 inline cimatrix_subv& cimatrix_subv::operator=(const scvector& v) { 12825 *this = cvector(v); 12826 return *this; 12827 } 12828 12829 inline cimatrix_subv& cimatrix_subv::operator=(const sivector& v) { 12830 *this = ivector(v); 12831 return *this; 12832 } 12833 12834 inline cimatrix_subv& cimatrix_subv::operator=(const scivector& v) { 12835 *this = civector(v); 12836 return *this; 12837 } 12838 12839 inline cimatrix_subv& cimatrix_subv::operator=(const srvector_slice& v) { 12840 *this = rvector(v); 12841 return *this; 12842 } 12843 12844 inline cimatrix_subv& cimatrix_subv::operator=(const scvector_slice& v) { 12845 *this = cvector(v); 12846 return *this; 12847 } 12848 12849 inline cimatrix_subv& cimatrix_subv::operator=(const sivector_slice& v) { 12850 *this = ivector(v); 12851 return *this; 12852 } 12853 12854 inline cimatrix_subv& cimatrix_subv::operator=(const scivector_slice& v) { 12855 *this = civector(v); 12856 return *this; 12857 } 12858 12859 inline cimatrix_subv& cimatrix_subv::operator=(const srmatrix_subv& v) { 12860 *this = rvector(v); 12861 return *this; 12862 } 12863 12864 inline cimatrix_subv& cimatrix_subv::operator=(const simatrix_subv& v) { 12865 *this = ivector(v); 12866 return *this; 12867 } 12868 12869 inline cimatrix_subv& cimatrix_subv::operator=(const scmatrix_subv& v) { 12870 *this = cvector(v); 12871 return *this; 12872 } 12873 12874 inline cimatrix_subv& cimatrix_subv::operator=(const scimatrix_subv& v) { 12875 *this = civector(v); 12876 return *this; 12877 } 12878 12879 inline cimatrix_subv& cimatrix_subv::operator&=(const simatrix_subv& v) { 12880 *this &= ivector(v); 12881 return *this; 12882 } 12883 12884 inline cimatrix_subv& cimatrix_subv::operator&=(const scimatrix_subv& v) { 12885 *this &= civector(v); 12886 return *this; 12887 } 12888 12889 inline cimatrix_subv& cimatrix_subv::operator&=(const sivector& v) { 12890 *this &= ivector(v); 12891 return *this; 12892 } 12893 12894 inline cimatrix_subv& cimatrix_subv::operator&=(const scivector& v) { 12895 *this &= civector(v); 12896 return *this; 12897 } 12898 12899 inline cimatrix_subv& cimatrix_subv::operator&=(const sivector_slice& v) { 12900 *this &= ivector(v); 12901 return *this; 12902 } 12903 12904 inline cimatrix_subv& cimatrix_subv::operator&=(const scivector_slice& v) { 12905 *this &= civector(v); 12906 return *this; 12907 } 12908 12910 inline bool operator==(const scimatrix_subv& v1, const srvector& v2) { 12911 return scivector(v1) == v2; 12912 } 12913 12915 inline bool operator==(const scimatrix_subv& v1, const scvector& v2) { 12916 return scivector(v1) == v2; 12917 } 12918 12920 inline bool operator==(const scimatrix_subv& v1, const sivector& v2) { 12921 return scivector(v1) == v2; 12922 } 12923 12925 inline bool operator==(const scimatrix_subv& v1, const scivector& v2) { 12926 return scivector(v1) == v2; 12927 } 12928 12930 inline bool operator==(const srmatrix_subv& v1, const scivector& v2) { 12931 return srvector(v1) == v2; 12932 } 12933 12935 inline bool operator==(const scmatrix_subv& v1, const scivector& v2) { 12936 return scvector(v1) == v2; 12937 } 12938 12940 inline bool operator==(const simatrix_subv& v1, const scivector& v2) { 12941 return sivector(v1) == v2; 12942 } 12943 12945 inline bool operator==(const scimatrix_subv& v1, const srvector_slice& v2) { 12946 return scivector(v1) == v2; 12947 } 12948 12950 inline bool operator==(const scimatrix_subv& v1, const sivector_slice& v2) { 12951 return scivector(v1) == v2; 12952 } 12953 12955 inline bool operator==(const scimatrix_subv& v1, const scvector_slice& v2) { 12956 return scivector(v1) == v2; 12957 } 12958 12960 inline bool operator==(const scimatrix_subv& v1, const scivector_slice& v2) { 12961 return scivector(v1) == v2; 12962 } 12963 12965 inline bool operator==(const srmatrix_subv& v1, const scivector_slice& v2) { 12966 return srvector(v1) == v2; 12967 } 12968 12970 inline bool operator==(const scmatrix_subv& v1, const scivector_slice& v2) { 12971 return scvector(v1) == v2; 12972 } 12973 12975 inline bool operator==(const simatrix_subv& v1, const scivector_slice& v2) { 12976 return sivector(v1) == v2; 12977 } 12978 12980 inline bool operator==(const scimatrix_subv& v1, const rvector& v2) { 12981 return scivector(v1) == v2; 12982 } 12983 12985 inline bool operator==(const scimatrix_subv& v1, const cvector& v2) { 12986 return scivector(v1) == v2; 12987 } 12988 12990 inline bool operator==(const scimatrix_subv& v1, const ivector& v2) { 12991 return scivector(v1) == v2; 12992 } 12993 12995 inline bool operator==(const scimatrix_subv& v1, const civector& v2) { 12996 return scivector(v1) == v2; 12997 } 12998 13000 inline bool operator==(const srmatrix_subv& v1, const civector& v2) { 13001 return srvector(v1) == v2; 13002 } 13003 13005 inline bool operator==(const simatrix_subv& v1, const civector& v2) { 13006 return sivector(v1) == v2; 13007 } 13008 13010 inline bool operator==(const scmatrix_subv& v1, const civector& v2) { 13011 return scivector(v1) == v2; 13012 } 13013 13015 inline bool operator==(const scimatrix_subv& v1, const rvector_slice& v2) { 13016 return scivector(v1) == v2; 13017 } 13018 13020 inline bool operator==(const scimatrix_subv& v1, const cvector_slice& v2) { 13021 return scivector(v1) == v2; 13022 } 13023 13025 inline bool operator==(const scimatrix_subv& v1, const ivector_slice& v2) { 13026 return scivector(v1) == v2; 13027 } 13028 13030 inline bool operator==(const scimatrix_subv& v1, const civector_slice& v2) { 13031 return scivector(v1) == v2; 13032 } 13033 13035 inline bool operator==(const srmatrix_subv& v1, const civector_slice& v2) { 13036 return srvector(v1) == v2; 13037 } 13038 13040 inline bool operator==(const scmatrix_subv& v1, const civector_slice& v2) { 13041 return scivector(v1) == v2; 13042 } 13043 13045 inline bool operator==(const simatrix_subv& v1, const civector_slice& v2) { 13046 return scivector(v1) == v2; 13047 } 13048 13050 inline bool operator==(const scivector& v1, const srmatrix_subv& v2) { 13051 return v1 == srvector(v2); 13052 } 13053 13055 inline bool operator==(const scivector& v1, const scmatrix_subv& v2) { 13056 return v1 == scvector(v2); 13057 } 13058 13060 inline bool operator==(const scivector& v1, const simatrix_subv& v2) { 13061 return v1 == sivector(v2); 13062 } 13063 13065 inline bool operator==(const scivector& v1, const scimatrix_subv& v2) { 13066 return v1 == scivector(v2); 13067 } 13068 13070 inline bool operator==(const srvector& v1, const scimatrix_subv& v2) { 13071 return v1 == scivector(v2); 13072 } 13073 13075 inline bool operator==(const scvector& v1, const scimatrix_subv& v2) { 13076 return v1 == scivector(v2); 13077 } 13078 13080 inline bool operator==(const sivector& v1, const scimatrix_subv& v2) { 13081 return v1 == scivector(v2); 13082 } 13083 13085 inline bool operator==(const scivector_slice& v1, const srmatrix_subv& v2) { 13086 return v1 == srvector(v2); 13087 } 13088 13090 inline bool operator==(const scivector_slice& v1, const simatrix_subv& v2) { 13091 return v1 == sivector(v2); 13092 } 13093 13095 inline bool operator==(const scivector_slice& v1, const scmatrix_subv& v2) { 13096 return v1 == scvector(v2); 13097 } 13098 13100 inline bool operator==(const scivector_slice& v1, const scimatrix_subv& v2) { 13101 return v1 == scivector(v2); 13102 } 13103 13105 inline bool operator==(const srvector_slice& v1, const scimatrix_subv& v2) { 13106 return v1 == scivector(v2); 13107 } 13108 13110 inline bool operator==(const scvector_slice& v1, const scimatrix_subv& v2) { 13111 return v1 == scivector(v2); 13112 } 13113 13115 inline bool operator==(const sivector_slice& v1, const scimatrix_subv& v2) { 13116 return v1 == scivector(v2); 13117 } 13118 13120 inline bool operator==(const civector& v1, const srmatrix_subv& v2) { 13121 return v1 == srvector(v2); 13122 } 13123 13125 inline bool operator==(const civector& v1, const simatrix_subv& v2) { 13126 return v1 == sivector(v2); 13127 } 13128 13130 inline bool operator==(const civector& v1, const scmatrix_subv& v2) { 13131 return v1 == scvector(v2); 13132 } 13133 13135 inline bool operator==(const civector& v1, const scimatrix_subv& v2) { 13136 return v1 == scivector(v2); 13137 } 13138 13140 inline bool operator==(const rvector& v1, const scimatrix_subv& v2) { 13141 return v1 == scivector(v2); 13142 } 13143 13145 inline bool operator==(const cvector& v1, const scimatrix_subv& v2) { 13146 return v1 == scivector(v2); 13147 } 13148 13150 inline bool operator==(const ivector& v1, const scimatrix_subv& v2) { 13151 return v1 == scivector(v2); 13152 } 13153 13155 inline bool operator==(const civector_slice& v1, const srmatrix_subv& v2) { 13156 return v1 == srvector(v2); 13157 } 13158 13160 inline bool operator==(const civector_slice& v1, const simatrix_subv& v2) { 13161 return v1 == sivector(v2); 13162 } 13163 13165 inline bool operator==(const civector_slice& v1, const scmatrix_subv& v2) { 13166 return v1 == scvector(v2); 13167 } 13168 13170 inline bool operator==(const civector_slice& v1, const scimatrix_subv& v2) { 13171 return v1 == scivector(v2); 13172 } 13173 13175 inline bool operator==(const rvector_slice& v1, const scimatrix_subv& v2) { 13176 return v1 == scivector(v2); 13177 } 13178 13180 inline bool operator==(const cvector_slice& v1, const scimatrix_subv& v2) { 13181 return v1 == scivector(v2); 13182 } 13183 13185 inline bool operator==(const ivector_slice& v1, const scimatrix_subv& v2) { 13186 return v1 == scivector(v2); 13187 } 13188 13190 inline bool operator!=(const scimatrix_subv& v1, const srvector& v2) { 13191 return scivector(v1) != v2; 13192 } 13193 13195 inline bool operator!=(const scimatrix_subv& v1, const scvector& v2) { 13196 return scivector(v1) != v2; 13197 } 13198 13200 inline bool operator!=(const scimatrix_subv& v1, const sivector& v2) { 13201 return scivector(v1) != v2; 13202 } 13203 13205 inline bool operator!=(const scimatrix_subv& v1, const scivector& v2) { 13206 return scivector(v1) != v2; 13207 } 13208 13210 inline bool operator!=(const srmatrix_subv& v1, const scivector& v2) { 13211 return srvector(v1) != v2; 13212 } 13213 13215 inline bool operator!=(const scmatrix_subv& v1, const scivector& v2) { 13216 return scvector(v1) != v2; 13217 } 13218 13220 inline bool operator!=(const simatrix_subv& v1, const scivector& v2) { 13221 return sivector(v1) != v2; 13222 } 13223 13225 inline bool operator!=(const scimatrix_subv& v1, const srvector_slice& v2) { 13226 return scivector(v1) != v2; 13227 } 13228 13230 inline bool operator!=(const scimatrix_subv& v1, const sivector_slice& v2) { 13231 return scivector(v1) != v2; 13232 } 13233 13235 inline bool operator!=(const scimatrix_subv& v1, const scvector_slice& v2) { 13236 return scivector(v1) != v2; 13237 } 13238 13240 inline bool operator!=(const scimatrix_subv& v1, const scivector_slice& v2) { 13241 return scivector(v1) != v2; 13242 } 13243 13245 inline bool operator!=(const srmatrix_subv& v1, const scivector_slice& v2) { 13246 return srvector(v1) != v2; 13247 } 13248 13250 inline bool operator!=(const scmatrix_subv& v1, const scivector_slice& v2) { 13251 return scvector(v1) != v2; 13252 } 13253 13255 inline bool operator!=(const simatrix_subv& v1, const scivector_slice& v2) { 13256 return sivector(v1) != v2; 13257 } 13258 13260 inline bool operator!=(const scimatrix_subv& v1, const rvector& v2) { 13261 return scivector(v1) != v2; 13262 } 13263 13265 inline bool operator!=(const scimatrix_subv& v1, const cvector& v2) { 13266 return scivector(v1) != v2; 13267 } 13268 13270 inline bool operator!=(const scimatrix_subv& v1, const ivector& v2) { 13271 return scivector(v1) != v2; 13272 } 13273 13275 inline bool operator!=(const scimatrix_subv& v1, const civector& v2) { 13276 return scivector(v1) != v2; 13277 } 13278 13280 inline bool operator!=(const srmatrix_subv& v1, const civector& v2) { 13281 return srvector(v1) != v2; 13282 } 13283 13285 inline bool operator!=(const simatrix_subv& v1, const civector& v2) { 13286 return sivector(v1) != v2; 13287 } 13288 13290 inline bool operator!=(const scmatrix_subv& v1, const civector& v2) { 13291 return scivector(v1) != v2; 13292 } 13293 13295 inline bool operator!=(const scimatrix_subv& v1, const rvector_slice& v2) { 13296 return scivector(v1) != v2; 13297 } 13298 13300 inline bool operator!=(const scimatrix_subv& v1, const cvector_slice& v2) { 13301 return scivector(v1) != v2; 13302 } 13303 13305 inline bool operator!=(const scimatrix_subv& v1, const ivector_slice& v2) { 13306 return scivector(v1) != v2; 13307 } 13308 13310 inline bool operator!=(const scimatrix_subv& v1, const civector_slice& v2) { 13311 return scivector(v1) != v2; 13312 } 13313 13315 inline bool operator!=(const srmatrix_subv& v1, const civector_slice& v2) { 13316 return srvector(v1) != v2; 13317 } 13318 13320 inline bool operator!=(const scmatrix_subv& v1, const civector_slice& v2) { 13321 return scivector(v1) != v2; 13322 } 13323 13325 inline bool operator!=(const simatrix_subv& v1, const civector_slice& v2) { 13326 return scivector(v1) != v2; 13327 } 13328 13330 inline bool operator!=(const scivector& v1, const srmatrix_subv& v2) { 13331 return v1 != srvector(v2); 13332 } 13333 13335 inline bool operator!=(const scivector& v1, const scmatrix_subv& v2) { 13336 return v1 != scvector(v2); 13337 } 13338 13340 inline bool operator!=(const scivector& v1, const simatrix_subv& v2) { 13341 return v1 != sivector(v2); 13342 } 13343 13345 inline bool operator!=(const scivector& v1, const scimatrix_subv& v2) { 13346 return v1 != scivector(v2); 13347 } 13348 13350 inline bool operator!=(const srvector& v1, const scimatrix_subv& v2) { 13351 return v1 != scivector(v2); 13352 } 13353 13355 inline bool operator!=(const scvector& v1, const scimatrix_subv& v2) { 13356 return v1 != scivector(v2); 13357 } 13358 13360 inline bool operator!=(const sivector& v1, const scimatrix_subv& v2) { 13361 return v1 != scivector(v2); 13362 } 13363 13365 inline bool operator!=(const scivector_slice& v1, const srmatrix_subv& v2) { 13366 return v1 != srvector(v2); 13367 } 13368 13370 inline bool operator!=(const scivector_slice& v1, const simatrix_subv& v2) { 13371 return v1 != sivector(v2); 13372 } 13373 13375 inline bool operator!=(const scivector_slice& v1, const scmatrix_subv& v2) { 13376 return v1 != scvector(v2); 13377 } 13378 13380 inline bool operator!=(const scivector_slice& v1, const scimatrix_subv& v2) { 13381 return v1 != scivector(v2); 13382 } 13383 13385 inline bool operator!=(const srvector_slice& v1, const scimatrix_subv& v2) { 13386 return v1 != scivector(v2); 13387 } 13388 13390 inline bool operator!=(const scvector_slice& v1, const scimatrix_subv& v2) { 13391 return v1 != scivector(v2); 13392 } 13393 13395 inline bool operator!=(const sivector_slice& v1, const scimatrix_subv& v2) { 13396 return v1 != scivector(v2); 13397 } 13398 13400 inline bool operator!=(const civector& v1, const srmatrix_subv& v2) { 13401 return v1 != srvector(v2); 13402 } 13403 13405 inline bool operator!=(const civector& v1, const simatrix_subv& v2) { 13406 return v1 != sivector(v2); 13407 } 13408 13410 inline bool operator!=(const civector& v1, const scmatrix_subv& v2) { 13411 return v1 != scivector(v2); 13412 } 13413 13415 inline bool operator!=(const civector& v1, const scimatrix_subv& v2) { 13416 return v1 != scivector(v2); 13417 } 13418 13420 inline bool operator!=(const rvector& v1, const scimatrix_subv& v2) { 13421 return v1 != scivector(v2); 13422 } 13423 13425 inline bool operator!=(const cvector& v1, const scimatrix_subv& v2) { 13426 return v1 != scivector(v2); 13427 } 13428 13430 inline bool operator!=(const ivector& v1, const scimatrix_subv& v2) { 13431 return v1 != scivector(v2); 13432 } 13433 13435 inline bool operator!=(const civector_slice& v1, const srmatrix_subv& v2) { 13436 return v1 != srvector(v2); 13437 } 13438 13440 inline bool operator!=(const civector_slice& v1, const simatrix_subv& v2) { 13441 return v1 != sivector(v2); 13442 } 13443 13445 inline bool operator!=(const civector_slice& v1, const scmatrix_subv& v2) { 13446 return v1 != scvector(v2); 13447 } 13448 13450 inline bool operator!=(const civector_slice& v1, const scimatrix_subv& v2) { 13451 return v1 != scivector(v2); 13452 } 13453 13455 inline bool operator!=(const rvector_slice& v1, const scimatrix_subv& v2) { 13456 return v1 != scivector(v2); 13457 } 13458 13460 inline bool operator!=(const cvector_slice& v1, const scimatrix_subv& v2) { 13461 return v1 != scivector(v2); 13462 } 13463 13465 inline bool operator!=(const ivector_slice& v1, const scimatrix_subv& v2) { 13466 return v1 != scivector(v2); 13467 } 13468 13470 inline bool operator<(const scimatrix_subv& v1, const sivector& v2) { 13471 return scivector(v1) < v2; 13472 } 13473 13475 inline bool operator<(const scimatrix_subv& v1, const scivector& v2) { 13476 return scivector(v1) < v2; 13477 } 13478 13480 inline bool operator<(const srmatrix_subv& v1, const scivector& v2) { 13481 return srvector(v1) < v2; 13482 } 13483 13485 inline bool operator<(const scmatrix_subv& v1, const scivector& v2) { 13486 return scvector(v1) < v2; 13487 } 13488 13490 inline bool operator<(const simatrix_subv& v1, const scivector& v2) { 13491 return sivector(v1) < v2; 13492 } 13493 13495 inline bool operator<(const scimatrix_subv& v1, const sivector_slice& v2) { 13496 return scivector(v1) < v2; 13497 } 13498 13500 inline bool operator<(const scimatrix_subv& v1, const scivector_slice& v2) { 13501 return scivector(v1) < v2; 13502 } 13503 13505 inline bool operator<(const srmatrix_subv& v1, const scivector_slice& v2) { 13506 return srvector(v1) < v2; 13507 } 13508 13510 inline bool operator<(const scmatrix_subv& v1, const scivector_slice& v2) { 13511 return scvector(v1) < v2; 13512 } 13513 13515 inline bool operator<(const simatrix_subv& v1, const scivector_slice& v2) { 13516 return sivector(v1) < v2; 13517 } 13518 13520 inline bool operator<(const scimatrix_subv& v1, const ivector& v2) { 13521 return scivector(v1) < v2; 13522 } 13523 13525 inline bool operator<(const scimatrix_subv& v1, const civector& v2) { 13526 return scivector(v1) < v2; 13527 } 13528 13530 inline bool operator<(const srmatrix_subv& v1, const civector& v2) { 13531 return srvector(v1) < v2; 13532 } 13533 13535 inline bool operator<(const simatrix_subv& v1, const civector& v2) { 13536 return sivector(v1) < v2; 13537 } 13538 13540 inline bool operator<(const scmatrix_subv& v1, const civector& v2) { 13541 return scivector(v1) < v2; 13542 } 13543 13545 inline bool operator<(const scimatrix_subv& v1, const ivector_slice& v2) { 13546 return scivector(v1) < v2; 13547 } 13548 13550 inline bool operator<(const scimatrix_subv& v1, const civector_slice& v2) { 13551 return scivector(v1) < v2; 13552 } 13553 13555 inline bool operator<(const srmatrix_subv& v1, const civector_slice& v2) { 13556 return srvector(v1) < v2; 13557 } 13558 13560 inline bool operator<(const scmatrix_subv& v1, const civector_slice& v2) { 13561 return scivector(v1) < v2; 13562 } 13563 13565 inline bool operator<(const simatrix_subv& v1, const civector_slice& v2) { 13566 return scivector(v1) < v2; 13567 } 13568 13570 inline bool operator<(const scivector& v1, const simatrix_subv& v2) { 13571 return v1 < sivector(v2); 13572 } 13573 13575 inline bool operator<(const scivector& v1, const scimatrix_subv& v2) { 13576 return v1 < scivector(v2); 13577 } 13578 13580 inline bool operator<(const srvector& v1, const scimatrix_subv& v2) { 13581 return v1 < scivector(v2); 13582 } 13583 13585 inline bool operator<(const scvector& v1, const scimatrix_subv& v2) { 13586 return v1 < scivector(v2); 13587 } 13588 13590 inline bool operator<(const sivector& v1, const scimatrix_subv& v2) { 13591 return v1 < scivector(v2); 13592 } 13593 13595 inline bool operator<(const scivector_slice& v1, const simatrix_subv& v2) { 13596 return v1 < sivector(v2); 13597 } 13598 13600 inline bool operator<(const scivector_slice& v1, const scimatrix_subv& v2) { 13601 return v1 < scivector(v2); 13602 } 13603 13605 inline bool operator<(const srvector_slice& v1, const scimatrix_subv& v2) { 13606 return v1 < scivector(v2); 13607 } 13608 13610 inline bool operator<(const scvector_slice& v1, const scimatrix_subv& v2) { 13611 return v1 < scivector(v2); 13612 } 13613 13615 inline bool operator<(const sivector_slice& v1, const scimatrix_subv& v2) { 13616 return v1 < scivector(v2); 13617 } 13618 13620 inline bool operator<(const civector& v1, const simatrix_subv& v2) { 13621 return v1 < sivector(v2); 13622 } 13623 13625 inline bool operator<(const civector& v1, const scimatrix_subv& v2) { 13626 return v1 < scivector(v2); 13627 } 13628 13630 inline bool operator<(const rvector& v1, const scimatrix_subv& v2) { 13631 return v1 < scivector(v2); 13632 } 13633 13635 inline bool operator<(const cvector& v1, const scimatrix_subv& v2) { 13636 return v1 < scivector(v2); 13637 } 13638 13640 inline bool operator<(const ivector& v1, const scimatrix_subv& v2) { 13641 return v1 < scivector(v2); 13642 } 13643 13645 inline bool operator<(const civector_slice& v1, const simatrix_subv& v2) { 13646 return v1 < sivector(v2); 13647 } 13648 13650 inline bool operator<(const civector_slice& v1, const scimatrix_subv& v2) { 13651 return v1 < scivector(v2); 13652 } 13653 13655 inline bool operator<(const rvector_slice& v1, const scimatrix_subv& v2) { 13656 return v1 < scivector(v2); 13657 } 13658 13660 inline bool operator<(const cvector_slice& v1, const scimatrix_subv& v2) { 13661 return v1 < scivector(v2); 13662 } 13663 13665 inline bool operator<(const ivector_slice& v1, const scimatrix_subv& v2) { 13666 return v1 < scivector(v2); 13667 } 13668 13670 inline bool operator<=(const scimatrix_subv& v1, const sivector& v2) { 13671 return scivector(v1) <= v2; 13672 } 13673 13675 inline bool operator<=(const scimatrix_subv& v1, const scivector& v2) { 13676 return scivector(v1) <= v2; 13677 } 13678 13680 inline bool operator<=(const srmatrix_subv& v1, const scivector& v2) { 13681 return srvector(v1) <= v2; 13682 } 13683 13685 inline bool operator<=(const scmatrix_subv& v1, const scivector& v2) { 13686 return scvector(v1) <= v2; 13687 } 13688 13690 inline bool operator<=(const simatrix_subv& v1, const scivector& v2) { 13691 return sivector(v1) <= v2; 13692 } 13693 13695 inline bool operator<=(const scimatrix_subv& v1, const sivector_slice& v2) { 13696 return scivector(v1) <= v2; 13697 } 13698 13700 inline bool operator<=(const scimatrix_subv& v1, const scivector_slice& v2) { 13701 return scivector(v1) <= v2; 13702 } 13703 13705 inline bool operator<=(const srmatrix_subv& v1, const scivector_slice& v2) { 13706 return srvector(v1) <= v2; 13707 } 13708 13710 inline bool operator<=(const scmatrix_subv& v1, const scivector_slice& v2) { 13711 return scvector(v1) <= v2; 13712 } 13713 13715 inline bool operator<=(const simatrix_subv& v1, const scivector_slice& v2) { 13716 return sivector(v1) <= v2; 13717 } 13718 13720 inline bool operator<=(const scimatrix_subv& v1, const ivector& v2) { 13721 return scivector(v1) <= v2; 13722 } 13723 13725 inline bool operator<=(const scimatrix_subv& v1, const civector& v2) { 13726 return scivector(v1) <= v2; 13727 } 13728 13730 inline bool operator<=(const srmatrix_subv& v1, const civector& v2) { 13731 return srvector(v1) <= v2; 13732 } 13733 13735 inline bool operator<=(const simatrix_subv& v1, const civector& v2) { 13736 return sivector(v1) <= v2; 13737 } 13738 13740 inline bool operator<=(const scmatrix_subv& v1, const civector& v2) { 13741 return scivector(v1) <= v2; 13742 } 13743 13745 inline bool operator<=(const scimatrix_subv& v1, const ivector_slice& v2) { 13746 return scivector(v1) <= v2; 13747 } 13748 13750 inline bool operator<=(const scimatrix_subv& v1, const civector_slice& v2) { 13751 return scivector(v1) <= v2; 13752 } 13753 13755 inline bool operator<=(const srmatrix_subv& v1, const civector_slice& v2) { 13756 return srvector(v1) <= v2; 13757 } 13758 13760 inline bool operator<=(const scmatrix_subv& v1, const civector_slice& v2) { 13761 return scivector(v1) <= v2; 13762 } 13763 13765 inline bool operator<=(const simatrix_subv& v1, const civector_slice& v2) { 13766 return scivector(v1) <= v2; 13767 } 13768 13770 inline bool operator<=(const scivector& v1, const simatrix_subv& v2) { 13771 return v1 <= sivector(v2); 13772 } 13773 13775 inline bool operator<=(const scivector& v1, const scimatrix_subv& v2) { 13776 return v1 <= scivector(v2); 13777 } 13778 13780 inline bool operator<=(const srvector& v1, const scimatrix_subv& v2) { 13781 return v1 <= scivector(v2); 13782 } 13783 13785 inline bool operator<=(const scvector& v1, const scimatrix_subv& v2) { 13786 return v1 <= scivector(v2); 13787 } 13788 13790 inline bool operator<=(const sivector& v1, const scimatrix_subv& v2) { 13791 return v1 <= scivector(v2); 13792 } 13793 13795 inline bool operator<=(const scivector_slice& v1, const simatrix_subv& v2) { 13796 return v1 <= sivector(v2); 13797 } 13798 13800 inline bool operator<=(const scivector_slice& v1, const scimatrix_subv& v2) { 13801 return v1 <= scivector(v2); 13802 } 13803 13805 inline bool operator<=(const srvector_slice& v1, const scimatrix_subv& v2) { 13806 return v1 <= scivector(v2); 13807 } 13808 13810 inline bool operator<=(const scvector_slice& v1, const scimatrix_subv& v2) { 13811 return v1 <= scivector(v2); 13812 } 13813 13815 inline bool operator<=(const sivector_slice& v1, const scimatrix_subv& v2) { 13816 return v1 <= scivector(v2); 13817 } 13818 13820 inline bool operator<=(const civector& v1, const simatrix_subv& v2) { 13821 return v1 <= sivector(v2); 13822 } 13823 13825 inline bool operator<=(const civector& v1, const scimatrix_subv& v2) { 13826 return v1 <= scivector(v2); 13827 } 13828 13830 inline bool operator<=(const rvector& v1, const scimatrix_subv& v2) { 13831 return v1 <= scivector(v2); 13832 } 13833 13835 inline bool operator<=(const cvector& v1, const scimatrix_subv& v2) { 13836 return v1 <= scivector(v2); 13837 } 13838 13840 inline bool operator<=(const ivector& v1, const scimatrix_subv& v2) { 13841 return v1 <= scivector(v2); 13842 } 13843 13845 inline bool operator<=(const civector_slice& v1, const simatrix_subv& v2) { 13846 return v1 <= sivector(v2); 13847 } 13848 13850 inline bool operator<=(const civector_slice& v1, const scimatrix_subv& v2) { 13851 return v1 <= scivector(v2); 13852 } 13853 13855 inline bool operator<=(const rvector_slice& v1, const scimatrix_subv& v2) { 13856 return v1 <= scivector(v2); 13857 } 13858 13860 inline bool operator<=(const cvector_slice& v1, const scimatrix_subv& v2) { 13861 return v1 <= scivector(v2); 13862 } 13863 13865 inline bool operator<=(const ivector_slice& v1, const scimatrix_subv& v2) { 13866 return v1 <= scivector(v2); 13867 } 13868 13870 inline bool operator>(const scimatrix_subv& v1, const srvector& v2) { 13871 return scivector(v1) > v2; 13872 } 13873 13875 inline bool operator>(const scimatrix_subv& v1, const scvector& v2) { 13876 return scivector(v1) > v2; 13877 } 13878 13880 inline bool operator>(const scimatrix_subv& v1, const sivector& v2) { 13881 return scivector(v1) > v2; 13882 } 13883 13885 inline bool operator>(const scimatrix_subv& v1, const scivector& v2) { 13886 return scivector(v1) > v2; 13887 } 13888 13890 inline bool operator>(const simatrix_subv& v1, const scivector& v2) { 13891 return sivector(v1) > v2; 13892 } 13893 13895 inline bool operator>(const scimatrix_subv& v1, const srvector_slice& v2) { 13896 return scivector(v1) > v2; 13897 } 13898 13900 inline bool operator>(const scimatrix_subv& v1, const sivector_slice& v2) { 13901 return scivector(v1) > v2; 13902 } 13903 13905 inline bool operator>(const scimatrix_subv& v1, const scvector_slice& v2) { 13906 return scivector(v1) > v2; 13907 } 13908 13910 inline bool operator>(const scimatrix_subv& v1, const scivector_slice& v2) { 13911 return scivector(v1) > v2; 13912 } 13913 13915 inline bool operator>(const simatrix_subv& v1, const scivector_slice& v2) { 13916 return sivector(v1) > v2; 13917 } 13918 13920 inline bool operator>(const scimatrix_subv& v1, const rvector& v2) { 13921 return scivector(v1) > v2; 13922 } 13923 13925 inline bool operator>(const scimatrix_subv& v1, const cvector& v2) { 13926 return scivector(v1) > v2; 13927 } 13928 13930 inline bool operator>(const scimatrix_subv& v1, const ivector& v2) { 13931 return scivector(v1) > v2; 13932 } 13933 13935 inline bool operator>(const scimatrix_subv& v1, const civector& v2) { 13936 return scivector(v1) > v2; 13937 } 13938 13940 inline bool operator>(const simatrix_subv& v1, const civector& v2) { 13941 return sivector(v1) > v2; 13942 } 13943 13945 inline bool operator>(const scimatrix_subv& v1, const rvector_slice& v2) { 13946 return scivector(v1) > v2; 13947 } 13948 13950 inline bool operator>(const scimatrix_subv& v1, const cvector_slice& v2) { 13951 return scivector(v1) > v2; 13952 } 13953 13955 inline bool operator>(const scimatrix_subv& v1, const ivector_slice& v2) { 13956 return scivector(v1) > v2; 13957 } 13958 13960 inline bool operator>(const scimatrix_subv& v1, const civector_slice& v2) { 13961 return scivector(v1) > v2; 13962 } 13963 13965 inline bool operator>(const simatrix_subv& v1, const civector_slice& v2) { 13966 return scivector(v1) > v2; 13967 } 13968 13970 inline bool operator>(const scivector& v1, const srmatrix_subv& v2) { 13971 return v1 > srvector(v2); 13972 } 13973 13975 inline bool operator>(const scivector& v1, const scmatrix_subv& v2) { 13976 return v1 > scvector(v2); 13977 } 13978 13980 inline bool operator>(const scivector& v1, const simatrix_subv& v2) { 13981 return v1 > sivector(v2); 13982 } 13983 13985 inline bool operator>(const scivector& v1, const scimatrix_subv& v2) { 13986 return v1 > scivector(v2); 13987 } 13988 13990 inline bool operator>(const sivector& v1, const scimatrix_subv& v2) { 13991 return v1 > scivector(v2); 13992 } 13993 13995 inline bool operator>(const scivector_slice& v1, const srmatrix_subv& v2) { 13996 return v1 > srvector(v2); 13997 } 13998 14000 inline bool operator>(const scivector_slice& v1, const simatrix_subv& v2) { 14001 return v1 > sivector(v2); 14002 } 14003 14005 inline bool operator>(const scivector_slice& v1, const scmatrix_subv& v2) { 14006 return v1 > scvector(v2); 14007 } 14008 14010 inline bool operator>(const scivector_slice& v1, const scimatrix_subv& v2) { 14011 return v1 > scivector(v2); 14012 } 14013 14015 inline bool operator>(const sivector_slice& v1, const scimatrix_subv& v2) { 14016 return v1 > scivector(v2); 14017 } 14018 14020 inline bool operator>(const civector& v1, const srmatrix_subv& v2) { 14021 return v1 > srvector(v2); 14022 } 14023 14025 inline bool operator>(const civector& v1, const simatrix_subv& v2) { 14026 return v1 > sivector(v2); 14027 } 14028 14030 inline bool operator>(const civector& v1, const scmatrix_subv& v2) { 14031 return v1 > scvector(v2); 14032 } 14033 14035 inline bool operator>(const civector& v1, const scimatrix_subv& v2) { 14036 return v1 > scivector(v2); 14037 } 14038 14040 inline bool operator>(const ivector& v1, const scimatrix_subv& v2) { 14041 return v1 > scivector(v2); 14042 } 14043 14045 inline bool operator>(const civector_slice& v1, const srmatrix_subv& v2) { 14046 return v1 > srvector(v2); 14047 } 14048 14050 inline bool operator>(const civector_slice& v1, const simatrix_subv& v2) { 14051 return v1 > sivector(v2); 14052 } 14053 14055 inline bool operator>(const civector_slice& v1, const scmatrix_subv& v2) { 14056 return v1 > scvector(v2); 14057 } 14058 14060 inline bool operator>(const civector_slice& v1, const scimatrix_subv& v2) { 14061 return v1 > scivector(v2); 14062 } 14063 14065 inline bool operator>(const ivector_slice& v1, const scimatrix_subv& v2) { 14066 return v1 > scivector(v2); 14067 } 14068 14070 inline bool operator>=(const scimatrix_subv& v1, const srvector& v2) { 14071 return scivector(v1) >= v2; 14072 } 14073 14075 inline bool operator>=(const scimatrix_subv& v1, const scvector& v2) { 14076 return scivector(v1) >= v2; 14077 } 14078 14080 inline bool operator>=(const scimatrix_subv& v1, const sivector& v2) { 14081 return scivector(v1) >= v2; 14082 } 14083 14085 inline bool operator>=(const scimatrix_subv& v1, const scivector& v2) { 14086 return scivector(v1) >= v2; 14087 } 14088 14090 inline bool operator>=(const simatrix_subv& v1, const scivector& v2) { 14091 return sivector(v1) >= v2; 14092 } 14093 14095 inline bool operator>=(const scimatrix_subv& v1, const srvector_slice& v2) { 14096 return scivector(v1) >= v2; 14097 } 14098 14100 inline bool operator>=(const scimatrix_subv& v1, const sivector_slice& v2) { 14101 return scivector(v1) >= v2; 14102 } 14103 14105 inline bool operator>=(const scimatrix_subv& v1, const scvector_slice& v2) { 14106 return scivector(v1) >= v2; 14107 } 14108 14110 inline bool operator>=(const scimatrix_subv& v1, const scivector_slice& v2) { 14111 return scivector(v1) >= v2; 14112 } 14113 14115 inline bool operator>=(const simatrix_subv& v1, const scivector_slice& v2) { 14116 return sivector(v1) >= v2; 14117 } 14118 14120 inline bool operator>=(const scimatrix_subv& v1, const rvector& v2) { 14121 return scivector(v1) >= v2; 14122 } 14123 14125 inline bool operator>=(const scimatrix_subv& v1, const cvector& v2) { 14126 return scivector(v1) >= v2; 14127 } 14128 14130 inline bool operator>=(const scimatrix_subv& v1, const ivector& v2) { 14131 return scivector(v1) >= v2; 14132 } 14133 14135 inline bool operator>=(const scimatrix_subv& v1, const civector& v2) { 14136 return scivector(v1) >= v2; 14137 } 14138 14140 inline bool operator>=(const simatrix_subv& v1, const civector& v2) { 14141 return sivector(v1) >= v2; 14142 } 14143 14145 inline bool operator>=(const scimatrix_subv& v1, const rvector_slice& v2) { 14146 return scivector(v1) >= v2; 14147 } 14148 14150 inline bool operator>=(const scimatrix_subv& v1, const cvector_slice& v2) { 14151 return scivector(v1) >= v2; 14152 } 14153 14155 inline bool operator>=(const scimatrix_subv& v1, const ivector_slice& v2) { 14156 return scivector(v1) >= v2; 14157 } 14158 14160 inline bool operator>=(const scimatrix_subv& v1, const civector_slice& v2) { 14161 return scivector(v1) >= v2; 14162 } 14163 14165 inline bool operator>=(const simatrix_subv& v1, const civector_slice& v2) { 14166 return scivector(v1) >= v2; 14167 } 14168 14170 inline bool operator>=(const scivector& v1, const srmatrix_subv& v2) { 14171 return v1 >= srvector(v2); 14172 } 14173 14175 inline bool operator>=(const scivector& v1, const scmatrix_subv& v2) { 14176 return v1 >= scvector(v2); 14177 } 14178 14180 inline bool operator>=(const scivector& v1, const simatrix_subv& v2) { 14181 return v1 >= sivector(v2); 14182 } 14183 14185 inline bool operator>=(const scivector& v1, const scimatrix_subv& v2) { 14186 return v1 >= scivector(v2); 14187 } 14188 14190 inline bool operator>=(const sivector& v1, const scimatrix_subv& v2) { 14191 return v1 >= scivector(v2); 14192 } 14193 14195 inline bool operator>=(const scivector_slice& v1, const srmatrix_subv& v2) { 14196 return v1 >= srvector(v2); 14197 } 14198 14200 inline bool operator>=(const scivector_slice& v1, const simatrix_subv& v2) { 14201 return v1 >= sivector(v2); 14202 } 14203 14205 inline bool operator>=(const scivector_slice& v1, const scmatrix_subv& v2) { 14206 return v1 >= scvector(v2); 14207 } 14208 14210 inline bool operator>=(const scivector_slice& v1, const scimatrix_subv& v2) { 14211 return v1 >= scivector(v2); 14212 } 14213 14215 inline bool operator>=(const sivector_slice& v1, const scimatrix_subv& v2) { 14216 return v1 >= scivector(v2); 14217 } 14218 14220 inline bool operator>=(const civector& v1, const srmatrix_subv& v2) { 14221 return v1 >= srvector(v2); 14222 } 14223 14225 inline bool operator>=(const civector& v1, const simatrix_subv& v2) { 14226 return v1 >= sivector(v2); 14227 } 14228 14230 inline bool operator>=(const civector& v1, const scmatrix_subv& v2) { 14231 return v1 >= scvector(v2); 14232 } 14233 14235 inline bool operator>=(const civector& v1, const scimatrix_subv& v2) { 14236 return v1 >= scivector(v2); 14237 } 14238 14240 inline bool operator>=(const ivector& v1, const scimatrix_subv& v2) { 14241 return v1 >= scivector(v2); 14242 } 14243 14245 inline bool operator>=(const civector_slice& v1, const srmatrix_subv& v2) { 14246 return v1 >= srvector(v2); 14247 } 14248 14250 inline bool operator>=(const civector_slice& v1, const simatrix_subv& v2) { 14251 return v1 >= sivector(v2); 14252 } 14253 14255 inline bool operator>=(const civector_slice& v1, const scmatrix_subv& v2) { 14256 return v1 >= scvector(v2); 14257 } 14258 14260 inline bool operator>=(const civector_slice& v1, const scimatrix_subv& v2) { 14261 return v1 >= scivector(v2); 14262 } 14263 14265 inline bool operator>=(const ivector_slice& v1, const scimatrix_subv& v2) { 14266 return v1 >= scivector(v2); 14267 } 14268 14270 inline bool operator!(const scimatrix_subv& x) { 14271 return sv_v_not(x); 14272 } 14273 14274 14276 14279 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scimatrix_subv& v2) { 14280 accumulate(dot,scivector(v1),scivector(v2)); 14281 } 14282 14283 14285 14288 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scmatrix_subv& v2) { 14289 accumulate(dot,scivector(v1),scvector(v2)); 14290 } 14291 14293 14296 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const simatrix_subv& v2) { 14297 accumulate(dot,scivector(v1),sivector(v2)); 14298 } 14299 14301 14304 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srmatrix_subv& v2) { 14305 accumulate(dot,scivector(v1),srvector(v2)); 14306 } 14307 14309 14312 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scimatrix_subv& v2) { 14313 accumulate(dot,scvector(v1),scivector(v2)); 14314 } 14315 14317 14320 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scimatrix_subv& v2) { 14321 accumulate(dot,sivector(v1),scivector(v2)); 14322 } 14323 14325 14328 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scimatrix_subv& v2) { 14329 accumulate(dot,srvector(v1),scivector(v2)); 14330 } 14331 14333 14336 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srvector& v2) { 14337 accumulate(dot,scivector(v1),v2); 14338 } 14339 14341 14344 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scvector& v2) { 14345 accumulate(dot,scivector(v1),v2); 14346 } 14347 14349 14352 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const sivector& v2) { 14353 accumulate(dot,scivector(v1),v2); 14354 } 14355 14357 14360 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scivector& v2) { 14361 accumulate(dot,scivector(v1),v2); 14362 } 14363 14365 14368 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scivector& v2) { 14369 accumulate(dot,srvector(v1),v2); 14370 } 14371 14373 14376 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scivector& v2) { 14377 accumulate(dot,scvector(v1),v2); 14378 } 14379 14381 14384 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scivector& v2) { 14385 accumulate(dot,sivector(v1),v2); 14386 } 14387 14389 14392 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const sivector& v2) { 14393 accumulate(dot,scvector(v1),v2); 14394 } 14395 14397 14400 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scvector& v2) { 14401 accumulate(dot,sivector(v1),v2); 14402 } 14403 14405 14408 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const srvector_slice& v2) { 14409 accumulate(dot,scivector(v1),v2); 14410 } 14411 14413 14416 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scvector_slice& v2) { 14417 accumulate(dot,scivector(v1),v2); 14418 } 14419 14421 14424 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const sivector_slice& v2) { 14425 accumulate(dot,scivector(v1),v2); 14426 } 14427 14429 14432 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const scivector_slice& v2) { 14433 accumulate(dot,scivector(v1),v2); 14434 } 14435 14437 14440 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const scivector_slice& v2) { 14441 accumulate(dot,srvector(v1),v2); 14442 } 14443 14445 14448 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const scivector_slice& v2) { 14449 accumulate(dot,scvector(v1),v2); 14450 } 14451 14453 14456 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scivector_slice& v2) { 14457 accumulate(dot,sivector(v1),v2); 14458 } 14459 14461 14464 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const sivector_slice& v2) { 14465 accumulate(dot,scvector(v1),v2); 14466 } 14467 14469 14472 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const scvector_slice& v2) { 14473 accumulate(dot,sivector(v1),v2); 14474 } 14475 14477 14480 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const rvector& v2) { 14481 accumulate(dot,scivector(v1),v2); 14482 } 14483 14485 14488 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const ivector& v2) { 14489 accumulate(dot,scivector(v1),v2); 14490 } 14491 14493 14496 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const cvector& v2) { 14497 accumulate(dot,scivector(v1),v2); 14498 } 14499 14501 14504 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const civector& v2) { 14505 accumulate(dot,scivector(v1),v2); 14506 } 14507 14509 14512 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const civector& v2) { 14513 accumulate(dot,srvector(v1),v2); 14514 } 14515 14517 14520 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const civector& v2) { 14521 accumulate(dot,sivector(v1),v2); 14522 } 14523 14525 14528 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const civector& v2) { 14529 accumulate(dot,scvector(v1),v2); 14530 } 14531 14533 14536 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const ivector& v2) { 14537 accumulate(dot,scvector(v1),v2); 14538 } 14539 14541 14544 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const cvector& v2) { 14545 accumulate(dot,sivector(v1),v2); 14546 } 14547 14549 14552 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const rvector_slice& v2) { 14553 accumulate(dot,scivector(v1),v2); 14554 } 14555 14557 14560 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const ivector_slice& v2) { 14561 accumulate(dot,scivector(v1),v2); 14562 } 14563 14565 14568 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const cvector_slice& v2) { 14569 accumulate(dot,scivector(v1),v2); 14570 } 14571 14573 14576 inline void accumulate(cidotprecision& dot,const scimatrix_subv& v1, const civector_slice& v2) { 14577 accumulate(dot,scivector(v1),v2); 14578 } 14579 14581 14584 inline void accumulate(cidotprecision& dot,const srmatrix_subv& v1, const civector_slice& v2) { 14585 accumulate(dot,srvector(v1),v2); 14586 } 14587 14589 14592 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const civector_slice& v2) { 14593 accumulate(dot,scvector(v1),v2); 14594 } 14595 14597 14600 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const civector_slice& v2) { 14601 accumulate(dot,sivector(v1),v2); 14602 } 14603 14605 14608 inline void accumulate(cidotprecision& dot,const scmatrix_subv& v1, const ivector_slice& v2) { 14609 accumulate(dot,scvector(v1),v2); 14610 } 14611 14613 14616 inline void accumulate(cidotprecision& dot,const simatrix_subv& v1, const cvector_slice& v2) { 14617 accumulate(dot,sivector(v1),v2); 14618 } 14619 14621 14624 inline void accumulate(cidotprecision& dot,const scivector& v1, const srmatrix_subv& v2) { 14625 accumulate(dot,v1,srvector(v2)); 14626 } 14627 14629 14632 inline void accumulate(cidotprecision& dot,const scivector& v1, const scmatrix_subv& v2) { 14633 accumulate(dot,v1,scvector(v2)); 14634 } 14635 14637 14640 inline void accumulate(cidotprecision& dot,const scivector& v1, const simatrix_subv& v2) { 14641 accumulate(dot,v1,sivector(v2)); 14642 } 14643 14645 14648 inline void accumulate(cidotprecision& dot,const scivector& v1, const scimatrix_subv& v2) { 14649 accumulate(dot,v1,scivector(v2)); 14650 } 14651 14653 14656 inline void accumulate(cidotprecision& dot,const srvector& v1, const scimatrix_subv& v2) { 14657 accumulate(dot,v1,scivector(v2)); 14658 } 14659 14661 14664 inline void accumulate(cidotprecision& dot,const scvector& v1, const scimatrix_subv& v2) { 14665 accumulate(dot,v1,scivector(v2)); 14666 } 14667 14669 14672 inline void accumulate(cidotprecision& dot,const sivector& v1, const scimatrix_subv& v2) { 14673 accumulate(dot,v1,scivector(v2)); 14674 } 14675 14677 14680 inline void accumulate(cidotprecision& dot,const scvector& v1, const simatrix_subv& v2) { 14681 accumulate(dot,v1,sivector(v2)); 14682 } 14683 14685 14688 inline void accumulate(cidotprecision& dot,const sivector& v1, const scmatrix_subv& v2) { 14689 accumulate(dot,v1,scvector(v2)); 14690 } 14691 14693 14696 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const srmatrix_subv& v2) { 14697 accumulate(dot,v1,srvector(v2)); 14698 } 14699 14701 14704 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const scmatrix_subv& v2) { 14705 accumulate(dot,v1,scvector(v2)); 14706 } 14707 14709 14712 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const simatrix_subv& v2) { 14713 accumulate(dot,v1,sivector(v2)); 14714 } 14715 14717 14720 inline void accumulate(cidotprecision& dot,const scivector_slice& v1, const scimatrix_subv& v2) { 14721 accumulate(dot,v1,scivector(v2)); 14722 } 14723 14725 14728 inline void accumulate(cidotprecision& dot,const srvector_slice& v1, const scimatrix_subv& v2) { 14729 accumulate(dot,v1,scivector(v2)); 14730 } 14731 14733 14736 inline void accumulate(cidotprecision& dot,const sivector_slice& v1, const scimatrix_subv& v2) { 14737 accumulate(dot,v1,scivector(v2)); 14738 } 14739 14741 14744 inline void accumulate(cidotprecision& dot,const scvector_slice& v1, const scimatrix_subv& v2) { 14745 accumulate(dot,v1,scivector(v2)); 14746 } 14747 14749 14752 inline void accumulate(cidotprecision& dot,const scvector_slice& v1, const simatrix_subv& v2) { 14753 accumulate(dot,v1,sivector(v2)); 14754 } 14755 14757 14760 inline void accumulate(cidotprecision& dot,const sivector_slice& v1, const scmatrix_subv& v2) { 14761 accumulate(dot,v1,scvector(v2)); 14762 } 14763 14765 14768 inline void accumulate(cidotprecision& dot,const civector& v1, const srmatrix_subv& v2) { 14769 accumulate(dot,v1,srvector(v2)); 14770 } 14771 14773 14776 inline void accumulate(cidotprecision& dot,const civector& v1, const scmatrix_subv& v2) { 14777 accumulate(dot,v1,scvector(v2)); 14778 } 14779 14781 14784 inline void accumulate(cidotprecision& dot,const civector& v1, const simatrix_subv& v2) { 14785 accumulate(dot,v1,sivector(v2)); 14786 } 14787 14789 14792 inline void accumulate(cidotprecision& dot,const civector& v1, const scimatrix_subv& v2) { 14793 accumulate(dot,v1,scivector(v2)); 14794 } 14795 14797 14800 inline void accumulate(cidotprecision& dot,const rvector& v1, const scimatrix_subv& v2) { 14801 accumulate(dot,v1,scivector(v2)); 14802 } 14803 14805 14808 inline void accumulate(cidotprecision& dot,const cvector& v1, const scimatrix_subv& v2) { 14809 accumulate(dot,v1,scivector(v2)); 14810 } 14811 14813 14816 inline void accumulate(cidotprecision& dot,const ivector& v1, const scimatrix_subv& v2) { 14817 accumulate(dot,v1,scivector(v2)); 14818 } 14819 14821 14824 inline void accumulate(cidotprecision& dot,const ivector& v1, const scmatrix_subv& v2) { 14825 accumulate(dot,v1,scvector(v2)); 14826 } 14827 14829 14832 inline void accumulate(cidotprecision& dot,const cvector& v1, const simatrix_subv& v2) { 14833 accumulate(dot,v1,sivector(v2)); 14834 } 14835 14837 14840 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const srmatrix_subv& v2) { 14841 accumulate(dot,v1,srvector(v2)); 14842 } 14843 14845 14848 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const scmatrix_subv& v2) { 14849 accumulate(dot,v1,scvector(v2)); 14850 } 14851 14853 14856 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const simatrix_subv& v2) { 14857 accumulate(dot,v1,sivector(v2)); 14858 } 14859 14861 14864 inline void accumulate(cidotprecision& dot,const civector_slice& v1, const scimatrix_subv& v2) { 14865 accumulate(dot,v1,scivector(v2)); 14866 } 14867 14869 14872 inline void accumulate(cidotprecision& dot,const rvector_slice& v1, const scimatrix_subv& v2) { 14873 accumulate(dot,v1,scivector(v2)); 14874 } 14875 14877 14880 inline void accumulate(cidotprecision& dot,const cvector_slice& v1, const scimatrix_subv& v2) { 14881 accumulate(dot,v1,scivector(v2)); 14882 } 14883 14885 14888 inline void accumulate(cidotprecision& dot,const ivector_slice& v1, const scimatrix_subv& v2) { 14889 accumulate(dot,v1,scivector(v2)); 14890 } 14891 14893 14896 inline void accumulate(cidotprecision& dot,const ivector_slice& v1, const scmatrix_subv& v2) { 14897 accumulate(dot,v1,scvector(v2)); 14898 } 14899 14901 14904 inline void accumulate(cidotprecision& dot,const cvector_slice& v1, const simatrix_subv& v2) { 14905 accumulate(dot,v1,sivector(v2)); 14906 } 14907 14908 14909 } //namespace cxsc; 14910 14911 #include "sparsematrix.inl" 14912 14913 #endif 14914