StrictlyUpperMatrix.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYUPPERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_STRICTLYUPPERMATRIX_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
47 #include <blaze/math/Forward.h>
79 #include <blaze/util/Assert.h>
80 #include <blaze/util/EnableIf.h>
82 #include <blaze/util/TrueType.h>
84 #include <blaze/util/Unused.h>
85 
86 
87 namespace blaze {
88 
89 //=================================================================================================
90 //
91 // STRICTLYUPPERMATRIX OPERATORS
92 //
93 //=================================================================================================
94 
95 //*************************************************************************************************
98 template< typename MT, bool SO, bool DF >
99 inline void reset( StrictlyUpperMatrix<MT,SO,DF>& m );
100 
101 template< typename MT, bool SO, bool DF >
102 inline void reset( StrictlyUpperMatrix<MT,SO,DF>& m, size_t i );
103 
104 template< typename MT, bool SO, bool DF >
105 inline void clear( StrictlyUpperMatrix<MT,SO,DF>& m );
106 
107 template< bool RF, typename MT, bool SO, bool DF >
108 inline bool isDefault( const StrictlyUpperMatrix<MT,SO,DF>& m );
109 
110 template< typename MT, bool SO, bool DF >
111 inline bool isIntact( const StrictlyUpperMatrix<MT,SO,DF>& m );
112 
113 template< typename MT, bool SO, bool DF >
114 inline void swap( StrictlyUpperMatrix<MT,SO,DF>& a, StrictlyUpperMatrix<MT,SO,DF>& b ) noexcept;
116 //*************************************************************************************************
117 
118 
119 //*************************************************************************************************
126 template< typename MT // Type of the adapted matrix
127  , bool SO // Storage order of the adapted matrix
128  , bool DF > // Density flag
130 {
131  m.reset();
132 }
133 //*************************************************************************************************
134 
135 
136 //*************************************************************************************************
149 template< typename MT // Type of the adapted matrix
150  , bool SO // Storage order of the adapted matrix
151  , bool DF > // Density flag
152 inline void reset( StrictlyUpperMatrix<MT,SO,DF>& m, size_t i )
153 {
154  m.reset( i );
155 }
156 //*************************************************************************************************
157 
158 
159 //*************************************************************************************************
166 template< typename MT // Type of the adapted matrix
167  , bool SO // Storage order of the adapted matrix
168  , bool DF > // Density flag
170 {
171  m.clear();
172 }
173 //*************************************************************************************************
174 
175 
176 //*************************************************************************************************
187 template< bool RF // Relaxation flag
188  , typename MT // Type of the adapted matrix
189  , bool SO // Storage order of the adapted matrix
190  , bool DF > // Density flag
191 inline bool isDefault_backend( const StrictlyUpperMatrix<MT,SO,DF>& m, TrueType )
192 {
193  return ( m.rows() == 0UL );
194 }
196 //*************************************************************************************************
197 
198 
199 //*************************************************************************************************
210 template< bool RF // Relaxation flag
211  , typename MT // Type of the adapted matrix
212  , bool SO // Storage order of the adapted matrix
213  , bool DF > // Density flag
214 inline bool isDefault_backend( const StrictlyUpperMatrix<MT,SO,DF>& m, FalseType )
215 {
216  if( SO ) {
217  for( size_t j=1UL; j<m.columns(); ++j ) {
218  for( size_t i=0UL; i<j; ++i ) {
219  if( !isDefault<RF>( m(i,j) ) )
220  return false;
221  }
222  }
223  }
224  else {
225  for( size_t i=0UL; i<m.rows(); ++i ) {
226  for( size_t j=i+1UL; j<m.columns(); ++j ) {
227  if( !isDefault<RF>( m(i,j) ) )
228  return false;
229  }
230  }
231  }
232 
233  return true;
234 }
236 //*************************************************************************************************
237 
238 
239 //*************************************************************************************************
266 template< bool RF // Relaxation flag
267  , typename MT // Type of the adapted matrix
268  , bool SO // Storage order of the adapted matrix
269  , bool DF > // Density flag
271 {
272  return isDefault_backend<RF>( m, typename IsResizable<MT>::Type() );
273 }
274 //*************************************************************************************************
275 
276 
277 //*************************************************************************************************
298 template< typename MT // Type of the adapted matrix
299  , bool SO // Storage order of the adapted matrix
300  , bool DF > // Density flag
302 {
303  return m.isIntact();
304 }
305 //*************************************************************************************************
306 
307 
308 //*************************************************************************************************
316 template< typename MT // Type of the adapted matrix
317  , bool SO // Storage order of the adapted matrix
318  , bool DF > // Density flag
320 {
321  a.swap( b );
322 }
323 //*************************************************************************************************
324 
325 
326 //*************************************************************************************************
343 template< typename MT // Type of the adapted matrix
344  , bool SO // Storage order of the adapted matrix
345  , bool DF // Density flag
346  , typename VT > // Type of the right-hand side dense vector
347 inline bool tryAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
348  const DenseVector<VT,false>& rhs, size_t row, size_t column )
349 {
351 
352  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
353  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
354  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.rows() - row, "Invalid number of rows" );
355 
356  UNUSED_PARAMETER( lhs );
357 
358  const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
359 
360  for( size_t i=ibegin; i<(~rhs).size(); ++i ) {
361  if( !isDefault( (~rhs)[i] ) )
362  return false;
363  }
364 
365  return true;
366 }
368 //*************************************************************************************************
369 
370 
371 //*************************************************************************************************
388 template< typename MT // Type of the adapted matrix
389  , bool SO // Storage order of the adapted matrix
390  , bool DF // Density flag
391  , typename VT > // Type of the right-hand side dense vector
392 inline bool tryAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
393  const DenseVector<VT,true>& rhs, size_t row, size_t column )
394 {
396 
397  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
398  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
399  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.columns() - column, "Invalid number of columns" );
400 
401  UNUSED_PARAMETER( lhs );
402 
403  if( row < column )
404  return true;
405 
406  const size_t iend( min( row - column + 1UL, (~rhs).size() ) );
407 
408  for( size_t i=0UL; i<iend; ++i ) {
409  if( !isDefault( (~rhs)[i] ) )
410  return false;
411  }
412 
413  return true;
414 }
416 //*************************************************************************************************
417 
418 
419 //*************************************************************************************************
436 template< typename MT // Type of the adapted matrix
437  , bool SO // Storage order of the adapted matrix
438  , bool DF // Density flag
439  , typename VT > // Type of the right-hand side sparse vector
440 inline bool tryAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
441  const SparseVector<VT,false>& rhs, size_t row, size_t column )
442 {
444 
445  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
446  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
447  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.rows() - row, "Invalid number of rows" );
448 
449  UNUSED_PARAMETER( lhs );
450 
451  using RhsIterator = typename VT::ConstIterator;
452 
453  const RhsIterator last( (~rhs).end() );
454  RhsIterator element( (~rhs).lowerBound( ( column <= row )?( 0UL ):( column - row ) ) );
455 
456  for( ; element!=last; ++element ) {
457  if( !isDefault( element->value() ) )
458  return false;
459  }
460 
461  return true;
462 }
464 //*************************************************************************************************
465 
466 
467 //*************************************************************************************************
484 template< typename MT // Type of the adapted matrix
485  , bool SO // Storage order of the adapted matrix
486  , bool DF // Density flag
487  , typename VT > // Type of the right-hand side sparse vector
488 inline bool tryAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
489  const SparseVector<VT,true>& rhs, size_t row, size_t column )
490 {
492 
493  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
494  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
495  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.columns() - column, "Invalid number of columns" );
496 
497  UNUSED_PARAMETER( lhs );
498 
499  using RhsIterator = typename VT::ConstIterator;
500 
501  if( row < column )
502  return true;
503 
504  const RhsIterator last( (~rhs).lowerBound( row - column + 1UL ) );
505 
506  for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
507  if( !isDefault( element->value() ) )
508  return false;
509  }
510 
511  return true;
512 }
514 //*************************************************************************************************
515 
516 
517 //*************************************************************************************************
534 template< typename MT1 // Type of the adapted matrix
535  , bool SO // Storage order of the adapted matrix
536  , bool DF // Density flag
537  , typename MT2 > // Type of the right-hand side dense matrix
538 inline bool tryAssign( const StrictlyUpperMatrix<MT1,SO,DF>& lhs,
539  const DenseMatrix<MT2,false>& rhs, size_t row, size_t column )
540 {
542 
543  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
544  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
545  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
546  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
547 
548  UNUSED_PARAMETER( lhs );
549 
550  const size_t M( (~rhs).rows() );
551  const size_t N( (~rhs).columns() );
552 
553  if( column + 1UL >= row + M )
554  return true;
555 
556  const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
557 
558  for( size_t i=ibegin; i<M; ++i )
559  {
560  const size_t jend( min( row + i - column + 1UL, N ) );
561 
562  for( size_t j=0UL; j<jend; ++j ) {
563  if( !isDefault( (~rhs)(i,j) ) )
564  return false;
565  }
566  }
567 
568  return true;
569 }
571 //*************************************************************************************************
572 
573 
574 //*************************************************************************************************
591 template< typename MT1 // Type of the adapted matrix
592  , bool SO // Storage order of the adapted matrix
593  , bool DF // Density flag
594  , typename MT2 > // Type of the right-hand side dense matrix
595 inline bool tryAssign( const StrictlyUpperMatrix<MT1,SO,DF>& lhs,
596  const DenseMatrix<MT2,true>& rhs, size_t row, size_t column )
597 {
599 
600  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
601  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
602  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
603  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
604 
605  UNUSED_PARAMETER( lhs );
606 
607  const size_t M( (~rhs).rows() );
608  const size_t N( (~rhs).columns() );
609 
610  if( column + 1UL >= row + M )
611  return true;
612 
613  const size_t jend( min( row + M - column, N ) );
614 
615  for( size_t j=0UL; j<jend; ++j )
616  {
617  const bool containsDiagonal( column + j >= row );
618  const size_t ibegin( ( containsDiagonal )?( column + j - row ):( 0UL ) );
619 
620  for( size_t i=ibegin; i<M; ++i ) {
621  if( !isDefault( (~rhs)(i,j) ) )
622  return false;
623  }
624  }
625 
626  return true;
627 }
629 //*************************************************************************************************
630 
631 
632 //*************************************************************************************************
649 template< typename MT1 // Type of the adapted matrix
650  , bool SO // Storage order of the adapted matrix
651  , bool DF // Density flag
652  , typename MT2 > // Type of the right-hand side sparse matrix
653 inline bool tryAssign( const StrictlyUpperMatrix<MT1,SO,DF>& lhs,
654  const SparseMatrix<MT2,false>& rhs, size_t row, size_t column )
655 {
657 
658  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
659  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
660  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
661  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
662 
663  UNUSED_PARAMETER( lhs );
664 
665  using RhsIterator = typename MT2::ConstIterator;
666 
667  const size_t M( (~rhs).rows() );
668  const size_t N( (~rhs).columns() );
669 
670  if( column + 1UL >= row + M )
671  return true;
672 
673  const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
674 
675  for( size_t i=ibegin; i<M; ++i )
676  {
677  const size_t index( row + i - column + 1UL );
678  const RhsIterator last( (~rhs).lowerBound( i, min( index, N ) ) );
679 
680  for( RhsIterator element=(~rhs).begin(i); element!=last; ++element ) {
681  if( !isDefault( element->value() ) )
682  return false;
683  }
684  }
685 
686  return true;
687 }
689 //*************************************************************************************************
690 
691 
692 //*************************************************************************************************
709 template< typename MT1 // Type of the adapted matrix
710  , bool SO // Storage order of the adapted matrix
711  , bool DF // Density flag
712  , typename MT2 > // Type of the right-hand side sparse matrix
713 inline bool tryAssign( const StrictlyUpperMatrix<MT1,SO,DF>& lhs,
714  const SparseMatrix<MT2,true>& rhs, size_t row, size_t column )
715 {
717 
718  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
719  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
720  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
721  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
722 
723  UNUSED_PARAMETER( lhs );
724 
725  using RhsIterator = typename MT2::ConstIterator;
726 
727  const size_t M( (~rhs).rows() );
728  const size_t N( (~rhs).columns() );
729 
730  if( column + 1UL >= row + M )
731  return true;
732 
733  const size_t jend( min( row + M - column, N ) );
734 
735  for( size_t j=0UL; j<jend; ++j )
736  {
737  const bool containsDiagonal( column + j >= row );
738  const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
739 
740  const RhsIterator last( (~rhs).end(j) );
741  RhsIterator element( (~rhs).lowerBound( index, j ) );
742 
743  for( ; element!=last; ++element ) {
744  if( !isDefault( element->value() ) )
745  return false;
746  }
747  }
748 
749  return true;
750 }
752 //*************************************************************************************************
753 
754 
755 //*************************************************************************************************
772 template< typename MT // Type of the adapted matrix
773  , bool SO // Storage order of the adapted matrix
774  , bool DF // Density flag
775  , typename VT // Type of the right-hand side vector
776  , bool TF > // Transpose flag of the right-hand side vector
777 inline bool tryAddAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
778  const Vector<VT,TF>& rhs, size_t row, size_t column )
779 {
780  return tryAssign( lhs, ~rhs, row, column );
781 }
783 //*************************************************************************************************
784 
785 
786 //*************************************************************************************************
803 template< typename MT1 // Type of the adapted matrix
804  , bool SO1 // Storage order of the adapted matrix
805  , bool DF // Density flag
806  , typename MT2 // Type of the right-hand side matrix
807  , bool SO2 > // Storage order of the right-hand side matrix
808 inline bool tryAddAssign( const StrictlyUpperMatrix<MT1,SO1,DF>& lhs,
809  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
810 {
811  return tryAssign( lhs, ~rhs, row, column );
812 }
814 //*************************************************************************************************
815 
816 
817 //*************************************************************************************************
834 template< typename MT // Type of the adapted matrix
835  , bool SO // Storage order of the adapted matrix
836  , bool DF // Density flag
837  , typename VT // Type of the right-hand side vector
838  , bool TF > // Transpose flag of the right-hand side vector
839 inline bool trySubAssign( const StrictlyUpperMatrix<MT,SO,DF>& lhs,
840  const Vector<VT,TF>& rhs, size_t row, size_t column )
841 {
842  return tryAssign( lhs, ~rhs, row, column );
843 }
845 //*************************************************************************************************
846 
847 
848 //*************************************************************************************************
865 template< typename MT1 // Type of the adapted matrix
866  , bool SO1 // Storage order of the adapted matrix
867  , bool DF // Density flag
868  , typename MT2 // Type of the right-hand side matrix
869  , bool SO2 > // Storage order of the right-hand side matrix
870 inline bool trySubAssign( const StrictlyUpperMatrix<MT1,SO1,DF>& lhs,
871  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
872 {
873  return tryAssign( lhs, ~rhs, row, column );
874 }
876 //*************************************************************************************************
877 
878 
879 //*************************************************************************************************
893 template< typename MT // Type of the adapted matrix
894  , bool SO // Storage order of the adapted matrix
895  , bool DF > // Density flag
896 inline MT& derestrict( StrictlyUpperMatrix<MT,SO,DF>& m )
897 {
898  return m.matrix_;
899 }
901 //*************************************************************************************************
902 
903 
904 
905 
906 //=================================================================================================
907 //
908 // ROWS SPECIALIZATIONS
909 //
910 //=================================================================================================
911 
912 //*************************************************************************************************
914 template< typename MT, bool SO, bool DF >
915 struct Rows< StrictlyUpperMatrix<MT,SO,DF> >
916  : public Rows<MT>
917 {};
919 //*************************************************************************************************
920 
921 
922 
923 
924 //=================================================================================================
925 //
926 // COLUMNS SPECIALIZATIONS
927 //
928 //=================================================================================================
929 
930 //*************************************************************************************************
932 template< typename MT, bool SO, bool DF >
933 struct Columns< StrictlyUpperMatrix<MT,SO,DF> >
934  : public Columns<MT>
935 {};
937 //*************************************************************************************************
938 
939 
940 
941 
942 //=================================================================================================
943 //
944 // ISSQUARE SPECIALIZATIONS
945 //
946 //=================================================================================================
947 
948 //*************************************************************************************************
950 template< typename MT, bool SO, bool DF >
951 struct IsSquare< StrictlyUpperMatrix<MT,SO,DF> >
952  : public TrueType
953 {};
955 //*************************************************************************************************
956 
957 
958 
959 
960 //=================================================================================================
961 //
962 // ISSTRICTLYUPPER SPECIALIZATIONS
963 //
964 //=================================================================================================
965 
966 //*************************************************************************************************
968 template< typename MT, bool SO, bool DF >
969 struct IsStrictlyUpper< StrictlyUpperMatrix<MT,SO,DF> >
970  : public TrueType
971 {};
973 //*************************************************************************************************
974 
975 
976 
977 
978 //=================================================================================================
979 //
980 // ISADAPTOR SPECIALIZATIONS
981 //
982 //=================================================================================================
983 
984 //*************************************************************************************************
986 template< typename MT, bool SO, bool DF >
987 struct IsAdaptor< StrictlyUpperMatrix<MT,SO,DF> >
988  : public TrueType
989 {};
991 //*************************************************************************************************
992 
993 
994 
995 
996 //=================================================================================================
997 //
998 // ISRESTRICTED SPECIALIZATIONS
999 //
1000 //=================================================================================================
1001 
1002 //*************************************************************************************************
1004 template< typename MT, bool SO, bool DF >
1005 struct IsRestricted< StrictlyUpperMatrix<MT,SO,DF> >
1006  : public TrueType
1007 {};
1009 //*************************************************************************************************
1010 
1011 
1012 
1013 
1014 //=================================================================================================
1015 //
1016 // HASCONSTDATAACCESS SPECIALIZATIONS
1017 //
1018 //=================================================================================================
1019 
1020 //*************************************************************************************************
1022 template< typename MT, bool SO >
1023 struct HasConstDataAccess< StrictlyUpperMatrix<MT,SO,true> >
1024  : public TrueType
1025 {};
1027 //*************************************************************************************************
1028 
1029 
1030 
1031 
1032 //=================================================================================================
1033 //
1034 // ISALIGNED SPECIALIZATIONS
1035 //
1036 //=================================================================================================
1037 
1038 //*************************************************************************************************
1040 template< typename MT, bool SO, bool DF >
1041 struct IsAligned< StrictlyUpperMatrix<MT,SO,DF> >
1042  : public BoolConstant< IsAligned<MT>::value >
1043 {};
1045 //*************************************************************************************************
1046 
1047 
1048 
1049 
1050 //=================================================================================================
1051 //
1052 // ISPADDED SPECIALIZATIONS
1053 //
1054 //=================================================================================================
1055 
1056 //*************************************************************************************************
1058 template< typename MT, bool SO, bool DF >
1059 struct IsPadded< StrictlyUpperMatrix<MT,SO,DF> >
1060  : public BoolConstant< IsPadded<MT>::value >
1061 {};
1063 //*************************************************************************************************
1064 
1065 
1066 
1067 
1068 //=================================================================================================
1069 //
1070 // ISRESIZABLE SPECIALIZATIONS
1071 //
1072 //=================================================================================================
1073 
1074 //*************************************************************************************************
1076 template< typename MT, bool SO, bool DF >
1077 struct IsResizable< StrictlyUpperMatrix<MT,SO,DF> >
1078  : public BoolConstant< IsResizable<MT>::value >
1079 {};
1081 //*************************************************************************************************
1082 
1083 
1084 
1085 
1086 //=================================================================================================
1087 //
1088 // ISSHRINKABLE SPECIALIZATIONS
1089 //
1090 //=================================================================================================
1091 
1092 //*************************************************************************************************
1094 template< typename MT, bool SO, bool DF >
1095 struct IsShrinkable< StrictlyUpperMatrix<MT,SO,DF> >
1096  : public BoolConstant< IsShrinkable<MT>::value >
1097 {};
1099 //*************************************************************************************************
1100 
1101 
1102 
1103 
1104 //=================================================================================================
1105 //
1106 // REMOVEADAPTOR SPECIALIZATIONS
1107 //
1108 //=================================================================================================
1109 
1110 //*************************************************************************************************
1112 template< typename MT, bool SO, bool DF >
1113 struct RemoveAdaptor< StrictlyUpperMatrix<MT,SO,DF> >
1114 {
1115  using Type = MT;
1116 };
1118 //*************************************************************************************************
1119 
1120 
1121 
1122 
1123 //=================================================================================================
1124 //
1125 // ADDTRAIT SPECIALIZATIONS
1126 //
1127 //=================================================================================================
1128 
1129 //*************************************************************************************************
1131 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1132 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1133 {
1135 };
1136 
1137 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1138 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1139 {
1140  using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1141 };
1142 
1143 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1144 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1145 {
1147 };
1148 
1149 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1150 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1151 {
1152  using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1153 };
1154 
1155 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1156 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1157 {
1158  using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1159 };
1160 
1161 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1162 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1163 {
1164  using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1165 };
1166 
1167 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1168 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1169 {
1171 };
1172 
1173 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1174 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1175 {
1176  using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1177 };
1178 
1179 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1180 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1181 {
1183 };
1184 
1185 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1186 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1187 {
1188  using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1189 };
1190 
1191 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1192 struct AddTrait< StrictlyUpperMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1193 {
1195 };
1196 
1197 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1198 struct AddTrait< IdentityMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1199 {
1201 };
1202 
1203 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1204 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1205 {
1206  using Type = AddTrait_<MT1,MT2>;
1207 };
1208 
1209 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1210 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1211 {
1212  using Type = AddTrait_<MT1,MT2>;
1213 };
1214 
1215 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1216 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1217 {
1218  using Type = AddTrait_<MT1,MT2>;
1219 };
1220 
1221 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1222 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1223 {
1224  using Type = AddTrait_<MT1,MT2>;
1225 };
1226 
1227 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1228 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1229 {
1230  using Type = AddTrait_<MT1,MT2>;
1231 };
1232 
1233 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1234 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1235 {
1236  using Type = AddTrait_<MT1,MT2>;
1237 };
1238 
1239 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1240 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1241 {
1242  using Type = AddTrait_<MT1,MT2>;
1243 };
1244 
1245 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1246 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1247 {
1248  using Type = AddTrait_<MT1,MT2>;
1249 };
1250 
1251 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1252 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1253 {
1254  using Type = AddTrait_<MT1,MT2>;
1255 };
1256 
1257 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1258 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1259 {
1260  using Type = AddTrait_<MT1,MT2>;
1261 };
1262 
1263 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1264 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1265 {
1266  using Type = UpperMatrix< AddTrait_<MT1,MT2> >;
1267 };
1268 
1269 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1270 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1271 {
1272  using Type = UpperMatrix< AddTrait_<MT1,MT2> >;
1273 };
1274 
1275 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1276 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1277 {
1278  using Type = UniUpperMatrix< AddTrait_<MT1,MT2> >;
1279 };
1280 
1281 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1282 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1283 {
1284  using Type = UniUpperMatrix< AddTrait_<MT1,MT2> >;
1285 };
1286 
1287 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1288 struct AddTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1289 {
1291 };
1293 //*************************************************************************************************
1294 
1295 
1296 
1297 
1298 //=================================================================================================
1299 //
1300 // SUBTRAIT SPECIALIZATIONS
1301 //
1302 //=================================================================================================
1303 
1304 //*************************************************************************************************
1306 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1307 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1308 {
1310 };
1311 
1312 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1313 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1314 {
1315  using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1316 };
1317 
1318 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1319 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1320 {
1322 };
1323 
1324 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1325 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1326 {
1327  using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1328 };
1329 
1330 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1331 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1332 {
1333  using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1334 };
1335 
1336 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1337 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1338 {
1339  using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1340 };
1341 
1342 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1343 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1344 {
1346 };
1347 
1348 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1349 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1350 {
1351  using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1352 };
1353 
1354 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1355 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1356 {
1358 };
1359 
1360 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1361 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1362 {
1363  using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1364 };
1365 
1366 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1367 struct SubTrait< StrictlyUpperMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1368 {
1370 };
1371 
1372 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1373 struct SubTrait< IdentityMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1374 {
1376 };
1377 
1378 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1379 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1380 {
1381  using Type = SubTrait_<MT1,MT2>;
1382 };
1383 
1384 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1385 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1386 {
1387  using Type = SubTrait_<MT1,MT2>;
1388 };
1389 
1390 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1391 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1392 {
1393  using Type = SubTrait_<MT1,MT2>;
1394 };
1395 
1396 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1397 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1398 {
1399  using Type = SubTrait_<MT1,MT2>;
1400 };
1401 
1402 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1403 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1404 {
1405  using Type = SubTrait_<MT1,MT2>;
1406 };
1407 
1408 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1409 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1410 {
1411  using Type = SubTrait_<MT1,MT2>;
1412 };
1413 
1414 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1415 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1416 {
1417  using Type = SubTrait_<MT1,MT2>;
1418 };
1419 
1420 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1421 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1422 {
1423  using Type = SubTrait_<MT1,MT2>;
1424 };
1425 
1426 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1427 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1428 {
1429  using Type = SubTrait_<MT1,MT2>;
1430 };
1431 
1432 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1433 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1434 {
1435  using Type = SubTrait_<MT1,MT2>;
1436 };
1437 
1438 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1439 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1440 {
1441  using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
1442 };
1443 
1444 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1445 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1446 {
1447  using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
1448 };
1449 
1450 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1451 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1452 {
1453  using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
1454 };
1455 
1456 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1457 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1458 {
1459  using Type = UniUpperMatrix< SubTrait_<MT1,MT2> >;
1460 };
1461 
1462 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1463 struct SubTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1464 {
1466 };
1468 //*************************************************************************************************
1469 
1470 
1471 
1472 
1473 //=================================================================================================
1474 //
1475 // SCHURTRAIT SPECIALIZATIONS
1476 //
1477 //=================================================================================================
1478 
1479 //*************************************************************************************************
1481 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1482 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1483 {
1485 };
1486 
1487 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1488 struct SchurTrait< StaticMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1489 {
1491 };
1492 
1493 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1494 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1495 {
1497 };
1498 
1499 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1500 struct SchurTrait< HybridMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1501 {
1503 };
1504 
1505 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1506 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1507 {
1509 };
1510 
1511 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1512 struct SchurTrait< DynamicMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1513 {
1515 };
1516 
1517 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1518 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1519 {
1521 };
1522 
1523 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1524 struct SchurTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1525 {
1527 };
1528 
1529 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1530 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1531 {
1533 };
1534 
1535 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1536 struct SchurTrait< CompressedMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1537 {
1539 };
1540 
1541 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1542 struct SchurTrait< StrictlyUpperMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1543 {
1545 };
1546 
1547 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1548 struct SchurTrait< IdentityMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1549 {
1551 };
1552 
1553 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1554 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1555 {
1557 };
1558 
1559 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1560 struct SchurTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1561 {
1563 };
1564 
1565 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1566 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1567 {
1569 };
1570 
1571 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1572 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1573 {
1575 };
1576 
1577 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1578 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1579 {
1580  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1581 };
1582 
1583 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1584 struct SchurTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1585 {
1586  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1587 };
1588 
1589 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1590 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1591 {
1592  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1593 };
1594 
1595 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1596 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1597 {
1598  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1599 };
1600 
1601 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1602 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1603 {
1604  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1605 };
1606 
1607 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1608 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1609 {
1610  using Type = DiagonalMatrix< SchurTrait_<MT1,MT2> >;
1611 };
1612 
1613 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1614 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1615 {
1617 };
1618 
1619 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1620 struct SchurTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1621 {
1623 };
1624 
1625 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1626 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1627 {
1629 };
1630 
1631 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1632 struct SchurTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1633 {
1635 };
1636 
1637 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1638 struct SchurTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1639 {
1641 };
1643 //*************************************************************************************************
1644 
1645 
1646 
1647 
1648 //=================================================================================================
1649 //
1650 // MULTTRAIT SPECIALIZATIONS
1651 //
1652 //=================================================================================================
1653 
1654 //*************************************************************************************************
1656 template< typename MT, bool SO, bool DF, typename T >
1657 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1658 {
1660 };
1661 
1662 template< typename T, typename MT, bool SO, bool DF >
1663 struct MultTrait< T, StrictlyUpperMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1664 {
1666 };
1667 
1668 template< typename MT, bool SO, bool DF, typename T, size_t N >
1669 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1670 {
1672 };
1673 
1674 template< typename T, size_t N, typename MT, bool SO, bool DF >
1675 struct MultTrait< StaticVector<T,N,true>, StrictlyUpperMatrix<MT,SO,DF> >
1676 {
1677  using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1678 };
1679 
1680 template< typename MT, bool SO, bool DF, typename T, size_t N >
1681 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1682 {
1684 };
1685 
1686 template< typename T, size_t N, typename MT, bool SO, bool DF >
1687 struct MultTrait< HybridVector<T,N,true>, StrictlyUpperMatrix<MT,SO,DF> >
1688 {
1689  using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1690 };
1691 
1692 template< typename MT, bool SO, bool DF, typename T >
1693 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, DynamicVector<T,false> >
1694 {
1696 };
1697 
1698 template< typename T, typename MT, bool SO, bool DF >
1699 struct MultTrait< DynamicVector<T,true>, StrictlyUpperMatrix<MT,SO,DF> >
1700 {
1701  using Type = MultTrait_< DynamicVector<T,true>, MT >;
1702 };
1703 
1704 template< typename MT, bool SO, bool DF, typename T, bool AF, bool PF >
1705 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1706 {
1708 };
1709 
1710 template< typename T, bool AF, bool PF, typename MT, bool SO, bool DF >
1711 struct MultTrait< CustomVector<T,AF,PF,true>, StrictlyUpperMatrix<MT,SO,DF> >
1712 {
1713  using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1714 };
1715 
1716 template< typename MT, bool SO, bool DF, typename T >
1717 struct MultTrait< StrictlyUpperMatrix<MT,SO,DF>, CompressedVector<T,false> >
1718 {
1720 };
1721 
1722 template< typename T, typename MT, bool SO, bool DF >
1723 struct MultTrait< CompressedVector<T,true>, StrictlyUpperMatrix<MT,SO,DF> >
1724 {
1725  using Type = MultTrait_< CompressedVector<T,true>, MT >;
1726 };
1727 
1728 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1729 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1730 {
1732 };
1733 
1734 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1735 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1736 {
1737  using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1738 };
1739 
1740 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1741 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1742 {
1744 };
1745 
1746 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1747 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1748 {
1749  using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1750 };
1751 
1752 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1753 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1754 {
1755  using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1756 };
1757 
1758 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1759 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1760 {
1761  using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1762 };
1763 
1764 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1765 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1766 {
1768 };
1769 
1770 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1771 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1772 {
1773  using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1774 };
1775 
1776 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1777 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1778 {
1780 };
1781 
1782 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1783 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1784 {
1785  using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1786 };
1787 
1788 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1789 struct MultTrait< StrictlyUpperMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1790 {
1792 };
1793 
1794 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1795 struct MultTrait< IdentityMatrix<T,SO1>, StrictlyUpperMatrix<MT,SO2,DF> >
1796 {
1798 };
1799 
1800 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1801 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1802 {
1803  using Type = MultTrait_<MT1,MT2>;
1804 };
1805 
1806 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1807 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1808 {
1809  using Type = MultTrait_<MT1,MT2>;
1810 };
1811 
1812 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1813 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1814 {
1815  using Type = MultTrait_<MT1,MT2>;
1816 };
1817 
1818 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1819 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1820 {
1821  using Type = MultTrait_<MT1,MT2>;
1822 };
1823 
1824 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1825 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1826 {
1827  using Type = MultTrait_<MT1,MT2>;
1828 };
1829 
1830 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1831 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1832 {
1833  using Type = MultTrait_<MT1,MT2>;
1834 };
1835 
1836 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1837 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1838 {
1839  using Type = MultTrait_<MT1,MT2>;
1840 };
1841 
1842 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1843 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1844 {
1845  using Type = MultTrait_<MT1,MT2>;
1846 };
1847 
1848 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1849 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1850 {
1851  using Type = MultTrait_<MT1,MT2>;
1852 };
1853 
1854 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1855 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1856 {
1857  using Type = MultTrait_<MT1,MT2>;
1858 };
1859 
1860 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1861 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1862 {
1864 };
1865 
1866 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1867 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1868 {
1870 };
1871 
1872 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1873 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1874 {
1876 };
1877 
1878 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1879 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1880 {
1882 };
1883 
1884 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1885 struct MultTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
1886 {
1888 };
1890 //*************************************************************************************************
1891 
1892 
1893 
1894 
1895 //=================================================================================================
1896 //
1897 // DIVTRAIT SPECIALIZATIONS
1898 //
1899 //=================================================================================================
1900 
1901 //*************************************************************************************************
1903 template< typename MT, bool SO, bool DF, typename T >
1904 struct DivTrait< StrictlyUpperMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1905 {
1906  using Type = StrictlyUpperMatrix< DivTrait_<MT,T> >;
1907 };
1909 //*************************************************************************************************
1910 
1911 
1912 
1913 
1914 //=================================================================================================
1915 //
1916 // UNARYMAPTRAIT SPECIALIZATIONS
1917 //
1918 //=================================================================================================
1919 
1920 //*************************************************************************************************
1922 template< typename MT, bool SO, bool DF >
1923 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Abs >
1924 {
1926 };
1927 
1928 template< typename MT, bool SO, bool DF >
1929 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Floor >
1930 {
1932 };
1933 
1934 template< typename MT, bool SO, bool DF >
1935 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Ceil >
1936 {
1938 };
1939 
1940 template< typename MT, bool SO, bool DF >
1941 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Trunc >
1942 {
1944 };
1945 
1946 template< typename MT, bool SO, bool DF >
1947 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Round >
1948 {
1950 };
1951 
1952 template< typename MT, bool SO, bool DF >
1953 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Conj >
1954 {
1956 };
1957 
1958 template< typename MT, bool SO, bool DF >
1959 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Real >
1960 {
1962 };
1963 
1964 template< typename MT, bool SO, bool DF >
1965 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Imag >
1966 {
1968 };
1969 
1970 template< typename MT, bool SO, bool DF >
1971 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Sqrt >
1972 {
1974 };
1975 
1976 template< typename MT, bool SO, bool DF >
1977 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Cbrt >
1978 {
1980 };
1981 
1982 template< typename MT, bool SO, bool DF >
1983 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Sin >
1984 {
1986 };
1987 
1988 template< typename MT, bool SO, bool DF >
1989 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Asin >
1990 {
1992 };
1993 
1994 template< typename MT, bool SO, bool DF >
1995 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Sinh >
1996 {
1998 };
1999 
2000 template< typename MT, bool SO, bool DF >
2001 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Asinh >
2002 {
2004 };
2005 
2006 template< typename MT, bool SO, bool DF >
2007 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Tan >
2008 {
2010 };
2011 
2012 template< typename MT, bool SO, bool DF >
2013 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Atan >
2014 {
2016 };
2017 
2018 template< typename MT, bool SO, bool DF >
2019 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Tanh >
2020 {
2022 };
2023 
2024 template< typename MT, bool SO, bool DF >
2025 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Atanh >
2026 {
2028 };
2029 
2030 template< typename MT, bool SO, bool DF >
2031 struct UnaryMapTrait< StrictlyUpperMatrix<MT,SO,DF>, Erf >
2032 {
2034 };
2036 //*************************************************************************************************
2037 
2038 
2039 
2040 
2041 //=================================================================================================
2042 //
2043 // BINARYMAPTRAIT SPECIALIZATIONS
2044 //
2045 //=================================================================================================
2046 
2047 //*************************************************************************************************
2049 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2050 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2>, Min >
2051 {
2053 };
2054 
2055 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2056 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2>, Max >
2057 {
2059 };
2060 
2061 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2062 struct BinaryMapTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Min >
2063 {
2065 };
2066 
2067 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2068 struct BinaryMapTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Max >
2069 {
2071 };
2072 
2073 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2074 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2>, Min >
2075 {
2077 };
2078 
2079 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2080 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2>, Max >
2081 {
2083 };
2084 
2085 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2086 struct BinaryMapTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Min >
2087 {
2089 };
2090 
2091 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2092 struct BinaryMapTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Max >
2093 {
2095 };
2096 
2097 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2098 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Min >
2099 {
2101 };
2102 
2103 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2104 struct BinaryMapTrait< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2>, Max >
2105 {
2107 };
2109 //*************************************************************************************************
2110 
2111 
2112 
2113 
2114 //=================================================================================================
2115 //
2116 // DECLSYMTRAIT SPECIALIZATIONS
2117 //
2118 //=================================================================================================
2119 
2120 //*************************************************************************************************
2122 template< typename MT, bool SO, bool DF >
2123 struct DeclSymTrait< StrictlyUpperMatrix<MT,SO,DF> >
2124 {
2125  using Type = DiagonalMatrix<MT>;
2126 };
2128 //*************************************************************************************************
2129 
2130 
2131 
2132 
2133 //=================================================================================================
2134 //
2135 // DECLHERMTRAIT SPECIALIZATIONS
2136 //
2137 //=================================================================================================
2138 
2139 //*************************************************************************************************
2141 template< typename MT, bool SO, bool DF >
2142 struct DeclHermTrait< StrictlyUpperMatrix<MT,SO,DF> >
2143 {
2144  using Type = HermitianMatrix<MT>;
2145 };
2147 //*************************************************************************************************
2148 
2149 
2150 
2151 
2152 //=================================================================================================
2153 //
2154 // DECLLOWTRAIT SPECIALIZATIONS
2155 //
2156 //=================================================================================================
2157 
2158 //*************************************************************************************************
2160 template< typename MT, bool SO, bool DF >
2161 struct DeclLowTrait< StrictlyUpperMatrix<MT,SO,DF> >
2162 {
2163  using Type = DiagonalMatrix<MT>;
2164 };
2166 //*************************************************************************************************
2167 
2168 
2169 
2170 
2171 //=================================================================================================
2172 //
2173 // DECLUPPTRAIT SPECIALIZATIONS
2174 //
2175 //=================================================================================================
2176 
2177 //*************************************************************************************************
2179 template< typename MT, bool SO, bool DF >
2180 struct DeclUppTrait< StrictlyUpperMatrix<MT,SO,DF> >
2181 {
2182  using Type = DiagonalMatrix<MT>;
2183 };
2185 //*************************************************************************************************
2186 
2187 
2188 
2189 
2190 //=================================================================================================
2191 //
2192 // DECLDIAGTRAIT SPECIALIZATIONS
2193 //
2194 //=================================================================================================
2195 
2196 //*************************************************************************************************
2198 template< typename MT, bool SO, bool DF >
2199 struct DeclDiagTrait< StrictlyUpperMatrix<MT,SO,DF> >
2200 {
2201  using Type = DiagonalMatrix<MT>;
2202 };
2204 //*************************************************************************************************
2205 
2206 
2207 
2208 
2209 //=================================================================================================
2210 //
2211 // HIGHTYPE SPECIALIZATIONS
2212 //
2213 //=================================================================================================
2214 
2215 //*************************************************************************************************
2217 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2218 struct HighType< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
2219 {
2221 };
2223 //*************************************************************************************************
2224 
2225 
2226 
2227 
2228 //=================================================================================================
2229 //
2230 // LOWTYPE SPECIALIZATIONS
2231 //
2232 //=================================================================================================
2233 
2234 //*************************************************************************************************
2236 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2237 struct LowType< StrictlyUpperMatrix<MT1,SO1,DF1>, StrictlyUpperMatrix<MT2,SO2,DF2> >
2238 {
2240 };
2242 //*************************************************************************************************
2243 
2244 
2245 
2246 
2247 //=================================================================================================
2248 //
2249 // SUBMATRIXTRAIT SPECIALIZATIONS
2250 //
2251 //=================================================================================================
2252 
2253 //*************************************************************************************************
2255 template< typename MT, bool SO, bool DF >
2256 struct SubmatrixTrait< StrictlyUpperMatrix<MT,SO,DF> >
2257 {
2258  using Type = SubmatrixTrait_<MT>;
2259 };
2261 //*************************************************************************************************
2262 
2263 
2264 
2265 
2266 //=================================================================================================
2267 //
2268 // ROWTRAIT SPECIALIZATIONS
2269 //
2270 //=================================================================================================
2271 
2272 //*************************************************************************************************
2274 template< typename MT, bool SO, bool DF >
2275 struct RowTrait< StrictlyUpperMatrix<MT,SO,DF> >
2276 {
2277  using Type = RowTrait_<MT>;
2278 };
2280 //*************************************************************************************************
2281 
2282 
2283 
2284 
2285 //=================================================================================================
2286 //
2287 // COLUMNTRAIT SPECIALIZATIONS
2288 //
2289 //=================================================================================================
2290 
2291 //*************************************************************************************************
2293 template< typename MT, bool SO, bool DF >
2294 struct ColumnTrait< StrictlyUpperMatrix<MT,SO,DF> >
2295 {
2296  using Type = ColumnTrait_<MT>;
2297 };
2299 //*************************************************************************************************
2300 
2301 } // namespace blaze
2302 
2303 #endif
Headerfile for the generic min algorithm.
Header file for the decldiag trait.
Header file for the Schur product trait.
Compile time check for low-level access to constant data.This type trait tests whether the given data...
Definition: HasConstDataAccess.h:75
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the subtraction trait.
Header file for the row trait.
Header file for the declherm trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:128
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:127
typename RowTrait< MT >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:162
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:265
Base template for the DeclUppTrait class.
Definition: DeclUppTrait.h:133
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
Base template for the SchurTrait class.
Definition: SchurTrait.h:124
BLAZE_ALWAYS_INLINE MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:198
StrictlyUpperMatrix specialization for dense matrices.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:560
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1762
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:250
Column< MT > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:124
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:78
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
Compile time check for data types with restricted data access.This type trait tests whether the given...
Definition: IsRestricted.h:82
Header file for the IsSquare type trait.
Row< MT > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:124
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
Base template for the RowTrait class.
Definition: RowTrait.h:127
Header file for the LowType type trait.
Base template for the HighType type trait.
Definition: HighType.h:133
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
Header file for the unary map trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Matrix adapter for strictly upper triangular matrices.
Definition: BaseTemplate.h:558
Header file for the IsShrinkable type trait.
Header file for all forward declarations of the math module.
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
Header file for the decllow trait.
Header file for the Columns type trait.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:3087
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Compile time check for square matrices.This type trait tests whether or not the given template parame...
Definition: IsSquare.h:88
Header file for the IsAligned type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:340
Base template for the DeclSymTrait class.
Definition: DeclSymTrait.h:134
StrictlyUpperMatrix specialization for sparse matrices.
Compile time check for strictly upper triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyUpper.h:86
BLAZE_ALWAYS_INLINE MT::Iterator end(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator just past the last element of row/column i.
Definition: Matrix.h:264
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Matrix adapter for upper triangular matrices.
Definition: BaseTemplate.h:553
Compile time check for adaptors.This type trait tests whether the given template parameter is an adap...
Definition: IsAdaptor.h:88
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:580
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the implementation of the base template of the StrictlyUpperMatrix.
Compile time check for shrinkable data types.This type trait tests whether the given data type is a s...
Definition: IsShrinkable.h:75
Header file for the IsNumeric type trait.
Base template for the LowType type trait.
Definition: LowType.h:133
Header file for the HasConstDataAccess type trait.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
Header file for the declupp trait.
Matrix adapter for upper unitriangular matrices.
Definition: BaseTemplate.h:576
Header file for the binary map trait.
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:139
Base template for the DeclHermTrait class.
Definition: DeclHermTrait.h:134
Base template for the MultTrait class.
Definition: MultTrait.h:139
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Header file for the declsym trait.
Matrix adapter for Hermitian matrices.
Definition: BaseTemplate.h:614
Header file for the column trait.
Header file for the isDefault shim.
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b) noexcept
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:270
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:101
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.In case the given data type T requires an intermediate evaluation within ...
Definition: RequiresEvaluation.h:81
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:163
Base template for the DivTrait class.
Definition: DivTrait.h:139
typename ColumnTrait< MT >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:162
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:324
Base template for the DeclLowTrait class.
Definition: DeclLowTrait.h:133
Removal of top level adaptor types.In case the given type is an adaptor type (SymmetricMatrix, LowerMatrix, UpperMatrix, ...), the RemoveAdaptor type trait removes the adaptor and extracts the contained general matrix type. Else the given type is returned as is. Note that cv-qualifiers are preserved.
Definition: RemoveAdaptor.h:76
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:177
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:250
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:130
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:75
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:252
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:75
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:600
Base template for the SubTrait class.
Definition: SubTrait.h:139
Matrix adapter for diagonal matrices.
Definition: BaseTemplate.h:560
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Base template for the DeclDiagTrait class.
Definition: DeclDiagTrait.h:133
Base template for the BinaryMapTrait class.
Definition: BinaryMapTrait.h:119
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Base template for the UnaryMapTrait class.
Definition: UnaryMapTrait.h:117
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:250
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
Header file for the HighType type trait.
Header file for the TrueType type/value trait base class.