Search in sources :

Example 1 with ShortestPathVertexProgram

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;
    });
}
Also used : Concept(ai.grakn.concept.Concept) SchemaConcept(ai.grakn.concept.SchemaConcept) ShortestPathVertexProgram(ai.grakn.graql.internal.analytics.ShortestPathVertexProgram) ComputerResult(org.apache.tinkerpop.gremlin.process.computer.ComputerResult) List(java.util.List) LabelId(ai.grakn.concept.LabelId) NoResultException(ai.grakn.graql.internal.analytics.NoResultException) ConceptId(ai.grakn.concept.ConceptId)

Aggregations

Concept (ai.grakn.concept.Concept)1 ConceptId (ai.grakn.concept.ConceptId)1 LabelId (ai.grakn.concept.LabelId)1 SchemaConcept (ai.grakn.concept.SchemaConcept)1 NoResultException (ai.grakn.graql.internal.analytics.NoResultException)1 ShortestPathVertexProgram (ai.grakn.graql.internal.analytics.ShortestPathVertexProgram)1 List (java.util.List)1 ComputerResult (org.apache.tinkerpop.gremlin.process.computer.ComputerResult)1