diff --git a/group-connectivity.h b/group-connectivity.h index 6a193410ac2b5f1422ef217bf27a983bd1ea828f..024d7c619a0ad1dc74690a1e71dc4ca078272532 100644 --- a/group-connectivity.h +++ b/group-connectivity.h @@ -34,6 +34,7 @@ struct AbstractTester { std::vector<EdgeId> spanningTree, std::vector< std::vector<DirectedEdgeId> > elementaryCycles ) =0; + virtual std::vector<size_t> getClasses() =0; virtual bool run() =0; virtual ~AbstractTester() {} @@ -125,6 +126,11 @@ struct Tester : public AbstractTester { } + virtual std::vector<size_t> getClasses() { + return classes; + } + + virtual bool run() { Mapping forb(edges, 0); diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx index a732146ede3339cba254901afbcef27a040e0c82..44d8f874c9034deb8e6b83ff99d27c400e3bdd6c 100644 --- a/groupConnectivity.pyx +++ b/groupConnectivity.pyx @@ -12,10 +12,8 @@ cdef extern from "group-connectivity.h" namespace "Ring": cdef extern from "group-connectivity.h": cdef cppclass AbstractTester: - bool isConnected - vector[size_t] classes - void init(int, vector[int], vector[vector[int]]) + vector[size_t] getClasses() bool run() cdef cppclass Tester[T](AbstractTester): @@ -31,7 +29,7 @@ def pathToEdges(G, path): u = v return ret -def testGroupConnectivity(G, group = "Z4", debug = False): +def testGroupConnectivity(G, group = "Z4", getClasses = False, debug = False): cdef AbstractTester* tester = NULL if group == "Z4": tester = new Tester[Z4[int]]() @@ -59,11 +57,14 @@ def testGroupConnectivity(G, group = "Z4", debug = False): tester.init(G.num_edges(), [ l for (_, _, l) in spanningTree.edge_iterator() ], elemCycles) ret = tester.run() - classes = tester.classes - - del tester - return (ret, classes) + if getClasses: + classes = tester.getClasses() + del tester + return (ret, classes) + else: + del tester + return ret def subdivisionIterator(G, edges = None): if edges is None: diff --git a/timit.md b/timit.md index c2b38c1991a8b42d8980649e990f38823da83049..b108ebef8076e62c3d42585cd1a59664ad4eaf1a 100644 --- a/timit.md +++ b/timit.md @@ -7,8 +7,8 @@ Command: graphs.CubeGraph(3).edges()[0:2], function = lambda H: "%-20s Z4: %-5s Z2_2: %s" % ( H.graph6_string(), - groupConnectivity.testGroupConnectivity(H, "Z4")[0], - groupConnectivity.testGroupConnectivity(H, "Z2_2")[0] + groupConnectivity.testGroupConnectivity(H, "Z4"), + groupConnectivity.testGroupConnectivity(H, "Z2_2") ) ) ``