Search in sources :

Example 11 with TypeInference

use of com.vaticle.typedb.core.logic.tool.TypeInference in project grakn by graknlabs.

the class TypeInferenceTest method iid_inference.

@Test
public void iid_inference() throws IOException {
    define_standard_schema("basic-schema");
    transaction.commit();
    session.close();
    session = databaseMgr.session(database, DATA);
    transaction = session.transaction(WRITE);
    Entity person = transaction.concepts().getEntityType("person").create();
    TypeInference typeInference = transaction.logic().typeInference();
    // using a person IID, the attribute can only be a name or email, but not a dog label
    String queryString = "match $p iid " + person.getIID().toHexString() + "; $p has $a;";
    Disjunction disjunction = createDisjunction(queryString);
    typeInference.applyCombination(disjunction);
    Map<String, Set<String>> expected = new HashMap<>() {

        {
            put("$p", set("person"));
            put("$a", set("name", "email"));
        }
    };
    assertEquals(expected, resolvedTypeMap(disjunction.conjunctions().get(0)));
}
Also used : Entity(com.vaticle.typedb.core.concept.thing.Entity) TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Set(java.util.Set) HashMap(java.util.HashMap) Test(org.junit.Test)

Example 12 with TypeInference

use of com.vaticle.typedb.core.logic.tool.TypeInference in project grakn by graknlabs.

the class TypeInferenceTest method infer_from_value_type.

@Test
public void infer_from_value_type() {
    define_custom_schema("define" + "  dog sub entity, owns weight;" + "  person sub entity, owns name;" + "  weight sub attribute, value double;" + "  name sub attribute, value string;");
    TypeInference typeInference = transaction.logic().typeInference();
    String queryString = "match" + "  $p has $a;" + "  $a = 'bob';";
    Disjunction disjunction = createDisjunction(queryString);
    typeInference.applyCombination(disjunction);
    Map<String, Set<String>> expected = new HashMap<>() {

        {
            put("$p", set("person"));
            put("$a", set("name"));
        }
    };
    assertEquals(expected, resolvedTypeMap(disjunction.conjunctions().get(0)));
}
Also used : TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Set(java.util.Set) HashMap(java.util.HashMap) Test(org.junit.Test)

Example 13 with TypeInference

use of com.vaticle.typedb.core.logic.tool.TypeInference in project grakn by graknlabs.

the class TypeInferenceTest method relation_variable_role_variable_relation_named_variable.

@Test
public void relation_variable_role_variable_relation_named_variable() throws IOException {
    define_standard_schema("basic-schema");
    TypeInference typeInference = transaction.logic().typeInference();
    String queryString = "match $r (wife: $yoko) isa $m;";
    Disjunction disjunction = createDisjunction(queryString);
    typeInference.applyCombination(disjunction);
    Map<String, Set<String>> expected = new HashMap<>() {

        {
            put("$yoko", set("woman"));
            put("$r", set("marriage"));
            put("$m", set("marriage", "relation", "thing"));
            put("$_relation:wife", set("marriage:wife"));
        }
    };
    assertEquals(expected, resolvedTypeMap(disjunction.conjunctions().get(0)));
}
Also used : TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Set(java.util.Set) HashMap(java.util.HashMap) Test(org.junit.Test)

Example 14 with TypeInference

use of com.vaticle.typedb.core.logic.tool.TypeInference in project grakn by graknlabs.

the class TypeInferenceTest method overridden_relates_are_valid.

@Test
public void overridden_relates_are_valid() {
    define_custom_schema("define" + " marriage sub relation, relates spouse;" + " hetero-marriage sub marriage," + "   relates husband as spouse, relates wife as spouse;" + " person sub entity, plays marriage:spouse, plays hetero-marriage:husband," + "   plays hetero-marriage:wife;");
    TypeInference typeInference = transaction.logic().typeInference();
    String queryString = "match $m (spouse: $x, spouse: $y) isa marriage;";
    Disjunction disjunction = createDisjunction(queryString);
    typeInference.applyCombination(disjunction);
    Map<String, Set<String>> expected = new HashMap<>() {

        {
            put("$x", set("person"));
            put("$y", set("person"));
            put("$m", set("marriage", "hetero-marriage"));
            put("$_marriage:spouse", set("marriage:spouse"));
            put("$_marriage", set("marriage"));
        }
    };
    assertEquals(expected, resolvedTypeMap(disjunction.conjunctions().get(0)));
}
Also used : TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Set(java.util.Set) HashMap(java.util.HashMap) Test(org.junit.Test)

Example 15 with TypeInference

use of com.vaticle.typedb.core.logic.tool.TypeInference in project grakn by graknlabs.

the class TypeInferenceTest method multiple_anonymous_vars.

@Test
public void multiple_anonymous_vars() throws IOException {
    define_standard_schema("basic-schema");
    String queryString = "match $a has name 'fido'; $a has label 'poodle';";
    TypeInference typeInference = transaction.logic().typeInference();
    Disjunction disjunction = createDisjunction(queryString);
    typeInference.applyCombination(disjunction);
    Map<String, Set<String>> expected = new HashMap<>() {

        {
            put("$a", set("dog"));
            put("$_name", set("name"));
            put("$_label", set("label"));
            put("$_0", set("name"));
            put("$_1", set("label"));
        }
    };
    assertEquals(expected, resolvedTypeMap(disjunction.conjunctions().get(0)));
}
Also used : TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Set(java.util.Set) HashMap(java.util.HashMap) Test(org.junit.Test)

Aggregations

TypeInference (com.vaticle.typedb.core.logic.tool.TypeInference)42 Disjunction (com.vaticle.typedb.core.pattern.Disjunction)42 Test (org.junit.Test)42 HashMap (java.util.HashMap)39 Set (java.util.Set)39 Entity (com.vaticle.typedb.core.concept.thing.Entity)1 Conjunction (com.vaticle.typedb.core.pattern.Conjunction)1 Ignore (org.junit.Ignore)1