Search in sources :

Example 1 with AlphaEquivalence

use of com.vaticle.typedb.core.pattern.equivalence.AlphaEquivalence in project grakn by graknlabs.

the class ResolverRegistry method registerConcludable.

// note: must be thread safe. We could move to a ConcurrentHashMap if we create an alpha-equivalence wrapper
private synchronized ResolverView.MappedConcludable registerConcludable(Concludable concludable) {
    LOG.debug("Register ConcludableResolver: '{}'", concludable.pattern());
    for (Map.Entry<Concludable, Actor.Driver<ConcludableResolver>> c : concludableResolvers.entrySet()) {
        // TODO: This needs to be optimised from a linear search to use an alpha hash
        AlphaEquivalence alphaEquality = concludable.alphaEquals(c.getKey());
        if (alphaEquality.isValid()) {
            return ResolverView.concludable(c.getValue(), alphaEquality.asValid().idMapping());
        }
    }
    Actor.Driver<ConcludableResolver> resolver = Actor.driver(driver -> new ConcludableResolver(driver, concludable, this, traversalEngine, conceptMgr, logicMgr, resolutionTracing), executorService);
    concludableResolvers.put(concludable, resolver);
    resolvers.add(resolver);
    // guard races without synchronized
    if (terminated.get())
        throw TypeDBException.of(RESOLUTION_TERMINATED);
    return ResolverView.concludable(resolver, identity(concludable));
}
Also used : Concludable(com.vaticle.typedb.core.logic.resolvable.Concludable) Actor(com.vaticle.typedb.core.concurrent.actor.Actor) AlphaEquivalence(com.vaticle.typedb.core.pattern.equivalence.AlphaEquivalence) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Collectors.toMap(java.util.stream.Collectors.toMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ConcludableResolver(com.vaticle.typedb.core.reasoner.resolution.resolver.ConcludableResolver)

Example 2 with AlphaEquivalence

use of com.vaticle.typedb.core.pattern.equivalence.AlphaEquivalence in project grakn by graknlabs.

the class RelationConstraint method alphaEquals.

@Override
public AlphaEquivalence alphaEquals(RelationConstraint that) {
    return AlphaEquivalence.valid().validIf(players().size() == that.players().size()).addOrInvalidate(() -> Iterators.permutation(players()).stream().map(playersPermutation -> {
        Iterator<RolePlayer> thisRolePlayersIt = playersPermutation.iterator();
        Iterator<RolePlayer> thatRolePlayersIt = that.players().iterator();
        AlphaEquivalence permutationMap = AlphaEquivalence.valid();
        while (thisRolePlayersIt.hasNext() && thatRolePlayersIt.hasNext()) {
            permutationMap = permutationMap.validIfAlphaEqual(thisRolePlayersIt.next(), thatRolePlayersIt.next());
            if (!permutationMap.isValid())
                return permutationMap;
        }
        return permutationMap;
    }).filter(AlphaEquivalence::isValid).findFirst().orElse(AlphaEquivalence.invalid()));
}
Also used : AlphaEquivalence(com.vaticle.typedb.core.pattern.equivalence.AlphaEquivalence)

Aggregations

AlphaEquivalence (com.vaticle.typedb.core.pattern.equivalence.AlphaEquivalence)2 Actor (com.vaticle.typedb.core.concurrent.actor.Actor)1 Concludable (com.vaticle.typedb.core.logic.resolvable.Concludable)1 ConcludableResolver (com.vaticle.typedb.core.reasoner.resolution.resolver.ConcludableResolver)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 Collectors.toMap (java.util.stream.Collectors.toMap)1