コード例 #1
0
    def testTraverse(self):
        def pred(tree):
            if isinstance(tree, Resource):
                return Resource('foo')
            elif isinstance(tree, Triple):
                return Triple(tree.subject, Resource('bar'), tree.object)
            elif isinstance(tree, Missing):
                return Resource('m')
            else:
                return tree

        f = Resource('foo')
        b = Resource('bar')
        m = Resource('m')
        self.assertEqual(Resource('baz').traverse(pred), f)
        tree = Triple(Resource('1'), Resource('2'), Missing())
        self.assertEqual(tree.traverse(pred), Triple(f, b, m))
        tree = List([Resource('4'), Resource('5')])
        self.assertEqual(tree.traverse(pred), List([f, f]))
        tree = Triple(Triple(Resource('1'), Resource('2'), Missing()),
                      Resource('3'), List([Resource('4'),
                                           Resource('5')]))
        self.assertEqual(tree.traverse(pred),
                         Triple(Triple(f, b, m), b, List([
                             f,
                             f,
                         ])))
        tree = Union([List([Resource('1')]), List([Resource('2')])])
        self.assertEqual(tree.traverse(pred), Union([List([f]), List([f])]))
        tree = Intersection([List([Resource('1')]), List([Resource('2')])])
        self.assertEqual(tree.traverse(pred),
                         Intersection([List([f]), List([f])]))
コード例 #2
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)])])
コード例 #3
0
 def pred(node):
     if isinstance(node, Exists):
         return Resource('qux')
     elif isinstance(node, List):
         return Triple(Resource('baz'), Missing(), Missing())
     elif isinstance(node, Resource):
         return Resource('bar')
     else:
         assert False, node
コード例 #4
0
 def testInclusionTriple(self):
     tree1 = Triple(Resource('foo'), List([Resource('a'),
                                           Resource('b')]), Missing())
     tree2 = Triple(List([Resource('bar'), Resource('foo')]),
                    List([Resource('a'),
                          Resource('d'),
                          Resource('b')]), Missing())
     self.assertIncluded(tree1, tree2)
     with self.assertRaises(AssertionError):
         self.assertIncluded(tree2, tree1)
コード例 #5
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)])])
コード例 #6
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)
コード例 #7
0
 def testNoDuplicate(self):
     q = Request('1', 'en', Missing(), {}, [])
     with HTTMock(my_module3_mock, my_module3b_mock):
         answers = self.request(q)
         self.assertNotEqual(len(answers), 20, answers)
         self.assertNotEqual(len(answers), 10, answers)
         self.assertNotEqual(len(answers), 2, answers)
         self.assertEqual(len(answers), 1, answers)
コード例 #8
0
ファイル: test_definition.py プロジェクト: ProjetPP/PPP-OEIS
 def testMultiplePredicates(self):
     q = Request(
         '1', 'en',
         Triple(Resource('1 2 4 8'),
                List([Resource('definition'),
                      Resource('foo')]), Missing()), {}, [])
     r = self.request(q)
     self.assertGreater(len(r), 1, r)
コード例 #9
0
 def testToJsonNone(self):
     n = Triple(subject=R('s'), predicate=R('p'), object=Missing())
     self.assertEqual(
         json.loads(n.as_json()), {
             'type': 'triple',
             'subject': r('s'),
             'predicate': r('p'),
             'object': m()
         })
コード例 #10
0
ファイル: test_filters.py プロジェクト: Python3pkg/PPP-Core
 def testBlacklist(self):
     with HTTMock(my_module1_mock, my_module2_mock):
         q = Request('1', 'en', Sentence('foo'), {}, [])
         answers = self.request(q)
         self.assertEqual(len(answers), 2, answers)
         q = Request('1', 'en', Missing(), {}, [])
         answers = self.request(q)
         self.assertEqual(len(answers), 1, answers)
         self.assertEqual(answers[0].tree.value, 'one')
