From 8ef62a01139cd33e7e89248e6ffad0e7ee7ce41f Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Fri, 24 Sep 2021 23:17:24 +0200 Subject: [PATCH 01/16] add _repr_latex_ to DenseMatrix --- symengine/lib/symengine_wrapper.pyx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 714bfbd2..05ff4cb7 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3241,6 +3241,34 @@ cdef class DenseMatrixBase(MatrixBase): def __str__(self): return deref(self.thisptr).__str__().decode("utf-8") + def _repr_latex_(self): + MAX_NUMBER_OF_ROWS = 24 + MAX_NUMBER_OF_COLUMNS = 16 + + values = list(self) + ncols=self.shape[1] + nrows = self.shape[0] + if nrows > MAX_NUMBER_OF_ROWS: + nrows_display = MAX_NUMBER_OF_ROWS - 2 + else: + nrows_display= nrows + ncols_display = min(ncols, MAX_NUMBER_OF_COLUMNS) + latex = r'$\displaystyle \left[\begin{matrix}' + + newline = r'\\' + if ncols_display Date: Fri, 24 Sep 2021 23:24:14 +0200 Subject: [PATCH 02/16] whitespace --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 05ff4cb7..c417825f 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3241,7 +3241,7 @@ cdef class DenseMatrixBase(MatrixBase): def __str__(self): return deref(self.thisptr).__str__().decode("utf-8") - def _repr_latex_(self): + def _repr_latex_(self): MAX_NUMBER_OF_ROWS = 24 MAX_NUMBER_OF_COLUMNS = 16 From 60448660caa3498d716eba33703759536f9a8022 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Fri, 24 Sep 2021 23:28:46 +0200 Subject: [PATCH 03/16] add test --- symengine/tests/test_matrices.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/symengine/tests/test_matrices.py b/symengine/tests/test_matrices.py index ea2a8d72..3f853ada 100644 --- a/symengine/tests/test_matrices.py +++ b/symengine/tests/test_matrices.py @@ -725,3 +725,9 @@ def test_LUdecomp(): for orig, new in p: res.row_swap(orig, new) assert res - testmat == zeros(4) + +def test_repr_latex(): + testmat = DenseMatrix([[0, 2]]) + latex_string = testmat._repr_latex_() + assert isinstance(latex_string, str) + \ No newline at end of file From 4e5464487b2e23405c9f12f45922052ded556f7e Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Wed, 29 Sep 2021 12:46:40 +0200 Subject: [PATCH 04/16] use c++ latex rendering --- symengine/lib/symengine_wrapper.pyx | 36 ++++++++--------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index c417825f..e08ca254 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3242,32 +3242,10 @@ cdef class DenseMatrixBase(MatrixBase): return deref(self.thisptr).__str__().decode("utf-8") def _repr_latex_(self): - MAX_NUMBER_OF_ROWS = 24 - MAX_NUMBER_OF_COLUMNS = 16 - - values = list(self) - ncols=self.shape[1] - nrows = self.shape[0] - if nrows > MAX_NUMBER_OF_ROWS: - nrows_display = MAX_NUMBER_OF_ROWS - 2 + if repr_latex[0]: + return latex(deref(self.thisptr)).decode("utf-8") else: - nrows_display= nrows - ncols_display = min(ncols, MAX_NUMBER_OF_COLUMNS) - latex = r'$\displaystyle \left[\begin{matrix}' - - newline = r'\\' - if ncols_display Date: Thu, 28 Oct 2021 14:45:11 -0500 Subject: [PATCH 05/16] Update symengine_version.txt --- symengine_version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine_version.txt b/symengine_version.txt index 85f7059b..845dbe7f 100644 --- a/symengine_version.txt +++ b/symengine_version.txt @@ -1 +1 @@ -v0.8.1 +23abf31763620463500d5fad114d855afd66d011 From a59635b024c6f08eca9c519f22bdb58cd9ee0c0b Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Sun, 7 Nov 2021 11:39:35 -0600 Subject: [PATCH 06/16] Fix cdef --- symengine/lib/symengine_wrapper.pyx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index e08ca254..4b94e93a 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5418,11 +5418,13 @@ def cse(exprs): return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) def latex(expr): + cdef symengine.DenseMatrix expr_ + cdef Basic expr_ if isinstance(expr, DenseMatrixBase): - cdef symengine.DenseMatrix expr_ = sympify(expr) - return symengine.latex(deref(expr_.thisptr)).decode("utf-8") + mat_expr_ = sympify(expr) + return symengine.latex(deref(mat_expr_.thisptr)).decode("utf-8") else: - cdef Basic expr_ = sympify(expr) + expr_ = sympify(expr) return symengine.latex(deref(expr_.thisptr)).decode("utf-8") cdef _flattened_vec(symengine.vec_basic &vec, exprs): From b505c642373fccc546b4e99e115c49131feb6103 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 8 Nov 2021 10:52:28 +0100 Subject: [PATCH 07/16] fix name clash --- symengine/lib/symengine_wrapper.pyx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 4b94e93a..87f79738 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5418,14 +5418,14 @@ def cse(exprs): return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) def latex(expr): - cdef symengine.DenseMatrix expr_ - cdef Basic expr_ + cdef symengine.DenseMatrix mat_expr + cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): mat_expr_ = sympify(expr) return symengine.latex(deref(mat_expr_.thisptr)).decode("utf-8") else: - expr_ = sympify(expr) - return symengine.latex(deref(expr_.thisptr)).decode("utf-8") + basic_expr = sympify(expr) + return symengine.latex(deref(basic_expr.thisptr)).decode("utf-8") cdef _flattened_vec(symengine.vec_basic &vec, exprs): cdef Basic b From d84d32aa6422bdb30081c074d764aad6d042ca60 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Wed, 10 Nov 2021 13:44:22 -0600 Subject: [PATCH 08/16] Fix typo --- symengine/lib/symengine_wrapper.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 87f79738..9337323a 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5421,8 +5421,8 @@ def latex(expr): cdef symengine.DenseMatrix mat_expr cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): - mat_expr_ = sympify(expr) - return symengine.latex(deref(mat_expr_.thisptr)).decode("utf-8") + mat_expr = expr + return symengine.latex(deref(mat_expr.thisptr)).decode("utf-8") else: basic_expr = sympify(expr) return symengine.latex(deref(basic_expr.thisptr)).decode("utf-8") From f5ed1cd60e32a08749568a0a2e83dd598f4cb4dd Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Tue, 16 Nov 2021 18:06:56 -0600 Subject: [PATCH 09/16] Fix repr_latex --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 9337323a..30e5c6ee 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3243,7 +3243,7 @@ cdef class DenseMatrixBase(MatrixBase): def _repr_latex_(self): if repr_latex[0]: - return latex(deref(self.thisptr)).decode("utf-8") + return "${}$".format(latex(self)) else: return None From f63e77ac3a3239373c0903a9551a43e3ff0adff9 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 06:15:38 -0600 Subject: [PATCH 10/16] Fix type error --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 30e5c6ee..191e2a16 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5418,7 +5418,7 @@ def cse(exprs): return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) def latex(expr): - cdef symengine.DenseMatrix mat_expr + cdef DenseMatrix mat_expr cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): mat_expr = expr From 3d89207f08feaf74cdce2f43520434679d638acd Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 09:38:05 -0600 Subject: [PATCH 11/16] Fix type again --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 191e2a16..728ba7fc 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5418,7 +5418,7 @@ def cse(exprs): return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) def latex(expr): - cdef DenseMatrix mat_expr + cdef DenseMatrixBase mat_expr cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): mat_expr = expr From c7d6a49803b6708dcf7704621fb104b4ef0da7d2 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 11:37:29 -0600 Subject: [PATCH 12/16] Add overloaded latex definition --- symengine/lib/symengine.pxd | 1 + 1 file changed, 1 insertion(+) diff --git a/symengine/lib/symengine.pxd b/symengine/lib/symengine.pxd index 5803344d..9d86d983 100644 --- a/symengine/lib/symengine.pxd +++ b/symengine/lib/symengine.pxd @@ -1099,6 +1099,7 @@ cdef extern from "" namespace "SymEngine": cdef extern from "" namespace "SymEngine": string ccode(const Basic &x) nogil except + string latex(const Basic &x) nogil except + + string latex(const DenseMatrix &x, unsigned max_rows, unsigned max_cols) nogil except + ## Defined in 'symengine/cwrapper.cpp' cdef struct CRCPBasic: From 18777f0c0603c1c44dd0254ee9ad340076a54458 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 11:38:03 -0600 Subject: [PATCH 13/16] set default values for max rows and cols --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 728ba7fc..4c4acbf2 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5422,7 +5422,7 @@ def latex(expr): cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): mat_expr = expr - return symengine.latex(deref(mat_expr.thisptr)).decode("utf-8") + return symengine.latex(deref(mat_expr.thisptr), 20, 12).decode("utf-8") else: basic_expr = sympify(expr) return symengine.latex(deref(basic_expr.thisptr)).decode("utf-8") From dc8273a27fc6d49aaf0baecdd3b59afbec58e4fb Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 11:51:35 -0600 Subject: [PATCH 14/16] cast to DenseMatrix --- symengine/lib/symengine_wrapper.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 4c4acbf2..9048f2e6 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -5422,7 +5422,7 @@ def latex(expr): cdef Basic basic_expr if isinstance(expr, DenseMatrixBase): mat_expr = expr - return symengine.latex(deref(mat_expr.thisptr), 20, 12).decode("utf-8") + return symengine.latex(deref(symengine.static_cast_DenseMatrix(mat_expr.thisptr)), 20, 12).decode("utf-8") else: basic_expr = sympify(expr) return symengine.latex(deref(basic_expr.thisptr)).decode("utf-8") From dae7f131d76a85a5e373796b9dac0fce43ae48dd Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 12:02:52 -0600 Subject: [PATCH 15/16] Fix test --- symengine/tests/test_matrices.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/symengine/tests/test_matrices.py b/symengine/tests/test_matrices.py index 3f853ada..901bcc37 100644 --- a/symengine/tests/test_matrices.py +++ b/symengine/tests/test_matrices.py @@ -1,4 +1,4 @@ -from symengine import symbols +from symengine import symbols, init_printing from symengine.lib.symengine_wrapper import (DenseMatrix, Symbol, Integer, Rational, function_symbol, I, NonSquareMatrixError, ShapeError, zeros, ones, eye, ImmutableMatrix) @@ -728,6 +728,7 @@ def test_LUdecomp(): def test_repr_latex(): testmat = DenseMatrix([[0, 2]]) + init_printing(True) latex_string = testmat._repr_latex_() assert isinstance(latex_string, str) - \ No newline at end of file + init_printing(False) From 4fa1db064f1e2db3f4a0edd0f54d63c0bb977a4e Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Fri, 26 Nov 2021 14:09:56 -0600 Subject: [PATCH 16/16] fix appveyor --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 62adf2e1..69028741 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -54,7 +54,7 @@ install: - git clone https://github.com/sympy/symengine symengine-cpp - if [%COMPILER%]==[MSVC15] call %CONDA_INSTALL_LOCN%\Scripts\activate.bat -- if [%COMPILER%]==[MSVC15] conda update --yes --quiet conda +- if [%COMPILER%]==[MSVC15] conda install --yes --quiet conda python=3.6 - if [%COMPILER%]==[MSVC15] conda config --add channels conda-forge - if [%COMPILER%]==[MSVC15] if [%BUILD_TYPE%]==[Debug] conda config --add channels symengine/label/debug - if [%COMPILER%]==[MSVC15] conda install --yes mpir=3.0.0 vc=14