Search in sources :

Example 31 with ConceptId

use of ai.grakn.concept.ConceptId 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 32 with ConceptId

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

the class ShortestPathTest method testResourceVerticesAndEdges.

@Test
public void testResourceVerticesAndEdges() {
    ConceptId idPerson1;
    ConceptId idPerson2;
    ConceptId idPerson3;
    ConceptId idPower1;
    ConceptId idPower2;
    ConceptId idPower3;
    ConceptId idRelationPerson1Power1;
    ConceptId idRelationPerson2Power2;
    ConceptId idRelationPerson1Person3;
    List<ConceptId> pathPerson2Power1 = new ArrayList<>();
    List<ConceptId> pathPower3Power1 = new ArrayList<>();
    List<ConceptId> pathPerson3Power3 = new ArrayList<>();
    try (GraknTx tx = session.open(GraknTxType.WRITE)) {
        EntityType person = tx.putEntityType("person");
        AttributeType<Long> power = tx.putAttributeType("power", AttributeType.DataType.LONG);
        person.attribute(power);
        // manually construct the attribute relation
        Role resourceOwner = tx.getRole(Schema.ImplicitType.HAS_OWNER.getLabel(Label.of("power")).getValue());
        Role resourceValue = tx.getRole(Schema.ImplicitType.HAS_VALUE.getLabel(Label.of("power")).getValue());
        RelationshipType relationType = tx.getRelationshipType(Schema.ImplicitType.HAS.getLabel(Label.of("power")).getValue());
        Entity person1 = person.addEntity();
        idPerson1 = person1.getId();
        Entity person2 = person.addEntity();
        idPerson2 = person2.getId();
        Entity person3 = person.addEntity();
        idPerson3 = person3.getId();
        Attribute power1 = power.putAttribute(1L);
        idPower1 = power1.getId();
        Attribute power2 = power.putAttribute(2L);
        idPower2 = power2.getId();
        Attribute power3 = power.putAttribute(3L);
        idPower3 = power3.getId();
        assert relationType != null;
        idRelationPerson1Power1 = relationType.addRelationship().addRolePlayer(resourceOwner, person1).addRolePlayer(resourceValue, power1).getId();
        idRelationPerson2Power2 = relationType.addRelationship().addRolePlayer(resourceOwner, person2).addRolePlayer(resourceValue, power2).getId();
        // add implicit resource relationships as well
        person.attribute(power);
        person1.attribute(power2);
        person3.attribute(power3);
        // finally add a relation between persons to make it more interesting
        Role role1 = tx.putRole("role1");
        Role role2 = tx.putRole("role2");
        person.plays(role1).plays(role2);
        RelationshipType relationTypePerson = tx.putRelationshipType(related).relates(role1).relates(role2);
        idRelationPerson1Person3 = relationTypePerson.addRelationship().addRolePlayer(role1, person1).addRolePlayer(role2, person3).getId();
        tx.commit();
    }
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        List<List<Concept>> allPaths;
        // Path from power3 to power3
        pathPerson3Power3.add(idPerson3);
        if (null != getResourceEdgeId(graph, idPower3, idPerson3)) {
            pathPerson3Power3.add(getResourceEdgeId(graph, idPower3, idPerson3));
        }
        pathPerson3Power3.add(idPower3);
        allPaths = graph.graql().compute().paths().from(idPerson3).to(idPower3).includeAttribute().execute();
        assertEquals(1, allPaths.size());
        checkPathsAreEqual(pathPerson3Power3, allPaths.get(0));
        // Path from person2 to power1
        pathPerson2Power1.add(idPerson2);
        pathPerson2Power1.add(idRelationPerson2Power2);
        pathPerson2Power1.add(idPower2);
        if (null != getResourceEdgeId(graph, idPerson1, idPower2)) {
            pathPerson2Power1.add(getResourceEdgeId(graph, idPerson1, idPower2));
        }
        pathPerson2Power1.add(idPerson1);
        pathPerson2Power1.add(idRelationPerson1Power1);
        pathPerson2Power1.add(idPower1);
        allPaths = graph.graql().compute().paths().from(idPerson2).to(idPower1).includeAttribute().execute();
        assertEquals(1, allPaths.size());
        checkPathsAreEqual(pathPerson2Power1, allPaths.get(0));
        // Path from power3 to power1
        pathPower3Power1.add(idPower3);
        if (null != getResourceEdgeId(graph, idPower3, idPerson3)) {
            pathPower3Power1.add(getResourceEdgeId(graph, idPower3, idPerson3));
        }
        pathPower3Power1.add(idPerson3);
        pathPower3Power1.add(idRelationPerson1Person3);
        pathPower3Power1.add(idPerson1);
        pathPower3Power1.add(idRelationPerson1Power1);
        pathPower3Power1.add(idPower1);
        allPaths = graph.graql().compute().paths().includeAttribute().from(idPower3).to(idPower1).execute();
        assertEquals(1, allPaths.size());
        checkPathsAreEqual(pathPower3Power1, allPaths.get(0));
    }
}
Also used : Entity(ai.grakn.concept.Entity) Attribute(ai.grakn.concept.Attribute) ArrayList(java.util.ArrayList) RelationshipType(ai.grakn.concept.RelationshipType) 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) Test(org.junit.Test)

Example 33 with ConceptId

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

the class RuleTest method whenAddingRuleWithIllegalAtomicInHead_Predicate_Throw.

