Example usage for com.google.common.graph Network nodes

List of usage examples for com.google.common.graph Network nodes

Introduction

In this page you can find the example usage for com.google.common.graph Network nodes.

Prototype

Set<N> nodes();

Source Link

Document

Returns all nodes in this graph.

Usage

From source file:edu.uci.ics.jung.graph.util.TreeUtils.java

/**
 * A graph is "forest-shaped" if it is directed, acyclic, and each node has at most one
 * predecessor./*from ww  w. j  a  v  a2 s  . co m*/
 */
public static <N> boolean isForestShaped(Network<N, ?> graph) {
    checkNotNull(graph, "graph");
    return graph.isDirected() && !Graphs.hasCycle(graph)
            && graph.nodes().stream().allMatch(node -> graph.predecessors(node).size() <= 1);
}

From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java

/**
 * Returns a list of all distinct paths from roots of the network to leaves. The list can be in
 * arbitrary orders and can contain duplicate paths if there are multiple edges from two nodes.
 *///w  ww.  j a va 2  s.  com
public static <NodeT, EdgeT> List<List<NodeT>> allPathsFromRootsToLeaves(Network<NodeT, EdgeT> network) {
    ArrayDeque<List<NodeT>> paths = new ArrayDeque<>();
    // Populate the list with all roots
    for (NodeT node : network.nodes()) {
        if (network.inDegree(node) == 0) {
            paths.add(ImmutableList.of(node));
        }
    }

    List<List<NodeT>> distinctPathsFromRootsToLeaves = new ArrayList<>();
    while (!paths.isEmpty()) {
        List<NodeT> path = paths.removeFirst();
        NodeT lastNode = path.get(path.size() - 1);
        if (network.outDegree(lastNode) == 0) {
            distinctPathsFromRootsToLeaves.add(new ArrayList<>(path));
        } else {
            for (EdgeT edge : network.outEdges(lastNode)) {
                paths.addFirst(ImmutableList.<NodeT>builder().addAll(path)
                        .add(network.incidentNodes(edge).target()).build());
            }
        }
    }
    return distinctPathsFromRootsToLeaves;
}

From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java

public static <N, E> String toDot(Network<N, E> network) {
    StringBuilder builder = new StringBuilder();
    builder.append("digraph network {\n");
    Map<N, String> nodeName = Maps.newIdentityHashMap();
    network.nodes().forEach(node -> nodeName.put(node, "n" + nodeName.size()));
    for (Entry<N, String> nodeEntry : nodeName.entrySet()) {
        builder.append(String.format("  %s [fontname=\"Courier New\" label=\"%s\"];\n", nodeEntry.getValue(),
                escapeDot(nodeEntry.getKey().toString())));
    }//from   www.  j  av a  2 s  . co m
    for (E edge : network.edges()) {
        EndpointPair<N> endpoints = network.incidentNodes(edge);
        builder.append(String.format("  %s -> %s [fontname=\"Courier New\" label=\"%s\"];\n",
                nodeName.get(endpoints.source()), nodeName.get(endpoints.target()),
                escapeDot(edge.toString())));
    }
    builder.append("}");
    return builder.toString();
}

From source file:org.apache.beam.runners.core.construction.graph.Networks.java

public static <NodeT, EdgeT> String toDot(Network<NodeT, EdgeT> network) {
    StringBuilder builder = new StringBuilder();
    builder.append(String.format("digraph network {%n"));
    Map<NodeT, String> nodeName = Maps.newIdentityHashMap();
    network.nodes().forEach(node -> nodeName.put(node, "n" + nodeName.size()));
    for (Entry<NodeT, String> nodeEntry : nodeName.entrySet()) {
        builder.append(String.format("  %s [fontname=\"Courier New\" label=\"%s\"];%n", nodeEntry.getValue(),
                escapeDot(nodeEntry.getKey().toString())));
    }/*from  w ww . ja va 2s  .co m*/
    for (EdgeT edge : network.edges()) {
        EndpointPair<NodeT> endpoints = network.incidentNodes(edge);
        builder.append(String.format("  %s -> %s [fontname=\"Courier New\" label=\"%s\"];%n",
                nodeName.get(endpoints.source()), nodeName.get(endpoints.target()),
                escapeDot(edge.toString())));
    }
    builder.append("}");
    return builder.toString();
}

From source file:org.apache.beam.runners.core.construction.graph.Networks.java

