Search in sources :

Example 16 with RelationshipType

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

the class GraqlTest method testStatisticsMethods.

@Test
public void testStatisticsMethods() throws InvalidKBException {
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        Label resourceTypeId = Label.of("my-resource");
        AttributeType<Long> resource = graph.putAttributeType(resourceTypeId, AttributeType.DataType.LONG);
        EntityType thingy = graph.putEntityType("thingy");
        thingy.attribute(resource);
        Entity theResourceOwner = thingy.addEntity();
        Role resourceOwner = graph.getRole(Schema.ImplicitType.HAS_OWNER.getLabel(resourceTypeId).getValue());
        Role resourceValue = graph.getRole(Schema.ImplicitType.HAS_VALUE.getLabel(resourceTypeId).getValue());
        RelationshipType relationshipType = graph.getRelationshipType(Schema.ImplicitType.HAS.getLabel(resourceTypeId).getValue());
        relationshipType.addRelationship().addRolePlayer(resourceOwner, theResourceOwner).addRolePlayer(resourceValue, resource.putAttribute(1L));
        relationshipType.addRelationship().addRolePlayer(resourceOwner, theResourceOwner).addRolePlayer(resourceValue, resource.putAttribute(2L));
        relationshipType.addRelationship().addRolePlayer(resourceOwner, theResourceOwner).addRolePlayer(resourceValue, resource.putAttribute(3L));
        graph.commit();
    }
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        // use graql to compute various statistics
        Optional<? extends Number> result = graph.graql().<SumQuery>parse("compute sum of my-resource;").execute();
        assertEquals(Optional.of(6L), result);
        result = graph.graql().<MinQuery>parse("compute min of my-resource;").execute();
        assertEquals(Optional.of(1L), result);
        result = graph.graql().<MaxQuery>parse("compute max of my-resource;").execute();
        assertEquals(Optional.of(3L), result);
        result = graph.graql().<MeanQuery>parse("compute mean of my-resource;").execute();
        assert result.isPresent();
        assertEquals(2.0, (Double) result.get(), 0.1);
        result = graph.graql().<MedianQuery>parse("compute median of my-resource;").execute();
        assertEquals(Optional.of(2L), result);
    }
}
Also used : Entity(ai.grakn.concept.Entity) Label(ai.grakn.concept.Label) RelationshipType(ai.grakn.concept.RelationshipType) MedianQuery(ai.grakn.graql.analytics.MedianQuery) MeanQuery(ai.grakn.graql.analytics.MeanQuery) MaxQuery(ai.grakn.graql.analytics.MaxQuery) EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) MinQuery(ai.grakn.graql.analytics.MinQuery) Test(org.junit.Test)

Example 17 with RelationshipType

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

the class AnalyticsTest method addSchemaAndEntities.

private void addSchemaAndEntities() throws InvalidKBException {
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        EntityType entityType1 = graph.putEntityType(thingy);
        EntityType entityType2 = graph.putEntityType(anotherThing);
        Entity entity1 = entityType1.addEntity();
        Entity entity2 = entityType1.addEntity();
        Entity entity3 = entityType1.addEntity();
        Entity entity4 = entityType2.addEntity();
        entityId1 = entity1.getId().getValue();
        entityId2 = entity2.getId().getValue();
        entityId3 = entity3.getId().getValue();
        entityId4 = entity4.getId().getValue();
        Role role1 = graph.putRole("role1");
        Role role2 = graph.putRole("role2");
        entityType1.plays(role1).plays(role2);
        entityType2.plays(role1).plays(role2);
        RelationshipType relationshipType = graph.putRelationshipType(related).relates(role1).relates(role2);
        relationId12 = relationshipType.addRelationship().addRolePlayer(role1, entity1).addRolePlayer(role2, entity2).getId().getValue();
        relationId24 = relationshipType.addRelationship().addRolePlayer(role1, entity2).addRolePlayer(role2, entity4).getId().getValue();
        graph.commit();
    }
}
Also used : EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) Entity(ai.grakn.concept.Entity) RelationshipType(ai.grakn.concept.RelationshipType)

Example 18 with RelationshipType

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

the class AnalyticsTest method testNullResourceDoesNotBreakAnalytics.

@Test
public void testNullResourceDoesNotBreakAnalytics() throws InvalidKBException {
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        // make slightly odd graph
        Label resourceTypeId = Label.of("degree");
        EntityType thingy = graph.putEntityType("thingy");
        AttributeType<Long> attribute = graph.putAttributeType(resourceTypeId, AttributeType.DataType.LONG);
        thingy.attribute(attribute);
        Role degreeOwner = graph.getRole(Schema.ImplicitType.HAS_OWNER.getLabel(resourceTypeId).getValue());
        Role degreeValue = graph.getRole(Schema.ImplicitType.HAS_VALUE.getLabel(resourceTypeId).getValue());
        RelationshipType relationshipType = graph.putRelationshipType(Schema.ImplicitType.HAS.getLabel(resourceTypeId)).relates(degreeOwner).relates(degreeValue);
        thingy.plays(degreeOwner);
        Entity thisThing = thingy.addEntity();
        relationshipType.addRelationship().addRolePlayer(degreeOwner, thisThing);
        graph.commit();
    }
    // the null role-player caused analytics to fail at some stage
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        graph.graql().compute().centrality().usingDegree().execute();
    } catch (RuntimeException e) {
        e.printStackTrace();
        fail();
    }
}
Also used : EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) Entity(ai.grakn.concept.Entity) Label(ai.grakn.concept.Label) RelationshipType(ai.grakn.concept.RelationshipType) Test(org.junit.Test)

