#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2017 lafrite # # Distributed under terms of the MIT license. """ Tokens: practical envelop of math object """ from ..renders import renders class Token(object): """ Token: practical envelop of an math object """ RENDER = 'txt' def __init__(self, mo, name="", ancestor = None): self._mo = mo self.name = name self._mathtype = None self._ancestor = ancestor @classmethod def random(cls): raise NotImplemented def explain(self): """ Yield every calculus step which have lead to self :example: >>> from mapytex.calculus.API import Expression >>> e = Expression.from_str("2+3*4") >>> f = e.simplify() >>> f >>> for s in f.explain(): ... print(s) 2 + 3 * 4 2 + 12 14 """ try: yield from self._ancestor.explain() yield self except AttributeError: yield self def __repr__(self): return f"<{self.__class__.__name__} {self.__txt__}>" def __str__(self): return renders[self.RENDER](self._mo) @property def __txt__(self): return self._mo.__txt__ @property def __tex__(self): return self._mo.__tex__ # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: # cursor: 16 del