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);
}
}
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));
}
}
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);
}
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;
}
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();
}
}
Aggregations