diff --git a/mapytex/calculus/API/expression.py b/mapytex/calculus/API/expression.py index 1403004..bc897d0 100644 --- a/mapytex/calculus/API/expression.py +++ b/mapytex/calculus/API/expression.py @@ -13,7 +13,7 @@ Expression from ..core import AssocialTree, Tree, compute, typing, TypingError from ..core.random import extract_rdleaf, extract_rv, random_generator, compute_leafs, replace_rdleaf from ..core.MO import moify -from .tokens import factory, Token +from .tokens import factory from .renders import renders @@ -73,6 +73,7 @@ class Expression(object): \\frac{11}{4} >>> Expression.set_render('txt') """ + from .tokens.token import Token Token.set_render(render) cls.RENDER = render diff --git a/mapytex/calculus/API/tokens/__init__.py b/mapytex/calculus/API/tokens/__init__.py index 49b796b..7163976 100644 --- a/mapytex/calculus/API/tokens/__init__.py +++ b/mapytex/calculus/API/tokens/__init__.py @@ -16,11 +16,6 @@ from ...core.MO.monomial import MOstrPower, MOMonomial from ...core.MO.polynomial import MOpolynomial from decimal import Decimal as _Decimal -from .number import Integer, Decimal, Fraction -from .polynomial import Polynomial, Linear, Quadratic - -from .token import Token - __all__ = ["factory"] @@ -63,8 +58,10 @@ def factory(exp, name="", ancestor=None): if isinstance(mo, MOnumber): if isinstance(mo.value, int): + from .number import Integer return Integer.from_mo(mo, name, ancestor) elif isinstance(mo.value, _Decimal): + from .number import Decimal return Decimal.from_mo(mo, name, ancestor) raise TypeError(f"Can't build from MOnumber ({mo}) neither int nor decimal") @@ -73,6 +70,7 @@ def factory(exp, name="", ancestor=None): if isinstance(mo._denominator, MOnumber) and isinstance( mo._numerator, MOnumber ): + from .number import Fraction return Fraction.from_mo(mo, name, ancestor) raise TypeError( @@ -89,14 +87,17 @@ def factory(exp, name="", ancestor=None): or (isinstance(mo, MOMonomial) and mo.power.value == 1) or (isinstance(mo, MOpolynomial) and mo.power.value == 1) ): + from .polynomial import Linear return Linear.from_mo(mo, name, ancestor) elif ( (isinstance(mo, MOstrPower) and mo.power.value == 2) or (isinstance(mo, MOMonomial) and mo.power.value == 2) or (isinstance(mo, MOpolynomial) and mo.power.value == 2) ): + from .polynomial import Quadratic return Quadratic.from_mo(mo, name, ancestor) else: + from .polynomial import Polynomial return Polynomial.from_mo(mo, name, ancestor) else: