Top

janalyst module

Java analyst class wrapper Copyright 2015, Oracle and/or its affiliates. All rights reserved.

#from pgx_proxies import *
"""
Java analyst class wrapper
Copyright 2015, Oracle and/or its affiliates. All rights reserved.
"""
def _fetch_promise(promise):
    try:
        return promise.get()
    except Exception as e:
        print e
        return None

class Janalyst():
    analyst_context = None
    def __init__(self, pgxGraph, a):
        self.graph = pgxGraph
        self.analyst_context = a

    def undirect(self):
        """
        Returns a new analyst with an undirected version of the graph
        """
        new_graph = self.graph.undirect()
        return Janalyst(new_graph, self.analyst_context)

    def pgx_graph(self):
        """
        Returns a PgxGraph object for futher manipulation
        """
        return self.graph

    def adamicAdar(self):
        """
        computes 'Adamic-Adar measure' for each edge in graph.
        """
        promise = self.analyst_context.adamicAdarCountingAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def countTriangles(self):
        """
        Counts the number of 'triads' in the given undirected graph
        """
        promise = self.analyst_context.countTrianglesAsync(self.graph, True)
        return _fetch_promise(promise)

    def eigenvectorCentrality(self, max=100, maxDiff=0.01, useL2Norm=True, useInEdge=True):
        """
        compute eigenvector centrality using power iteration (with L1 norm).
        """
        promise = self.analyst_context.eigenvectorCentralityAsync(self.graph, max, maxDiff, useL2Norm, useInEdge)
        return PropertyProxy(_fetch_promise(promise))

    def betweenness(self, k=10):
        """
        approximate node betweenness centrality (without considering edge length).
        """
        promise = self.analyst_context.approximateNodeBetweennessCentralityAsync(self.graph, k)
        return PropertyProxy(_fetch_promise(promise))

    def closenessCentrality(self, costPropertyName):
        """
        compute closed centrality.
        """
        promise = self.analyst_context.closenessCentralityDoubleLengthAsync(self.graph, costPropertyName)
        return PropertyProxy(_fetch_promise(promise))

    def closenessCentralityUnit(self):
        """
        compute closed centrality.
        """
        promise = self.analyst_context.closenessCentralityUnitLengthAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def communities(self):
        """
        detect communities using parallel label propagation.
        """
        promise = self.analyst_context.communitiesLabelPropagationAsync(self.graph)
        return ComponentProxy(_fetch_promise(promise))

    def stronglyConnected(self, algo="tarjan"):
        """
        Find strongly connected components using Tarjan's or Kosaraju's algorithm.
        """
        promise = None
        if algo == "tarjan":
            promise = self.analyst_context.sccTarjanAsync(self.graph)
        else:
            promise = self.analsyt_context.sccKosarajuAsync(self.graph)

        return ComponentProxy(_fetch_promise(promise))

    def shortestPath(self, src, dst, cost="weight", algo="dijkstra", filter=""):
        """
        Compute shortest path using Dijkstra's algorithm.
        algo=dijkstra_bi yeilds a bi-directional variane
        algo=dijkistra_filter allows pasing a filter expression
        """
        promise = None

        if algo == "dijkstra":
            promise = self.analyst_context.shortestPathDijkstraAsync(self.graph, src.getId(), dst.getId(), cost)

        elif algo == "dijkstra_bi":
            promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost)

        elif algo == "dijkstra_filter":
            promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost, filter)

        return PathProxy(_fetch_promise(promise))

    def hopDistance(self, src, reverse=False):
        """
        compute hop-distance from given node to every other node time complexity: O(E * d) with E = number of edges, d = diameter of graph
        reverse = True will compute the reverse hop distance
        """
        promise = None

        if not reverse:
            promise = self.analyst_context.shortestPathHopDistAsync(self.graph, src)

        else:
            promise = self.analyst_context.shortestPathHopDistReverseAsync(self.graph, src)

        return AllPathsProxy(_fetch_promise(promise))

    def bellmanFord(self, src, propName, reverse=False):
        """
        compute single source shortest paths using Bellman & Ford algorithm time complexity: O(E * D) with E = number of edges, D = number edges in the shortest length
        """
        promise = None

        if not reverse:
            promise = self.analyst_context.shortestPathBellmanFordAsync(self.graph, src, propName)
        else:
            promise = self.analyst_context.shortestPathBellmanFordReverseAsync(self.graph, src, propName)

        return AllPathsProxy(_fetch_promise(promise))


    def weaklyConnected(self):
        """
        Find weakly connected components through label propagation time complexity: O(E * D)
        """
        promise = self.analyst_context.wccAsync(self.graph)
        return ComponentProxy(_fetch_promise(promise))

    def follow(self, node, max=3):
        """
        Link prediction using Twitter's algorithm
        """
        promise = self.analyst_context.whomToFollowAsync(self.graph, node, max)
        return CollectionProxy(_fetch_promise(promise))

    def pagerank(self, e=1e-16, d=0.85, max=150):
        """
        Classic pagerank algorithm.
        """
        promise = self.analyst_context.pagerankAsync(self.graph, e,d,max)
        return PropertyProxy(_fetch_promise(promise))

    def personalPageRank(self, v, e=1e-16, d=0.85, max=150):
        """
        personalized pagerank (random walk with restart) evaluates relative importance of nodes in a graph with respect to a given node v.
        """
        promise = self.analyst_context.personalizedPagerankAsync(self.graph, v, e, d, max)
        return PropertyProxy(_fetch_promise(promise))

    def outDegreeDistribution(self):
        """
        computes the outdegree distribution of the given graph and stores it in the map.
        """
        promise = self.analyst_context.outDegreeDistributionAsync(self.graph)
        return _fetch_promise(promise)

    def inDegreeDistribution(self):
        """
        computes the indegree distribution of the given graph and stores it in the map.
        """
        promise = self.analyst_context.inDegreeDistributionAsync(self.graph)
        return _fetch_promise(promise)

    def outDegreeCentrality(self):
        """
        compute out-degree centrality.
        """
        promise = self.analyst_context.outDegreeCentralityAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def inDegreeCentrality(self):
        """
        compute in-degree centrality.
        """
        promise = self.analyst_context.inDegreeCentralityAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def hits(self, max=150):
        """
        classic HITS algorithm (Hyperlink-Induced Topic Search)
        """
        promise = self.analyst_context.hitsAsync(self.graph, max)
        return HitsProxy(_fetch_promise(promise))

    def fattestPath(self, src, capacityName):
        """
        Fattest Tree Algorithm - Computes the fattest path from a source node to all nodes in the graph.
        """
        promise = self.analyst_context.fattestPathAsync(self.graph, src, capacityName)
        return AllPathsProxy(_fetch_promise(promise))

    def getRandomNode(self):
        """
        gets a random Node from the analyst
        """
        return _fetch_promise(self.analyst_context.getRandomNodeAsync(self.graph))

    def mstPrim(self, src, costName):
        """
        Computes a minimum spanning tree
        """
        promise = self.analyst_context.mstPrimAsync(self.graph, src, costName)
        return _fetch_promise(promise)

    def partitionConductance(self, components):
        """
        compute average conductance among all partitions Note: this algorithm is in-efficient if numComponents is big
        """
        promise = self.analyst_context.partitionConductanceAsync(self.graph, components)
        return ConductanceProxy(_fetch_promise(promise))

    def partitionModularity(self, components):
        """
        compute modularity of partitions
        """
        promise = self.analyst_context.partitionModularityAsync(self.graph, components)
        return _fetch_promise(components)

