answerer.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # pylint: disable=missing-module-docstring
  3. from functools import reduce
  4. from operator import mul
  5. from flask_babel import gettext
  6. keywords = ('min', 'max', 'avg', 'sum', 'prod')
  7. # required answerer function
  8. # can return a list of results (any result type) for a given query
  9. def answer(query):
  10. parts = query.query.split()
  11. if len(parts) < 2:
  12. return []
  13. try:
  14. args = list(map(float, parts[1:]))
  15. except: # pylint: disable=bare-except
  16. return []
  17. func = parts[0]
  18. _answer = None
  19. if func == 'min':
  20. _answer = min(args)
  21. elif func == 'max':
  22. _answer = max(args)
  23. elif func == 'avg':
  24. _answer = sum(args) / len(args)
  25. elif func == 'sum':
  26. _answer = sum(args)
  27. elif func == 'prod':
  28. _answer = reduce(mul, args, 1)
  29. if _answer is None:
  30. return []
  31. return [{'answer': str(_answer)}]
  32. # required answerer function
  33. # returns information about the answerer
  34. def self_info():
  35. return {
  36. 'name': gettext('Statistics functions'),
  37. 'description': gettext('Compute {functions} of the arguments').format(functions='/'.join(keywords)),
  38. 'examples': ['avg 123 548 2.04 24.2'],
  39. }