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>
51 #include <blaze/math/Exception.h>
52 #include <blaze/math/Forward.h>
53 #include <blaze/math/Functions.h>
81 #include <blaze/util/Assert.h>
82 #include <blaze/util/EnableIf.h>
84 #include <blaze/util/mpl/If.h>
85 #include <blaze/util/TrueType.h>
88 #include <blaze/util/Unused.h>
89 
90 
91 namespace blaze {
92 
93 //=================================================================================================
94 //
95 // HERMITIANMATRIX OPERATORS
96 //
97 //=================================================================================================
98 
99 //*************************************************************************************************
102 template< typename MT, bool SO, bool DF >
103 inline void reset( HermitianMatrix<MT,SO,DF>& m );
104 
105 template< typename MT, bool SO, bool DF >
106 inline void reset( HermitianMatrix<MT,SO,DF>& m, size_t i );
107 
108 template< typename MT, bool SO, bool DF >
109 inline void clear( HermitianMatrix<MT,SO,DF>& m );
110 
111 template< bool RF, typename MT, bool SO, bool DF >
112 inline bool isDefault( const HermitianMatrix<MT,SO,DF>& m );
113 
114 template< typename MT, bool SO, bool DF >
115 inline bool isIntact( const HermitianMatrix<MT,SO,DF>& m );
116 
117 template< typename MT, bool SO, bool DF >
118 inline void swap( HermitianMatrix<MT,SO,DF>& a, HermitianMatrix<MT,SO,DF>& b ) noexcept;
120 //*************************************************************************************************
121 
122 
123 //*************************************************************************************************
130 template< typename MT // Type of the adapted matrix
131  , bool SO // Storage order of the adapted matrix
132  , bool DF > // Density flag
134 {
135  m.reset();
136 }
137 //*************************************************************************************************
138 
139 
140 //*************************************************************************************************
153 template< typename MT // Type of the adapted matrix
154  , bool SO // Storage order of the adapted matrix
155  , bool DF > // Density flag
156 inline void reset( HermitianMatrix<MT,SO,DF>& m, size_t i )
157 {
158  m.reset( i );
159 }
160 //*************************************************************************************************
161 
162 
163 //*************************************************************************************************
170 template< typename MT // Type of the adapted matrix
171  , bool SO // Storage order of the adapted matrix
172  , bool DF > // Density flag
174 {
175  m.clear();
176 }
177 //*************************************************************************************************
178 
179 
180 //*************************************************************************************************
205 template< bool RF // Relaxation flag
206  , typename MT // Type of the adapted matrix
207  , bool SO // Storage order of the adapted matrix
208  , bool DF > // Density flag
209 inline bool isDefault( const HermitianMatrix<MT,SO,DF>& m )
210 {
211  return isDefault<RF>( m.matrix_ );
212 }
213 //*************************************************************************************************
214 
215 
216 //*************************************************************************************************
237 template< typename MT // Type of the adapted matrix
238  , bool SO // Storage order of the adapted matrix
239  , bool DF > // Density flag
240 inline bool isIntact( const HermitianMatrix<MT,SO,DF>& m )
241 {
242  return m.isIntact();
243 }
244 //*************************************************************************************************
245 
246 
247 //*************************************************************************************************
255 template< typename MT // Type of the adapted matrix
256  , bool SO // Storage order of the adapted matrix
257  , bool DF > // Density flag
259 {
260  a.swap( b );
261 }
262 //*************************************************************************************************
263 
264 
265 //*************************************************************************************************
288 template< InversionFlag IF // Inversion algorithm
289  , typename MT // Type of the dense matrix
290  , bool SO > // Storage order of the dense matrix
291 inline void invert( HermitianMatrix<MT,SO,true>& m )
292 {
294 
295  if( IF == asUniLower || IF == asUniUpper ) {
296  BLAZE_INTERNAL_ASSERT( isIdentity( m ), "Violation of preconditions detected" );
297  return;
298  }
299 
300  constexpr InversionFlag flag( ( IF == byLU || IF == byLDLT || IF == byLDLH ||
301  IF == asGeneral || IF == asSymmetric || IF == asHermitian )
302  ? ( byLDLH )
303  : ( ( IF == byLLH )
304  ?( byLLH )
305  :( asDiagonal ) ) );
306 
307  MT tmp( m.matrix_ );
308  invert<flag>( tmp );
309  m.matrix_ = std::move( tmp );
310 
311  BLAZE_INTERNAL_ASSERT( isIntact( m ), "Broken invariant detected" );
312 }
314 //*************************************************************************************************
315 
316 
317 //*************************************************************************************************
333 template< typename MT // Type of the adapted matrix
334  , bool SO // Storage order of the adapted matrix
335  , bool DF // Density flag
336  , typename VT > // Type of the right-hand side vector
337 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs,
338  const Vector<VT,false>& rhs, size_t row, size_t column )
339 {
341 
342  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
343  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
344  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.rows() - row, "Invalid number of rows" );
345 
346  UNUSED_PARAMETER( lhs );
347 
349 
350  return ( IsBuiltin<ET>::value ||
351  column < row ||
352  (~rhs).size() <= column - row ||
353  isReal( (~rhs)[column-row] ) );
354 
355  return true;
356 }
358 //*************************************************************************************************
359 
360 
361 //*************************************************************************************************
377 template< typename MT // Type of the adapted matrix
378  , bool SO // Storage order of the adapted matrix
379  , bool DF // Density flag
380  , typename VT > // Type of the right-hand side vector
381 inline bool tryAssign( const HermitianMatrix<MT,SO,DF>& lhs,
382  const Vector<VT,true>& rhs, size_t row, size_t column )
383 {
385 
386  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
387  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
388  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.columns() - column, "Invalid number of columns" );
389 
390  UNUSED_PARAMETER( lhs );
391 
393 
394  return ( IsBuiltin<ET>::value ||
395  row < column ||
396  (~rhs).size() <= row - column ||
397  isReal( (~rhs)[row-column] ) );
398 
399  return true;
400 }
402 //*************************************************************************************************
403 
404 
405 //*************************************************************************************************
421 template< typename MT1 // Type of the adapted matrix
422  , bool SO1 // Storage order of the adapted matrix
423  , bool DF // Density flag
424  , typename MT2 // Type of the right-hand side matrix
425  , bool SO2 > // Storage order of the right-hand side matrix
426 inline bool tryAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
427  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
428 {
430 
431  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
432  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
433  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
434  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
435 
436  UNUSED_PARAMETER( lhs );
437 
438  const size_t M( (~rhs).rows() );
439  const size_t N( (~rhs).columns() );
440 
441  if( ( row + M <= column ) || ( column + N <= row ) )
442  return true;
443 
444  const bool lower( row > column );
445  const size_t size ( min( row + M, column + N ) - ( lower ? row : column ) );
446 
447  if( size < 2UL )
448  return true;
449 
450  const size_t subrow( lower ? 0UL : column - row );
451  const size_t subcol( lower ? row - column : 0UL );
452 
453  return isHermitian( submatrix( ~rhs, subrow, subcol, size, size ) );
454 }
456 //*************************************************************************************************
457 
458 
459 //*************************************************************************************************
475 template< typename MT // Type of the adapted matrix
476  , bool SO // Storage order of the adapted matrix
477  , bool DF // Density flag
478  , typename VT // Type of the right-hand side vector
479  , bool TF > // Transpose flag of the right-hand side vector
480 inline bool tryAddAssign( const HermitianMatrix<MT,SO,DF>& lhs,
481  const Vector<VT,TF>& rhs, size_t row, size_t column )
482 {
483  return tryAssign( lhs, ~rhs, row, column );
484 }
486 //*************************************************************************************************
487 
488 
489 //*************************************************************************************************
505 template< typename MT1 // Type of the adapted matrix
506  , bool SO1 // Storage order of the adapted matrix
507  , bool DF // Density flag
508  , typename MT2 // Type of the right-hand side matrix
509  , bool SO2 > // Storage order of the right-hand side matrix
510 inline bool tryAddAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
511  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
512 {
513  return tryAssign( lhs, ~rhs, row, column );
514 }
516 //*************************************************************************************************
517 
518 
519 //*************************************************************************************************
536 template< typename MT // Type of the adapted matrix
537  , bool SO // Storage order of the adapted matrix
538  , bool DF // Density flag
539  , typename VT // Type of the right-hand side vector
540  , bool TF > // Transpose flag of the right-hand side vector
541 inline bool trySubAssign( const HermitianMatrix<MT,SO,DF>& lhs,
542  const Vector<VT,TF>& rhs, size_t row, size_t column )
543 {
544  return tryAssign( lhs, ~rhs, row, column );
545 }
547 //*************************************************************************************************
548 
549 
550 //*************************************************************************************************
567 template< typename MT1 // Type of the adapted matrix
568  , bool SO1 // Storage order of the adapted matrix
569  , bool DF // Density flag
570  , typename MT2 // Type of the right-hand side matrix
571  , bool SO2 > // Storage order of the right-hand side matrix
572 inline bool trySubAssign( const HermitianMatrix<MT1,SO1,DF>& lhs,
573  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
574 {
575  return tryAssign( lhs, ~rhs, row, column );
576 }
578 //*************************************************************************************************
579 
580 
581 //*************************************************************************************************
598 template< typename MT // Type of the adapted matrix
599  , bool SO // Storage order of the adapted matrix
600  , bool DF // Density flag
601  , typename VT // Type of the right-hand side vector
602  , bool TF > // Transpose flag of the right-hand side vector
603 inline bool tryMultAssign( const HermitianMatrix<MT,SO,DF>& lhs,
604  const Vector<VT,TF>& rhs, size_t row, size_t column )
605 {
606  return tryAssign( lhs, ~rhs, row, column );
607 }
609 //*************************************************************************************************
610 
611 
612 //*************************************************************************************************
628 template< typename MT // Type of the adapted matrix
629  , bool SO // Storage order of the adapted matrix
630  , bool DF // Density flag
631  , typename VT // Type of the right-hand side vector
632  , bool TF > // Transpose flag of the right-hand side vector
633 inline bool tryDivAssign( const HermitianMatrix<MT,SO,DF>& lhs,
634  const Vector<VT,TF>& rhs, size_t row, size_t column )
635 {
636  return tryAssign( lhs, ~rhs, row, column );
637 }
639 //*************************************************************************************************
640 
641 
642 
643 
644 //=================================================================================================
645 //
646 // ROWS SPECIALIZATIONS
647 //
648 //=================================================================================================
649 
650 //*************************************************************************************************
652 template< typename MT, bool SO, bool DF >
653 struct Rows< HermitianMatrix<MT,SO,DF> > : public Rows<MT>
654 {};
656 //*************************************************************************************************
657 
658 
659 
660 
661 //=================================================================================================
662 //
663 // COLUMNS SPECIALIZATIONS
664 //
665 //=================================================================================================
666 
667 //*************************************************************************************************
669 template< typename MT, bool SO, bool DF >
670 struct Columns< HermitianMatrix<MT,SO,DF> > : public Columns<MT>
671 {};
673 //*************************************************************************************************
674 
675 
676 
677 
678 //=================================================================================================
679 //
680 // ISSQUARE SPECIALIZATIONS
681 //
682 //=================================================================================================
683 
684 //*************************************************************************************************
686 template< typename MT, bool SO, bool DF >
687 struct IsSquare< HermitianMatrix<MT,SO,DF> > : public TrueType
688 {};
690 //*************************************************************************************************
691 
692 
693 
694 
695 //=================================================================================================
696 //
697 // ISSYMMETRIC SPECIALIZATIONS
698 //
699 //=================================================================================================
700 
701 //*************************************************************************************************
703 template< typename MT, bool SO, bool DF >
704 struct IsSymmetric< HermitianMatrix<MT,SO,DF> >
705  : public BoolConstant< IsBuiltin< ElementType_<MT> >::value >
706 {};
708 //*************************************************************************************************
709 
710 
711 
712 
713 //=================================================================================================
714 //
715 // ISHERMITIAN SPECIALIZATIONS
716 //
717 //=================================================================================================
718 
719 //*************************************************************************************************
721 template< typename MT, bool SO, bool DF >
722 struct IsHermitian< HermitianMatrix<MT,SO,DF> > : public TrueType
723 {};
725 //*************************************************************************************************
726 
727 
728 
729 
730 //=================================================================================================
731 //
732 // ISADAPTOR SPECIALIZATIONS
733 //
734 //=================================================================================================
735 
736 //*************************************************************************************************
738 template< typename MT, bool SO, bool DF >
739 struct IsAdaptor< HermitianMatrix<MT,SO,DF> > : public TrueType
740 {};
742 //*************************************************************************************************
743 
744 
745 
746 
747 //=================================================================================================
748 //
749 // ISRESTRICTED SPECIALIZATIONS
750 //
751 //=================================================================================================
752 
753 //*************************************************************************************************
755 template< typename MT, bool SO, bool DF >
756 struct IsRestricted< HermitianMatrix<MT,SO,DF> > : public TrueType
757 {};
759 //*************************************************************************************************
760 
761 
762 
763 
764 //=================================================================================================
765 //
766 // HASCONSTDATAACCESS SPECIALIZATIONS
767 //
768 //=================================================================================================
769 
770 //*************************************************************************************************
772 template< typename MT, bool SO >
773 struct HasConstDataAccess< HermitianMatrix<MT,SO,true> > : public TrueType
774 {};
776 //*************************************************************************************************
777 
778 
779 
780 
781 //=================================================================================================
782 //
783 // ISALIGNED SPECIALIZATIONS
784 //
785 //=================================================================================================
786 
787 //*************************************************************************************************
789 template< typename MT, bool SO, bool DF >
790 struct IsAligned< HermitianMatrix<MT,SO,DF> > : public BoolConstant< IsAligned<MT>::value >
791 {};
793 //*************************************************************************************************
794 
795 
796 
797 
798 //=================================================================================================
799 //
800 // ISPADDED SPECIALIZATIONS
801 //
802 //=================================================================================================
803 
804 //*************************************************************************************************
806 template< typename MT, bool SO, bool DF >
807 struct IsPadded< HermitianMatrix<MT,SO,DF> > : public BoolConstant< IsPadded<MT>::value >
808 {};
810 //*************************************************************************************************
811 
812 
813 
814 
815 //=================================================================================================
816 //
817 // ISRESIZABLE SPECIALIZATIONS
818 //
819 //=================================================================================================
820 
821 //*************************************************************************************************
823 template< typename MT, bool SO, bool DF >
824 struct IsResizable< HermitianMatrix<MT,SO,DF> > : public BoolConstant< IsResizable<MT>::value >
825 {};
827 //*************************************************************************************************
828 
829 
830 
831 
832 //=================================================================================================
833 //
834 // REMOVEADAPTOR SPECIALIZATIONS
835 //
836 //=================================================================================================
837 
838 //*************************************************************************************************
840 template< typename MT, bool SO, bool DF >
841 struct RemoveAdaptor< HermitianMatrix<MT,SO,DF> >
842 {
843  using Type = MT;
844 };
846 //*************************************************************************************************
847 
848 
849 
850 
851 //=================================================================================================
852 //
853 // ADDTRAIT SPECIALIZATIONS
854 //
855 //=================================================================================================
856 
857 //*************************************************************************************************
859 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
860 struct AddTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
861 {
863 };
864 
865 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
866 struct AddTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
867 {
868  using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
869 };
870 
871 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
872 struct AddTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
873 {
875 };
876 
877 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
878 struct AddTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
879 {
880  using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
881 };
882 
883 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
884 struct AddTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
885 {
887 };
888 
889 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
890 struct AddTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
891 {
892  using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
893 };
894 
895 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
896 struct AddTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
897 {
899 };
900 
901 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
902 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
903 {
904  using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
905 };
906 
907 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
908 struct AddTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
909 {
911 };
912 
913 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
914 struct AddTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
915 {
916  using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
917 };
918 
919 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
920 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
921 {
924  , AddTrait_<MT1,MT2> >;
925 };
926 
927 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
928 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
929 {
932  , AddTrait_<MT1,MT2> >;
933 };
934 
935 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
936 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
937 {
939 };
941 //*************************************************************************************************
942 
943 
944 
945 
946 //=================================================================================================
947 //
948 // SUBTRAIT SPECIALIZATIONS
949 //
950 //=================================================================================================
951 
952 //*************************************************************************************************
954 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
955 struct SubTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
956 {
958 };
959 
960 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
961 struct SubTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
962 {
963  using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
964 };
965 
966 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
967 struct SubTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
968 {
970 };
971 
972 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
973 struct SubTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
974 {
975  using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
976 };
977 
978 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
979 struct SubTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
980 {
982 };
983 
984 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
985 struct SubTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
986 {
987  using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
988 };
989 
990 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
991 struct SubTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
992 {
994 };
995 
996 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
997 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
998 {
999  using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1000 };
1001 
1002 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1003 struct SubTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1004 {
1006 };
1007 
1008 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1009 struct SubTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1010 {
1011  using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1012 };
1013 
1014 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1015 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2> >
1016 {
1019  , SubTrait_<MT1,MT2> >;
1020 };
1021 
1022 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1023 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1024 {
1027  , SubTrait_<MT1,MT2> >;
1028 };
1029 
1030 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1031 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1032 {
1033  using Type = HermitianMatrix< SubTrait_<MT1,MT2> >;
1034 };
1036 //*************************************************************************************************
1037 
1038 
1039 
1040 
1041 //=================================================================================================
1042 //
1043 // MULTTRAIT SPECIALIZATIONS
1044 //
1045 //=================================================================================================
1046 
1047 //*************************************************************************************************
1049 template< typename MT, bool SO, bool DF, typename T >
1050 struct MultTrait< HermitianMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1051 {
1052  using Type = HermitianMatrix< MultTrait_<MT,T> >;
1053 };
1054 
1055 template< typename T, typename MT, bool SO, bool DF >
1056 struct MultTrait< T, HermitianMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1057 {
1058  using Type = HermitianMatrix< MultTrait_<T,MT> >;
1059 };
1060 
1061 template< typename MT, bool SO, bool DF, typename T, size_t N >
1062 struct MultTrait< HermitianMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1063 {
1065 };
1066 
1067 template< typename T, size_t N, typename MT, bool SO, bool DF >
1068 struct MultTrait< StaticVector<T,N,true>, HermitianMatrix<MT,SO,DF> >
1069 {
1070  using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1071 };
1072 
1073 template< typename MT, bool SO, bool DF, typename T, size_t N >
1074 struct MultTrait< HermitianMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1075 {
1077 };
1078 
1079 template< typename T, size_t N, typename MT, bool SO, bool DF >
1080 struct MultTrait< HybridVector<T,N,true>, HermitianMatrix<MT,SO,DF> >
1081 {
1082  using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1083 };
1084 
1085 template< typename MT, bool SO, bool DF, typename T >
1086 struct MultTrait< HermitianMatrix<MT,SO,DF>, DynamicVector<T,false> >
1087 {
1089 };
1090 
1091 template< typename T, typename MT, bool SO, bool DF >
1092 struct MultTrait< DynamicVector<T,true>, HermitianMatrix<MT,SO,DF> >
1093 {
1094  using Type = MultTrait_< DynamicVector<T,true>, MT >;
1095 };
1096 
1097 template< typename MT, bool SO, bool DF, typename T, bool AF, bool PF >
1098 struct MultTrait< HermitianMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1099 {
1101 };
1102 
1103 template< typename T, bool AF, bool PF, typename MT, bool SO, bool DF >
1104 struct MultTrait< CustomVector<T,AF,PF,true>, HermitianMatrix<MT,SO,DF> >
1105 {
1106  using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1107 };
1108 
1109 template< typename MT, bool SO, bool DF, typename T >
1110 struct MultTrait< HermitianMatrix<MT,SO,DF>, CompressedVector<T,false> >
1111 {
1113 };
1114 
1115 template< typename T, typename MT, bool SO, bool DF >
1116 struct MultTrait< CompressedVector<T,true>, HermitianMatrix<MT,SO,DF> >
1117 {
1118  using Type = MultTrait_< CompressedVector<T,true>, MT >;
1119 };
1120 
1121 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1122 struct MultTrait< HermitianMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1123 {
1125 };
1126 
1127 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1128 struct MultTrait< StaticMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1129 {
1130  using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1131 };
1132 
1133 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1134 struct MultTrait< HermitianMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1135 {
1137 };
1138 
1139 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1140 struct MultTrait< HybridMatrix<T,M,N,SO1>, HermitianMatrix<MT,SO2,DF> >
1141 {
1142  using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1143 };
1144 
1145 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1146 struct MultTrait< HermitianMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1147 {
1148  using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1149 };
1150 
1151 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1152 struct MultTrait< DynamicMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1153 {
1154  using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1155 };
1156 
1157 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1158 struct MultTrait< HermitianMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1159 {
1161 };
1162 
1163 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1164 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, HermitianMatrix<MT,SO2,DF> >
1165 {
1166  using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1167 };
1168 
1169 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1170 struct MultTrait< HermitianMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1171 {
1173 };
1174 
1175 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1176 struct MultTrait< CompressedMatrix<T,SO1>, HermitianMatrix<MT,SO2,DF> >
1177 {
1178  using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1179 };
1180 
1181 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1182 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2> >
1183 {
1184  using Type = MultTrait_<MT1,MT2>;
1185 };
1186 
1187 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1188 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1189 {
1190  using Type = MultTrait_<MT1,MT2>;
1191 };
1192 
1193 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1194 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1195 {
1196  using Type = MultTrait_<MT1,MT2>;
1197 };
1199 //*************************************************************************************************
1200 
1201 
1202 
1203 
1204 //=================================================================================================
1205 //
1206 // DIVTRAIT SPECIALIZATIONS
1207 //
1208 //=================================================================================================
1209 
1210 //*************************************************************************************************
1212 template< typename MT, bool SO, bool DF, typename T >
1213 struct DivTrait< HermitianMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1214 {
1215  using Type = HermitianMatrix< DivTrait_<MT,T> >;
1216 };
1218 //*************************************************************************************************
1219 
1220 
1221 
1222 
1223 //=================================================================================================
1224 //
1225 // FOREACHTRAIT SPECIALIZATIONS
1226 //
1227 //=================================================================================================
1228 
1229 //*************************************************************************************************
1231 template< typename MT, bool SO, bool DF >
1232 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Abs >
1233 {
1235 };
1236 
1237 template< typename MT, bool SO, bool DF >
1238 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Floor >
1239 {
1241 };
1242 
1243 template< typename MT, bool SO, bool DF >
1244 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Ceil >
1245 {
1247 };
1248 
1249 template< typename MT, bool SO, bool DF >
1250 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Conj >
1251 {
1253 };
1254 
1255 template< typename MT, bool SO, bool DF >
1256 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Real >
1257 {
1259 };
1260 
1261 template< typename MT, bool SO, bool DF >
1262 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Imag >
1263 {
1264  using Type = If_< IsBuiltin< ElementType_<MT> >
1267 };
1268 
1269 template< typename MT, bool SO, bool DF >
1270 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Sqrt >
1271 {
1273 };
1274 
1275 template< typename MT, bool SO, bool DF >
1276 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, InvSqrt >
1277 {
1279 };
1280 
1281 template< typename MT, bool SO, bool DF >
1282 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Cbrt >
1283 {
1285 };
1286 
1287 template< typename MT, bool SO, bool DF >
1288 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, InvCbrt >
1289 {
1291 };
1292 
1293 template< typename MT, bool SO, bool DF, typename ET >
1294 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Pow<ET> >
1295 {
1297 };
1298 
1299 template< typename MT, bool SO, bool DF >
1300 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Exp >
1301 {
1303 };
1304 
1305 template< typename MT, bool SO, bool DF >
1306 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Log >
1307 {
1309 };
1310 
1311 template< typename MT, bool SO, bool DF >
1312 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Log10 >
1313 {
1315 };
1316 
1317 template< typename MT, bool SO, bool DF >
1318 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Sin >
1319 {
1321 };
1322 
1323 template< typename MT, bool SO, bool DF >
1324 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Asin >
1325 {
1327 };
1328 
1329 template< typename MT, bool SO, bool DF >
1330 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Sinh >
1331 {
1333 };
1334 
1335 template< typename MT, bool SO, bool DF >
1336 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Asinh >
1337 {
1339 };
1340 
1341 template< typename MT, bool SO, bool DF >
1342 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Cos >
1343 {
1345 };
1346 
1347 template< typename MT, bool SO, bool DF >
1348 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Acos >
1349 {
1351 };
1352 
1353 template< typename MT, bool SO, bool DF >
1354 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Cosh >
1355 {
1357 };
1358 
1359 template< typename MT, bool SO, bool DF >
1360 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Acosh >
1361 {
1363 };
1364 
1365 template< typename MT, bool SO, bool DF >
1366 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Tan >
1367 {
1369 };
1370 
1371 template< typename MT, bool SO, bool DF >
1372 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Atan >
1373 {
1375 };
1376 
1377 template< typename MT, bool SO, bool DF >
1378 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Tanh >
1379 {
1381 };
1382 
1383 template< typename MT, bool SO, bool DF >
1384 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Atanh >
1385 {
1387 };
1388 
1389 template< typename MT, bool SO, bool DF >
1390 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Erf >
1391 {
1393 };
1394 
1395 template< typename MT, bool SO, bool DF >
1396 struct ForEachTrait< HermitianMatrix<MT,SO,DF>, Erfc >
1397 {
1399 };
1401 //*************************************************************************************************
1402 
1403 
1404 
1405 
1406 //=================================================================================================
1407 //
1408 // HIGHTYPE SPECIALIZATIONS
1409 //
1410 //=================================================================================================
1411 
1412 //*************************************************************************************************
1414 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1415 struct HighType< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1416 {
1418 };
1420 //*************************************************************************************************
1421 
1422 
1423 
1424 
1425 //=================================================================================================
1426 //
1427 // LOWTYPE SPECIALIZATIONS
1428 //
1429 //=================================================================================================
1430 
1431 //*************************************************************************************************
1433 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1434 struct LowType< HermitianMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1435 {
1437 };
1439 //*************************************************************************************************
1440 
1441 
1442 
1443 
1444 //=================================================================================================
1445 //
1446 // SUBMATRIXTRAIT SPECIALIZATIONS
1447 //
1448 //=================================================================================================
1449 
1450 //*************************************************************************************************
1452 template< typename MT, bool SO, bool DF >
1453 struct SubmatrixTrait< HermitianMatrix<MT,SO,DF> >
1454 {
1455  using Type = SubmatrixTrait_<MT>;
1456 };
1458 //*************************************************************************************************
1459 
1460 
1461 
1462 
1463 //=================================================================================================
1464 //
1465 // ROWTRAIT SPECIALIZATIONS
1466 //
1467 //=================================================================================================
1468 
1469 //*************************************************************************************************
1471 template< typename MT, bool SO, bool DF >
1472 struct RowTrait< HermitianMatrix<MT,SO,DF> >
1473 {
1474  using Type = RowTrait_<MT>;
1475 };
1477 //*************************************************************************************************
1478 
1479 
1480 
1481 
1482 //=================================================================================================
1483 //
1484 // COLUMNTRAIT SPECIALIZATIONS
1485 //
1486 //=================================================================================================
1487 
1488 //*************************************************************************************************
1490 template< typename MT, bool SO, bool DF >
1491 struct ColumnTrait< HermitianMatrix<MT,SO,DF> >
1492 {
1493  using Type = ColumnTrait_<MT>;
1494 };
1496 //*************************************************************************************************
1497 
1498 } // namespace blaze
1499 
1500 #endif
bool isReal(const DiagonalProxy< MT > &proxy)
Returns whether the matrix element represents a real number.
Definition: DiagonalProxy.h:595
Header file for auxiliary alias declarations.
Header file for mathematical functions.
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.
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.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:118
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:117
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
typename RowTrait< MT >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:152
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:261
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.
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:533
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1755
Matrix adapter for symmetric matrices.
Definition: Forward.h:52
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:245
Header file for the implementation of the base template of the SymmetricMatrix.
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1679
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:741
Base template for the RowTrait class.
Definition: RowTrait.h:117
typename ForEachTrait< T, OP >::Type ForEachTrait_
Auxiliary alias declaration for the ForEachTrait class template.The ForEachTrait_ alias declaration p...
Definition: ForEachTrait.h:146
Constraint on the data type.
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 IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the If class template.
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
Base template for the ForEachTrait class.The ForEachTrait class template offers the possibility to se...
Definition: ForEachTrait.h:79
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 Columns type trait.
Header file for the implementation of a fixed-size matrix.
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
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:336
Flag for the Bunch-Kaufman-based inversion for symmetric matrices.
Definition: InversionFlag.h:104
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, RowExprTrait_< MT > > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:128
HermitianMatrix specialization for sparse matrices.
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
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, ColumnExprTrait_< MT > > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:128
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:553
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
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
Flag for the inversion of a symmetric matrix (same as byLDLT).
Definition: InversionFlag.h:109
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:143
Base template for the MultTrait class.
Definition: MultTrait.h:143
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix 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:160
bool isHermitian(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is Hermitian.
Definition: DenseMatrix.h:775
Matrix adapter for Hermitian matrices.
Definition: Forward.h:49
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:267
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:94
#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
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:153
Base template for the DivTrait class.
Definition: DivTrait.h:143
typename ColumnTrait< MT >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:152
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:320
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:164
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:245
Header file for the for-each trait.
Header file for the isDivisor shim.
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:76
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:249
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:76
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:573
Base template for the SubTrait class.
Definition: SubTrait.h:143
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
SubmatrixExprTrait_< MT, unaligned > submatrix(Matrix< MT, SO > &matrix, size_t row, size_t column, size_t m, size_t n)
Creating a view on a specific submatrix of the given matrix.
Definition: Submatrix.h:168
Header file for the IsHermitian type trait.
Header file for the IsResizable type trait.
Header file for the IsRestricted 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:245
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.