Example 19 with RelationshipType

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

the class CorenessTest method testDisconnectedCores.

@Test
public void testDisconnectedCores() {
    try (GraknTx graph = session.open(GraknTxType.WRITE)) {
        EntityType entityType1 = graph.putEntityType(thing);
        EntityType entityType2 = graph.putEntityType(anotherThing);
        Role role1 = graph.putRole("role1");
        Role role2 = graph.putRole("role2");
        RelationshipType relationshipType1 = graph.putRelationshipType(related).relates(role1).relates(role2);
        Role role3 = graph.putRole("role3");
        Role role4 = graph.putRole("role4");
        RelationshipType relationshipType2 = graph.putRelationshipType(veryRelated).relates(role3).relates(role4);
        entityType1.plays(role1).plays(role2).plays(role3).plays(role4);
        entityType2.plays(role1).plays(role2).plays(role3).plays(role4);
        Entity entity0 = entityType1.addEntity();
        Entity entity1 = entityType1.addEntity();
        Entity entity2 = entityType1.addEntity();
        Entity entity3 = entityType1.addEntity();
        Entity entity4 = entityType1.addEntity();
        Entity entity5 = entityType1.addEntity();
        Entity entity6 = entityType1.addEntity();
        Entity entity7 = entityType1.addEntity();
        Entity entity8 = entityType1.addEntity();
        relationshipType1.addRelationship().addRolePlayer(role1, entity1).addRolePlayer(role2, entity2);
        relationshipType1.addRelationship().addRolePlayer(role1, entity2).addRolePlayer(role2, entity3);
        relationshipType1.addRelationship().addRolePlayer(role1, entity3).addRolePlayer(role2, entity4);
        relationshipType1.addRelationship().addRolePlayer(role1, entity1).addRolePlayer(role2, entity3);
        relationshipType1.addRelationship().addRolePlayer(role1, entity1).addRolePlayer(role2, entity4);
        relationshipType1.addRelationship().addRolePlayer(role1, entity2).addRolePlayer(role2, entity4);
        relationshipType1.addRelationship().addRolePlayer(role1, entity5).addRolePlayer(role2, entity6);
        relationshipType2.addRelationship().addRolePlayer(role3, entity5).addRolePlayer(role4, entity7);
        relationshipType2.addRelationship().addRolePlayer(role3, entity5).addRolePlayer(role4, entity8);
        relationshipType2.addRelationship().addRolePlayer(role3, entity6).addRolePlayer(role4, entity7);
        relationshipType2.addRelationship().addRolePlayer(role3, entity6).addRolePlayer(role4, entity8);
        relationshipType2.addRelationship().addRolePlayer(role3, entity7).addRolePlayer(role4, entity8);
        relationshipType1.addRelationship().addRolePlayer(role1, entity0).addRolePlayer(role2, entity1);
        relationshipType1.addRelationship().addRolePlayer(role1, entity0).addRolePlayer(role2, entity8);
        graph.commit();
    }
    Map<Long, Set<String>> result;
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        result = graph.graql().compute().centrality().usingKCore().execute();
        assertEquals(2, result.size());
        assertEquals(8, result.get(3L).size());
        assertEquals(1, result.get(2L).size());
        result = graph.graql().compute().centrality().usingKCore().minK(3L).execute();
        assertEquals(1, result.size());
        assertEquals(8, result.get(3L).size());
    }
}
Also used : EntityType(ai.grakn.concept.EntityType) Role(ai.grakn.concept.Role) GraknTx(ai.grakn.GraknTx) Entity(ai.grakn.concept.Entity) Set(java.util.Set) RelationshipType(ai.grakn.concept.RelationshipType) Test(org.junit.Test)

Example 20 with RelationshipType

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

the class DegreeTest method testDegreesSimple.

