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);
}
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());
}
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);
}
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));
}
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);
}
Aggregations