Search in sources :

Example 46 with Concept

use of ai.grakn.concept.Concept in project grakn by graknlabs.

the class ShortestPathTest method testMultipleIndependentShortestPaths.

@Test
public void testMultipleIndependentShortestPaths() throws InvalidKBException {
    Set<List<ConceptId>> validPaths = new HashSet<>();
    ConceptId startId;
    ConceptId endId;
    int numberOfPaths = 3;
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        EntityType entityType = graph.putEntityType(thing);
        Role role1 = graph.putRole("role1");
        Role role2 = graph.putRole("role2");
        entityType.plays(role1).plays(role2);
        RelationshipType relationshipType = graph.putRelationshipType(related).relates(role1).relates(role2);
        Entity start = entityType.addEntity();
        Entity end = entityType.addEntity();
        startId = start.getId();
        endId = end.getId();
        // create N identical length paths
        for (int i = 0; i < numberOfPaths; i++) {
            List<ConceptId> validPath = new ArrayList<>();
            validPath.add(startId);
            Entity middle = entityType.addEntity();
            ConceptId middleId = middle.getId();
            ConceptId assertion1 = relationshipType.addRelationship().addRolePlayer(role1, start).addRolePlayer(role2, middle).getId();
            validPath.add(assertion1);
            validPath.add(middleId);
            ConceptId assertion2 = relationshipType.addRelationship().addRolePlayer(role1, middle).addRolePlayer(role2, end).getId();
            validPath.add(assertion2);
            validPath.add(endId);
            validPaths.add(validPath);
        }
        graph.commit();
    }
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        List<List<Concept>> allPaths = graph.graql().compute().paths().from(startId).to(endId).execute();
        assertEquals(numberOfPaths, allPaths.size());
        Set<List<ConceptId>> computedPaths = allPaths.stream().map(path -> path.stream().map(Concept::getId).collect(Collectors.toList())).collect(Collectors.toSet());
        assertEquals(validPaths, computedPaths);
    }
}
Also used : InvalidKBException(ai.grakn.exception.InvalidKBException) GraknTestUtil(ai.grakn.util.GraknTestUtil) Role(ai.grakn.concept.Role) Assume.assumeFalse(org.junit.Assume.assumeFalse) Concept(ai.grakn.concept.Concept) Entity(ai.grakn.concept.Entity) Graql(ai.grakn.graql.Graql) EntityType(ai.grakn.concept.EntityType) ArrayList(java.util.ArrayList) Attribute(ai.grakn.concept.Attribute) SessionContext(ai.grakn.test.rule.SessionContext) HashSet(java.util.HashSet) Assert.assertThat(org.junit.Assert.assertThat) Lists(com.google.common.collect.Lists) Label(ai.grakn.concept.Label) AttributeType(ai.grakn.concept.AttributeType) RelationshipType(ai.grakn.concept.RelationshipType) GraknTx(ai.grakn.GraknTx) ConceptId(ai.grakn.concept.ConceptId) ClassRule(org.junit.ClassRule) Before(org.junit.Before) GraknTxType(ai.grakn.GraknTxType) Matchers.empty(org.hamcrest.Matchers.empty) GraqlQueryException(ai.grakn.exception.GraqlQueryException) Utility.getResourceEdgeId(ai.grakn.graql.internal.analytics.Utility.getResourceEdgeId) GraknSession(ai.grakn.GraknSession) Set(java.util.Set) Test(org.junit.Test) Collectors(java.util.stream.Collectors) List(java.util.List) Optional(java.util.Optional) Schema(ai.grakn.util.Schema) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Entity(ai.grakn.concept.Entity) RelationshipType(ai.grakn.concept.RelationshipType) ArrayList(java.util.ArrayList) ConceptId(ai.grakn.concept.ConceptId) EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) ArrayList(java.util.ArrayList) List(java.util.List) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 47 with Concept

use of ai.grakn.concept.Concept in project grakn by graknlabs.

the class ShortestPathTest method testMultiplePathsSharing3Instances.