Classes

class Janalyst

class Janalyst():
    analyst_context = None
    def __init__(self, pgxGraph, a):
        self.graph = pgxGraph
        self.analyst_context = a

    def undirect(self):
        """
        Returns a new analyst with an undirected version of the graph
        """
        new_graph = self.graph.undirect()
        return Janalyst(new_graph, self.analyst_context)

    def pgx_graph(self):
        """
        Returns a PgxGraph object for futher manipulation
        """
        return self.graph

    def adamicAdar(self):
        """
        computes 'Adamic-Adar measure' for each edge in graph.
        """
        promise = self.analyst_context.adamicAdarCountingAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def countTriangles(self):
        """
        Counts the number of 'triads' in the given undirected graph
        """
        promise = self.analyst_context.countTrianglesAsync(self.graph, True)
        return _fetch_promise(promise)

    def eigenvectorCentrality(self, max=100, maxDiff=0.01, useL2Norm=True, useInEdge=True):
        """
        compute eigenvector centrality using power iteration (with L1 norm).
        """
        promise = self.analyst_context.eigenvectorCentralityAsync(self.graph, max, maxDiff, useL2Norm, useInEdge)
        return PropertyProxy(_fetch_promise(promise))

    def betweenness(self, k=10):
        """
        approximate node betweenness centrality (without considering edge length).
        """
        promise = self.analyst_context.approximateNodeBetweennessCentralityAsync(self.graph, k)
        return PropertyProxy(_fetch_promise(promise))

    def closenessCentrality(self, costPropertyName):
        """
        compute closed centrality.
        """
        promise = self.analyst_context.closenessCentralityDoubleLengthAsync(self.graph, costPropertyName)
        return PropertyProxy(_fetch_promise(promise))

    def closenessCentralityUnit(self):
        """
        compute closed centrality.
        """
        promise = self.analyst_context.closenessCentralityUnitLengthAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def communities(self):
        """
        detect communities using parallel label propagation.
        """
        promise = self.analyst_context.communitiesLabelPropagationAsync(self.graph)
        return ComponentProxy(_fetch_promise(promise))

    def stronglyConnected(self, algo="tarjan"):
        """
        Find strongly connected components using Tarjan's or Kosaraju's algorithm.
        """
        promise = None
        if algo == "tarjan":
            promise = self.analyst_context.sccTarjanAsync(self.graph)
        else:
            promise = self.analsyt_context.sccKosarajuAsync(self.graph)

        return ComponentProxy(_fetch_promise(promise))

    def shortestPath(self, src, dst, cost="weight", algo="dijkstra", filter=""):
        """
        Compute shortest path using Dijkstra's algorithm.
        algo=dijkstra_bi yeilds a bi-directional variane
        algo=dijkistra_filter allows pasing a filter expression
        """
        promise = None

        if algo == "dijkstra":
            promise = self.analyst_context.shortestPathDijkstraAsync(self.graph, src.getId(), dst.getId(), cost)

        elif algo == "dijkstra_bi":
            promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost)

        elif algo == "dijkstra_filter":
            promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost, filter)

        return PathProxy(_fetch_promise(promise))

    def hopDistance(self, src, reverse=False):
        """
        compute hop-distance from given node to every other node time complexity: O(E * d) with E = number of edges, d = diameter of graph
        reverse = True will compute the reverse hop distance
        """
        promise = None

        if not reverse:
            promise = self.analyst_context.shortestPathHopDistAsync(self.graph, src)

        else:
            promise = self.analyst_context.shortestPathHopDistReverseAsync(self.graph, src)

        return AllPathsProxy(_fetch_promise(promise))

    def bellmanFord(self, src, propName, reverse=False):
        """
        compute single source shortest paths using Bellman & Ford algorithm time complexity: O(E * D) with E = number of edges, D = number edges in the shortest length
        """
        promise = None

        if not reverse:
            promise = self.analyst_context.shortestPathBellmanFordAsync(self.graph, src, propName)
        else:
            promise = self.analyst_context.shortestPathBellmanFordReverseAsync(self.graph, src, propName)

        return AllPathsProxy(_fetch_promise(promise))


    def weaklyConnected(self):
        """
        Find weakly connected components through label propagation time complexity: O(E * D)
        """
        promise = self.analyst_context.wccAsync(self.graph)
        return ComponentProxy(_fetch_promise(promise))

    def follow(self, node, max=3):
        """
        Link prediction using Twitter's algorithm
        """
        promise = self.analyst_context.whomToFollowAsync(self.graph, node, max)
        return CollectionProxy(_fetch_promise(promise))

    def pagerank(self, e=1e-16, d=0.85, max=150):
        """
        Classic pagerank algorithm.
        """
        promise = self.analyst_context.pagerankAsync(self.graph, e,d,max)
        return PropertyProxy(_fetch_promise(promise))

    def personalPageRank(self, v, e=1e-16, d=0.85, max=150):
        """
        personalized pagerank (random walk with restart) evaluates relative importance of nodes in a graph with respect to a given node v.
        """
        promise = self.analyst_context.personalizedPagerankAsync(self.graph, v, e, d, max)
        return PropertyProxy(_fetch_promise(promise))

    def outDegreeDistribution(self):
        """
        computes the outdegree distribution of the given graph and stores it in the map.
        """
        promise = self.analyst_context.outDegreeDistributionAsync(self.graph)
        return _fetch_promise(promise)

    def inDegreeDistribution(self):
        """
        computes the indegree distribution of the given graph and stores it in the map.
        """
        promise = self.analyst_context.inDegreeDistributionAsync(self.graph)
        return _fetch_promise(promise)

    def outDegreeCentrality(self):
        """
        compute out-degree centrality.
        """
        promise = self.analyst_context.outDegreeCentralityAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def inDegreeCentrality(self):
        """
        compute in-degree centrality.
        """
        promise = self.analyst_context.inDegreeCentralityAsync(self.graph)
        return PropertyProxy(_fetch_promise(promise))

    def hits(self, max=150):
        """
        classic HITS algorithm (Hyperlink-Induced Topic Search)
        """
        promise = self.analyst_context.hitsAsync(self.graph, max)
        return HitsProxy(_fetch_promise(promise))

    def fattestPath(self, src, capacityName):
        """
        Fattest Tree Algorithm - Computes the fattest path from a source node to all nodes in the graph.
        """
        promise = self.analyst_context.fattestPathAsync(self.graph, src, capacityName)
        return AllPathsProxy(_fetch_promise(promise))

    def getRandomNode(self):
        """
        gets a random Node from the analyst
        """
        return _fetch_promise(self.analyst_context.getRandomNodeAsync(self.graph))

    def mstPrim(self, src, costName):
        """
        Computes a minimum spanning tree
        """
        promise = self.analyst_context.mstPrimAsync(self.graph, src, costName)
        return _fetch_promise(promise)

    def partitionConductance(self, components):
        """
        compute average conductance among all partitions Note: this algorithm is in-efficient if numComponents is big
        """
        promise = self.analyst_context.partitionConductanceAsync(self.graph, components)
        return ConductanceProxy(_fetch_promise(promise))

    def partitionModularity(self, components):
        """
        compute modularity of partitions
        """
        promise = self.analyst_context.partitionModularityAsync(self.graph, components)
        return _fetch_promise(components)

