Search in sources :

Example 31 with Answer

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

the class GrpcServerIT method whenExecutingTwoSequentialQueries_ResultsAreTheSame.

@Test
public void whenExecutingTwoSequentialQueries_ResultsAreTheSame() throws InterruptedException {
    Set<Answer> answers1;
    Set<Answer> answers2;
    try (GraknTx tx = remoteSession.open(GraknTxType.READ)) {
        answers1 = tx.graql().match(var("x").sub("thing")).get().stream().collect(toSet());
        answers2 = tx.graql().match(var("x").sub("thing")).get().stream().collect(toSet());
    }
    assertEquals(answers1, answers2);
}
Also used : Answer(ai.grakn.graql.admin.Answer) GraknTx(ai.grakn.GraknTx) Test(org.junit.Test)

Example 32 with Answer

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

the class AtomicState method propagateAnswer.

@Override
ResolutionState propagateAnswer(AnswerState state) {
    Answer answer = state.getAnswer();
    ReasonerAtomicQuery query = getQuery();
    if (answer.isEmpty())
        return null;
    if (state.getRule() != null && query.getAtom().requiresRoleExpansion()) {
        return new RoleExpansionState(answer, getUnifier(), query.getAtom().getRoleExpansionVariables(), getParentState());
    }
    return new AnswerState(answer, getUnifier(), getParentState());
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryAnswer(ai.grakn.graql.internal.query.QueryAnswer) ReasonerAtomicQuery(ai.grakn.graql.internal.reasoner.query.ReasonerAtomicQuery)

Example 33 with Answer

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

the class AtomicState method ruleAnswer.

private Answer ruleAnswer(Answer baseAnswer, InferenceRule rule, Unifier unifier) {
    ReasonerAtomicQuery query = getQuery();
    Answer answer = baseAnswer.merge(rule.getHead().getRoleSubstitution()).unify(unifier);
    if (answer.isEmpty())
        return answer;
    return answer.merge(query.getSubstitution()).project(query.getVarNames()).explain(new RuleExplanation(query, rule));
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryAnswer(ai.grakn.graql.internal.query.QueryAnswer) RuleExplanation(ai.grakn.graql.internal.reasoner.explanation.RuleExplanation) ReasonerAtomicQuery(ai.grakn.graql.internal.reasoner.query.ReasonerAtomicQuery)

Example 34 with Answer

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

the class AtomicState method materialisedAnswer.

private Answer materialisedAnswer(Answer baseAnswer, InferenceRule rule, Unifier unifier) {
    Answer answer = baseAnswer;
    ReasonerAtomicQuery query = getQuery();
    QueryCache<ReasonerAtomicQuery> cache = getCache();
    ReasonerAtomicQuery subbedQuery = ReasonerQueries.atomic(query, answer);
    ReasonerAtomicQuery ruleHead = ReasonerQueries.atomic(rule.getHead(), answer);
    Set<Var> queryVars = query.getVarNames().size() < ruleHead.getVarNames().size() ? unifier.keySet() : ruleHead.getVarNames();
    boolean queryEquivalentToHead = subbedQuery.isEquivalent(ruleHead);
    // check if the specific answer to ruleHead already in cache/db
    Answer headAnswer = cache.getAnswer(ruleHead, answer).project(queryVars).unify(unifier);
    // if not and query different than rule head do the same with the query
    Answer queryAnswer = headAnswer.isEmpty() && queryEquivalentToHead ? cache.getAnswer(query, answer) : new QueryAnswer();
    // ensure no duplicates created - only materialise answer if it doesn't exist in the db
    if (headAnswer.isEmpty() && queryAnswer.isEmpty()) {
        Answer materialisedSub = ruleHead.materialise(answer).findFirst().orElse(null);
        if (!queryEquivalentToHead)
            cache.recordAnswer(ruleHead, materialisedSub);
        answer = materialisedSub.project(queryVars).unify(unifier);
    } else {
        answer = headAnswer.isEmpty() ? queryAnswer : headAnswer;
    }
    if (answer.isEmpty())
        return answer;
    return answer.merge(query.getSubstitution()).explain(new RuleExplanation(query, rule));
}
Also used : Answer(ai.grakn.graql.admin.Answer) QueryAnswer(ai.grakn.graql.internal.query.QueryAnswer) QueryAnswer(ai.grakn.graql.internal.query.QueryAnswer) Var(ai.grakn.graql.Var) RuleExplanation(ai.grakn.graql.internal.reasoner.explanation.RuleExplanation) ReasonerAtomicQuery(ai.grakn.graql.internal.reasoner.query.ReasonerAtomicQuery)

Example 35 with Answer

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

the class DefineQueryTest method whenExecutingADefineQuery_ResultContainsAllInsertedVars.

@Test
public void whenExecutingADefineQuery_ResultContainsAllInsertedVars() {
    Var type = var("type");
    Var type2 = var("type2");
    // Note that two variables refer to the same type. They should both be in the result
    DefineQuery query = qb.define(type.label("my-type").sub("entity"), type2.label("my-type"));
    Answer result = query.execute();
    assertThat(result.vars(), containsInAnyOrder(type, type2));
    assertEquals(result.get(type), result.get(type2));
}
Also used : Answer(ai.grakn.graql.admin.Answer) Var(ai.grakn.graql.Var) DefineQuery(ai.grakn.graql.DefineQuery) 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