scimatrix.hpp

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

Generated on Thu Jun 9 11:21:53 2011 for C-XSC - A C++ Class Library for Extended Scientific Computing by  doxygen 1.4.6