Ancestors (in MRO)

Class variables

var analyst_context

Instance variables

var analyst_context

var graph

Methods

def __init__(

self, pgxGraph, a)

def __init__(self, pgxGraph, a):
    self.graph = pgxGraph
    self.analyst_context = a

def adamicAdar(

self)

computes 'Adamic-Adar measure' for each edge in graph.

def adamicAdar(self):
    """
    computes 'Adamic-Adar measure' for each edge in graph.
    """
    promise = self.analyst_context.adamicAdarCountingAsync(self.graph)
    return PropertyProxy(_fetch_promise(promise))

def bellmanFord(

self, src, propName, reverse=False)

compute single source shortest paths using Bellman & Ford algorithm time complexity: O(E * D) with E = number of edges, D = number edges in the shortest length

def bellmanFord(self, src, propName, reverse=False):
    """
    compute single source shortest paths using Bellman & Ford algorithm time complexity: O(E * D) with E = number of edges, D = number edges in the shortest length
    """
    promise = None
    if not reverse:
        promise = self.analyst_context.shortestPathBellmanFordAsync(self.graph, src, propName)
    else:
        promise = self.analyst_context.shortestPathBellmanFordReverseAsync(self.graph, src, propName)
    return AllPathsProxy(_fetch_promise(promise))

