Skip to content

Commit fbaa444

Browse files
authored
Merge pull request #261 from isuruf/latex
Latex printing on jupyter notebooks
2 parents d73a44f + ab19dbb commit fbaa444

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

symengine/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
ImmutableMatrix, ImmutableDenseMatrix, MutableDenseMatrix,
88
MatrixBase, Basic, DictBasic, symarray, series, diff, zeros,
99
eye, diag, ones, Derivative, Subs, expand, has_symbol,
10-
UndefFunction, Function,
10+
UndefFunction, Function, latex,
1111
have_numpy, true, false, Equality, Unequality, GreaterThan,
1212
LessThan, StrictGreaterThan, StrictLessThan, Eq, Ne, Ge, Le,
1313
Gt, Lt, And, Or, Not, Nand, Nor, Xor, Xnor, perfect_power, integer_nthroot,
@@ -19,6 +19,7 @@
1919
)
2020
from .utilities import var, symbols
2121
from .functions import *
22+
from .printing import init_printing
2223

2324
if have_mpfr:
2425
from .lib.symengine_wrapper import RealMPFR

symengine/lib/symengine.pxd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,3 +1038,6 @@ cdef extern from "<symengine/sets.h>" namespace "SymEngine":
10381038
cdef extern from "<symengine/solve.h>" namespace "SymEngine":
10391039
cdef RCP[const Set] solve(rcp_const_basic &f, RCP[const Symbol] &sym) nogil except +
10401040
cdef RCP[const Set] solve(rcp_const_basic &f, RCP[const Symbol] &sym, RCP[const Set] &domain) nogil except +
1041+
1042+
cdef extern from "<symengine/latex.h>" namespace "SymEngine":
1043+
string latex(const Basic &x) nogil except +

symengine/lib/symengine_wrapper.pyx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,8 @@ cdef list vec_pair_to_list(symengine.vec_pair& vec):
774774
return result
775775

776776

777+
repr_latex=[False]
778+
777779
cdef class Basic(object):
778780

779781
def __str__(self):
@@ -782,6 +784,12 @@ cdef class Basic(object):
782784
def __repr__(self):
783785
return self.__str__()
784786

787+
def _repr_latex_(self):
788+
if repr_latex[0]:
789+
return "${}$".format(latex(self))
790+
else:
791+
return None
792+
785793
def __hash__(self):
786794
return deref(self.thisptr).hash()
787795

@@ -4932,6 +4940,9 @@ def cse(exprs):
49324940
symengine.cse(replacements, reduced_exprs, vec)
49334941
return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs))
49344942

4943+
def latex(expr):
4944+
cdef Basic expr_ = sympify(expr)
4945+
return symengine.latex(deref(expr_.thisptr)).decode("utf-8")
49354946

49364947
cdef _flattened_vec(symengine.vec_basic &vec, exprs):
49374948
cdef Basic b

symengine/printing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from symengine.lib.symengine_wrapper import ccode, sympify, Basic
2+
import symengine.lib.symengine_wrapper
23

34
class CCodePrinter:
45

@@ -22,3 +23,12 @@ def doprint(self, expr, assign_to=None):
2223
code_line = '{}[{}] = {};'.format(assign_to, i, element)
2324
code_lines.append(code_line)
2425
return '\n'.join(code_lines)
26+
27+
28+
def init_printing(pretty_print=True, use_latex=True):
29+
if pretty_print:
30+
if not use_latex:
31+
raise RuntimeError("Only latex is supported for pretty printing")
32+
symengine.lib.symengine_wrapper.repr_latex[0] = True
33+
else:
34+
symengine.lib.symengine_wrapper.repr_latex[0] = False

0 commit comments

Comments
 (0)