コード例 #11
0
 def testInclusionIntersectionUnionAndOr(self):
     tree1 = Triple(Resource('foo'), List([Resource('a'),
                                           Resource('b')]), Missing())
     tree2 = Triple(List([Resource('bar'), Resource('foo')]),
                    List([Resource('a'),
                          Resource('d'),
                          Resource('b')]), Missing())
     tree3 = Missing()
     for op in [Intersection, Union, And, Or]:
         self.assertIncluded(op([tree1]), op([tree2]))
         with self.assertRaises(AssertionError):
             self.assertIncluded(op([tree2]), op([tree1]))
         self.assertIncluded(op([tree1, tree3]), op([tree1, tree3]))
         self.assertIncluded(op([tree1, tree3]), op([tree3, tree1]))
         with self.assertRaises(AssertionError):
             self.assertIncluded(op([tree1, tree3]), op([tree1]))
         with self.assertRaises(AssertionError):
             self.assertIncluded(op([tree1]), op([tree3]))
コード例 #12
0
 def testInclusionFirstLastSort(self):
     tree1 = Triple(Resource('foo'), List([Resource('a'),
                                           Resource('b')]), Missing())
     tree2 = Triple(List([Resource('bar'), Resource('foo')]),
                    List([Resource('a'),
                          Resource('d'),
                          Resource('b')]), Missing())
     for op in (last, first):
         self.assertIncluded(op(tree1), op(tree2))
         with self.assertRaises(AssertionError):
             self.assertIncluded(op(tree2), op(tree1))
     self.assertIncluded(Sort(tree1, Resource('pred')),
                         Sort(tree2, Resource('pred')))
     with self.assertRaises(AssertionError):
         self.assertIncluded(Sort(tree2, Resource('pred')),
                             Sort(tree1, Resource('pred')))
     with self.assertRaises(AssertionError):
         self.assertIncluded(Sort(tree1, Resource('pred')),
                             Sort(tree2, Resource('derp')))
コード例 #13
0
 def testInclusionDifferentType(self):
     l = [Resource('foo'), Missing(), Triple(Resource('foo'),
         Resource('foo'), Resource('foo')),\
         Intersection([Resource('foo')]), Union([Resource('foo')]),\
         And([Resource('foo')]), Or([Resource('foo')]),
         Exists(Resource('foo')), first(Resource('foo')),
         last(Resource('foo')), Sort(Resource('foo'), Resource('pred'))]
     for (t1, t2) in itertools.permutations(l, 2):
         with self.assertRaises(AssertionError):
             self.assertFalse(self.assertIncluded(t1, t2))
コード例 #14
0
ファイル: test_definition.py プロジェクト: ProjetPP/PPP-OEIS
 def testBasics(self):
     q = Request(
         '1', 'en',
         Triple(Resource('1 2 4 8'), Resource('definition'), Missing()), {},
         [])
     r = self.request(q)
     self.assertGreater(len(r), 1, r)
     self.assertEqual(r[0].tree.value, 'Powers of 2: a(n) = 2^n.')
     self.assertEqual(r[0].tree.graph['name'], 'Powers of 2: a(n) = 2^n.')
     self.assertEqual(r[0].tree.graph['@id'], 'http://oeis.org/A000079')
コード例 #15
0
 def testFromDict(self):
     d = {
         'tree': {
             'type': 'missing'
         },
         'module': 'foo',
         'measures': {},
         'times': {}
     }
     self.assertEqual(TraceItem.from_dict(d),
                      TraceItem('foo', Missing(), {}, {}))
