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 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: diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 714bfbd2..9048f2e6 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -3241,6 +3241,12 @@ cdef class DenseMatrixBase(MatrixBase): def __str__(self): return deref(self.thisptr).__str__().decode("utf-8") + def _repr_latex_(self): + if repr_latex[0]: + return "${}$".format(latex(self)) + else: + return None + def __add__(a, b): a = _sympify(a, False) b = _sympify(b, False) @@ -5412,8 +5418,14 @@ def cse(exprs): return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) def latex(expr): - cdef Basic expr_ = sympify(expr) - return symengine.latex(deref(expr_.thisptr)).decode("utf-8") + cdef DenseMatrixBase mat_expr + cdef Basic basic_expr + if isinstance(expr, DenseMatrixBase): + mat_expr = expr + 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") cdef _flattened_vec(symengine.vec_basic &vec, exprs): cdef Basic b diff --git a/symengine/tests/test_matrices.py b/symengine/tests/test_matrices.py index ea2a8d72..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) @@ -725,3 +725,10 @@ 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]]) + init_printing(True) + latex_string = testmat._repr_latex_() + assert isinstance(latex_string, str) + init_printing(False) 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