/**
 * Return a set of nodes in sorted topological order.
 *
 * <p>Note that back edges within directed graphs are "broken" returning a topological order for a
 * directed acyclic network which approximates the original network.
 *
 * <p>Nodes will be considered in the order specified by the {@link
 * ElementOrder#sorted(Comparator) sorted ElementOrder} created with the provided comparator.
 *//*from   w ww  .ja  v  a2s  . c o m*/
public static <NodeT, EdgeT> Iterable<NodeT> topologicalOrder(Network<NodeT, EdgeT> network,
        Comparator<NodeT> nodeOrder) {
    // Copy the characteristics of the network to ensure that the result network can represent the
    // original network, just with the provided suborder
    MutableNetwork<NodeT, EdgeT> orderedNetwork = NetworkBuilder.from(network)
            .nodeOrder(ElementOrder.sorted(nodeOrder)).build();
    for (NodeT node : network.nodes()) {
        orderedNetwork.addNode(node);
    }
    for (EdgeT edge : network.edges()) {
        EndpointPair<NodeT> incident = network.incidentNodes(edge);
        orderedNetwork.addEdge(incident.source(), incident.target(), edge);
    }
    return computeTopologicalOrder(orderedNetwork);
}

From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java

/** Returns a set of nodes sorted in topological order. */
public static <N, E> Set<N> topologicalOrder(Network<N, E> network) {
    // TODO: Upgrade Guava and remove this method if topological sorting becomes
    // supported externally or remove this comment if its not going to be supported externally.

    checkArgument(network.isDirected(), "Only directed networks are supported, given %s", network);
    checkArgument(!network.allowsSelfLoops(), "Only networks without self loops are supported, given %s",
            network);/*w ww.j  a va 2 s. co m*/

    // Linked hashset will prevent duplicates from appearing and will maintain insertion order.
    LinkedHashSet<N> nodes = new LinkedHashSet<>(network.nodes().size());
    Queue<N> processingOrder = new ArrayDeque<>();
    // Add all the roots
    for (N node : network.nodes()) {
        if (network.inDegree(node) == 0) {
            processingOrder.add(node);
        }
    }

    while (!processingOrder.isEmpty()) {
        N current = processingOrder.remove();
        // If all predecessors have already been added, then we can add this node, otherwise
        // we need to add the node to the back of the processing queue.
        if (nodes.containsAll(network.predecessors(current))) {
            nodes.add(current);
            processingOrder.addAll(network.successors(current));
        } else {
            processingOrder.add(current);
        }
    }

    return nodes;
}

From source file:dagger.internal.codegen.BindingGraphConverter.java

private ComponentNode rootComponentNode(Network<Node, Edge> network) {
    return (ComponentNode) Iterables.find(network.nodes(),
            node -> node instanceof ComponentNode && node.componentPath().atRoot());
}

From source file:edu.uci.ics.jung.visualization.BaseVisualizationModel.java

public void setNetwork(Network<N, E> network, boolean forceUpdate) {
    log.trace("setNetwork to n:{} e:{}", network.nodes(), network.edges());
    this.network = network;
    this.layoutModel.setGraph(network.asGraph());
    if (forceUpdate && this.layoutAlgorithm != null) {
        log.trace("will accept {}", layoutAlgorithm);
        layoutModel.accept(this.layoutAlgorithm);
        log.trace("will fire stateChanged");
        changeSupport.fireStateChanged();
        log.trace("fired stateChanged");
    }//from  ww  w.j  av  a  2  s. c  o m
}

From source file:edu.uci.ics.jung.visualization.renderers.BasicRenderer.java

@Override
public void render(RenderContext<N, E> renderContext, VisualizationModel<N, E> visualizationModel) {
    Network<N, E> network = visualizationModel.getNetwork();
    // paint all the edges
    try {/* w w w .  j  av  a  2s  .c  om*/
        for (E e : network.edges()) {
            renderEdge(renderContext, visualizationModel, e);
            renderEdgeLabel(renderContext, visualizationModel, e);
        }
    } catch (ConcurrentModificationException cme) {
        renderContext.getScreenDevice().repaint();
    }

    // paint all the nodes
    try {
        for (N v : network.nodes()) {
            renderNode(renderContext, visualizationModel, v);
            renderNodeLabel(renderContext, visualizationModel, v);
        }
    } catch (ConcurrentModificationException cme) {
        renderContext.getScreenDevice().repaint();
    }
}