Loading...
Searching...
No Matches
SymEngine::MatrixSymmetricVisitor Class Reference
+ Inheritance diagram for SymEngine::MatrixSymmetricVisitor:
+ Collaboration diagram for SymEngine::MatrixSymmetricVisitor:

Public Member Functions

 MatrixSymmetricVisitor (const Assumptions *assumptions)
 
void bvisit (const Basic &x)
 
void bvisit (const MatrixExpr &x)
 
void bvisit (const IdentityMatrix &x)
 
void bvisit (const ZeroMatrix &x)
 
void bvisit (const DiagonalMatrix &x)
 
void bvisit (const ImmutableDenseMatrix &x)
 
void bvisit (const MatrixAdd &x)
 
void bvisit (const HadamardProduct &x)
 
tribool apply (const MatrixExpr &s)
 

Private Member Functions

void check_vector (const vec_basic &vec)
 

Private Attributes

tribool is_symmetric_
 
const Assumptionsassumptions_
 

Detailed Description

Definition at line 9 of file is_symmetric.cpp.

Constructor & Destructor Documentation

◆ MatrixSymmetricVisitor()

SymEngine::MatrixSymmetricVisitor::MatrixSymmetricVisitor ( const Assumptions assumptions)
inline

Definition at line 38 of file is_symmetric.cpp.

39 : assumptions_(assumptions)
40 {
41 }
void hash_combine(hash_t &seed, const T &v)
Definition basic-inl.h:95

Member Function Documentation

◆ apply()

tribool SymEngine::MatrixSymmetricVisitor::apply ( const MatrixExpr s)
inline

Definition at line 99 of file is_symmetric.cpp.

100 {
101 s.accept(*this);
102 return is_symmetric_;
103 }

◆ bvisit() [1/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const Basic x)
inline

Definition at line 43 of file is_symmetric.cpp.

43{};

◆ bvisit() [2/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const DiagonalMatrix x)
inline

Definition at line 59 of file is_symmetric.cpp.

60 {
61 is_symmetric_ = tribool::tritrue;
62 }

◆ bvisit() [3/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const HadamardProduct x)
inline

Definition at line 94 of file is_symmetric.cpp.

95 {
96 check_vector(x.get_factors());
97 }

◆ bvisit() [4/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const IdentityMatrix x)
inline

Definition at line 49 of file is_symmetric.cpp.

50 {
51 is_symmetric_ = tribool::tritrue;
52 }

◆ bvisit() [5/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const ImmutableDenseMatrix x)
inline

Definition at line 64 of file is_symmetric.cpp.

65 {
66 size_t nrows = x.nrows();
67 size_t ncols = x.ncols();
68 if (nrows != ncols) {
69 is_symmetric_ = tribool::trifalse;
70 return;
71 }
72 ZeroVisitor visitor(assumptions_);
73 is_symmetric_ = tribool::tritrue;
74 for (size_t i = 0; i < ncols; i++) {
75 for (size_t j = 0; j <= i; j++) {
76 if (j != i) {
77 auto e1 = x.get(i, j);
78 auto e2 = x.get(j, i);
79 is_symmetric_ = and_tribool(is_symmetric_,
80 visitor.apply(*sub(e1, e2)));
81 }
82 if (is_false(is_symmetric_)) {
83 return;
84 }
85 }
86 }
87 }
RCP< const Basic > sub(const RCP< const Basic > &a, const RCP< const Basic > &b)
Substracts b from a.
Definition add.cpp:495

◆ bvisit() [6/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const MatrixAdd x)
inline

Definition at line 89 of file is_symmetric.cpp.

90 {
91 check_vector(x.get_terms());
92 }

◆ bvisit() [7/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const MatrixExpr x)
inline

Definition at line 44 of file is_symmetric.cpp.

45 {
46 is_symmetric_ = tribool::indeterminate;
47 }

◆ bvisit() [8/8]

void SymEngine::MatrixSymmetricVisitor::bvisit ( const ZeroMatrix x)
inline

Definition at line 54 of file is_symmetric.cpp.

55 {
56 is_symmetric_ = is_square(x, assumptions_);
57 }

◆ check_vector()

void SymEngine::MatrixSymmetricVisitor::check_vector ( const vec_basic vec)
inlineprivate

Definition at line 15 of file is_symmetric.cpp.

16 {
17 bool found_nonsym = false;
18 for (auto &elt : vec) {
19 elt->accept(*this);
20 if (is_indeterminate(is_symmetric_)) {
21 return;
22 } else if (is_false(is_symmetric_)) {
23 if (found_nonsym) {
24 return;
25 } else {
26 found_nonsym = true;
27 }
28 }
29 }
30 if (found_nonsym) {
31 is_symmetric_ = tribool::trifalse;
32 } else {
33 is_symmetric_ = tribool::tritrue;
34 }
35 }

Field Documentation

◆ assumptions_

const Assumptions* SymEngine::MatrixSymmetricVisitor::assumptions_
private

Definition at line 13 of file is_symmetric.cpp.

◆ is_symmetric_

tribool SymEngine::MatrixSymmetricVisitor::is_symmetric_
private

Definition at line 12 of file is_symmetric.cpp.


The documentation for this class was generated from the following file: