Search in sources :

Example 6 with Conjunction

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

the class ResolutionTest method createRootAndAssertResponses.

private void createRootAndAssertResponses(CoreTransaction transaction, Conjunction conjunction, long answerCount, long explainableAnswers) throws InterruptedException {
    ResolverRegistry registry = transaction.reasoner().resolverRegistry();
    LinkedBlockingQueue<Match.Finished> responses = new LinkedBlockingQueue<>();
    AtomicLong doneReceived = new AtomicLong(0L);
    Set<Identifier.Variable.Retrievable> filter = new HashSet<>();
    iterate(conjunction.variables()).map(Variable::id).filter(Identifier::isName).map(Identifier.Variable::asName).forEachRemaining(filter::add);
    Actor.Driver<RootResolver.Conjunction> root;
    try {
        root = registry.root(conjunction, responses::add, iterDone -> doneReceived.incrementAndGet(), (throwable) -> fail());
    } catch (TypeDBException e) {
        fail();
        return;
    }
    assertResponses(root, filter, responses, doneReceived, answerCount, explainableAnswers);
}
Also used : Util.resolvedConjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction) Collections.set(com.vaticle.typedb.common.collection.Collections.set) Variable(com.vaticle.typedb.core.pattern.variable.Variable) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) MB(com.vaticle.typedb.core.common.collection.Bytes.MB) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) HashSet(java.util.HashSet) Root(com.vaticle.typedb.core.reasoner.resolution.answer.AnswerState.Partial.Compound.Root) Util.resolvedDisjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedDisjunction) After(org.junit.After) InitialImpl(com.vaticle.typedb.core.reasoner.resolution.answer.AnswerStateImpl.TopImpl.MatchImpl.InitialImpl) Assert.fail(org.junit.Assert.fail) Path(java.nio.file.Path) Before(org.junit.Before) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) TypeQL(com.vaticle.typeql.lang.TypeQL) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Set(java.util.Set) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Test(org.junit.Test) IOException(java.io.IOException) RootResolver(com.vaticle.typedb.core.reasoner.resolution.resolver.RootResolver) Actor(com.vaticle.typedb.core.concurrent.actor.Actor) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) TimeUnit(java.util.concurrent.TimeUnit) CoreSession(com.vaticle.typedb.core.database.CoreSession) AtomicLong(java.util.concurrent.atomic.AtomicLong) Stream(java.util.stream.Stream) NamedThreadFactory(com.vaticle.typedb.common.concurrent.NamedThreadFactory) Paths(java.nio.file.Paths) TestCase.assertTrue(junit.framework.TestCase.assertTrue) ActorExecutorGroup(com.vaticle.typedb.core.concurrent.actor.ActorExecutorGroup) Database(com.vaticle.typedb.core.common.parameters.Options.Database) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) Request(com.vaticle.typedb.core.reasoner.resolution.framework.Request) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Match(com.vaticle.typedb.core.reasoner.resolution.answer.AnswerState.Top.Match) Resolver(com.vaticle.typedb.core.reasoner.resolution.framework.Resolver) Util(com.vaticle.typedb.core.test.integration.util.Util) TestCase.assertEquals(junit.framework.TestCase.assertEquals) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) AtomicLong(java.util.concurrent.atomic.AtomicLong) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) Actor(com.vaticle.typedb.core.concurrent.actor.Actor) Util.resolvedConjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) HashSet(java.util.HashSet)

Example 7 with Conjunction

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

the class Materialiser method query.

public Map<Conjunction, FunctionalIterator<ConceptMap>> query(TypeQLMatch inferenceQuery) {
    // TODO: How do we handle disjunctions inside negations and negations in general?
    Disjunction disjunction = Disjunction.create(inferenceQuery.conjunction().normalise());
    tx.logic().typeInference().applyCombination(disjunction);
    HashMap<Conjunction, FunctionalIterator<ConceptMap>> conjunctionAnswers = new HashMap<>();
    disjunction.conjunctions().forEach(conjunction -> conjunctionAnswers.put(conjunction, traverse(conjunction)));
    return conjunctionAnswers;
}
Also used : Disjunction(com.vaticle.typedb.core.pattern.Disjunction) HashMap(java.util.HashMap) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator)

Example 8 with Conjunction

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

the class Reasoner method bound.

