diff --git a/pymath/calculus/explicable.py b/pymath/calculus/explicable.py index 03e939f..8a99c57 100644 --- a/pymath/calculus/explicable.py +++ b/pymath/calculus/explicable.py @@ -19,11 +19,13 @@ class Explicable(Renderable): def __init__(self, *args, **kwargs): super(Explicable, self).__init__() self.steps = [] + self.explainator = 0 - def explain(self, noself=True): + def explain(self): r""" Generate and render steps which leed to itself - :param noself: does explain return self + After beening explained, the Explicable become amnesiac. + See 'history_generator' to explain it once again. >>> action = Explicable() >>> from .expression import Expression @@ -34,10 +36,38 @@ class Explicable(Renderable): 2 + 10 \times 4 2 + 40 42 + >>> # Now action is amnesiac + >>> for i in action.explain(): + ... print(i) + """ + if not self.explainator: + self.explainator = self.history_generator() + + return self.explainator + + def history_generator(self): + r""" Generator for rendered steps which leed to itself + + This is the called method in explain which create the generator. + It create a new generator at each call. + + >>> action = Explicable() + >>> from .expression import Expression + >>> action.postfix_tokens = Expression('42') + >>> action.this_append_before([Expression('2+10*4'), Expression('2+40')]) + >>> for i in action.history_generator(): + ... print(i) + 2 + 10 \times 4 + 2 + 40 + 42 + >>> for i in action.history_generator(): + ... print(i) + 2 + 10 \times 4 + 2 + 40 + 42 """ old_s = '' - # les étapes pour l'atteindre try: for s in self.steps: try: @@ -52,11 +82,10 @@ class Explicable(Renderable): except AttributeError: pass - if noself: - # Lui même - new_s = self.STR_RENDER(self.postfix_tokens) - if not self.is_same_step(new_s, old_s): - yield new_s + # if noself: + new_s = self.STR_RENDER(self.postfix_tokens) + if not self.is_same_step(new_s, old_s): + yield new_s def is_same_step(self, new, old): """Return whether the new step is the same than old step