# vim: set fileencoding=utf-8 : - Fix BisonSyntaxError location tracking. - Sort polynom by its exponents? - Fix division by zero caused by "0/0": Catch exception in front-end smvv@multivac ~/work/trs $ printf "a/0\n??" | ./main.py Traceback (most recent call last): File "./main.py", line 75, in main() File "./main.py", line 64, in main node = p.run(debug=args.debug) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run self.report_last_error(filename, e) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run self.engine.runEngine(debug) File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592) File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler possibilities = handler(retval) File "/home/smvv/work/trs/src/rules/fractions.py", line 23, in match_constant_division raise ZeroDivisionError('Division by zero: %s.' % node) ZeroDivisionError: Division by zero: a / 0. smvv@multivac ~/work/trs $ printf "0/0\n??" | ./main.py Traceback (most recent call last): File "./main.py", line 75, in main() File "./main.py", line 64, in main node = p.run(debug=args.debug) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run self.report_last_error(filename, e) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run self.engine.runEngine(debug) File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592) File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler possibilities = handler(retval) File "/home/smvv/work/trs/src/rules/numerics.py", line 73, in match_divide_numerics divide = not divmod(n.value, dv)[1] ZeroDivisionError: integer division or modulo by zero - Last possibilities reduce to a similar result. smvv@multivac ~/work/trs $ printf "0/1\n??" | ./main.py Division of 0 by 1 reduces to 0. Division of 0 by 1 reduces to 0. - ExpressionNode.equals() werkend maken voor alle cases (negatie). - validation: preorder traversal implementatie vergelijken met andere implementaties. - No matches for sin(pi), sin(2pi), sin(4pi), etc... - Create unit tests for node inequivalence operator. - Line printer: 1 / (n + n)x -> 1 / (n + n) * x - Parser: 'apia' -> 'aa' - Unit tests for strategy. - Parser: add unit tests for operator associativity (derivatives/integrals). - Modules: + Equations with substitution + Sort + Gonio - Add parentheses to integral bounds where needed: int_(-1)^2 ... dx or, fix parser error using the following notation: int_-1^2 ... dx - Base hint selection on the desired final expression. To generate a hint for expression list A, ..., B: 1. Create a possibility tree for A. 2. Validate all expressions up to B: set ROOT = A for each expression C in b: Apply reductions to a to obtain A, this costs N steps. Apply reductions to b to obtain B, this costs M steps. if A != B, validation fails (return status 0) else if M >= N, the uses has done a useless or bad step (return status 1) otherwise (if M < N), the user has reduced the expression correctly (return status 2)