@Test
public void whenAddingRuleWithIllegalAtomicInHead_Predicate_Throw() throws InvalidKBException {
    ConceptId randomId = graknTx.admin().getMetaConcept().getId();
    validateIllegalHead(graknTx.graql().parser().parsePattern("(role1: $x, role2: $y) isa relation1"), graknTx.graql().parser().parsePattern("$x id '" + randomId.getValue() + "'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
    validateIllegalHead(graknTx.graql().parser().parsePattern("(role1: $x, role2: $y) isa relation1"), graknTx.graql().parser().parsePattern("$x != $y'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
    validateIllegalHead(graknTx.graql().parser().parsePattern("($x, $y); $x isa res1;"), graknTx.graql().parser().parsePattern("$x val '100'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
    validateIllegalHead(graknTx.graql().parser().parsePattern("(role1: $x, role2: $y) isa relation1"), graknTx.graql().parser().parsePattern("$x != $y'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
    validateIllegalRule(graknTx.graql().parser().parsePattern("($x, $y); $x isa res1;"), graknTx.graql().parser().parsePattern("$x val '100'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
    validateIllegalRule(graknTx.graql().parser().parsePattern("(role1: $x, role2: $y) isa relation1"), graknTx.graql().parser().parsePattern("$x label 'entity1'"), ErrorMessage.VALIDATION_RULE_ILLEGAL_ATOMIC_IN_HEAD);
}
Also used : ConceptId(ai.grakn.concept.ConceptId) Test(org.junit.Test)

Example 34 with ConceptId

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

the class TinkerComputeQuery method getExtendedPaths.

final List<List<Concept>> getExtendedPaths(List<List<Concept>> allPaths) {
    List<List<Concept>> extendedPaths = new ArrayList<>();
    for (List<Concept> currentPath : allPaths) {
        boolean hasAttribute = currentPath.stream().anyMatch(Concept::isAttribute);
        if (!hasAttribute) {
            extendedPaths.add(currentPath);
        }
    }
    // If there exist a path without attributes, we don't need to expand any path
    // as paths contain attributes would be longer after implicit relations are added
    int numExtensionAllowed = extendedPaths.isEmpty() ? Integer.MAX_VALUE : 0;
    for (List<Concept> currentPath : allPaths) {
        List<Concept> extendedPath = new ArrayList<>();
        // record the number of extensions needed for the current path
        int numExtension = 0;
        for (int j = 0; j < currentPath.size() - 1; j++) {
            extendedPath.add(currentPath.get(j));
            ConceptId resourceRelationId = Utility.getResourceEdgeId(tx, currentPath.get(j).getId(), currentPath.get(j + 1).getId());
            if (resourceRelationId != null) {
                numExtension++;
                if (numExtension > numExtensionAllowed)
                    break;
                extendedPath.add(tx.getConcept(resourceRelationId));
            }
        }
        if (numExtension == numExtensionAllowed) {
            extendedPath.add(currentPath.get(currentPath.size() - 1));
            extendedPaths.add(extendedPath);
        } else if (numExtension < numExtensionAllowed) {
            extendedPath.add(currentPath.get(currentPath.size() - 1));
            // longer paths are discarded
            extendedPaths.clear();
            extendedPaths.add(extendedPath);
            // update the minimum number of extensions needed so all the paths have the same length
            numExtensionAllowed = numExtension;
        }
    }
    return extendedPaths;
}
Also used : Concept(ai.grakn.concept.Concept) SchemaConcept(ai.grakn.concept.SchemaConcept) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) ConceptId(ai.grakn.concept.ConceptId)

Example 35 with ConceptId

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

the class GrpcServerTest method whenGettingALabelForANonExistentConcept_Throw.

@Test
public void whenGettingALabelForANonExistentConcept_Throw() throws InterruptedException {
    ConceptId id = ConceptId.of("V123456");
    when(tx.getConcept(id)).thenReturn(null);
    try (TxGrpcCommunicator tx = TxGrpcCommunicator.create(stub)) {
        tx.send(openRequest(MYKS, GraknTxType.READ));
        tx.receive().ok();
        tx.send(GrpcUtil.runConceptMethodRequest(id, ConceptMethods.GET_LABEL));
        exception.expect(hasStatus(Status.FAILED_PRECONDITION));
        throw tx.receive().error();
    }
}
Also used : TxGrpcCommunicator(ai.grakn.grpc.TxGrpcCommunicator) ConceptId(ai.grakn.concept.ConceptId) Test(org.junit.Test)

Aggregations

ConceptId (ai.grakn.concept.ConceptId)80 Test (org.junit.Test)55 Concept (ai.grakn.concept.Concept)23 Role (ai.grakn.concept.Role)22 RelationshipType (ai.grakn.concept.RelationshipType)19 GraknTx (ai.grakn.GraknTx)18 EntityType (ai.grakn.concept.EntityType)18 Label (ai.grakn.concept.Label)16 GrpcConcept (ai.grakn.rpc.generated.GrpcConcept)14 Var (ai.grakn.graql.Var)12 List (java.util.List)12 Entity (ai.grakn.concept.Entity)10 AttributeType (ai.grakn.concept.AttributeType)9 HashSet (java.util.HashSet)9 Set (java.util.Set)9 Assert.assertEquals (org.junit.Assert.assertEquals)9 ClassRule (org.junit.ClassRule)9 GraknTxType (ai.grakn.GraknTxType)8 Keyspace (ai.grakn.Keyspace)8 IdPredicate (ai.grakn.graql.internal.reasoner.atom.predicate.IdPredicate)8