use of ai.grakn.concept.Label in project grakn by graknlabs.
the class TinkerComputeQueryRunner method run.
public ComputeJob<Map<Long, Set<String>>> run(DegreeQuery query) {
return runCompute(query, tinkerComputeQuery -> {
Set<Label> ofLabels;
// Check if ofType is valid before returning emptyMap
if (query.targetLabels().isEmpty()) {
ofLabels = tinkerComputeQuery.subLabels();
} else {
ofLabels = query.targetLabels().stream().flatMap(typeLabel -> {
Type type = tx.getSchemaConcept(typeLabel);
if (type == null)
throw GraqlQueryException.labelNotFound(typeLabel);
return type.subs();
}).map(SchemaConcept::getLabel).collect(Collectors.toSet());
}
Set<Label> subLabels = Sets.union(tinkerComputeQuery.subLabels(), ofLabels);
if (!tinkerComputeQuery.selectedTypesHaveInstance()) {
return Collections.emptyMap();
}
Set<LabelId> subLabelIds = convertLabelsToIds(subLabels);
Set<LabelId> ofLabelIds = convertLabelsToIds(ofLabels);
ComputerResult result = tinkerComputeQuery.compute(new DegreeVertexProgram(ofLabelIds), new DegreeDistributionMapReduce(ofLabelIds, DegreeVertexProgram.DEGREE), subLabelIds);
return result.memory().get(DegreeDistributionMapReduce.class.getName());
});
}
use of ai.grakn.concept.Label in project grakn by graknlabs.
the class GrpcServerTest method whenGettingALabel_TheLabelIsReturned.
@Test
public void whenGettingALabel_TheLabelIsReturned() throws InterruptedException {
ConceptId id = ConceptId.of("V123456");
Label label = Label.of("Dunstan");
Concept concept = mock(Concept.class, RETURNS_DEEP_STUBS);
when(tx.getConcept(id)).thenReturn(concept);
when(concept.isSchemaConcept()).thenReturn(true);
when(concept.asSchemaConcept().getLabel()).thenReturn(label);
try (TxGrpcCommunicator tx = TxGrpcCommunicator.create(stub)) {
tx.send(openRequest(MYKS, GraknTxType.READ));
tx.receive().ok();
tx.send(GrpcUtil.runConceptMethodRequest(id, ConceptMethods.GET_LABEL));
assertEquals(label, ConceptMethods.GET_LABEL.get(conceptConverter, client, tx.receive().ok()));
}
}
use of ai.grakn.concept.Label in project grakn by graknlabs.
the class LabelFragmentSet method tryExpandSubs.
/**
* Expand a {@link LabelFragmentSet} to match all sub-concepts of the single existing {@link Label}.
*
* Returns null if there is not exactly one label any of the {@link Label}s mentioned are not in the knowledge base.
*/
@Nullable
LabelFragmentSet tryExpandSubs(Var typeVar, GraknTx tx) {
if (labels().size() != 1)
return null;
Label oldLabel = Iterables.getOnlyElement(labels());
SchemaConcept concept = tx.getSchemaConcept(oldLabel);
if (concept == null)
return null;
Set<Label> newLabels = concept.subs().map(SchemaConcept::getLabel).collect(toSet());
return new AutoValue_LabelFragmentSet(varProperty(), typeVar, ImmutableSet.copyOf(newLabels));
}
use of ai.grakn.concept.Label in project grakn by graknlabs.
the class TypeImpl method deleteAttribute.
/**
* Helper method to delete a {@link AttributeType} which is possible linked to this {@link Type}.
* The link to {@link AttributeType} is removed if <code>attributeToRemove</code> is in the candidate list
* <code>attributeTypes</code>
*
* @param implicitType the {@link Schema.ImplicitType} which specifies which implicit {@link Role} should be removed
* @param attributeTypes The list of candidate which potentially contains the {@link AttributeType} to remove
* @param attributeToRemove the {@link AttributeType} to remove
* @return the {@link Type} itself
*/
private T deleteAttribute(Schema.ImplicitType implicitType, Stream<AttributeType> attributeTypes, AttributeType attributeToRemove) {
if (attributeTypes.anyMatch(a -> a.equals(attributeToRemove))) {
Label label = implicitType.getLabel(attributeToRemove.getLabel());
Role role = vertex().tx().getSchemaConcept(label);
if (role != null)
deletePlays(role);
}
return getThis();
}
use of ai.grakn.concept.Label in project grakn by graknlabs.
the class TypeImpl method has.
/**
* Creates a relation type which allows this type and a {@link ai.grakn.concept.Attribute} type to be linked.
* @param attributeType The {@link AttributeType} which instances of this type should be allowed to play.
* @param has the implicit relation type to build
* @param hasValue the implicit role type to build for the {@link AttributeType}
* @param hasOwner the implicit role type to build for the type
* @param required Indicates if the {@link ai.grakn.concept.Attribute} is required on the entity
* @return The {@link Type} itself
*/
private T has(AttributeType attributeType, Schema.ImplicitType has, Schema.ImplicitType hasValue, Schema.ImplicitType hasOwner, boolean required) {
// Check if this is a met type
checkSchemaMutationAllowed();
// Check if attribute type is the meta
if (Schema.MetaSchema.ATTRIBUTE.getLabel().equals(attributeType.getLabel())) {
throw GraknTxOperationException.metaTypeImmutable(attributeType.getLabel());
}
Label attributeLabel = attributeType.getLabel();
Role ownerRole = vertex().tx().putRoleTypeImplicit(hasOwner.getLabel(attributeLabel));
Role valueRole = vertex().tx().putRoleTypeImplicit(hasValue.getLabel(attributeLabel));
RelationshipType relationshipType = vertex().tx().putRelationTypeImplicit(has.getLabel(attributeLabel)).relates(ownerRole).relates(valueRole);
// Linking with ako structure if present
AttributeType attributeTypeSuper = attributeType.sup();
Label superLabel = attributeTypeSuper.getLabel();
if (!Schema.MetaSchema.ATTRIBUTE.getLabel().equals(superLabel)) {
// Check to make sure we dont add plays edges to meta types accidentally
Role ownerRoleSuper = vertex().tx().putRoleTypeImplicit(hasOwner.getLabel(superLabel));
Role valueRoleSuper = vertex().tx().putRoleTypeImplicit(hasValue.getLabel(superLabel));
RelationshipType relationshipTypeSuper = vertex().tx().putRelationTypeImplicit(has.getLabel(superLabel)).relates(ownerRoleSuper).relates(valueRoleSuper);
// Create the super type edges from sub role/relations to super roles/relation
ownerRole.sup(ownerRoleSuper);
valueRole.sup(valueRoleSuper);
relationshipType.sup(relationshipTypeSuper);
// Make sure the supertype attribute is linked with the role as well
((AttributeTypeImpl) attributeTypeSuper).plays(valueRoleSuper);
}
this.plays(ownerRole, required);
// TODO: Use explicit cardinality of 0-1 rather than just false
((AttributeTypeImpl) attributeType).plays(valueRole, false);
return getThis();
}
Aggregations