private Conjunction bound(Conjunction conjunction, ConceptMap bounds) {
    Conjunction newClone = conjunction.clone();
    newClone.bound(bounds.toMap(Type::getLabel, Thing::getIID));
    return newClone;
}
Also used : Conjunction(com.vaticle.typedb.core.pattern.Conjunction)

Example 9 with Conjunction

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

the class Reasoner method mayReason.

private boolean mayReason(Disjunction disjunction) {
    for (Conjunction conj : disjunction.conjunctions()) {
        Set<Variable> vars = conj.variables();
        List<Negation> negs = conj.negations();
        if (iterate(vars).flatMap(v -> iterate(v.inferredTypes())).distinct().anyMatch(this::hasRule))
            return true;
        if (!negs.isEmpty() && iterate(negs).anyMatch(n -> mayReason(n.disjunction())))
            return true;
    }
    return false;
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) Context(com.vaticle.typedb.core.common.parameters.Context) TraversalEngine(com.vaticle.typedb.core.traversal.TraversalEngine) Collections.set(com.vaticle.typedb.common.collection.Collections.set) Variable(com.vaticle.typedb.core.pattern.variable.Variable) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) UnboundVariable(com.vaticle.typeql.lang.pattern.variable.UnboundVariable) UNSATISFIABLE_SUB_PATTERN(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_SUB_PATTERN) LoggerFactory(org.slf4j.LoggerFactory) PARALLELISATION_FACTOR(com.vaticle.typedb.core.concurrent.executor.Executors.PARALLELISATION_FACTOR) ResolverRegistry(com.vaticle.typedb.core.reasoner.resolution.ResolverRegistry) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) Producers.produce(com.vaticle.typedb.core.concurrent.producer.Producers.produce) LogicManager(com.vaticle.typedb.core.logic.LogicManager) HashSet(java.util.HashSet) Executors.async1(com.vaticle.typedb.core.concurrent.executor.Executors.async1) Either(com.vaticle.typedb.common.collection.Either) Collections.list(com.vaticle.typedb.common.collection.Collections.list) Thing(com.vaticle.typedb.core.concept.thing.Thing) Label(com.vaticle.typedb.core.common.parameters.Label) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) Logger(org.slf4j.Logger) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) Negation(com.vaticle.typedb.core.pattern.Negation) Options(com.vaticle.typedb.core.common.parameters.Options) Producer(com.vaticle.typedb.core.concurrent.producer.Producer) Set(java.util.Set) Iterators(com.vaticle.typedb.core.common.iterator.Iterators) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) UNSATISFIABLE_PATTERN(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_PATTERN) List(java.util.List) Executors.actor(com.vaticle.typedb.core.concurrent.executor.Executors.actor) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) Explanation(com.vaticle.typedb.core.reasoner.resolution.answer.Explanation) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) EXHAUSTIVE(com.vaticle.typedb.core.common.parameters.Arguments.Query.Producer.EXHAUSTIVE) TypeQLMatch(com.vaticle.typeql.lang.query.TypeQLMatch) Type(com.vaticle.typedb.core.concept.type.Type) Producers(com.vaticle.typedb.core.concurrent.producer.Producers) Variable(com.vaticle.typedb.core.pattern.variable.Variable) UnboundVariable(com.vaticle.typeql.lang.pattern.variable.UnboundVariable) Negation(com.vaticle.typedb.core.pattern.Negation) Conjunction(com.vaticle.typedb.core.pattern.Conjunction)

Example 10 with Conjunction

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

the class UnifyRelationConcludableTest method relation_variable_role_unifies_many_to_many_rule_relation_roles_2.

