Skip to content

Commit bca6842

Browse files
committed
Add is_positive_definite and is_negative_definite
1 parent 6b07491 commit bca6842

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

symengine/lib/symengine.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,8 @@ cdef extern from "<symengine/matrix.h>" namespace "SymEngine":
827827
int is_hermitian() nogil
828828
int is_weakly_diagonally_dominant() nogil
829829
int is_strictly_diagonally_dominant() nogil
830+
int is_positive_definite() nogil
831+
int is_negative_definite() nogil
830832

831833
bool is_a_DenseMatrix "SymEngine::is_a<SymEngine::DenseMatrix>"(const MatrixBase &b) nogil
832834
DenseMatrix* static_cast_DenseMatrix "static_cast<SymEngine::DenseMatrix*>"(const MatrixBase *a)

symengine/lib/symengine_wrapper.pyx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3627,6 +3627,14 @@ cdef class DenseMatrixBase(MatrixBase):
36273627
def is_strongly_diagonally_dominant(self):
36283628
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_strictly_diagonally_dominant())
36293629

3630+
@property
3631+
def is_positive_definite(self):
3632+
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_positive_definite())
3633+
3634+
@property
3635+
def is_negative_definite(self):
3636+
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_negative_definite())
3637+
36303638
@property
36313639
def T(self):
36323640
return self.transpose()

symengine/tests/test_matrices.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,20 @@ def test_is_strongly_diagonally_dominant():
385385
assert C.is_strongly_diagonally_dominant is None
386386

387387

388+
def test_is_positive_definite():
389+
A = DenseMatrix(2, 2, [2, 1, 1, 2])
390+
assert A.is_positive_definite
391+
C = DenseMatrix(3, 3, [Symbol('x'), 2, 0, 0, 4, 0, 0, 0, 4])
392+
assert C.is_positive_definite is None
393+
394+
395+
def test_is_negative_definite():
396+
A = DenseMatrix(2, 2, [-2, -1, -1, -2])
397+
assert A.is_negative_definite
398+
C = DenseMatrix(3, 3, [Symbol('x'), -2, 0, 0, -4, 0, 0, 0, -4])
399+
assert C.is_negative_definite is None
400+
401+
388402
def test_LU():
389403
A = DenseMatrix(3, 3, [1, 3, 5, 2, 5, 6, 8, 3, 1])
390404
L, U = A.LU()

symengine_version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
44eb47e3bbfa7e06718f2f65f3f41a0a9d133b70
1+
41e9689c9ee4d383d09dcd0e352b46185d18c4f4

0 commit comments

Comments
 (0)