use of com.vaticle.typedb.core.reasoner.resolution.framework.Request in project grakn by graknlabs.
the class ConjunctionResolver method initialiseRequestState.
private void initialiseRequestState(RequestState requestState, Partial.Compound<?, ?> partialAnswer, Plans.Plan plan) {
ResolverRegistry.ResolverView childResolver = downstreamResolvers.get(plan.get(0));
Partial<?> downstream = toDownstream(partialAnswer, childResolver, plan.get(0));
Request toDownstream = Request.create(driver(), childResolver.resolver(), downstream, 0);
requestState.downstreamManager().addDownstream(toDownstream);
}
use of com.vaticle.typedb.core.reasoner.resolution.framework.Request in project grakn by graknlabs.
the class ConcludableResolver method receiveAnswer.
@Override
protected void receiveAnswer(Answer fromDownstream, int iteration) {
LOG.trace("{}: received Answer: {}", name(), fromDownstream);
if (isTerminated())
return;
Request toDownstream = fromDownstream.sourceRequest();
Request fromUpstream = fromUpstream(toDownstream);
Driver<? extends Resolver<?>> root = fromUpstream.partialAnswer().root();
if (iteration < iterationByRoot.get(root)) {
// short circuit if the request came from a prior iteration
failToUpstream(fromUpstream, iteration);
} else {
CachingRequestState<?, ConceptMap> requestState = this.requestStates.get(fromUpstream);
assert requestState.isExploration();
requestState.asExploration().newAnswer(fromDownstream.answer());
assert iteration == requestState.iteration();
assert cacheRegistersByRoot.get(root).containsKey(fromUpstream.partialAnswer().conceptMap());
nextAnswer(fromUpstream, requestState, iteration);
}
}
use of com.vaticle.typedb.core.reasoner.resolution.framework.Request in project grakn by graknlabs.
the class ConcludableResolver method registerRules.
private void registerRules(Request fromUpstream, Exploration exploration) {
// loop termination: when receiving a new request, we check if we have seen it before from this root query
// if we have, we do not allow rules to be registered as possible downstreams
Partial.Concludable<?> partialAnswer = fromUpstream.partialAnswer().asConcludable();
for (Map.Entry<Driver<ConclusionResolver>, Set<Unifier>> entry : applicableRules.entrySet()) {
Driver<ConclusionResolver> conclusionResolver = entry.getKey();
for (Unifier unifier : entry.getValue()) {
Optional<? extends Partial.Conclusion<?, ?>> unified = partialAnswer.toDownstream(unifier, resolverRules.get(conclusionResolver));
if (unified.isPresent()) {
Request toDownstream = Request.create(driver(), conclusionResolver, unified.get());
exploration.downstreamManager().addDownstream(toDownstream);
}
}
}
}
use of com.vaticle.typedb.core.reasoner.resolution.framework.Request in project grakn by graknlabs.
the class DisjunctionResolver method receiveAnswer.
@Override
protected void receiveAnswer(Response.Answer fromDownstream, int iteration) {
LOG.trace("{}: received answer: {}", name(), fromDownstream);
if (isTerminated())
return;
Request toDownstream = fromDownstream.sourceRequest();
Request fromUpstream = fromUpstream(toDownstream);
RequestState requestState = requestStates.get(fromUpstream);
assert fromDownstream.answer().isCompound();
AnswerState answer = toUpstreamAnswer(fromDownstream.answer().asCompound(), fromDownstream);
boolean acceptedAnswer = tryAcceptUpstreamAnswer(answer, fromUpstream, iteration);
if (!acceptedAnswer)
nextAnswer(fromUpstream, requestState, iteration);
}
use of com.vaticle.typedb.core.reasoner.resolution.framework.Request in project grakn by graknlabs.
the class DisjunctionResolver method requestStateCreate.
@Override
protected RequestState requestStateCreate(Request fromUpstream, int iteration) {
LOG.debug("{}: Creating a new RequestState for request: {}", name(), fromUpstream);
assert fromUpstream.partialAnswer().isCompound();
RequestState requestState = new RequestState(iteration);
for (Driver<ConjunctionResolver.Nested> conjunctionResolver : downstreamResolvers.keySet()) {
Compound.Nestable downstream = fromUpstream.partialAnswer().asCompound().filterToNestable(conjunctionRetrievedIds(conjunctionResolver));
Request request = Request.create(driver(), conjunctionResolver, downstream);
requestState.downstreamManager().addDownstream(request);
}
return requestState;
}
Aggregations