use of ai.grakn.graql.internal.query.QueryAnswer in project grakn by graknlabs.
the class ExplanationTest method testExplanationTreeCorrect_TransitiveClosureWithSpecificResourceAndTypes.
@Test
public void testExplanationTreeCorrect_TransitiveClosureWithSpecificResourceAndTypes() {
String queryString = "match $x isa university;" + "(geo-entity: $x, entity-location: $y) isa is-located-in;" + "$y isa country;$y has name 'Poland'; get;";
Answer answer1 = new QueryAnswer(ImmutableMap.of(var("x"), polibuda, var("y"), poland));
Answer answer2 = new QueryAnswer(ImmutableMap.of(var("x"), uw, var("y"), poland));
List<Answer> answers = iqb.<GetQuery>parse(queryString).execute();
testExplanation(answers);
Answer queryAnswer1 = findAnswer(answer1, answers);
Answer queryAnswer2 = findAnswer(answer2, answers);
assertEquals(queryAnswer1, answer1);
assertEquals(queryAnswer2, answer2);
assertTrue(queryAnswer1.getExplanation().isJoinExplanation());
assertTrue(queryAnswer2.getExplanation().isJoinExplanation());
// (res), (uni, ctr) - (region, ctr)
// - (uni, region) - {(city, region), (uni, city)
assertEquals(queryAnswer1.getPartialAnswers().size(), 6);
assertEquals(queryAnswer2.getPartialAnswers().size(), 6);
assertEquals(4, getLookupExplanations(queryAnswer1).size());
assertEquals(4, queryAnswer1.getExplicitPath().size());
assertEquals(4, getLookupExplanations(queryAnswer2).size());
assertEquals(4, queryAnswer2.getExplicitPath().size());
}
use of ai.grakn.graql.internal.query.QueryAnswer in project grakn by graknlabs.
the class ExplanationTest method testExplanationTreeCorrect_TransitiveClosure.
@Test
public void testExplanationTreeCorrect_TransitiveClosure() {
String queryString = "match (geo-entity: $x, entity-location: $y) isa is-located-in; get;";
Answer answer1 = new QueryAnswer(ImmutableMap.of(var("x"), polibuda, var("y"), warsaw));
Answer answer2 = new QueryAnswer(ImmutableMap.of(var("x"), polibuda, var("y"), masovia));
Answer answer3 = new QueryAnswer(ImmutableMap.of(var("x"), polibuda, var("y"), poland));
Answer answer4 = new QueryAnswer(ImmutableMap.of(var("x"), polibuda, var("y"), europe));
List<Answer> answers = iqb.<GetQuery>parse(queryString).execute();
testExplanation(answers);
Answer queryAnswer1 = findAnswer(answer1, answers);
Answer queryAnswer2 = findAnswer(answer2, answers);
Answer queryAnswer3 = findAnswer(answer3, answers);
Answer queryAnswer4 = findAnswer(answer4, answers);
assertEquals(queryAnswer1, answer1);
assertEquals(queryAnswer2, answer2);
assertEquals(queryAnswer3, answer3);
assertEquals(queryAnswer4, answer4);
assertEquals(queryAnswer1.getPartialAnswers().size(), 1);
assertEquals(queryAnswer2.getPartialAnswers().size(), 3);
assertEquals(queryAnswer3.getPartialAnswers().size(), 5);
assertEquals(queryAnswer4.getPartialAnswers().size(), 7);
assertTrue(queryAnswer1.getExplanation().isLookupExplanation());
assertTrue(queryAnswer2.getExplanation().isRuleExplanation());
assertEquals(2, getLookupExplanations(queryAnswer2).size());
assertEquals(2, queryAnswer2.getExplicitPath().size());
assertTrue(queryAnswer3.getExplanation().isRuleExplanation());
assertEquals(2, getRuleExplanations(queryAnswer3).size());
assertEquals(3, queryAnswer3.getExplicitPath().size());
assertTrue(queryAnswer4.getExplanation().isRuleExplanation());
assertEquals(3, getRuleExplanations(queryAnswer4).size());
assertEquals(4, queryAnswer4.getExplicitPath().size());
}
use of ai.grakn.graql.internal.query.QueryAnswer in project grakn by graknlabs.
the class ReasonerQueryImpl method getSubstitution.
/**
* @return substitution obtained from all id predicates (including internal) in the query
*/
public Answer getSubstitution() {
if (substitution == null) {
Set<Var> varNames = getVarNames();
Set<IdPredicate> predicates = getAtoms(IsaAtomBase.class).map(IsaAtomBase::getTypePredicate).filter(Objects::nonNull).filter(p -> varNames.contains(p.getVarName())).collect(Collectors.toSet());
getAtoms(IdPredicate.class).forEach(predicates::add);
HashMap<Var, Concept> answerMap = new HashMap<>();
predicates.forEach(p -> {
Concept concept = tx().getConcept(p.getPredicate());
if (concept == null)
throw GraqlQueryException.idNotFound(p.getPredicate());
answerMap.put(p.getVarName(), concept);
});
substitution = new QueryAnswer(answerMap);
}
return substitution;
}
use of ai.grakn.graql.internal.query.QueryAnswer in project grakn by graknlabs.
the class ReasonerQueryImpl method queryStateIterator.
/**
* @param parent parent state
* @param subGoals set of visited sub goals
* @param cache query cache
* @return query state iterator (db iter + unifier + state iter) for this query
*/
public Pair<Iterator<ResolutionState>, MultiUnifier> queryStateIterator(QueryStateBase parent, Set<ReasonerAtomicQuery> subGoals, QueryCache<ReasonerAtomicQuery> cache) {
Iterator<AnswerState> dbIterator;
Iterator<QueryStateBase> subGoalIterator;
if (!this.isRuleResolvable()) {
dbIterator = this.getQuery().stream().map(ans -> ans.explain(new JoinExplanation(this, ans))).map(ans -> new AnswerState(ans, parent.getUnifier(), parent)).iterator();
subGoalIterator = Collections.emptyIterator();
} else {
dbIterator = Collections.emptyIterator();
LinkedList<ReasonerQueryImpl> subQueries = new ResolutionPlan(this).queryPlan();
LOG.trace("CQ plan:\n" + subQueries.stream().map(sq -> sq.toString() + (sq.isRuleResolvable() ? "*" : "")).collect(Collectors.joining("\n")));
subGoalIterator = Iterators.singletonIterator(new CumulativeState(subQueries, new QueryAnswer(), parent.getUnifier(), parent, subGoals, cache));
}
return new Pair<>(Iterators.concat(dbIterator, subGoalIterator), new MultiUnifierImpl());
}
use of ai.grakn.graql.internal.query.QueryAnswer in project grakn by graknlabs.
the class JacksonPrinterTest method whenPrintingMap_MapGraqlStringOverKeyAndValues.
@Test
public void whenPrintingMap_MapGraqlStringOverKeyAndValues() {
QueryAnswer ans = new QueryAnswer();
Map<?, ?> map = ImmutableMap.of(ans, ImmutableList.of(ans));
Map<?, ?> expected = ImmutableMap.of(Answer.create(ans), ImmutableList.of(Answer.create(ans)));
assertEquals(expected, printer.build(map));
}
Aggregations