HermitianMatrix.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_ADAPTORS_HERMITIANMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_HERMITIANMATRIX_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/math/Aliases.h>
49 #include <blaze/math/Exception.h>
50 #include <blaze/math/Forward.h>
90 #include <blaze/util/Assert.h>
91 #include <blaze/util/EnableIf.h>
92 #include <blaze/util/mpl/If.h>
93 #include <blaze/util/TrueType.h>
96 #include <blaze/util/Unused.h>
97 
98 
99 namespace blaze {
100 
101 //=================================================================================================
102 //
103 // HERMITIANMATRIX OPERATORS
104 //
105 //=================================================================================================
106 
107 //*************************************************************************************************
110 template< typename MT, bool SO, bool DF >
111 inline void reset( HermitianMatrix<MT,SO,DF>& m );
112 
113 template< typename MT, bool SO, bool DF >
114 inline void reset( HermitianMatrix<MT,SO,DF>& m, size_t i );
115 
116 template< typename MT, bool SO, bool DF >
117 inline void clear( HermitianMatrix<MT,SO,DF>& m );
118 
119 template< bool RF, typename MT, bool SO, bool DF >
120 inline bool isDefault( const HermitianMatrix<MT,SO,DF>& m );
121 
122 template< typename MT, bool SO, bool DF >
123 inline bool isIntact( const HermitianMatrix<MT,SO,DF>& m );
124 
125 template< typename MT, bool SO, bool DF >
126 inline void swap( HermitianMatrix<MT,SO,DF>& a, HermitianMatrix<MT,SO,DF>& b ) noexcept;
128 //*************************************************************************************************
129 
130 
131 //*************************************************************************************************
138 template< typename MT // Type of the adapted matrix
139  , bool SO // Storage order of the adapted matrix
140  , bool DF > // Density flag
142 {
143  m.reset();
144 }
145 //*************************************************************************************************
146 
147 
148 //*************************************************************************************************
161 template< typename MT // Type of the adapted matrix
162  , bool SO // Storage order of the adapted matrix
163  , bool DF > // Density flag
164 inline void reset( HermitianMatrix<MT,SO,DF>& m, size_t i )
165 {
166  m.reset( i );
167 }
168 //*************************************************************************************************
169 
170 
171 //*************************************************************************************************
178 template< typename MT // Type of the adapted matrix
179  , bool SO // Storage order of the adapted matrix
180  , bool DF > // Density flag
182 {
183  m.clear();
184 }
185 //*************************************************************************************************
186 
187 
188 //*************************************************************************************************
213 template< bool RF // Relaxation flag
214  , typename MT // Type of the adapted matrix
215  , bool SO // Storage order of the adapted matrix
216  , bool DF > // Density flag
217 inline bool isDefault( const HermitianMatrix<MT,SO,DF>& m )
218 {
219  return isDefault<RF>( m.matrix_ );
220 }
221 //*************************************************************************************************
222 
223 
224 //*************************************************************************************************
245 template< typename MT // Type of the adapted matrix
246  , bool SO // Storage order of the adapted matrix
247  , bool DF > // Density flag
248 inline bool isIntact( const HermitianMatrix<MT,SO,DF>& m )
249 {
250  return m.isIntact();
251 }
252 //*************************************************************************************************
253 
254 
255 //*************************************************************************************************
263 template< typename MT // Type of the adapted matrix
264  , bool SO // Storage order of the adapted matrix
265  , bool DF > // Density flag
267 {
268  a.swap( b );
269 }
270 //*************************************************************************************************
271 
272 
273 //*************************************************************************************************
296 template< InversionFlag IF // Inversion algorithm
297  , typename MT // Type of the dense matrix
298  , bool SO > // Storage order of the dense matrix
299 inline void invert( HermitianMatrix<MT,SO,true>& m )
300 {
302 
303  if( IF == asUniLower || IF == asUniUpper ) {
304  BLAZE_INTERNAL_ASSERT( isIdentity( m ), "Violation of preconditions detected" );
305  return;
306  }
307 
308  constexpr InversionFlag flag( ( IF == byLU || IF == byLDLT || IF == byLDLH ||
309  IF == asGeneral || IF == asSymmetric || IF == asHermitian )
310  ? ( byLDLH )
311  : ( ( IF == byLLH )
312  ?( byLLH )
313  :( asDiagonal ) ) );
314 
315  MT tmp( m.matrix_ );
316  invert<flag>( tmp );
317  m.matrix_ = std::move( tmp );
318 
319  BLAZE_INTERNAL_ASSERT( isIntact( m ), "Broken invariant detected" );
320 }
322 //*************************************************************************************************
323 
324 
325 //*************************************************************************************************
341 template< typename MT // Type of the adapted matrix
342  , bool SO // Storage order of the adapted matrix
343  , bool DF // Density flag
344  , typename ET > // Type of the element
345 inline bool trySet( const HermitianMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
346 {
347  BLAZE_INTERNAL_ASSERT( i < (~mat).rows(), "Invalid row access index" );
348  BLAZE_INTERNAL_ASSERT( j < (~mat).columns(), "Invalid column access index" );
349 
350  UNUSED_PARAMETER( mat );
351 
352  return ( i != j || isReal( value ) );
353 }
355 //*************************************************************************************************
356 
357 
358 //*************************************************************************************************
374 template< typename MT // Type of the adapted matrix
375  , bool SO // Storage order of the adapted matrix
376  , bool DF // Density flag
377  , typename ET > // Type of the element
378 inline bool tryAdd( const HermitianMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
379 {
380  return trySet( mat, i, j, value );
381 }
383 //*************************************************************************************************
384 
385 
386 //*************************************************************************************************
402 template< typename MT // Type of the adapted matrix
403  , bool SO // Storage order of the adapted matrix
404  , bool DF // Density flag
405  , typename ET > // Type of the element
406 inline bool trySub( const HermitianMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
407 {
408  return trySet( mat, i, j, value );
409 }
411 //*************************************************************************************************
412 
413 
414 //*************************************************************************************************
430 template< typename MT // Type of the adapted matrix
431  , bool SO // Storage order of the adapted matrix
432  , bool DF // Density flag
433  , typename ET > // Type of the element
434 inline bool tryMult( const HermitianMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
435 {
436  return trySet( mat, i, j, value );
437 }
439 //*************************************************************************************************
440 
441 
442 //*************************************************************************************************
458 template< typename MT // Type of the adapted matrix
459  , bool SO // Storage order of the adapted matrix
460  , bool DF // Density flag
461  , typename ET > // Type of the element
462 inline bool tryDiv( const HermitianMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
463 {
464  return trySet( mat, i, j, value );
465 }
467 //*************************************************************************************************
468 
469 
470 //*************************************************************************************************
486 template< typename MT // Type of the adapted matrix
487  , bool SO // Storage order of the adapted matrix
488  , bool DF // Density flag
489  , typename VT > // Type of the right-hand side vector
490 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs,
491  const Vector<VT,false>& rhs, size_t row, size_t column )
492 {
494 
495  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
496  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
497  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
498 
499  UNUSED_PARAMETER( lhs );
500 
502 
503  return ( IsBuiltin<ET>::value ||
504  column < row ||
505  (~rhs).size() <= column - row ||
506  isReal( (~rhs)[column-row] ) );
507 
508  return true;
509 }
511 //*************************************************************************************************
512 
513 
514 //*************************************************************************************************
530 template< typename MT // Type of the adapted matrix
531  , bool SO // Storage order of the adapted matrix
532  , bool DF // Density flag
533  , typename VT > // Type of the right-hand side vector
534 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs,
535  const Vector<VT,true>& rhs, size_t row, size_t column )
536 {
538 
539  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
540  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
541  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
542 
543  UNUSED_PARAMETER( lhs );
544 
546 
547  return ( IsBuiltin<ET>::value ||
548  row < column ||
549  (~rhs).size() <= row - column ||
550  isReal( (~rhs)[row-column] ) );
551 
552  return true;
553 }
555 //*************************************************************************************************
556 
557 
558 //*************************************************************************************************
576 template< typename MT // Type of the adapted matrix
577  , bool SO // Storage order of the adapted matrix
578  , bool DF // Density flag
579  , typename VT // Type of the right-hand side dense vector
580  , bool TF > // Transpose flag of the right-hand side dense vector
581 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs, const DenseVector<VT,TF>& rhs,
582  ptrdiff_t band, size_t row, size_t column )
583 {
585 
586  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
587  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
588  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
589  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
590 
591  UNUSED_PARAMETER( lhs, row, column );
592 
593  if( band == 0L ) {
594  for( size_t i=0UL; i<(~rhs).size(); ++i ) {
595  if( !isReal( (~rhs)[i] ) )
596  return false;
597  }
598  }
599 
600  return true;
601 }
603 //*************************************************************************************************
604 
605 
606 //*************************************************************************************************
624 template< typename MT // Type of the adapted matrix
625  , bool SO // Storage order of the adapted matrix
626  , bool DF // Density flag
627  , typename VT // Type of the right-hand side sparse vector
628  , bool TF > // Transpose flag of the right-hand side sparse vector
629 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs, const SparseVector<VT,TF>& rhs,
630  ptrdiff_t band, size_t row, size_t column )
631 {
633 
634  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
635  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
636  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
637  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
638 
639  UNUSED_PARAMETER( lhs, row, column );
640 
641  if( band == 0L ) {
642  for( const auto& element : ~rhs ) {
643  if( !isReal( element.value() ) )
644  return false;
645  }
646  }
647 
648  return true;
649 }
651 //*************************************************************************************************
652 
653 
654 //*************************************************************************************************
670 template< typename MT1 // Type of the adapted matrix
671  , bool SO1 // Storage order of the adapted matrix
672  , bool DF // Density flag
673  , typename MT2 // Type of the right-hand side matrix
674  , bool SO2 > // Storage order of the right-hand side matrix
675 inline bool tryAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
676  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
677 {
679 
680  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
681  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
682  BLAZE_INTERNAL_ASSERT( row + (~rhs).rows() <= lhs.rows(), "Invalid number of rows" );
683  BLAZE_INTERNAL_ASSERT( column + (~rhs).columns() <= lhs.columns(), "Invalid number of columns" );
684 
685  UNUSED_PARAMETER( lhs );
686 
687  const size_t M( (~rhs).rows() );
688  const size_t N( (~rhs).columns() );
689 
690  if( ( row + M <= column ) || ( column + N <= row ) )
691  return true;
692 
693  const bool lower( row > column );
694  const size_t size ( min( row + M, column + N ) - ( lower ? row : column ) );
695 
696  if( size < 2UL )
697  return true;
698 
699  const size_t subrow( lower ? 0UL : column - row );
700  const size_t subcol( lower ? row - column : 0UL );
701 
702  return isHermitian( submatrix( ~rhs, subrow, subcol, size, size ) );
703 }
705 //*************************************************************************************************
706 
707 
708 //*************************************************************************************************
724 template< typename MT // Type of the adapted matrix
725  , bool SO // Storage order of the adapted matrix
726  , bool DF // Density flag
727  , typename VT // Type of the right-hand side vector
728  , bool TF > // Transpose flag of the right-hand side vector
729 inline bool tryAddAssign( const HermitianMatrix<MT,SO,DF>& lhs,
730  const Vector<VT,TF>& rhs, size_t row, size_t column )
731 {
732  return tryAssign( lhs, ~rhs, row, column );
733 }
735 //*************************************************************************************************
736 
737 
738 //*************************************************************************************************
756 template< typename MT // Type of the adapted matrix
757  , bool SO // Storage order of the adapted matrix
758  , bool DF // Density flag
759  , typename VT // Type of the right-hand side vector
760  , bool TF > // Transpose flag of the right-hand side vector
761 inline bool tryAddAssign( const HermitianMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
762  ptrdiff_t band, size_t row, size_t column )
763 {
764  return tryAssign( lhs, ~rhs, band, row, column );
765 }
767 //*************************************************************************************************
768 
769 
770 //*************************************************************************************************
786 template< typename MT1 // Type of the adapted matrix
787  , bool SO1 // Storage order of the adapted matrix
788  , bool DF // Density flag
789  , typename MT2 // Type of the right-hand side matrix
790  , bool SO2 > // Storage order of the right-hand side matrix
791 inline bool tryAddAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
792  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
793 {
794  return tryAssign( lhs, ~rhs, row, column );
795 }
797 //*************************************************************************************************
798 
799 
800 //*************************************************************************************************
817 template< typename MT // Type of the adapted matrix
818  , bool SO // Storage order of the adapted matrix
819  , bool DF // Density flag
820  , typename VT // Type of the right-hand side vector
821  , bool TF > // Transpose flag of the right-hand side vector
822 inline bool trySubAssign( const HermitianMatrix<MT,SO,DF>& lhs,
823  const Vector<VT,TF>& rhs, size_t row, size_t column )
824 {
825  return tryAssign( lhs, ~rhs, row, column );
826 }
828 //*************************************************************************************************
829 
830 
831 //*************************************************************************************************
849 template< typename MT // Type of the adapted matrix
850  , bool SO // Storage order of the adapted matrix
851  , bool DF // Density flag
852  , typename VT // Type of the right-hand side vector
853  , bool TF > // Transpose flag of the right-hand side vector
854 inline bool trySubAssign( const HermitianMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
855  ptrdiff_t band, size_t row, size_t column )
856 {
857  return tryAssign( lhs, ~rhs, band, row, column );
858 }
860 //*************************************************************************************************
861 
862 
863 //*************************************************************************************************
880 template< typename MT1 // Type of the adapted matrix
881  , bool SO1 // Storage order of the adapted matrix
882  , bool DF // Density flag
883  , typename MT2 // Type of the right-hand side matrix
884  , bool SO2 > // Storage order of the right-hand side matrix
885 inline bool trySubAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
886  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
887 {
888  return tryAssign( lhs, ~rhs, row, column );
889 }
891 //*************************************************************************************************
892 
893 
894 //*************************************************************************************************
911 template< typename MT // Type of the adapted matrix
912  , bool SO // Storage order of the adapted matrix
913  , bool DF // Density flag
914  , typename VT // Type of the right-hand side vector
915  , bool TF > // Transpose flag of the right-hand side vector
916 inline bool tryMultAssign( const HermitianMatrix<MT,SO,DF>& lhs,
917  const Vector<VT,TF>& rhs, size_t row, size_t column )
918 {
919  return tryAssign( lhs, ~rhs, row, column );
920 }
922 //*************************************************************************************************
923 
924 
925 //*************************************************************************************************
943 template< typename MT // Type of the adapted matrix
944  , bool SO // Storage order of the adapted matrix
945  , bool DF // Density flag
946  , typename VT // Type of the right-hand side vector
947  , bool TF > // Transpose flag of the right-hand side vector
948 inline bool tryMultAssign( const HermitianMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
949  ptrdiff_t band, size_t row, size_t column )
950 {
951  return tryAssign( lhs, ~rhs, band, row, column );
952 }
954 //*************************************************************************************************
955 
956 
957 //*************************************************************************************************
974 template< typename MT1 // Type of the adapted matrix
975  , bool SO1 // Storage order of the adapted matrix
976  , bool DF // Density flag
977  , typename MT2 // Type of the right-hand side matrix
978  , bool SO2 > // Storage order of the right-hand side matrix
979 inline bool trySchurAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
980  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
981 {
982  return tryAssign( lhs, ~rhs, row, column );
983 }
985 //*************************************************************************************************
986 
987 
988 //*************************************************************************************************
1004 template< typename MT // Type of the adapted matrix
1005  , bool SO // Storage order of the adapted matrix
1006  , bool DF // Density flag
1007  , typename VT // Type of the right-hand side vector
1008  , bool TF > // Transpose flag of the right-hand side vector
1009 inline bool tryDivAssign( const HermitianMatrix<MT,SO,DF>& lhs,
1010  const Vector<VT,TF>& rhs, size_t row, size_t column )
1011 {
1012  return tryAssign( lhs, ~rhs, row, column );
1013 }
1015 //*************************************************************************************************
1016 
1017 
1018 //*************************************************************************************************
1036 template< typename MT // Type of the adapted matrix
1037  , bool SO // Storage order of the adapted matrix
1038  , bool DF // Density flag
1039  , typename VT // Type of the right-hand side vector
1040  , bool TF > // Transpose flag of the right-hand side vector
1041 inline bool tryDivAssign( const HermitianMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
1042  ptrdiff_t band, size_t row, size_t column )
1043 {
1044  return tryAssign( lhs, ~rhs, band, row, column );
1045 }
1047 //*************************************************************************************************
1048 
1049 
1050 
1051 
1052 //=================================================================================================
1053 //
1054 // SIZE SPECIALIZATIONS
1055 //
1056 //=================================================================================================
1057 
1058 //*************************************************************************************************
1060 template< typename MT, bool SO, bool DF >
1061 struct Size< HermitianMatrix<MT,SO,DF>, 0UL >
1062  : public Size<MT,0UL>
1063 {};
1064 
1065 template< typename MT, bool SO, bool DF >
1066 struct Size< HermitianMatrix<MT,SO,DF>, 1UL >
1067  : public Size<MT,1UL>
1068 {};
1070 //*************************************************************************************************
1071 
1072 
1073 
1074 
1075 //=================================================================================================
1076 //
1077 // ISSQUARE SPECIALIZATIONS
1078 //
1079 //=================================================================================================
1080 
1081 //*************************************************************************************************
1083 template< typename MT, bool SO, bool DF >
1084 struct IsSquare< HermitianMatrix<MT,SO,DF> >
1085  : public TrueType
1086 {};
1088 //*************************************************************************************************
1089 
1090 
1091 
1092 
1093 //=================================================================================================
1094 //
1095 // ISSYMMETRIC SPECIALIZATIONS
1096 //
1097 //=================================================================================================
1098 
1099 //*************************************************************************************************
1101 template< typename MT, bool SO, bool DF >
1102 struct IsSymmetric< HermitianMatrix<MT,SO,DF> >
1103  : public IsBuiltin< ElementType_<MT> >
1104 {};
1106 //*************************************************************************************************
1107 
1108 
1109 
1110 
1111 //=================================================================================================
1112 //
1113 // ISHERMITIAN SPECIALIZATIONS
1114 //
1115 //=================================================================================================
1116 
1117 //*************************************************************************************************
1119 template< typename MT, bool SO, bool DF >
1120 struct IsHermitian< HermitianMatrix<MT,SO,DF> >
1121  : public TrueType
1122 {};
1124 //*************************************************************************************************
1125 
1126 
1127 
1128 
1129 //=================================================================================================
1130 //
1131 // ISADAPTOR SPECIALIZATIONS
1132 //
1133 //=================================================================================================
1134 
1135 //*************************************************************************************************
1137 template< typename MT, bool SO, bool DF >
1138 struct IsAdaptor< HermitianMatrix<MT,SO,DF> >
1139  : public TrueType
1140 {};
1142 //*************************************************************************************************
1143 
1144 
1145 
1146 
1147 //=================================================================================================
1148 //
1149 // ISRESTRICTED SPECIALIZATIONS
1150 //
1151 //=================================================================================================
1152 
1153 //*************************************************************************************************
1155 template< typename MT, bool SO, bool DF >
1156 struct IsRestricted< HermitianMatrix<MT,SO,DF> >
1157  : public TrueType
1158 {};
1160 //*************************************************************************************************
1161 
1162 
1163 
1164 
1165 //=================================================================================================
1166 //
1167 // HASCONSTDATAACCESS SPECIALIZATIONS
1168 //
1169 //=================================================================================================
1170 
1171 //*************************************************************************************************
1173 template< typename MT, bool SO >
1174 struct HasConstDataAccess< HermitianMatrix<MT,SO,true> >
1175  : public TrueType
1176 {};
1178 //*************************************************************************************************
1179 
1180 
1181 
1182 
1183 //=================================================================================================
1184 //
1185 // ISALIGNED SPECIALIZATIONS
1186 //
1187 //=================================================================================================
1188 
1189 //*************************************************************************************************
1191 template< typename MT, bool SO, bool DF >
1192 struct IsAligned< HermitianMatrix<MT,SO,DF> >
1193  : public IsAligned<MT>
1194 {};
1196 //*************************************************************************************************
1197 
1198 
1199 
1200 
1201 //=================================================================================================
1202 //
1203 // ISCONTIGUOUS SPECIALIZATIONS
1204 //
1205 //=================================================================================================
1206 
1207 //*************************************************************************************************
1209 template< typename MT, bool SO, bool DF >
1210 struct IsContiguous< HermitianMatrix<MT,SO,DF> >
1211  : public IsContiguous<MT>
1212 {};
1214 //*************************************************************************************************
1215 
1216 
1217 
1218 
1219 //=================================================================================================
1220 //
1221 // ISPADDED SPECIALIZATIONS
1222 //
1223 //=================================================================================================
1224 
1225 //*************************************************************************************************
1227 template< typename MT, bool SO, bool DF >
1228 struct IsPadded< HermitianMatrix<MT,SO,DF> >
1229  : public IsPadded<MT>
1230 {};
1232 //*************************************************************************************************
1233 
1234 
1235 
1236 
1237 //=================================================================================================
1238 //
1239 // ISRESIZABLE SPECIALIZATIONS
1240 //
1241 //=================================================================================================
1242 
1243 //*************************************************************************************************
1245 template< typename MT, bool SO, bool DF >
1246 struct IsResizable< HermitianMatrix<MT,SO,DF> >
1247  : public IsResizable<MT>
1248 {};
1250 //*************************************************************************************************
1251 
1252 
1253 
1254 
1255 //=================================================================================================
1256 //
1257 // ISSHRINKABLE SPECIALIZATIONS
1258 //
1259 //=================================================================================================
1260 
1261 //*************************************************************************************************
1263 template< typename MT, bool SO, bool DF >
1264 struct IsShrinkable< HermitianMatrix<MT,SO,DF> >
1265  : public IsShrinkable<MT>
1266 {};
1268 //*************************************************************************************************
1269 
1270 
1271 
1272 
1273 //=================================================================================================
1274 //
1275 // REMOVEADAPTOR SPECIALIZATIONS
1276 //
1277 //=================================================================================================
1278 
1279 //*************************************************************************************************
1281 template< typename MT, bool SO, bool DF >
1282 struct RemoveAdaptor< HermitianMatrix<MT,SO,DF> >
1283 {
1284  using Type = MT;
1285 };
1287 //*************************************************************************************************
1288 
1289 
1290 
1291 
1292 //=================================================================================================
1293 //
1294 // ADDTRAIT SPECIALIZATIONS
1295 //
1296 //=================================================================================================
1297 
1298 //*************************************************************************************************
1300 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1301 struct AddTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1302 {
1304 };
1305 
1306 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1307 struct AddTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1308 {
1309  using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1310 };
1311 
1312 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1313 struct AddTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1314 {
1316 };
1317 
1318 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1319 struct AddTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1320 {
1321  using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1322 };
1323 
1324 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1325 struct AddTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1326 {
1327  using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1328 };
1329 
1330 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1331 struct AddTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1332 {
1333  using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1334 };
1335 
1336 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1337 struct AddTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1338 {
1340 };
1341 
1342 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1343 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
1344 {
1345  using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1346 };
1347 
1348 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1349 struct AddTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1350 {
1352 };
1353 
1354 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1355 struct AddTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1356 {
1357  using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1358 };
1359 
1360 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1361 struct AddTrait< HermitianMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1362 {
1364 };
1365 
1366 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1367 struct AddTrait< IdentityMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1368 {
1370 };
1371 
1372 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1373 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1374 {
1377  , AddTrait_<MT1,MT2> >;
1378 };
1379 
1380 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1381 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1382 {
1385  , AddTrait_<MT1,MT2> >;
1386 };
1387 
1388 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1389 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1390 {
1391  using Type = HermitianMatrix< AddTrait_<MT1,MT2> >;
1392 };
1394 //*************************************************************************************************
1395 
1396 
1397 
1398 
1399 //=================================================================================================
1400 //
1401 // SUBTRAIT SPECIALIZATIONS
1402 //
1403 //=================================================================================================
1404 
1405 //*************************************************************************************************
1407 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1408 struct SubTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1409 {
1411 };
1412 
1413 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1414 struct SubTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1415 {
1416  using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1417 };
1418 
1419 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1420 struct SubTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1421 {
1423 };
1424 
1425 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1426 struct SubTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1427 {
1428  using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1429 };
1430 
1431 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1432 struct SubTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1433 {
1434  using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1435 };
1436 
1437 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1438 struct SubTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1439 {
1440  using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1441 };
1442 
1443 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1444 struct SubTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1445 {
1447 };
1448 
1449 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1450 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
1451 {
1452  using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1453 };
1454 
1455 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1456 struct SubTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1457 {
1459 };
1460 
1461 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1462 struct SubTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1463 {
1464  using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1465 };
1466 
1467 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1468 struct SubTrait< HermitianMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1469 {
1471 };
1472 
1473 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1474 struct SubTrait< IdentityMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1475 {
1477 };
1478 
1479 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1480 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2> >
1481 {
1484  , SubTrait_<MT1,MT2> >;
1485 };
1486 
1487 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1488 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1489 {
1492  , SubTrait_<MT1,MT2> >;
1493 };
1494 
1495 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1496 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1497 {
1498  using Type = HermitianMatrix< SubTrait_<MT1,MT2> >;
1499 };
1501 //*************************************************************************************************
1502 
1503 
1504 
1505 
1506 //=================================================================================================
1507 //
1508 // SCHURTRAIT SPECIALIZATIONS
1509 //
1510 //=================================================================================================
1511 
1512 //*************************************************************************************************
1514 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1515 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1516 {
1518 };
1519 
1520 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1521 struct SchurTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1522 {
1523  using Type = SchurTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1524 };
1525 
1526 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1527 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1528 {
1530 };
1531 
1532 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1533 struct SchurTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1534 {
1535  using Type = SchurTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1536 };
1537 
1538 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1539 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1540 {
1542 };
1543 
1544 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1545 struct SchurTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1546 {
1547  using Type = SchurTrait_< DynamicMatrix<T,SO1>, MT >;
1548 };
1549 
1550 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1551 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1552 {
1554 };
1555 
1556 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1557 struct SchurTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
1558 {
1559  using Type = SchurTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1560 };
1561 
1562 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1563 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1564 {
1566 };
1567 
1568 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1569 struct SchurTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1570 {
1571  using Type = SchurTrait_< CompressedMatrix<T,SO1>, MT >;
1572 };
1573 
1574 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1575 struct SchurTrait< HermitianMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1576 {
1578 };
1579 
1580 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1581 struct SchurTrait< IdentityMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1582 {
1584 };
1585 
1586 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1587 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1588 {
1592 };
1593 
1594 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1595 struct SchurTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1596 {
1600 };
1601 
1602 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1603 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1604 {
1606 };
1608 //*************************************************************************************************
1609 
1610 
1611 
1612 
1613 //=================================================================================================
1614 //
1615 // MULTTRAIT SPECIALIZATIONS
1616 //
1617 //=================================================================================================
1618 
1619 //*************************************************************************************************
1621 template< typename MT, bool SO, bool DF, typename T >
1622 struct MultTrait< HermitianMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1623 {
1624  using Type = HermitianMatrix< MultTrait_<MT,T> >;
1625 };
1626 
1627 template< typename T, typename MT, bool SO, bool DF >
1628 struct MultTrait< T, HermitianMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1629 {
1630  using Type = HermitianMatrix< MultTrait_<T,MT> >;
1631 };
1632 
1633 template< typename MT, bool SO, bool DF, typename T, size_t N >
1634 struct MultTrait< HermitianMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1635 {
1637 };
1638 
1639 template< typename T, size_t N, typename MT, bool SO, bool DF >
1640 struct MultTrait< StaticVector<T,N,true>, HermitianMatrix<MT,SO,DF> >
1641 {
1642  using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1643 };
1644 
1645 template< typename MT, bool SO, bool DF, typename T, size_t N >
1646 struct MultTrait< HermitianMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1647 {
1649 };
1650 
1651 template< typename T, size_t N, typename MT, bool SO, bool DF >
1652 struct MultTrait< HybridVector<T,N,true>, HermitianMatrix<MT,SO,DF> >
1653 {
1654  using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1655 };
1656 
1657 template< typename MT, bool SO, bool DF, typename T >
1658 struct MultTrait< HermitianMatrix<MT,SO,DF>, DynamicVector<T,false> >
1659 {
1661 };
1662 
1663 template< typename T, typename MT, bool SO, bool DF >
1664 struct MultTrait< DynamicVector<T,true>, HermitianMatrix<MT,SO,DF> >
1665 {
1666  using Type = MultTrait_< DynamicVector<T,true>, MT >;
1667 };
1668 
1669 template< typename MT, bool SO, bool DF, typename T, bool AF, bool PF >
1670 struct MultTrait< HermitianMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1671 {
1673 };
1674 
1675 template< typename T, bool AF, bool PF, typename MT, bool SO, bool DF >
1676 struct MultTrait< CustomVector<T,AF,PF,true>, HermitianMatrix<MT,SO,DF> >
1677 {
1678  using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1679 };
1680 
1681 template< typename MT, bool SO, bool DF, typename T >
1682 struct MultTrait< HermitianMatrix<MT,SO,DF>, CompressedVector<T,false> >
1683 {
1685 };
1686 
1687 template< typename T, typename MT, bool SO, bool DF >
1688 struct MultTrait< CompressedVector<T,true>, HermitianMatrix<MT,SO,DF> >
1689 {
1690  using Type = MultTrait_< CompressedVector<T,true>, MT >;
1691 };
1692 
1693 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1694 struct MultTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1695 {
1697 };
1698 
1699 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1700 struct MultTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1701 {
1702  using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1703 };
1704 
1705 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1706 struct MultTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1707 {
1709 };
1710 
1711 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1712 struct MultTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1713 {
1714  using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1715 };
1716 
1717 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1718 struct MultTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1719 {
1720  using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1721 };
1722 
1723 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1724 struct MultTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1725 {
1726  using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1727 };
1728 
1729 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1730 struct MultTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1731 {
1733 };
1734 
1735 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1736 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
1737 {
1738  using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1739 };
1740 
1741 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1742 struct MultTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1743 {
1745 };
1746 
1747 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1748 struct MultTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1749 {
1750  using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1751 };
1752 
1753 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1754 struct MultTrait< HermitianMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1755 {
1757 };
1758 
1759 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1760 struct MultTrait< IdentityMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1761 {
1763 };
1764 
1765 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1766 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2> >
1767 {
1768  using Type = MultTrait_<MT1,MT2>;
1769 };
1770 
1771 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1772 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1773 {
1774  using Type = MultTrait_<MT1,MT2>;
1775 };
1776 
1777 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1778 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1779 {
1780  using Type = MultTrait_<MT1,MT2>;
1781 };
1783 //*************************************************************************************************
1784 
1785 
1786 
1787 
1788 //=================================================================================================
1789 //
1790 // DIVTRAIT SPECIALIZATIONS
1791 //
1792 //=================================================================================================
1793 
1794 //*************************************************************************************************
1796 template< typename MT, bool SO, bool DF, typename T >
1797 struct DivTrait< HermitianMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1798 {
1799  using Type = HermitianMatrix< DivTrait_<MT,T> >;
1800 };
1802 //*************************************************************************************************
1803 
1804 
1805 
1806 
1807 //=================================================================================================
1808 //
1809 // UNARYMAPTRAIT SPECIALIZATIONS
1810 //
1811 //=================================================================================================
1812 
1813 //*************************************************************************************************
1815 template< typename MT, bool SO, bool DF >
1816 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Abs >
1817 {
1819 };
1820 
1821 template< typename MT, bool SO, bool DF >
1822 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Floor >
1823 {
1825 };
1826 
1827 template< typename MT, bool SO, bool DF >
1828 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Ceil >
1829 {
1831 };
1832 
1833 template< typename MT, bool SO, bool DF >
1834 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Trunc >
1835 {
1837 };
1838 
1839 template< typename MT, bool SO, bool DF >
1840 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Round >
1841 {
1843 };
1844 
1845 template< typename MT, bool SO, bool DF >
1846 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Conj >
1847 {
1849 };
1850 
1851 template< typename MT, bool SO, bool DF >
1852 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Real >
1853 {
1855 };
1856 
1857 template< typename MT, bool SO, bool DF >
1858 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Imag >
1859 {
1860  using Type = If_< IsBuiltin< ElementType_<MT> >
1863 };
1864 
1865 template< typename MT, bool SO, bool DF >
1866 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Sqrt >
1867 {
1869 };
1870 
1871 template< typename MT, bool SO, bool DF >
1872 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, InvSqrt >
1873 {
1875 };
1876 
1877 template< typename MT, bool SO, bool DF >
1878 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Cbrt >
1879 {
1881 };
1882 
1883 template< typename MT, bool SO, bool DF >
1884 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, InvCbrt >
1885 {
1887 };
1888 
1889 template< typename MT, bool SO, bool DF, typename ET >
1890 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, UnaryPow<ET> >
1891 {
1893 };
1894 
1895 template< typename MT, bool SO, bool DF >
1896 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Exp >
1897 {
1899 };
1900 
1901 template< typename MT, bool SO, bool DF >
1902 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Log >
1903 {
1905 };
1906 
1907 template< typename MT, bool SO, bool DF >
1908 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Log10 >
1909 {
1911 };
1912 
1913 template< typename MT, bool SO, bool DF >
1914 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Sin >
1915 {
1917 };
1918 
1919 template< typename MT, bool SO, bool DF >
1920 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Asin >
1921 {
1923 };
1924 
1925 template< typename MT, bool SO, bool DF >
1926 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Sinh >
1927 {
1929 };
1930 
1931 template< typename MT, bool SO, bool DF >
1932 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Asinh >
1933 {
1935 };
1936 
1937 template< typename MT, bool SO, bool DF >
1938 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Cos >
1939 {
1941 };
1942 
1943 template< typename MT, bool SO, bool DF >
1944 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Acos >
1945 {
1947 };
1948 
1949 template< typename MT, bool SO, bool DF >
1950 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Cosh >
1951 {
1953 };
1954 
1955 template< typename MT, bool SO, bool DF >
1956 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Acosh >
1957 {
1959 };
1960 
1961 template< typename MT, bool SO, bool DF >
1962 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Tan >
1963 {
1965 };
1966 
1967 template< typename MT, bool SO, bool DF >
1968 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Atan >
1969 {
1971 };
1972 
1973 template< typename MT, bool SO, bool DF >
1974 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Tanh >
1975 {
1977 };
1978 
1979 template< typename MT, bool SO, bool DF >
1980 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Atanh >
1981 {
1983 };
1984 
1985 template< typename MT, bool SO, bool DF >
1986 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Erf >
1987 {
1989 };
1990 
1991 template< typename MT, bool SO, bool DF >
1992 struct UnaryMapTrait< HermitianMatrix<MT,SO,DF>, Erfc >
1993 {
1995 };
1997 //*************************************************************************************************
1998 
1999 
2000 
2001 
2002 //=================================================================================================
2003 //
2004 // BINARYMAPTRAIT SPECIALIZATIONS
2005 //
2006 //=================================================================================================
2007 
2008 //*************************************************************************************************
2010 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
2011 struct BinaryMapTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF>, Min >
2012 {
2014 };
2015 
2016 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
2017 struct BinaryMapTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF>, Max >
2018 {
2020 };
2021 
2022 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2023 struct BinaryMapTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2>, Min >
2024 {
2026 };
2027 
2028 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2029 struct BinaryMapTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2>, Max >
2030 {
2032 };
2033 
2034 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2035 struct BinaryMapTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2>, Min >
2036 {
2038 };
2039 
2040 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2041 struct BinaryMapTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2>, Max >
2042 {
2044 };
2046 //*************************************************************************************************
2047 
2048 
2049 
2050 
2051 //=================================================================================================
2052 //
2053 // DECLSYMTRAIT SPECIALIZATIONS
2054 //
2055 //=================================================================================================
2056 
2057 //*************************************************************************************************
2059 template< typename MT, bool SO, bool DF >
2060 struct DeclSymTrait< HermitianMatrix<MT,SO,DF> >
2061 {
2062  using Type = HermitianMatrix<MT,SO,DF>;
2063 };
2065 //*************************************************************************************************
2066 
2067 
2068 
2069 
2070 //=================================================================================================
2071 //
2072 // DECLHERMTRAIT SPECIALIZATIONS
2073 //
2074 //=================================================================================================
2075 
2076 //*************************************************************************************************
2078 template< typename MT, bool SO, bool DF >
2079 struct DeclHermTrait< HermitianMatrix<MT,SO,DF> >
2080 {
2081  using Type = HermitianMatrix<MT,SO,DF>;
2082 };
2084 //*************************************************************************************************
2085 
2086 
2087 
2088 
2089 //=================================================================================================
2090 //
2091 // DECLLOWTRAIT SPECIALIZATIONS
2092 //
2093 //=================================================================================================
2094 
2095 //*************************************************************************************************
2097 template< typename MT, bool SO, bool DF >
2098 struct DeclLowTrait< HermitianMatrix<MT,SO,DF> >
2099 {
2100  using Type = HermitianMatrix<MT,SO,DF>;
2101 };
2103 //*************************************************************************************************
2104 
2105 
2106 
2107 
2108 //=================================================================================================
2109 //
2110 // DECLUPPTRAIT SPECIALIZATIONS
2111 //
2112 //=================================================================================================
2113 
2114 //*************************************************************************************************
2116 template< typename MT, bool SO, bool DF >
2117 struct DeclUppTrait< HermitianMatrix<MT,SO,DF> >
2118 {
2119  using Type = HermitianMatrix<MT,SO,DF>;
2120 };
2122 //*************************************************************************************************
2123 
2124 
2125 
2126 
2127 //=================================================================================================
2128 //
2129 // DECLDIAGTRAIT SPECIALIZATIONS
2130 //
2131 //=================================================================================================
2132 
2133 //*************************************************************************************************
2135 template< typename MT, bool SO, bool DF >
2136 struct DeclDiagTrait< HermitianMatrix<MT,SO,DF> >
2137 {
2138  using Type = HermitianMatrix<MT,SO,DF>;
2139 };
2141 //*************************************************************************************************
2142 
2143 
2144 
2145 
2146 //=================================================================================================
2147 //
2148 // HIGHTYPE SPECIALIZATIONS
2149 //
2150 //=================================================================================================
2151 
2152 //*************************************************************************************************
2154 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2155 struct HighType< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2156 {
2158 };
2160 //*************************************************************************************************
2161 
2162 
2163 
2164 
2165 //=================================================================================================
2166 //
2167 // LOWTYPE SPECIALIZATIONS
2168 //
2169 //=================================================================================================
2170 
2171 //*************************************************************************************************
2173 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2174 struct LowType< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2175 {
2177 };
2179 //*************************************************************************************************
2180 
2181 
2182 
2183 
2184 //=================================================================================================
2185 //
2186 // SUBMATRIXTRAIT SPECIALIZATIONS
2187 //
2188 //=================================================================================================
2189 
2190 //*************************************************************************************************
2192 template< typename MT, bool SO, bool DF, size_t... CSAs >
2193 struct SubmatrixTrait< HermitianMatrix<MT,SO,DF>, CSAs... >
2194 {
2195  using Type = SubmatrixTrait_<MT,CSAs...>;
2196 };
2198 //*************************************************************************************************
2199 
2200 
2201 
2202 
2203 //=================================================================================================
2204 //
2205 // ROWTRAIT SPECIALIZATIONS
2206 //
2207 //=================================================================================================
2208 
2209 //*************************************************************************************************
2211 template< typename MT, bool SO, bool DF, size_t... CRAs >
2212 struct RowTrait< HermitianMatrix<MT,SO,DF>, CRAs... >
2213 {
2214  using Type = RowTrait_<MT,CRAs...>;
2215 };
2217 //*************************************************************************************************
2218 
2219 
2220 
2221 
2222 //=================================================================================================
2223 //
2224 // ROWSTRAIT SPECIALIZATIONS
2225 //
2226 //=================================================================================================
2227 
2228 //*************************************************************************************************
2230 template< typename MT, bool SO, bool DF, size_t... CRAs >
2231 struct RowsTrait< HermitianMatrix<MT,SO,DF>, CRAs... >
2232 {
2233  using Type = RowsTrait_<MT,CRAs...>;
2234 };
2236 //*************************************************************************************************
2237 
2238 
2239 
2240 
2241 //=================================================================================================
2242 //
2243 // COLUMNTRAIT SPECIALIZATIONS
2244 //
2245 //=================================================================================================
2246 
2247 //*************************************************************************************************
2249 template< typename MT, bool SO, bool DF, size_t... CCAs >
2250 struct ColumnTrait< HermitianMatrix<MT,SO,DF>, CCAs... >
2251 {
2252  using Type = ColumnTrait_<MT,CCAs...>;
2253 };
2255 //*************************************************************************************************
2256 
2257 
2258 
2259 
2260 //=================================================================================================
2261 //
2262 // COLUMNSTRAIT SPECIALIZATIONS
2263 //
2264 //=================================================================================================
2265 
2266 //*************************************************************************************************
2268 template< typename MT, bool SO, bool DF, size_t... CCAs >
2269 struct ColumnsTrait< HermitianMatrix<MT,SO,DF>, CCAs... >
2270 {
2271  using Type = ColumnsTrait_<MT,CCAs...>;
2272 };
2274 //*************************************************************************************************
2275 
2276 
2277 
2278 
2279 //=================================================================================================
2280 //
2281 // BANDTRAIT SPECIALIZATIONS
2282 //
2283 //=================================================================================================
2284 
2285 //*************************************************************************************************
2287 template< typename MT, bool SO, bool DF, ptrdiff_t... CBAs >
2288 struct BandTrait< HermitianMatrix<MT,SO,DF>, CBAs... >
2289 {
2290  using Type = BandTrait_<MT,CBAs...>;
2291 };
2293 //*************************************************************************************************
2294 
2295 } // namespace blaze
2296 
2297 #endif
bool isReal(const DiagonalProxy< MT > &proxy)
Returns whether the matrix element represents a real number.
Definition: DiagonalProxy.h:650
Pointer difference type of the Blaze library.
Header file for auxiliary alias declarations.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:131
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 UNUSED_PARAMETER function template.
Header file for the subtraction trait.
Flag for the inversion of a diagonal matrix.
Definition: InversionFlag.h:115
Flag for the inversion of a general matrix (same as byLU).
Definition: InversionFlag.h:108
Header file for the row trait.
Header file for the declherm trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:109
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:108
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
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:113
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
Header file for the dense matrix inversion flags.
Base template for the SchurTrait class.
Definition: SchurTrait.h:112
Flag for the Bunch-Kaufman-based inversion for Hermitian matrices.
Definition: InversionFlag.h:105
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:588
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1903
Matrix adapter for symmetric matrices.
Definition: BaseTemplate.h:608
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:291
typename SubmatrixTrait< MT, CSAs... >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:145
typename RowTrait< MT, CRAs... >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:145
Base template for the RowsTrait class.
Definition: RowsTrait.h:109
Header file for the band trait.
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1827
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.
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:772
Base template for the RowTrait class.
Definition: RowTrait.h:109
Compile time check for the memory layout of data types.This type trait tests whether the given data t...
Definition: IsContiguous.h:86
Constraint on the data type.
typename ColumnTrait< MT, CCAs... >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:144
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 unary map trait.
Header file for the IsSymmetric type trait.
typename ColumnsTrait< MT, CCAs... >::Type ColumnsTrait_
Auxiliary alias declaration for the ColumnsTrait type trait.The ColumnsTrait_ alias declaration provi...
Definition: ColumnsTrait.h:145
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the If class template.
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
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.
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Flag for the inversion of a Hermitian matrix (same as byLDLH).
Definition: InversionFlag.h:110
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
Compile time check for square matrices.This type trait tests whether or not the given template parame...
Definition: IsSquare.h:88
typename SchurTrait< T1, T2 >::Type SchurTrait_
Auxiliary alias declaration for the SchurTrait class template.The SchurTrait_ alias declaration provi...
Definition: SchurTrait.h:208
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:506
Flag for the Bunch-Kaufman-based inversion for symmetric matrices.
Definition: InversionFlag.h:104
HermitianMatrix specialization for sparse matrices.
Base template for the DeclSymTrait class.
Definition: DeclSymTrait.h:113
Compile time check for symmetric matrices.This type trait tests whether or not the given template par...
Definition: IsSymmetric.h:85
Header file for the exception macros of the math module.
Header file for the RemoveAdaptor type trait.
Header file for the implementation of the base template of the HeritianMatrix.
Constraint on the data type.
Compile time check for adaptors.This type trait tests whether the given template parameter is an adap...
Definition: IsAdaptor.h:88
decltype(auto) submatrix(Matrix< MT, SO > &, RSAs...)
Creating a view on a specific submatrix of the given matrix.
Definition: Submatrix.h:360
typename BandTrait< MT, CBAs... >::Type BandTrait_
Auxiliary alias declaration for the BandTrait type trait.The BandTrait_ alias declaration provides a ...
Definition: BandTrait.h:145
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:608
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
decltype(auto) band(Matrix< MT, SO > &matrix, RBAs... args)
Creating a view on a specific band of the given matrix.
Definition: Band.h:134
typename RowsTrait< MT, CRAs... >::Type RowsTrait_
Auxiliary alias declaration for the RowsTrait type trait.The RowsTrait_ alias declaration provides a ...
Definition: RowsTrait.h:145
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 conjugate shim.
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.
Flag for the inversion of a symmetric matrix (same as byLDLT).
Definition: InversionFlag.h:109
Header file for the binary map trait.
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:119
Base template for the DeclHermTrait class.
Definition: DeclHermTrait.h:113
Base template for the MultTrait class.
Definition: MultTrait.h:119
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Header file for the IsContiguous type trait.
Header file for the columns trait.
typename If< T1, T2, T3 >::Type If_
Auxiliary alias declaration for the If class template.The If_ alias declaration provides a convenient...
Definition: If.h:154
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:131
Header file for the declsym trait.
bool isHermitian(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is Hermitian.
Definition: DenseMatrix.h:919
Matrix adapter for Hermitian matrices.
Definition: BaseTemplate.h:611
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:272
Compile time check for Hermitian matrices.This type trait tests whether or not the given template par...
Definition: IsHermitian.h:85
Compile time check for built-in data types.This type trait tests whether or not the given template pa...
Definition: IsBuiltin.h:75
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_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BLASCompatible.h:61
Flag for the Cholesky-based inversion for positive-definite matrices.
Definition: InversionFlag.h:106
#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
Base template for the DivTrait class.
Definition: DivTrait.h:120
Header file for the rows trait.
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:490
Base template for the DeclLowTrait class.
Definition: DeclLowTrait.h:113
typename UnaryMapTrait< T, OP >::Type UnaryMapTrait_
Auxiliary alias declaration for the UnaryMapTrait class template.The UnaryMapTrait_ alias declaration...
Definition: UnaryMapTrait.h:134
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 template for the ColumnsTrait class.
Definition: ColumnsTrait.h:109
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:177
Header file for the IsBuiltin type trait.
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:291
Compile time evaluation of the size of vectors and matrices.The Size type trait evaluates the size of...
Definition: Size.h:80
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 isDivisor shim.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:254
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:628
Base template for the SubTrait class.
Definition: SubTrait.h:119
Matrix adapter for diagonal matrices.
Definition: BaseTemplate.h:560
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Header file for the IsHermitian type trait.
Base template for the DeclDiagTrait class.
Definition: DeclDiagTrait.h:113
Base template for the BinaryMapTrait class.
Definition: BinaryMapTrait.h:97
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Base template for the UnaryMapTrait class.
Definition: UnaryMapTrait.h:95
Header file for the Size type trait.
Header file for the isReal shim.
HermitianMatrix specialization for dense matrices.
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:291
InversionFlag
Inversion flag.The InversionFlag type enumeration represents the different types of matrix inversion ...
Definition: InversionFlag.h:101
#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.
Base template for the BandTrait class.
Definition: BandTrait.h:109