From e6c8b4574fd65d016c01e48719a4454de658dea3 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Tue, 5 Sep 2017 12:01:32 -0500 Subject: [PATCH 1/2] div for matrices --- symengine/lib/symengine_wrapper.pyx | 15 +++++++++++++++ symengine/tests/test_matrices.py | 13 +++++++++++++ 2 files changed, 28 insertions(+) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index a9b2ea9df..3e2dc97dd 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3087,6 +3087,21 @@ cdef class DenseMatrixBase(MatrixBase): else: return NotImplemented + def __div__(a, b): + a = _sympify(a, False) + b = _sympify(b, False) + if isinstance(a, MatrixBase): + if isinstance(b, MatrixBase): + return a.mul_matrix(b.inv()) + elif isinstance(b, Basic): + return a.mul_scalar(1/b) + else: + return NotImplemented + else: + return NotImplemented + + __truediv__ = __div__ + def __sub__(a, b): a = _sympify(a, False) b = _sympify(b, False) diff --git a/symengine/tests/test_matrices.py b/symengine/tests/test_matrices.py index c2d8420aa..2aada1dd6 100644 --- a/symengine/tests/test_matrices.py +++ b/symengine/tests/test_matrices.py @@ -217,6 +217,19 @@ def test_sub(): raises(TypeError, lambda: 5 - A) +def test_div(): + w, x, y, z = symbols("w, x, y, z") + A = DenseMatrix([[w, x], [y, z]]) + B = DenseMatrix([[1, 1], [1, 0]]) + C = DenseMatrix([[x, w - x], [z, y - z]]) + + assert A / 2 == DenseMatrix([[w/2, x/2], [y/2, z/2]]) + assert C * B == A + assert A / B == C + + raises(TypeError, lambda: 2/A) + + def test_transpose(): A = DenseMatrix(3, 3, [1, 2, 3, 4, 5, 6, 7, 8, 9]) From 92664fc0a3ae4c53db9c0987a0463edbd13abec9 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Tue, 5 Sep 2017 12:37:21 -0500 Subject: [PATCH 2/2] Fix python3 error --- symengine/lib/symengine_wrapper.pyx | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 3e2dc97dd..15feacab6 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3088,19 +3088,10 @@ cdef class DenseMatrixBase(MatrixBase): return NotImplemented def __div__(a, b): - a = _sympify(a, False) - b = _sympify(b, False) - if isinstance(a, MatrixBase): - if isinstance(b, MatrixBase): - return a.mul_matrix(b.inv()) - elif isinstance(b, Basic): - return a.mul_scalar(1/b) - else: - return NotImplemented - else: - return NotImplemented + return div_matrices(a, b) - __truediv__ = __div__ + def __truediv__(a, b): + return div_matrices(a, b) def __sub__(a, b): a = _sympify(a, False) @@ -3571,6 +3562,20 @@ cdef class DenseMatrixBase(MatrixBase): def expand(self, *args, **kwargs): return self.applyfunc(lambda x : x.expand()) + +def div_matrices(a, b): + a = _sympify(a, False) + b = _sympify(b, False) + if isinstance(a, MatrixBase): + if isinstance(b, MatrixBase): + return a.mul_matrix(b.inv()) + elif isinstance(b, Basic): + return a.mul_scalar(1/b) + else: + return NotImplemented + else: + return NotImplemented + class DenseMatrixBaseIter(object): def __init__(self, d):