https://github.com/kit-parco/networkit
Tip revision: 02de60d064527410c0acf8e1c8cb0d403c5c1409 authored by Fabian Brandt on 08 September 2020, 08:28:43 UTC
Merge pull request #587 from cndolo/refactor/edgelist-reader
Merge pull request #587 from cndolo/refactor/edgelist-reader
Tip revision: 02de60d
coarsening.pyx
# distutils: language=c++
from libc.stdint cimport uint64_t
from libcpp cimport bool as bool_t
from libcpp.map cimport map
from libcpp.vector cimport vector
ctypedef uint64_t index
ctypedef index node
from .base cimport _Algorithm, Algorithm
from .graph cimport _Graph, Graph
from .matching cimport _Matching, Matching
from .structures cimport _Cover, Cover, _Partition, Partition
cdef extern from "<networkit/coarsening/GraphCoarsening.hpp>":
cdef cppclass _GraphCoarsening "NetworKit::GraphCoarsening"(_Algorithm):
_GraphCoarsening(_Graph) except +
_Graph getCoarseGraph() except +
vector[node] getFineToCoarseNodeMapping() except +
map[node, vector[node]] getCoarseToFineNodeMapping() except +
cdef class GraphCoarsening(Algorithm):
cdef Graph _G
def __init__(self, *args, **namedargs):
if type(self) == GraphCoarsening:
raise RuntimeError("Error, you may not use GraphCoarsening directly, use a sub-class instead")
def getCoarseGraph(self):
return Graph(0).setThis((<_GraphCoarsening*>(self._this)).getCoarseGraph())
def getFineToCoarseNodeMapping(self):
return (<_GraphCoarsening*>(self._this)).getFineToCoarseNodeMapping()
def getCoarseToFineNodeMapping(self):
return (<_GraphCoarsening*>(self._this)).getCoarseToFineNodeMapping()
cdef extern from "<networkit/coarsening/ParallelPartitionCoarsening.hpp>":
cdef cppclass _ParallelPartitionCoarsening "NetworKit::ParallelPartitionCoarsening"(_GraphCoarsening):
_ParallelPartitionCoarsening(_Graph, _Partition, bool_t) except +
cdef class ParallelPartitionCoarsening(GraphCoarsening):
def __cinit__(self, Graph G not None, Partition zeta not None, useGraphBuilder = True):
self._this = new _ParallelPartitionCoarsening(G._this, zeta._this, useGraphBuilder)
cdef extern from "<networkit/coarsening/MatchingCoarsening.hpp>":
cdef cppclass _MatchingCoarsening "NetworKit::MatchingCoarsening"(_GraphCoarsening):
_MatchingCoarsening(_Graph, _Matching, bool_t) except +
cdef class MatchingCoarsening(GraphCoarsening):
"""Coarsens graph according to a matching.
Parameters
----------
G : networkit.Graph
M : Matching
noSelfLoops : bool, optional
if true, self-loops are not produced
"""
def __cinit__(self, Graph G not None, Matching M not None, bool_t noSelfLoops=False):
self._this = new _MatchingCoarsening(G._this, M._this, noSelfLoops)