コード例 #16
0
 def testInclusionBasic(self):
     self.assertIncluded(Missing(), Missing())
     self.assertIncluded(Resource('foo'), Resource('foo'))
     with self.assertRaises(AssertionError):
         self.assertIncluded(Resource('foo'), Resource('bar'))
     self.assertIncluded(List([Resource('foo')]), Resource('foo'))
     with self.assertRaises(AssertionError):
         self.assertIncluded(List([Resource('foo')]), Resource('bar'))
     self.assertIncluded(Resource('foo'), List([Resource('foo')]))
     with self.assertRaises(AssertionError):
         self.assertIncluded(Resource('foo'), List([Resource('bar')]))
     self.assertIncluded(List([Resource('foo')]), List([Resource('foo')]))
     with self.assertRaises(AssertionError):
         self.assertIncluded(List([Resource('foo')]),
                             List([Resource('bar')]))
     self.assertIncluded(List([Resource('foo')]),
                         List([Resource('foo'),
                               Resource('bar')]))
     with self.assertRaises(AssertionError):
         self.assertIncluded(List([Resource('foo'),
                                   Resource('bar')]),
                             List([Resource('foo')]))
コード例 #17
0
def normalize(tree):
    """
        Map the tree to a normal form
    """
    if tree.child == []:  # leaf
        return buildValue(tree)
    if tree.child[0].dependency == 'Rexist':
        return Exists(normalize(tree.child[0]))
    if tree.child[0].dependency == 'Rspl':
        return normalizeSuperlative(tree)
    if tree.child[0].dependency.startswith('Rconj'):
        return normalizeConjunction(tree)
    result = []
    for t in tree.child:
        if t.dependency == 'R0':
            result.append(normalize(t))
        if t.dependency == 'R1':
            result.append(buildValue(t))
        if t.dependency == 'R2':
            pred = buildPredicate(tree)
            if pred[1]:
                result.append(Triple(normalize(t), pred[0], Missing(),
                                     pred[1]))
            else:
                result.append(Triple(normalize(t), pred[0], Missing()))
        if t.dependency == 'R3':
            pred = buildPredicate(tree)
            if pred[1]:
                result.append(Triple(Missing(), pred[0], normalize(t),
                                     pred[1]))
            else:
                result.append(Triple(Missing(), pred[0], normalize(t)))
        if t.dependency == 'RinstOf':
            result.append(
                Triple(Missing(), Resource('instance of'), normalize(t)))
    if len(result) == 1:
        return result[0]
    else:
        return Intersection(result)
コード例 #18
0
 def testEq(self):
     self.assertEqual(Missing(), Missing())
     self.assertEqual(Resource('foo'), Resource('foo'))
     self.assertNotEqual(Missing(), Resource('foo'))
     self.assertEqual(Missing(), {'type': 'missing'})
     self.assertNotEqual(Missing(), {'type': 'missing', 'f': 'b'})
     self.assertEqual(Resource('foo'), {'type': 'resource', 'value': 'foo'})
     self.assertNotEqual(Missing(), '')
コード例 #19
0
 def testBasics(self):
     q = Request(
         '1', 'en',
         Triple(Resource('1 2 4 8'), Resource('following'), Missing()), {},
         [])
     r = self.request(q)
     self.assertGreater(len(r), 1, r)
     self.assertTrue(r[0].tree.value.startswith('16, 32, 64'), r[0])
     self.assertEqual(r[0].tree.graph['name'], 'Powers of 2: a(n) = 2^n.')
     self.assertEqual(r[0].tree.graph['@id'], 'http://oeis.org/A000079')
     self.assertEqual(r[0].tree.graph['description'][0], {
         '@value': '2^0 = 1 is the only odd power of 2.',
         '@language': 'en'
     })
コード例 #20
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)]),
             ])
コード例 #21
0
 def testTripleIntersection(self):
     t = Intersection([
         Triple(Resource('a'), Resource('b'), Missing()),
         Triple(Resource('c'), Resource('d'), Missing())
     ])
     AbstractNode.from_dict(t.as_dict())
コード例 #22
0
ファイル: test_definition.py プロジェクト: ProjetPP/PPP-OEIS
 def testNoAnswer(self):
     q = Request('1', 'en',
                 Triple(Resource('1 2'), Resource('definition'), Missing()),
                 {}, [])
     r = self.request(q)
     self.assertEqual(r, [])