def betweenness(

self, k=10)

approximate node betweenness centrality (without considering edge length).

def betweenness(self, k=10):
    """
    approximate node betweenness centrality (without considering edge length).
    """
    promise = self.analyst_context.approximateNodeBetweennessCentralityAsync(self.graph, k)
    return PropertyProxy(_fetch_promise(promise))

def closenessCentrality(

self, costPropertyName)

compute closed centrality.

def closenessCentrality(self, costPropertyName):
    """
    compute closed centrality.
    """
    promise = self.analyst_context.closenessCentralityDoubleLengthAsync(self.graph, costPropertyName)
    return PropertyProxy(_fetch_promise(promise))

def closenessCentralityUnit(

self)

compute closed centrality.

def closenessCentralityUnit(self):
    """
    compute closed centrality.
    """
    promise = self.analyst_context.closenessCentralityUnitLengthAsync(self.graph)
    return PropertyProxy(_fetch_promise(promise))

def communities(

self)

detect communities using parallel label propagation.

def communities(self):
    """
    detect communities using parallel label propagation.
    """
    promise = self.analyst_context.communitiesLabelPropagationAsync(self.graph)
    return ComponentProxy(_fetch_promise(promise))

def countTriangles(

self)

Counts the number of 'triads' in the given undirected graph

