TODO 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # vim: set fileencoding=utf-8 :
  2. - Fix BisonSyntaxError location tracking.
  3. - Sort polynom by its exponents?
  4. - Fix division by zero caused by "0/0": Catch exception in front-end
  5. smvv@multivac ~/work/trs $ printf "a/0\n??" | ./main.py
  6. Traceback (most recent call last):
  7. File "./main.py", line 75, in <module>
  8. main()
  9. File "./main.py", line 64, in main
  10. node = p.run(debug=args.debug)
  11. File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run
  12. self.report_last_error(filename, e)
  13. File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run
  14. self.engine.runEngine(debug)
  15. File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592)
  16. File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler
  17. possibilities = handler(retval)
  18. File "/home/smvv/work/trs/src/rules/fractions.py", line 23, in match_constant_division
  19. raise ZeroDivisionError('Division by zero: %s.' % node)
  20. ZeroDivisionError: Division by zero: a / 0.
  21. smvv@multivac ~/work/trs $ printf "0/0\n??" | ./main.py
  22. Traceback (most recent call last):
  23. File "./main.py", line 75, in <module>
  24. main()
  25. File "./main.py", line 64, in main
  26. node = p.run(debug=args.debug)
  27. File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run
  28. self.report_last_error(filename, e)
  29. File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run
  30. self.engine.runEngine(debug)
  31. File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592)
  32. File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler
  33. possibilities = handler(retval)
  34. File "/home/smvv/work/trs/src/rules/numerics.py", line 73, in match_divide_numerics
  35. divide = not divmod(n.value, dv)[1]
  36. ZeroDivisionError: integer division or modulo by zero
  37. - Last possibilities reduce to a similar result.
  38. smvv@multivac ~/work/trs $ printf "0/1\n??" | ./main.py
  39. <Possibility root="0 / 1" handler=divide_numerics args=(0, 1)>
  40. Division of 0 by 1 reduces to 0.
  41. Division of 0 by 1 reduces to 0.
  42. - ExpressionNode.equals() werkend maken voor alle cases (negatie).
  43. - validation: preorder traversal implementatie vergelijken met andere
  44. implementaties.
  45. - No matches for sin(pi), sin(2pi), sin(4pi), etc...
  46. - Create unit tests for node inequivalence operator.
  47. - Line printer: 1 / (n + n)x -> 1 / (n + n) * x
  48. - Parser: 'apia' -> 'aa'
  49. - Unit tests for strategy.
  50. - MESSAGES needs to be expanded.
  51. - Use pretty-print for expressions in hint messages.
  52. - Parser: add unit tests for operator associativity (derivatives/integrals).
  53. - Modules:
  54. + Equations with substitution
  55. + Sort
  56. + Gonio
  57. - Add parentheses to integral bounds where needed:
  58. int_(-1)^2 ... dx
  59. or, fix parser error using the following notation:
  60. int_-1^2 ... dx
  61. - Frontend: implicit rules are applied after expicit ones, but are still
  62. printed separately. This yields multiple successive occurences of the same
  63. expression.
  64. - Base hint selection on the desired final expression.
  65. To generate a hint for expression list A, ..., B:
  66. 1. Create a possibility tree for A.
  67. 2. Validate all expressions up to B:
  68. set root node = A
  69. for each expression C in <A, B] do:
  70. if final answer of C is not equal to final answer of A:
  71. validation failes at c
  72. find C in the possibility tree, traversing from the root node
  73. if not found:
  74. validation continues, but generate an efficiency warning at C
  75. # FIXME: validation fails at C?
  76. set root node = C
  77. 3. Generate a hint:
  78. # root node should now be equal to B, so lookup of B is unnecessary
  79. set N = empty dictionary
  80. for each possibility of the current root P node do:
  81. evaluate P(B) until the final expression of A is reached
  82. set N[P] = the number of explicit possibilities that have been applied in the evaluation
  83. the hint is that P for which the value of N[P] the smallest
  84. - Optimization: put possibility tree in hashmap: {'expression': [(handler, args, 'applied_expression')], ...}
  85. This hashmap can be used to speedup the calculation of possbility trees.