@Test
public void testMultiplePathsSharing3Instances() throws InvalidKBException {
    ConceptId startId;
    ConceptId endId;
    Set<List<ConceptId>> correctPaths = new HashSet<>();
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        EntityType entityType = graph.putEntityType(thing);
        Role role1 = graph.putRole("role1");
        Role role2 = graph.putRole("role2");
        entityType.plays(role1).plays(role2);
        RelationshipType relationshipType1 = graph.putRelationshipType(related).relates(role1).relates(role2);
        Role role3 = graph.putRole("role3");
        Role role4 = graph.putRole("role4");
        Role role5 = graph.putRole("role5");
        entityType.plays(role3).plays(role4).plays(role5);
        RelationshipType relationshipType2 = graph.putRelationshipType(veryRelated).relates(role3).relates(role4).relates(role5);
        Entity start = entityType.addEntity();
        Entity end = entityType.addEntity();
        Entity middle = entityType.addEntity();
        Entity middleA = entityType.addEntity();
        Entity middleB = entityType.addEntity();
        startId = start.getId();
        endId = end.getId();
        ConceptId middleId = middle.getId();
        ConceptId middleAId = middleA.getId();
        ConceptId middleBId = middleB.getId();
        ConceptId assertion1 = relationshipType1.addRelationship().addRolePlayer(role1, start).addRolePlayer(role2, middle).getId();
        ConceptId assertion2 = relationshipType2.addRelationship().addRolePlayer(role3, middle).addRolePlayer(role4, middleA).addRolePlayer(role5, middleB).getId();
        ConceptId assertion1A = relationshipType1.addRelationship().addRolePlayer(role1, middleA).addRolePlayer(role2, end).getId();
        ConceptId assertion1B = relationshipType1.addRelationship().addRolePlayer(role1, middleB).addRolePlayer(role2, end).getId();
        List<ConceptId> sharedPath = Lists.newArrayList(startId, assertion1, middleId, assertion2);
        List<ConceptId> path1 = new ArrayList<>(sharedPath);
        path1.addAll(Lists.newArrayList(middleAId, assertion1A, endId));
        List<ConceptId> path2 = new ArrayList<>(sharedPath);
        path2.addAll(Lists.newArrayList(middleBId, assertion1B, endId));
        correctPaths.add(path1);
        correctPaths.add(path2);
        graph.commit();
    }
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        List<List<Concept>> allPaths = graph.graql().compute().paths().from(startId).to(endId).execute();
        assertEquals(correctPaths.size(), allPaths.size());
        Set<List<ConceptId>> computedPaths = allPaths.stream().map(path -> path.stream().map(Concept::getId).collect(Collectors.toList())).collect(Collectors.toSet());
        assertEquals(correctPaths, computedPaths);
    }
}
Also used : InvalidKBException(ai.grakn.exception.InvalidKBException) GraknTestUtil(ai.grakn.util.GraknTestUtil) Role(ai.grakn.concept.Role) Assume.assumeFalse(org.junit.Assume.assumeFalse) Concept(ai.grakn.concept.Concept) Entity(ai.grakn.concept.Entity) Graql(ai.grakn.graql.Graql) EntityType(ai.grakn.concept.EntityType) ArrayList(java.util.ArrayList) Attribute(ai.grakn.concept.Attribute) SessionContext(ai.grakn.test.rule.SessionContext) HashSet(java.util.HashSet) Assert.assertThat(org.junit.Assert.assertThat) Lists(com.google.common.collect.Lists) Label(ai.grakn.concept.Label) AttributeType(ai.grakn.concept.AttributeType) RelationshipType(ai.grakn.concept.RelationshipType) GraknTx(ai.grakn.GraknTx) ConceptId(ai.grakn.concept.ConceptId) ClassRule(org.junit.ClassRule) Before(org.junit.Before) GraknTxType(ai.grakn.GraknTxType) Matchers.empty(org.hamcrest.Matchers.empty) GraqlQueryException(ai.grakn.exception.GraqlQueryException) Utility.getResourceEdgeId(ai.grakn.graql.internal.analytics.Utility.getResourceEdgeId) GraknSession(ai.grakn.GraknSession) Set(java.util.Set) Test(org.junit.Test) Collectors(java.util.stream.Collectors) List(java.util.List) Optional(java.util.Optional) Schema(ai.grakn.util.Schema) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Entity(ai.grakn.concept.Entity) RelationshipType(ai.grakn.concept.RelationshipType) ArrayList(java.util.ArrayList) ConceptId(ai.grakn.concept.ConceptId) EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) ArrayList(java.util.ArrayList) List(java.util.List) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 48 with Concept

use of ai.grakn.concept.Concept in project grakn by graknlabs.

the class QueryParserTest method testCustomAggregate.

