use of ai.grakn.graql.internal.analytics.ShortestPathVertexProgram in project grakn by graknlabs.
the class TinkerComputeQueryRunner method run.
public TinkerComputeJob<List<List<Concept>>> run(PathsQuery query) {
return runCompute(query, tinkerComputeQuery -> {
ConceptId sourceId = query.from();
ConceptId destinationId = query.to();
if (!tinkerComputeQuery.verticesExistInSubgraph(sourceId, destinationId)) {
throw GraqlQueryException.instanceDoesNotExist();
}
if (sourceId.equals(destinationId)) {
return Collections.singletonList(Collections.singletonList(tx.getConcept(sourceId)));
}
ComputerResult result;
Set<LabelId> subLabelIds = convertLabelsToIds(tinkerComputeQuery.subLabels());
try {
result = tinkerComputeQuery.compute(new ShortestPathVertexProgram(sourceId, destinationId), null, subLabelIds);
} catch (NoResultException e) {
return Collections.emptyList();
}
Multimap<Concept, Concept> predecessorMapFromSource = tinkerComputeQuery.getPredecessorMap(result);
List<List<Concept>> allPaths = tinkerComputeQuery.getAllPaths(predecessorMapFromSource, sourceId);
if (tinkerComputeQuery.isAttributeIncluded()) {
// this can be slow
return tinkerComputeQuery.getExtendedPaths(allPaths);
}
LOG.info("Number of paths: " + allPaths.size());
return allPaths;
});
}
Aggregations