// [multiple VARIABLE ROLE, many2many]
@Test
public void relation_variable_role_unifies_many_to_many_rule_relation_roles_2() {
    String conjunction = "{ ($role1: $p, $role2: $q, $role1: $p) isa employment; }";
    Set<Concludable> concludables = Concludable.create(resolvedConjunction(conjunction, logicMgr));
    Concludable.Relation queryConcludable = concludables.iterator().next().asRelation();
    Rule rule = createRule("two-people-are-employed-one-is-also-the-employer", "{ $x isa person; $y isa person; }", "(employee: $x, employer: $x, employee: $y) isa employment", logicMgr);
    FunctionalIterator<Unifier> unifier = queryConcludable.unify(rule.conclusion(), conceptMgr);
    Set<Map<String, Set<String>>> result = unifier.map(u -> getStringMapping(u.mapping())).toSet();
    Set<Map<String, Set<String>>> expected = set(new HashMap<String, Set<String>>() {

        {
            put("$p", set("$x", "$y"));
            put("$q", set("$x"));
            put("$role1", set("$_employment:employee"));
            put("$role2", set("$_employment:employer"));
            put("$_0", set("$_0"));
        }
    }, new HashMap<String, Set<String>>() {

        {
            put("$p", set("$x", "$y"));
            put("$q", set("$x"));
            put("$role1", set("$_employment:employee", "$_employment:employer"));
            put("$role2", set("$_employment:employee"));
            put("$_0", set("$_0"));
        }
    }, new HashMap<String, Set<String>>() {

        {
            put("$p", set("$x"));
            put("$q", set("$y"));
            put("$role1", set("$_employment:employee", "$_employment:employer"));
            put("$role2", set("$_employment:employee"));
            put("$_0", set("$_0"));
        }
    });
    assertEquals(expected, result);
}
Also used : Variable(com.vaticle.typedb.core.traversal.common.Identifier.Variable) MB(com.vaticle.typedb.core.common.collection.Bytes.MB) RelationType(com.vaticle.typedb.core.concept.type.RelationType) Util.getStringMapping(com.vaticle.typedb.core.logic.resolvable.Util.getStringMapping) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) LogicManager(com.vaticle.typedb.core.logic.LogicManager) ThingType(com.vaticle.typedb.core.concept.type.ThingType) After(org.junit.After) Map(java.util.Map) Collections.list(com.vaticle.typedb.common.collection.Collections.list) Thing(com.vaticle.typedb.core.concept.thing.Thing) Path(java.nio.file.Path) TypeQL(com.vaticle.typeql.lang.TypeQL) AfterClass(org.junit.AfterClass) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Options(com.vaticle.typedb.core.common.parameters.Options) Set(java.util.Set) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) List(java.util.List) Assert.assertFalse(org.junit.Assert.assertFalse) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Collections.map(com.vaticle.typedb.common.collection.Collections.map) ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) ILLEGAL_STATE(com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_STATE) Util.resolvedConjunction(com.vaticle.typedb.core.logic.resolvable.Util.resolvedConjunction) BeforeClass(org.junit.BeforeClass) Collections.set(com.vaticle.typedb.common.collection.Collections.set) HashMap(java.util.HashMap) Concept(com.vaticle.typedb.core.concept.Concept) HashSet(java.util.HashSet) Lists(com.google.common.collect.Lists) Rule(com.vaticle.typedb.core.logic.Rule) Collections.pair(com.vaticle.typedb.common.collection.Collections.pair) Util.createRule(com.vaticle.typedb.core.logic.resolvable.Util.createRule) Label(com.vaticle.typedb.core.common.parameters.Label) Before(org.junit.Before) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) Iterator(java.util.Iterator) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) IOException(java.io.IOException) RoleType(com.vaticle.typedb.core.concept.type.RoleType) CoreSession(com.vaticle.typedb.core.database.CoreSession) Relation(com.vaticle.typedb.core.concept.thing.Relation) Paths(java.nio.file.Paths) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Type(com.vaticle.typedb.core.concept.type.Type) Util(com.vaticle.typedb.core.test.integration.util.Util) Set(java.util.Set) HashSet(java.util.HashSet) Rule(com.vaticle.typedb.core.logic.Rule) Util.createRule(com.vaticle.typedb.core.logic.resolvable.Util.createRule) Map(java.util.Map) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) HashMap(java.util.HashMap) Test(org.junit.Test)

Aggregations

Conjunction (com.vaticle.typedb.core.pattern.Conjunction)34 Test (org.junit.Test)26 CoreSession (com.vaticle.typedb.core.database.CoreSession)25 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)25 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)16 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)16 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)16 Collections.set (com.vaticle.typedb.common.collection.Collections.set)15 Iterators.iterate (com.vaticle.typedb.core.common.iterator.Iterators.iterate)15 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)15 AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)15 RelationType (com.vaticle.typedb.core.concept.type.RelationType)15 HashSet (java.util.HashSet)15 Set (java.util.Set)15 FunctionalIterator (com.vaticle.typedb.core.common.iterator.FunctionalIterator)14 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)13 Label (com.vaticle.typedb.core.common.parameters.Label)13 HashMap (java.util.HashMap)13 Collections.list (com.vaticle.typedb.common.collection.Collections.list)12 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)12