Search in sources :

Example 6 with PathExpander

use of org.neo4j.graphdb.PathExpander in project neo4j by neo4j.

the class DatabaseActions method getNodeRelationships.

@SuppressWarnings("unchecked")
public ListRepresentation getNodeRelationships(long nodeId, RelationshipDirection direction, Collection<String> types) throws NodeNotFoundException {
    Node node = node(nodeId);
    PathExpander expander;
    if (types.isEmpty()) {
        expander = PathExpanders.forDirection(direction.internal);
    } else {
        PathExpanderBuilder builder = PathExpanderBuilder.empty();
        for (String type : types) {
            builder = builder.add(RelationshipType.withName(type), direction.internal);
        }
        expander = builder.build();
    }
    return RelationshipRepresentation.list(expander.expand(Paths.singleNodePath(node), BranchState.NO_STATE));
}
Also used : Node(org.neo4j.graphdb.Node) PathExpander(org.neo4j.graphdb.PathExpander) PathExpanderBuilder(org.neo4j.graphdb.PathExpanderBuilder)

Example 7 with PathExpander

use of org.neo4j.graphdb.PathExpander in project neo4j by neo4j.

the class RelationshipExpanderBuilderTest method shouldInterpretSomeSpecifiedRelationships.

@Test
public void shouldInterpretSomeSpecifiedRelationships() throws Exception {
    // GIVEN
    Node node = createSomeData();
    PathExpander expander = RelationshipExpanderBuilder.describeRelationships(map("relationships", map("type", MyRelTypes.TEST.name(), "direction", RelationshipDirection.out.name())));
    // WHEN
    Set<Relationship> expanded;
    try (Transaction tx = db.beginTx()) {
        expanded = asSet(expander.expand(singleNodePath(node), NO_STATE));
        tx.success();
    }
    try (Transaction tx = db.beginTx()) {
        // THEN
        assertEquals(asSet(node.getRelationships(MyRelTypes.TEST)), expanded);
        tx.success();
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) Relationship(org.neo4j.graphdb.Relationship) PathExpander(org.neo4j.graphdb.PathExpander) Test(org.junit.Test)

Example 8 with PathExpander

use of org.neo4j.graphdb.PathExpander in project neo4j by neo4j.

the class TestOrderByTypeExpander method evenDifferentDirectionsKeepsOrder.

@Test
void evenDifferentDirectionsKeepsOrder() {
    PathExpander expander = new OrderedByTypeExpander().add(next, INCOMING).add(firstComment).add(comment).add(next, OUTGOING);
    try (Transaction transaction = beginTx()) {
        Iterator<Node> itr = transaction.traversalDescription().depthFirst().expand(expander).traverse(transaction.getNodeById(node("A2").getId())).nodes().iterator();
        assertOrder(transaction, itr, "A2", "A1", "C1", "C2", "C3", "C4", "C5", "C6", "A3", "C7", "C8", "C9");
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) PathExpander(org.neo4j.graphdb.PathExpander) OrderedByTypeExpander(org.neo4j.graphdb.impl.OrderedByTypeExpander) Test(org.junit.jupiter.api.Test)

Example 9 with PathExpander

use of org.neo4j.graphdb.PathExpander in project neo4j by neo4j.

the class TestOrderByTypeExpander method makeSureNodesAreTraversedInCorrectOrder.

@Test
void makeSureNodesAreTraversedInCorrectOrder() {
    try (Transaction transaction = beginTx()) {
        PathExpander expander = new OrderedByTypeExpander().add(firstComment).add(comment).add(next);
        Iterator<Node> itr = transaction.traversalDescription().depthFirst().expand(expander).traverse(transaction.getNodeById(node("A1").getId())).nodes().iterator();
        assertOrder(transaction, itr, "A1", "C1", "C2", "C3", "A2", "C4", "C5", "C6", "A3", "C7", "C8", "C9");
        expander = new OrderedByTypeExpander().add(next).add(firstComment).add(comment);
        itr = transaction.traversalDescription().depthFirst().expand(expander).traverse(transaction.getNodeById(node("A1").getId())).nodes().iterator();
        assertOrder(transaction, itr, "A1", "A2", "A3", "C7", "C8", "C9", "C4", "C5", "C6", "C1", "C2", "C3");
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) PathExpander(org.neo4j.graphdb.PathExpander) OrderedByTypeExpander(org.neo4j.graphdb.impl.OrderedByTypeExpander) Test(org.junit.jupiter.api.Test)

Example 10 with PathExpander

use of org.neo4j.graphdb.PathExpander in project neo4j by neo4j.

the class TestAStar method canUseBranchState.

@SuppressWarnings({ "rawtypes", "unchecked" })
@ParameterizedTest
@MethodSource("params")
void canUseBranchState(Function<EvaluationContext, PathFinder<WeightedPath>> finderFactory) {
    /**
     * <pre>
     *   012345    A - B:  2
     *  +------>y  A - B:  2
     * 0|A         B - C:  3
     * 1|          A - C:  10
     * 2| B
     * 3|
     * 4|
     * 5|
     * 6|
     * 7|C
     *  V
     *  x
     *
     * </pre>
     */
    try (Transaction transaction = graphDb.beginTx()) {
        Node nodeA = graph.makeNode(transaction, "A", "x", 0d, "y", 0d);
        Node nodeB = graph.makeNode(transaction, "B", "x", 2d, "y", 1d);
        Node nodeC = graph.makeNode(transaction, "C", "x", 7d, "y", 0d);
        graph.makeEdge(transaction, "A", "B", "length", 2d);
        graph.makeEdge(transaction, "A", "B", "length", 2d);
        graph.makeEdge(transaction, "B", "C", "length", 3d);
        graph.makeEdge(transaction, "A", "C", "length", 10d);
        final Map<Node, Double> seenBranchStates = new HashMap<>();
        PathExpander<Double> expander = new PathExpander<Double>() {

            @Override
            public Iterable<Relationship> expand(Path path, BranchState<Double> state) {
                double newState = state.getState();
                if (path.length() > 0) {
                    newState += (Double) path.lastRelationship().getProperty("length");
                    state.setState(newState);
                }
                seenBranchStates.put(path.endNode(), newState);
                return path.endNode().getRelationships(OUTGOING);
            }

            @Override
            public PathExpander<Double> reverse() {
                throw new UnsupportedOperationException();
            }
        };
        double initialStateValue = 0D;
        var context = new BasicEvaluationContext(transaction, graphDb);
        PathFinder<WeightedPath> traversalFinder = new TraversalAStar<>(context, expander, new InitialBranchState.State(initialStateValue, initialStateValue), doubleCostEvaluator("length"), ESTIMATE_EVALUATOR);
        WeightedPath path = traversalFinder.findSinglePath(nodeA, nodeC);
        assertEquals((Double) 5.0D, (Double) path.weight());
        assertPathDef(path, "A", "B", "C");
        assertEquals(MapUtil.<Node, Double>genericMap(nodeA, 0D, nodeB, 2D), seenBranchStates);
        transaction.commit();
    }
}
Also used : WeightedPath(org.neo4j.graphalgo.WeightedPath) Path(org.neo4j.graphdb.Path) TraversalAStar(org.neo4j.graphalgo.impl.path.TraversalAStar) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) HashMap(java.util.HashMap) Node(org.neo4j.graphdb.Node) PathExpander(org.neo4j.graphdb.PathExpander) BranchState(org.neo4j.graphdb.traversal.BranchState) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) BasicEvaluationContext(org.neo4j.graphalgo.BasicEvaluationContext) WeightedPath(org.neo4j.graphalgo.WeightedPath) Transaction(org.neo4j.graphdb.Transaction) Relationship(org.neo4j.graphdb.Relationship) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Aggregations

PathExpander (org.neo4j.graphdb.PathExpander)13 Node (org.neo4j.graphdb.Node)12 Transaction (org.neo4j.graphdb.Transaction)8 Path (org.neo4j.graphdb.Path)6 Test (org.junit.jupiter.api.Test)5 Relationship (org.neo4j.graphdb.Relationship)5 Test (org.junit.Test)4 BranchState (org.neo4j.graphdb.traversal.BranchState)4 BasicEvaluationContext (org.neo4j.graphalgo.BasicEvaluationContext)3 WeightedPath (org.neo4j.graphalgo.WeightedPath)3 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 TraversalAStar (org.neo4j.graphalgo.impl.path.TraversalAStar)2 PathExpanderBuilder (org.neo4j.graphdb.PathExpanderBuilder)2 OrderedByTypeExpander (org.neo4j.graphdb.impl.OrderedByTypeExpander)2 Neo4jAlgoTestCase (common.Neo4jAlgoTestCase)1 R1 (common.Neo4jAlgoTestCase.MyRelTypes.R1)1 Arrays.asList (java.util.Arrays.asList)1 Collection (java.util.Collection)1 HashSet (java.util.HashSet)1