answerer.py 1.1 KB

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