コード例 #1
0
 def testFromDict(self):
     d = {
         'tree': {
             'type': 'missing'
         },
         'module': 'foo',
         'measures': {},
         'times': {}
     }
     self.assertEqual(TraceItem.from_dict(d),
                      TraceItem('foo', Missing(), {}, {}))
コード例 #2
0
    def answer(self):
        if not isinstance(self.tree, Sentence):
            return []

        mathNotation = isMath(self.tree.value)
        if mathNotation == 0 or traceContainsSpellChecker(self.trace):
            return []

        try:
            outputString, outputLatex = process(evaluate,
                                                self.tree.value,
                                                timeout=Config().timeout,
                                                heap_size=Config().max_heap)
        except (ValueError, SyntaxError):
            return []

        if not isInteresting(str(self.tree.value),
                             outputString) and mathNotation == 1:
            return []

        outputTree = MathLatexResource(outputString, latex=outputLatex)
        measures = {
            'accuracy': 1,  # Indeed we hope maths are consistent
            'relevance': relevance(self.tree.value, outputString)
        }
        trace = self.trace + [TraceItem('CAS', outputTree, measures)]
        response = Response(self.language, outputTree, measures, trace)
        return [response]
コード例 #3
0
def my_module2_mock(url, request):
    body = Request.from_json(request.body)
    m = {'relevance': 0.3, 'accuracy': 1}
    response = Response('en', body.tree, m,
                        [TraceItem('module2', body.tree, m)])
    return {'status_code': 200,
            'content': '[%s]' % response.as_json()}
コード例 #4
0
 def testQueriesMultipleModule(self):
     self.config_file.write(three_modules_config)
     self.config_file.seek(0)
     q = Request('1', 'en', Missing(), {}, [])
     m1 = {'relevance': 0.5, 'accuracy': 0.5}
     m2 = {'relevance': 0.3, 'accuracy': 1}
     m3 = {'relevance': 0.55, 'accuracy': 0.5}
     with HTTMock(my_module_mock, my_module2_mock, my_module3_mock):
         self.assertResponse(q, [
             Response('en', Missing(), m3,
                      [TraceItem('module3', Missing(), m3)]),
             Response('en', Missing(), m1,
                      [TraceItem('module1', Missing(), m1)]),
             Response('en', Missing(), m2,
                      [TraceItem('module2', Missing(), m2)]),
             ])
コード例 #5
0
 def testFromJson(self):
     r = {
         'language':
         'en',
         'measures': {},
         'trace': [{
             'module': 'foo',
             'tree': {
                 'type': 'missing'
             },
             'measures': {},
             'times': {}
         }],
         'tree': {
             'type': 'resource',
             'value': 'foo'
         }
     }
     t = [TraceItem('foo', Missing(), {}, {})]
     self.assertEqual(Response('en', Resource(value='foo'), {}, t),
                      Response.from_json(json.dumps(r)))
     self.assertEqual(Response('en', Resource(value='foo'), {}, t),
                      Response.from_dict(r))
     self.assertEqual(Response('en', Resource(value='foo'), {}, t),
                      Response.from_json(json.dumps(r)))
     self.assertEqual(json.loads(Response.from_dict(r).as_json()), r)
コード例 #6
0
 def testQueriesMultipleModuleWithFail(self):
     self.config_file.write(one_valid_module_config)
     self.config_file.seek(0)
     q = Request('1', 'en', Missing(), {}, [])
     m = {'relevance': 0.5, 'accuracy': 0.5}
     with HTTMock(my_module_mock, my_module4_mock):
         self.assertResponse(q, [
             Response('en', Missing(), m,
                      [TraceItem('module1', Missing(), m)])])
コード例 #7
0
 def testWorking(self):
     t = T(M(), M(), M())
     q = {
         'id': '1',
         'language': 'en',
         'tree': t.as_dict(),
         'measures': {},
         'trace': []
     }
     self.assertResponse(
         q,
         [Response('en', R('bar'), {}, [TraceItem('test', R('bar'), {})])])
コード例 #8
0
 def testQueriesModule(self):
     self.config_file.write(one_module_config)
     self.config_file.seek(0)
     q = {'id': '1', 'language': 'en', 'tree': {'type': 'triple',
          'subject': {'type': 'resource', 'value': 'foo'},
          'predicate': {'type': 'resource', 'value': 'bar'},
          'object': {'type': 'resource', 'value': 'baz'}},
          'measures': {}, 'trace': []}
     m = {'relevance': 0.5, 'accuracy': 0.5}
     with HTTMock(my_module_mock):
         self.assertResponse(q, [
             Response('en', Missing(), m,
                      [TraceItem('module1', Missing(), m)])])
コード例 #9
0
 def answer(self):
     if not isinstance(self.request.tree, Sentence) or \
             self.request.language != 'en':
         return []
     sentence = self.request.tree.value
     try:
         tree = parse(sentence)
     except QuotationError:  # no logging, the error is between the chair and the keyboard
         return []
     except KeyboardInterrupt:
         raise
     except Exception as e:
         logging.warning(e)
         return []
     if isinstance(tree, (Resource, List)):
         return []
     meas = {'accuracy': 0.5, 'relevance': 0.5}
     trace = self.request.trace + [
         TraceItem('QuestionParsing-Grammatical', tree, meas)
     ]
     response = Response('en', tree, meas, trace)
     return [response]
コード例 #10
0
 def testFromDict(self):
     d = {'tree': {'type': 'missing'}, 'module': 'foo', 'measures': {}, 'times': {}}
     self.assertEqual(TraceItem.from_dict(d),
             TraceItem('foo', Missing(), {}, {}))
コード例 #11
0
 def testLegacyTraceItem(self):
     self.assertEqual(TraceItem('foo', Resource(value='bar'), {}),
                      TraceItem('foo', Resource(value='bar'), {}, {}))
コード例 #12
0
def build_answer(request, tree, measures, module_name):
    trace = request.trace + [TraceItem(module_name, tree, measures, {})]
    return Response(request.language, tree, measures, trace)