@Test
public void testDegreesSimple() {
    // create instances
    EntityType thingy = tx.putEntityType("thingy");
    EntityType anotherThing = tx.putEntityType("another");
    ConceptId entity1 = thingy.addEntity().getId();
    ConceptId entity2 = thingy.addEntity().getId();
    ConceptId entity3 = thingy.addEntity().getId();
    ConceptId entity4 = anotherThing.addEntity().getId();
    Role role1 = tx.putRole("role1");
    Role role2 = tx.putRole("role2");
    thingy.plays(role1).plays(role2);
    anotherThing.plays(role1).plays(role2);
    RelationshipType related = tx.putRelationshipType("related").relates(role1).relates(role2);
    // relate them
    related.addRelationship().addRolePlayer(role1, tx.getConcept(entity1)).addRolePlayer(role2, tx.getConcept(entity2));
    related.addRelationship().addRolePlayer(role1, tx.getConcept(entity2)).addRolePlayer(role2, tx.getConcept(entity3));
    related.addRelationship().addRolePlayer(role1, tx.getConcept(entity2)).addRolePlayer(role2, tx.getConcept(entity4));
    tx.commit();
    tx = session.open(GraknTxType.READ);
    Map<ConceptId, Long> correctDegrees = new HashMap<>();
    correctDegrees.put(entity1, 1L);
    correctDegrees.put(entity2, 3L);
    correctDegrees.put(entity3, 1L);
    correctDegrees.put(entity4, 1L);
    // compute degrees
    List<Long> list = new ArrayList<>(4);
    long workerNumber = 4L;
    if (GraknTestUtil.usingTinker())
        workerNumber = 1L;
    for (long i = 0L; i < workerNumber; i++) {
        list.add(i);
    }
    tx.close();
    Set<Map<Long, Set<String>>> result = list.parallelStream().map(i -> {
        try (GraknTx graph = session.open(GraknTxType.READ)) {
            return graph.graql().compute().centrality().usingDegree().execute();
        }
    }).collect(Collectors.toSet());
    assertEquals(1, result.size());
    Map<Long, Set<String>> degrees0 = result.iterator().next();
    assertEquals(2, degrees0.size());
    degrees0.forEach((key, value) -> value.forEach(id -> {
        assertTrue(correctDegrees.containsKey(ConceptId.of(id)));
        assertEquals(correctDegrees.get(ConceptId.of(id)), key);
    }));
    try (GraknTx graph = session.open(GraknTxType.READ)) {
        Map<Long, Set<String>> degrees1 = graph.graql().compute().centrality().usingDegree().of("thingy").execute();
        assertEquals(2, degrees1.size());
        assertEquals(2, degrees1.get(1L).size());
        assertEquals(1, degrees1.get(3L).size());
        degrees1.forEach((key, value) -> value.forEach(id -> {
            assertTrue(correctDegrees.containsKey(ConceptId.of(id)));
            assertEquals(correctDegrees.get(ConceptId.of(id)), key);
        }));
        Map<Long, Set<String>> degrees2 = graph.graql().compute().centrality().usingDegree().of("thingy", "related").execute();
        assertEquals(degrees1, degrees2);
        degrees2 = graph.graql().compute().centrality().usingDegree().of().execute();
        assertEquals(degrees0, degrees2);
        // compute degrees on subgraph
        Map<Long, Set<String>> degrees3 = graph.graql().compute().centrality().usingDegree().in("thingy", "related").execute();
        assertEquals(degrees1, degrees3);
        degrees3 = graph.graql().compute().centrality().usingDegree().of("thingy").in("related").execute();
        assertEquals(degrees1, degrees3);
    }
}
Also used : InvalidKBException(ai.grakn.exception.InvalidKBException) GraknTestUtil(ai.grakn.util.GraknTestUtil) Role(ai.grakn.concept.Role) Entity(ai.grakn.concept.Entity) HashMap(java.util.HashMap) EntityType(ai.grakn.concept.EntityType) ArrayList(java.util.ArrayList) Attribute(ai.grakn.concept.Attribute) SessionContext(ai.grakn.test.rule.SessionContext) HashSet(java.util.HashSet) Label(ai.grakn.concept.Label) AttributeType(ai.grakn.concept.AttributeType) RelationshipType(ai.grakn.concept.RelationshipType) GraknTx(ai.grakn.GraknTx) Map(java.util.Map) ConceptId(ai.grakn.concept.ConceptId) Relationship(ai.grakn.concept.Relationship) ClassRule(org.junit.ClassRule) Before(org.junit.Before) GraknTxType(ai.grakn.GraknTxType) GraknSession(ai.grakn.GraknSession) Set(java.util.Set) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) List(java.util.List) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) HashSet(java.util.HashSet) Set(java.util.Set) HashMap(java.util.HashMap) 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) HashMap(java.util.HashMap) Map(java.util.Map) Test(org.junit.Test)

Aggregations

RelationshipType (ai.grakn.concept.RelationshipType)127 Role (ai.grakn.concept.Role)105 Test (org.junit.Test)91 EntityType (ai.grakn.concept.EntityType)80 Entity (ai.grakn.concept.Entity)52 GraknTx (ai.grakn.GraknTx)39 Relationship (ai.grakn.concept.Relationship)25 ConceptId (ai.grakn.concept.ConceptId)23 Label (ai.grakn.concept.Label)21 HashSet (java.util.HashSet)20 Set (java.util.Set)20 AttributeType (ai.grakn.concept.AttributeType)17 Thing (ai.grakn.concept.Thing)17 Attribute (ai.grakn.concept.Attribute)16 Schema (ai.grakn.util.Schema)12 Collectors (java.util.stream.Collectors)12 List (java.util.List)11 GraknSession (ai.grakn.GraknSession)10 GraknTxType (ai.grakn.GraknTxType)10 Concept (ai.grakn.concept.Concept)10