def countTriangles(self):
    """
    Counts the number of 'triads' in the given undirected graph
    """
    promise = self.analyst_context.countTrianglesAsync(self.graph, True)
    return _fetch_promise(promise)

def eigenvectorCentrality(

self, max=100, maxDiff=0.01, useL2Norm=True, useInEdge=True)

compute eigenvector centrality using power iteration (with L1 norm).

def eigenvectorCentrality(self, max=100, maxDiff=0.01, useL2Norm=True, useInEdge=True):
    """
    compute eigenvector centrality using power iteration (with L1 norm).
    """
    promise = self.analyst_context.eigenvectorCentralityAsync(self.graph, max, maxDiff, useL2Norm, useInEdge)
    return PropertyProxy(_fetch_promise(promise))

def fattestPath(

self, src, capacityName)

Fattest Tree Algorithm - Computes the fattest path from a source node to all nodes in the graph.

def fattestPath(self, src, capacityName):
    """
    Fattest Tree Algorithm - Computes the fattest path from a source node to all nodes in the graph.
    """
    promise = self.analyst_context.fattestPathAsync(self.graph, src, capacityName)
    return AllPathsProxy(_fetch_promise(promise))

def follow(

self, node, max=3)

Link prediction using Twitter's algorithm

def follow(self, node, max=3):
    """
    Link prediction using Twitter's algorithm
    """
    promise = self.analyst_context.whomToFollowAsync(self.graph, node, max)
    return CollectionProxy(_fetch_promise(promise))

def getRandomNode(

self)

gets a random Node from the analyst

def getRandomNode(self):
    """
    gets a random Node from the analyst
    """
    return _fetch_promise(self.analyst_context.getRandomNodeAsync(self.graph))

def hits(

self, max=150)

classic HITS algorithm (Hyperlink-Induced Topic Search)

def hits(self, max=150):
    """
    classic HITS algorithm (Hyperlink-Induced Topic Search)
    """
    promise = self.analyst_context.hitsAsync(self.graph, max)
    return HitsProxy(_fetch_promise(promise))

def hopDistance(

self, src, reverse=False)

compute hop-distance from given node to every other node time complexity: O(E * d) with E = number of edges, d = diameter of graph reverse = True will compute the reverse hop distance

def hopDistance(self, src, reverse=False):
    """
    compute hop-distance from given node to every other node time complexity: O(E * d) with E = number of edges, d = diameter of graph
    reverse = True will compute the reverse hop distance
    """
    promise = None
    if not reverse:
        promise = self.analyst_context.shortestPathHopDistAsync(self.graph, src)
    else:
        promise = self.analyst_context.shortestPathHopDistReverseAsync(self.graph, src)
    return AllPathsProxy(_fetch_promise(promise))

def inDegreeCentrality(

self)

compute in-degree centrality.

def inDegreeCentrality(self):
    """
    compute in-degree centrality.
    """
    promise = self.analyst_context.inDegreeCentralityAsync(self.graph)
    return PropertyProxy(_fetch_promise(promise))

def inDegreeDistribution(

self)

computes the indegree distribution of the given graph and stores it in the map.

def inDegreeDistribution(self):
    """
    computes the indegree distribution of the given graph and stores it in the map.
    """
    promise = self.analyst_context.inDegreeDistributionAsync(self.graph)
    return _fetch_promise(promise)

def mstPrim(

self, src, costName)

Computes a minimum spanning tree

def mstPrim(self, src, costName):
    """
    Computes a minimum spanning tree
    """
    promise = self.analyst_context.mstPrimAsync(self.graph, src, costName)
    return _fetch_promise(promise)

def outDegreeCentrality(

self)

compute out-degree centrality.

