Skip to content

Commit

Permalink
support both sympy and ipython latex output
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcel Stimberg committed Mar 29, 2013
1 parent ed0283d commit a1ea79e
Showing 1 changed file with 42 additions and 11 deletions.
53 changes: 42 additions & 11 deletions brian2/units/fundamentalunits.py
Expand Up @@ -22,6 +22,7 @@
import itertools

import numpy as np
from sympy import latex

__all__ = [
'DimensionMismatchError', 'get_or_create_dimension',
Expand Down Expand Up @@ -337,6 +338,22 @@ def _str_representation(self, python_code=False):
return "1"
return s.strip()

def _latex(self, *args):
parts = []
for i in xrange(len(self._dims)):
if self._dims[i]:
s = _ilabel[i]
if self._dims[i] != 1:
s += '^{%s}' % str(self._dims[i])
parts.append(s)
s = "\,".join(parts)
if not len(s):
return "1"
return s.strip()

def _repr_latex(self):
return '$%s$' % latex(self)

def __repr__(self):
return self._str_representation(python_code=True)

Expand Down Expand Up @@ -1391,12 +1408,22 @@ def __repr__(self):
return self.in_best_unit(python_code=True)

# TODO: Use sympy's _latex method, then latex(unit) should work
def _latex(self, expr):
from sympy import Matrix
best_unit = _get_best_unit(self)
if isinstance(best_unit, Unit):
best_unit_latex = latex(best_unit)
else: # A quantity
best_unit_latex = latex(best_unit.dimensions)
unitless = np.asarray(self / best_unit)
if unitless.ndim == 0:
sympy_quantity = np.float(unitless)
else:
sympy_quantity = Matrix(unitless)
return latex(sympy_quantity) + '\,' + best_unit_latex

def _repr_latex_(self):
from sympy import Matrix, latex
best_unit = _get_best_unit(self)
sympy_matrix = Matrix(np.asarray(self / best_unit))
return '$' + latex(sympy_matrix) + '\,' + best_unit._repr_latex_()[1:]
return '$' + latex(self) + '$'

def __str__(self):
return self.in_best_unit()
Expand Down Expand Up @@ -1763,7 +1790,7 @@ def __str__(self):
else:
return self.dispname

def _repr_latex_(self):
def _latex(self, expr):
if self.latexname == "":
s = r'\mathrm{' + self.scalefactor + "} "
for i in range(7):
Expand All @@ -1774,11 +1801,14 @@ def _repr_latex_(self):
s += " "
s = s.strip()
if not len(s):
return "$1$"
return "1"
else:
return '$' + s + '$'
return s
else:
return '$' + self.latexname + '$'
return self.latexname

def _repr_latex_(self):
return '$' + latex(self) + '$'

#### ARITHMETIC ####
def __mul__(self, other):
Expand Down Expand Up @@ -1816,7 +1846,7 @@ def __div__(self, other):
u.dim = self.dim / other.dim
u.iscompound = True

u.latexname = r'\frac{%s}{%s}' % (u.latexname, other.latexname)
u.latexname = r'\frac{%s}{%s}' % (self.latexname, other.latexname)

return u
else:
Expand All @@ -1834,13 +1864,14 @@ def __pow__(self, other):
if self.iscompound:
u.dispname = '(' + self.dispname + ')'
u.name = '(' + self.name + ')'
u.latexname = r'\left(%s)' % u.latexname
u.latexname = r'\left(%s\right)' % self.latexname
else:
u.dispname = self.dispname
u.name = self.name
u.latexname = self.latexname
u.dispname += '^' + str(other)
u.name += ' ** ' + repr(other)
u.latexname += '^{%s}' % other._repr_latex_()
u.latexname += '^{%s}' % latex(other)
u.dim = self.dim ** other
return u
else:
Expand Down

0 comments on commit a1ea79e

Please sign in to comment.