From 78ce8f767a79448bdda3c4c94e79de48548df456 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Sat, 25 Sep 2021 18:05:05 +0200 Subject: [PATCH] Fix: fraction rendering --- mapytex/__init__.py | 2 +- mapytex/calculus/API/__init__.py | 2 +- mapytex/calculus/API/renders.py | 4 ++++ mapytex/calculus/API/tokens/number.py | 2 +- mapytex/calculus/API/tokens/token.py | 10 +++++++-- mapytex/calculus/__init__.py | 2 +- test/__init__.py | 0 test/calculus/core/test_render.py | 31 +++++++++++++++++++++++++++ 8 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 test/__init__.py create mode 100644 test/calculus/core/test_render.py diff --git a/mapytex/__init__.py b/mapytex/__init__.py index 1d83226..540c8ff 100644 --- a/mapytex/__init__.py +++ b/mapytex/__init__.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # encoding: utf-8 -from .calculus import Expression, Integer, Decimal, random_list, render, Polynomial +from .calculus import Expression, Integer, Decimal, random_list, render, Polynomial, Fraction # Expression.set_render('tex') diff --git a/mapytex/calculus/API/__init__.py b/mapytex/calculus/API/__init__.py index 572d097..ba5d25c 100644 --- a/mapytex/calculus/API/__init__.py +++ b/mapytex/calculus/API/__init__.py @@ -123,11 +123,11 @@ x^7 - 2x^2 + 7x - 6 """ +from .renders import render from .expression import Expression from .tokens import Token from .tokens.polynomial import Polynomial from .tokens.number import Integer, Decimal, Fraction -from .renders import render if __name__ == "__main__": diff --git a/mapytex/calculus/API/renders.py b/mapytex/calculus/API/renders.py index 42569b6..4c218e6 100644 --- a/mapytex/calculus/API/renders.py +++ b/mapytex/calculus/API/renders.py @@ -29,6 +29,10 @@ class Render(object): else: raise ValueError("This render name already exists") + @property + def render_name(self): + return self._render + @property def render(self): return self.renders[self._render] diff --git a/mapytex/calculus/API/tokens/number.py b/mapytex/calculus/API/tokens/number.py index e8fa653..030f8cb 100644 --- a/mapytex/calculus/API/tokens/number.py +++ b/mapytex/calculus/API/tokens/number.py @@ -141,7 +141,7 @@ class Decimal(Token): class Fraction(Token): - """ Token representing a fraction + """ Token representing a fraction of numbers :example: >>> Fraction("3/4") diff --git a/mapytex/calculus/API/tokens/token.py b/mapytex/calculus/API/tokens/token.py index ae99f47..2bb6380 100644 --- a/mapytex/calculus/API/tokens/token.py +++ b/mapytex/calculus/API/tokens/token.py @@ -54,10 +54,16 @@ class Token(object): yield self def __repr__(self): - return f"<{self.__class__.__name__} {render(self._mo, 'txt')}>" + try: + return f"<{self.__class__.__name__} {render(self._mo._tree, 'txt')}>" + except AttributeError: + return f"<{self.__class__.__name__} {render(self._mo, 'txt')}>" def __str__(self): - return render(self._mo) + try: + return render(self._mo._tree) + except AttributeError: + return render(self._mo) @property def raw(self): diff --git a/mapytex/calculus/__init__.py b/mapytex/calculus/__init__.py index a81db68..2566253 100644 --- a/mapytex/calculus/__init__.py +++ b/mapytex/calculus/__init__.py @@ -30,7 +30,7 @@ Expression is the classe wich handle all calculus. It can randomly generate or i """ -from .API import Expression, Integer, Decimal, render, Polynomial +from .API import Expression, Integer, Decimal, render, Polynomial, Fraction from .core import random_list from decimal import getcontext #getcontext().prec = 2 diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/calculus/core/test_render.py b/test/calculus/core/test_render.py new file mode 100644 index 0000000..e0a5f35 --- /dev/null +++ b/test/calculus/core/test_render.py @@ -0,0 +1,31 @@ +import mapytex + +def test_default_render(): + assert mapytex.render.render_name == "txt" + +def test_default_rending(): + e = mapytex.Expression("2*3") + assert str(e) == "2*3" + +def test_changing_render(): + assert mapytex.render.render_name == "txt" + mapytex.render.set_render("tex") + assert mapytex.render.render_name == "tex" + mapytex.render.set_render("txt") + assert mapytex.render.render_name == "txt" + + +def test_changing_rending(): + e = mapytex.Expression.from_str("2*3") + f = mapytex.Fraction("2/3") + assert str(e) == "2 * 3" + assert str(f) == "2 / 3" + mapytex.render.set_render("tex") + assert str(e) == "2 \\times 3" + assert str(f) == "\\dfrac{2}{3}" + mapytex.render.set_render("txt") + assert str(e) == "2 * 3" + assert str(f) == "2 / 3" + + +