def outDegreeCentrality(self):
    """
    compute out-degree centrality.
    """
    promise = self.analyst_context.outDegreeCentralityAsync(self.graph)
    return PropertyProxy(_fetch_promise(promise))

def outDegreeDistribution(

self)

computes the outdegree distribution of the given graph and stores it in the map.

def outDegreeDistribution(self):
    """
    computes the outdegree distribution of the given graph and stores it in the map.
    """
    promise = self.analyst_context.outDegreeDistributionAsync(self.graph)
    return _fetch_promise(promise)

def pagerank(

self, e=1e-16, d=0.85, max=150)

Classic pagerank algorithm.

def pagerank(self, e=1e-16, d=0.85, max=150):
    """
    Classic pagerank algorithm.
    """
    promise = self.analyst_context.pagerankAsync(self.graph, e,d,max)
    return PropertyProxy(_fetch_promise(promise))

def partitionConductance(

self, components)

compute average conductance among all partitions Note: this algorithm is in-efficient if numComponents is big

def partitionConductance(self, components):
    """
    compute average conductance among all partitions Note: this algorithm is in-efficient if numComponents is big
    """
    promise = self.analyst_context.partitionConductanceAsync(self.graph, components)
    return ConductanceProxy(_fetch_promise(promise))

def partitionModularity(

self, components)

compute modularity of partitions

def partitionModularity(self, components):
    """
    compute modularity of partitions
    """
    promise = self.analyst_context.partitionModularityAsync(self.graph, components)
    return _fetch_promise(components)

def personalPageRank(

self, v, e=1e-16, d=0.85, max=150)

personalized pagerank (random walk with restart) evaluates relative importance of nodes in a graph with respect to a given node v.

def personalPageRank(self, v, e=1e-16, d=0.85, max=150):
    """
    personalized pagerank (random walk with restart) evaluates relative importance of nodes in a graph with respect to a given node v.
    """
    promise = self.analyst_context.personalizedPagerankAsync(self.graph, v, e, d, max)
    return PropertyProxy(_fetch_promise(promise))

def pgx_graph(

self)

Returns a PgxGraph object for futher manipulation

def pgx_graph(self):
    """
    Returns a PgxGraph object for futher manipulation
    """
    return self.graph

def shortestPath(

self, src, dst, cost='weight', algo='dijkstra', filter='')

Compute shortest path using Dijkstra's algorithm. algo=dijkstra_bi yeilds a bi-directional variane algo=dijkistra_filter allows pasing a filter expression

def shortestPath(self, src, dst, cost="weight", algo="dijkstra", filter=""):
    """
    Compute shortest path using Dijkstra's algorithm.
    algo=dijkstra_bi yeilds a bi-directional variane
    algo=dijkistra_filter allows pasing a filter expression
    """
    promise = None
    if algo == "dijkstra":
        promise = self.analyst_context.shortestPathDijkstraAsync(self.graph, src.getId(), dst.getId(), cost)
    elif algo == "dijkstra_bi":
        promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost)
    elif algo == "dijkstra_filter":
        promise = self.analyst_context.shortestPathDijkstraBidirectionalAsync(self.graph, src.getId(), dst.getId(), cost, filter)
    return PathProxy(_fetch_promise(promise))

def stronglyConnected(

self, algo='tarjan')

Find strongly connected components using Tarjan's or Kosaraju's algorithm.

def stronglyConnected(self, algo="tarjan"):
    """
    Find strongly connected components using Tarjan's or Kosaraju's algorithm.
    """
    promise = None
    if algo == "tarjan":
        promise = self.analyst_context.sccTarjanAsync(self.graph)
    else:
        promise = self.analsyt_context.sccKosarajuAsync(self.graph)
    return ComponentProxy(_fetch_promise(promise))

def undirect(

self)

Returns a new analyst with an undirected version of the graph

def undirect(self):
    """
    Returns a new analyst with an undirected version of the graph
    """
    new_graph = self.graph.undirect()
    return Janalyst(new_graph, self.analyst_context)

def weaklyConnected(

self)

Find weakly connected components through label propagation time complexity: O(E * D)

def weaklyConnected(self):
    """
    Find weakly connected components through label propagation time complexity: O(E * D)
    """
    promise = self.analyst_context.wccAsync(self.graph)
    return ComponentProxy(_fetch_promise(promise))