Search in sources :

Example 1 with ConceptMapCache

use of com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache in project grakn by graknlabs.

the class ConcludableResolver method createRequestState.

protected CachingRequestState<?, ConceptMap> createRequestState(Request fromUpstream, int iteration) {
    LOG.debug("{}: Creating new Responses for iteration{}, request: {}", name(), iteration, fromUpstream);
    Driver<? extends Resolver<?>> root = fromUpstream.partialAnswer().root();
    cacheRegistersByRoot.putIfAbsent(root, new HashMap<>());
    Map<ConceptMap, AnswerCache<?, ConceptMap>> cacheRegister = cacheRegistersByRoot.get(root);
    ConceptMap answerFromUpstream = fromUpstream.partialAnswer().conceptMap();
    CachingRequestState<?, ConceptMap> requestState;
    assert fromUpstream.partialAnswer().isConcludable();
    if (fromUpstream.partialAnswer().asConcludable().isExplain()) {
        if (cacheRegister.containsKey(answerFromUpstream)) {
            if (cacheRegister.get(answerFromUpstream).isConceptMapCache()) {
                // We have a cache already which we must evict to use a cache suitable for explaining
                ConcludableAnswerCache answerCache = new ConcludableAnswerCache(cacheRegister, answerFromUpstream);
                cacheRegister.put(answerFromUpstream, answerCache);
                requestState = new Explain(fromUpstream, answerCache, iteration);
                registerRules(fromUpstream, requestState.asExploration());
            } else if (cacheRegister.get(answerFromUpstream).isConcludableAnswerCache()) {
                ConcludableAnswerCache answerCache = cacheRegister.get(answerFromUpstream).asConcludableAnswerCache();
                requestState = new FollowingExplain(fromUpstream, answerCache, iteration);
            } else {
                throw TypeDBException.of(ILLEGAL_STATE);
            }
        } else {
            ConcludableAnswerCache answerCache = new ConcludableAnswerCache(cacheRegister, answerFromUpstream);
            cacheRegister.put(answerFromUpstream, answerCache);
            requestState = new Explain(fromUpstream, answerCache, iteration);
            registerRules(fromUpstream, requestState.asExploration());
        }
    } else if (fromUpstream.partialAnswer().asConcludable().isMatch()) {
        if (cacheRegister.containsKey(answerFromUpstream)) {
            if (cacheRegister.get(answerFromUpstream).isConceptMapCache()) {
                ConceptMapCache answerCache = cacheRegister.get(answerFromUpstream).asConceptMapCache();
                requestState = new FollowingMatch(fromUpstream, answerCache, iteration);
            } else if (cacheRegister.get(answerFromUpstream).isConcludableAnswerCache()) {
                ConcludableAnswerCache answerCache = cacheRegister.get(answerFromUpstream).asConcludableAnswerCache();
                requestState = new FollowingExplain(fromUpstream, answerCache, iteration);
            } else {
                throw TypeDBException.of(ILLEGAL_STATE);
            }
        } else {
            ConceptMapCache answerCache = new ConceptMapCache(cacheRegister, answerFromUpstream);
            cacheRegister.put(answerFromUpstream, answerCache);
            if (!answerCache.completeIfSubsumerComplete()) {
                answerCache.addSource(traversalIterator(concludable.pattern(), answerFromUpstream));
            }
            boolean singleAnswerRequired = answerFromUpstream.concepts().keySet().containsAll(unboundVars);
            requestState = new Match(fromUpstream, answerCache, iteration, singleAnswerRequired);
            registerRules(fromUpstream, requestState.asExploration());
        }
    } else {
        throw TypeDBException.of(ILLEGAL_STATE);
    }
    return requestState;
}
Also used : ConcludableAnswerCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.ConcludableAnswerCache) AnswerCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache) ConcludableAnswerCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.ConcludableAnswerCache) ConceptMapCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap)

Example 2 with ConceptMapCache

use of com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache in project grakn by graknlabs.

the class RetrievableResolver method createRequestState.

protected RetrievableRequestState createRequestState(Request fromUpstream, int iteration) {
    LOG.debug("{}: Creating a new RequestState for iteration:{}, request: {}", name(), iteration, fromUpstream);
    assert fromUpstream.partialAnswer().isRetrievable();
    Driver<? extends Resolver<?>> root = fromUpstream.partialAnswer().root();
    cacheRegistersByRoot.putIfAbsent(root, new HashMap<>());
    Map<ConceptMap, AnswerCache<ConceptMap, ConceptMap>> cacheRegister = cacheRegistersByRoot.get(root);
    AnswerCache<ConceptMap, ConceptMap> answerCache = cacheRegister.computeIfAbsent(fromUpstream.partialAnswer().conceptMap(), upstreamAns -> {
        ConceptMapCache newCache = new ConceptMapCache(cacheRegister, upstreamAns);
        if (!newCache.completeIfSubsumerComplete())
            newCache.addSource(traversalIterator(retrievable.pattern(), upstreamAns));
        return newCache;
    });
    return new RetrievableRequestState(fromUpstream, answerCache, iteration);
}
Also used : AnswerCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache) ConceptMapCache(com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap)

Aggregations

ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)2 AnswerCache (com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache)2 ConceptMapCache (com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache)2 ConcludableAnswerCache (com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.ConcludableAnswerCache)1