@Test
public void testCustomAggregate() {
    QueryBuilder qb = withoutGraph();
    QueryParser parser = qb.parser();
    parser.registerAggregate("get-any", args -> new GetAny((Var) args.get(0)));
    AggregateQuery<Concept> expected = qb.match(var("x").isa("movie")).aggregate(new GetAny(Graql.var("x")));
    AggregateQuery<Concept> parsed = qb.parse("match $x isa movie; aggregate get-any $x;");
    assertEquals(expected, parsed);
}
Also used : Concept(ai.grakn.concept.Concept) QueryParser(ai.grakn.graql.QueryParser) Var(ai.grakn.graql.Var) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 49 with Concept

use of ai.grakn.concept.Concept in project grakn by graknlabs.

the class GeoInferenceTest method testTransitiveQuery_withSubstitution_variableRoles.

@Test
public void testTransitiveQuery_withSubstitution_variableRoles() {
    GraknTx graph = geoKB.tx();
    QueryBuilder iqb = geoKB.tx().graql().infer(true);
    Concept masovia = getConcept(graph, "name", "Masovia");
    String queryString = "match " + "($r1: $x, $r2: $y) isa is-located-in;" + "$y id '" + masovia.getId().getValue() + "'; get;";
    List<Answer> answers = iqb.materialise(false).<GetQuery>parse(queryString).execute();
    List<Answer> answers2 = iqb.materialise(true).<GetQuery>parse(queryString).execute();
    answers.forEach(ans -> assertEquals(ans.size(), 4));
    answers.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), masovia.getId().getValue()));
    answers2.forEach(ans -> assertEquals(ans.size(), 4));
    answers2.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), masovia.getId().getValue()));
    assertEquals(answers.size(), 20);
    assertCollectionsEqual(answers, answers2);
}
Also used : Concept(ai.grakn.concept.Concept) GraknTx(ai.grakn.GraknTx) Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Example 50 with Concept

use of ai.grakn.concept.Concept in project grakn by graknlabs.

the class GeoInferenceTest method testTransitiveQuery_Closure_singleVariableRole_withSubstitution.

@Test
public void testTransitiveQuery_Closure_singleVariableRole_withSubstitution() {
    GraknTx graph = geoKB.tx();
    QueryBuilder iqb = geoKB.tx().graql().infer(true);
    Concept masovia = getConcept(graph, "name", "Masovia");
    String queryString = "match " + "($x, $r2: $y) isa is-located-in;" + "$y id '" + masovia.getId().getValue() + "'; get;";
    List<Answer> answers = iqb.materialise(false).<GetQuery>parse(queryString).execute();
    List<Answer> answers2 = iqb.materialise(true).<GetQuery>parse(queryString).execute();
    answers.forEach(ans -> assertEquals(ans.size(), 3));
    answers.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), masovia.getId().getValue()));
    assertEquals(answers.size(), 10);
    answers2.forEach(ans -> assertEquals(ans.size(), 3));
    answers2.forEach(ans -> assertEquals(ans.get(var("y")).getId().getValue(), masovia.getId().getValue()));
    assertCollectionsEqual(answers, answers2);
}
Also used : Concept(ai.grakn.concept.Concept) GraknTx(ai.grakn.GraknTx) Answer(ai.grakn.graql.admin.Answer) QueryBuilder(ai.grakn.graql.QueryBuilder) Test(org.junit.Test)

Aggregations

Concept (ai.grakn.concept.Concept)91 Test (org.junit.Test)56 ConceptId (ai.grakn.concept.ConceptId)26 GraknTx (ai.grakn.GraknTx)25 Answer (ai.grakn.graql.admin.Answer)25 SchemaConcept (ai.grakn.concept.SchemaConcept)19 Label (ai.grakn.concept.Label)18 GrpcConcept (ai.grakn.rpc.generated.GrpcConcept)18 QueryBuilder (ai.grakn.graql.QueryBuilder)17 Var (ai.grakn.graql.Var)15 Set (java.util.Set)15 Role (ai.grakn.concept.Role)14 QueryAnswer (ai.grakn.graql.internal.query.QueryAnswer)14 HashSet (java.util.HashSet)13 List (java.util.List)12 AttributeType (ai.grakn.concept.AttributeType)11 EntityType (ai.grakn.concept.EntityType)11 Schema (ai.grakn.util.Schema)10 Collectors (java.util.stream.Collectors)10 Stream (java.util.stream.Stream)10