Search in sources :

Example 61 with Answer

use of ai.grakn.graql.admin.Answer in project grakn by graknlabs.

the class ReasoningTests method circularRuleDependencies.

// Expected result: The query should return two unique matches
@Test
public void circularRuleDependencies() {
    QueryBuilder qb = testSet12.tx().graql().infer(true);
    String queryString = "match (role1:$x, role2:$y) isa relation3; get;";
    List<Answer> answers = qb.<GetQuery>parse(queryString).execute();
    assertEquals(answers.size(), 2);
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 62 with Answer

use of ai.grakn.graql.admin.Answer in project grakn by graknlabs.

the class ReasoningTests method roleUnificationWithRoleHierarchiesInvolved.

// Expected result: The query should not return any matches (or possibly return a single match with $x=$y)
@Test
public void roleUnificationWithRoleHierarchiesInvolved() {
    QueryBuilder qb = testSet8.tx().graql().infer(true);
    String queryString = "match (role2:$x, role3:$y) isa relation2; get;";
    List<Answer> answers = qb.<GetQuery>parse(queryString).execute();
    assertThat(answers.stream().collect(toSet()), empty());
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 63 with Answer

use of ai.grakn.graql.admin.Answer in project grakn by graknlabs.

the class ReasoningTests method instanceTypeHierarchyRespected_queryHasSuperTypes_recursiveRule.

// Expected result: Two answers obtained only if the rule query containing sub type is correctly executed.
@Test
public void instanceTypeHierarchyRespected_queryHasSuperTypes_recursiveRule() {
    QueryBuilder qb = testSet19recursive.tx().graql().infer(true);
    String queryString = "match " + "$x isa entity1;" + "$y isa entity1;" + "(role1: $x, role2: $y) isa relation1;";
    String queryString2 = queryString + "$y has name 'a';";
    List<Answer> answers = qb.<GetQuery>parse(queryString + " get;").execute();
    assertEquals(answers.size(), 2);
    List<Answer> answers2 = qb.<GetQuery>parse(queryString2 + " get;").execute();
    assertEquals(answers2.size(), 2);
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 64 with Answer

use of ai.grakn.graql.admin.Answer in project grakn by graknlabs.

the class ReasoningTests method recursiveRelationsWithSharedNeqPredicate_relationsAreEquivalent.

/**
 * Tests a scenario in which the neq predicate binds free variables of two recursive equivalent relations.
 * Corresponds to the following pattern:
 *
 *                     x
 *                   /    \
 *                 /        \
 *               v           v
 *              y     !=      z
 */
@Test
public void recursiveRelationsWithSharedNeqPredicate_relationsAreEquivalent() {
    QueryBuilder qb = testSet29.tx().graql().infer(true);
    String baseQueryString = "match " + "(role1: $x, role2: $y) isa binary-base;" + "(role1: $x, role2: $z) isa binary-base;" + "$y != $z;";
    List<Answer> baseAnswers = qb.<GetQuery>parse(baseQueryString + "get;").execute();
    assertEquals(baseAnswers.size(), 18);
    baseAnswers.forEach(ans -> {
        assertEquals(ans.size(), 3);
        assertNotEquals(ans.get("y"), ans.get("z"));
    });
    String queryString = baseQueryString + "$x has name 'a';";
    String explicitString = "match " + "$x has name 'a';" + "{$y has name 'a';$z has name 'b';} or " + "{$y has name 'a';$z has name 'c';} or " + "{$y has name 'b';$z has name 'a';} or" + "{$y has name 'b';$z has name 'c';} or " + "{$y has name 'c';$z has name 'a';} or " + "{$y has name 'c';$z has name 'b';};";
    List<Answer> answers = qb.<GetQuery>parse(queryString + "get;").execute();
    List<Answer> answers2 = qb.infer(false).<GetQuery>parse(explicitString + "get;").execute();
    assertTrue(baseAnswers.containsAll(answers));
    assertTrue(answers.containsAll(answers2));
    assertTrue(answers2.containsAll(answers));
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 65 with Answer

use of ai.grakn.graql.admin.Answer in project grakn by graknlabs.

the class GeoInferenceTest method testTransitiveQuery_withSubstitution.

@Test
public void testTransitiveQuery_withSubstitution() {
    GraknTx graph = geoKB.tx();
    QueryBuilder iqb = graph.graql().infer(true);
    Concept poland = getConcept(graph, "name", "Poland");
    Concept europe = getConcept(graph, "name", "Europe");
    String queryString = "match " + "(geo-entity: $x, entity-location: $y) isa is-located-in;" + "$y id '" + poland.getId().getValue() + "'; get;";
    String queryString2 = "match " + "(geo-entity: $x, entity-location: $y) isa is-located-in;" + "$y id '" + europe.getId().getValue() + "'; get;";
    List<Answer> answers = iqb.materialise(false).<GetQuery>parse(queryString).execute();
    answers.forEach(ans -> assertEquals(ans.size(), 2));
    answers.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), poland.getId().getValue()));
    assertEquals(answers.size(), 6);
    List<Answer> answers2 = iqb.materialise(false).<GetQuery>parse(queryString2).execute();
    answers2.forEach(ans -> assertEquals(ans.size(), 2));
    answers2.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), europe.getId().getValue()));
    assertEquals(answers2.size(), 21);
}
Also used : Concept(ai.grakn.concept.Concept) GraknTx(ai.grakn.GraknTx) Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Aggregations

Answer (ai.grakn.graql.admin.Answer)193 Test (org.junit.Test)164 QueryBuilder (ai.grakn.graql.QueryBuilder)104 GetQuery (ai.grakn.graql.GetQuery)69 GraknTx (ai.grakn.GraknTx)47 QueryAnswer (ai.grakn.graql.internal.query.QueryAnswer)37 Concept (ai.grakn.concept.Concept)32 Var (ai.grakn.graql.Var)21 Set (java.util.Set)21 Unifier (ai.grakn.graql.admin.Unifier)19 MultiUnifier (ai.grakn.graql.admin.MultiUnifier)18 Collectors (java.util.stream.Collectors)18 ReasonerAtomicQuery (ai.grakn.graql.internal.reasoner.query.ReasonerAtomicQuery)17 Sets (com.google.common.collect.Sets)16 List (java.util.List)16 EmbeddedGraknTx (ai.grakn.kb.internal.EmbeddedGraknTx)15 Stream (java.util.stream.Stream)15 VarPatternAdmin (ai.grakn.graql.admin.VarPatternAdmin)14 SampleKBContext (ai.grakn.test.rule.SampleKBContext)14 Pair (ai.grakn.graql.internal.reasoner.utils.Pair)12