Example #1
0
def test_connected_components():

    cases = []
    cases.append(
        csr_matrix([[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]]))

    cases.append(
        csr_matrix([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]))

    cases.append(
        csr_matrix([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]))

    cases.append(
        csr_matrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]))

    #  2        5
    #  | \    / |
    #  0--1--3--4
    cases.append(
        csr_matrix([[0, 1, 1, 0, 0, 0], [1, 0, 1, 1, 0, 0], [1, 1, 0, 0, 0, 0],
                    [0, 1, 0, 0, 1, 1], [0, 0, 0, 1, 0, 1], [0, 0, 0, 1, 1,
                                                             0]]))

    #  2        5
    #  | \    / |
    #  0  1--3--4
    cases.append(
        csr_matrix([[0, 0, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0], [1, 1, 0, 0, 0, 0],
                    [0, 1, 0, 0, 1, 1], [0, 0, 0, 1, 0, 1], [0, 0, 0, 1, 1,
                                                             0]]))

    #  2        5
    #  | \    / |
    #  0--1  3--4
    cases.append(
        csr_matrix([[0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0],
                    [0, 0, 0, 0, 1, 1], [0, 0, 0, 1, 0, 1], [0, 0, 0, 1, 1,
                                                             0]]))

    # Compare to reference implementation #
    for G in cases:
        result = connected_components(G)

        assert_equal(result.min(), 0)

        def array_to_set_of_sets(arr):
            """convert array to set of sets format"""
            D = {}
            for i in set(arr):
                D[i] = set()
            for n, i in enumerate(arr):
                D[i].add(n)
            return set([frozenset(s) for s in D.values()])

        result = array_to_set_of_sets(result)
        expected = reference_connected_components(G)

        assert_equal(result, expected)
Example #2
0
def test_complex_connected_components():

    cases = []
    cases.append(csr_matrix([[0, 1, 0, 0],
                             [1, 0, 1, 0],
                             [0, 1, 0, 1],
                             [0, 0, 1, 0]]))

    cases.append(csr_matrix([[0, 1, 0, 0],
                             [1, 0, 0, 0],
                             [0, 0, 0, 1],
                             [0, 0, 1, 0]]))

    cases.append(csr_matrix([[0, 1, 0, 0],
                             [1, 0, 0, 0],
                             [0, 0, 0, 0],
                             [0, 0, 0, 0]]))

    cases.append(csr_matrix([[0, 0, 0, 0],
                             [0, 0, 0, 0],
                             [0, 0, 0, 0],
                             [0, 0, 0, 0]]))

    #  2        5
    #  | \    / |
    #  0--1--3--4
    cases.append(csr_matrix([[0, 1, 1, 0, 0, 0],
                             [1, 0, 1, 1, 0, 0],
                             [1, 1, 0, 0, 0, 0],
                             [0, 1, 0, 0, 1, 1],
                             [0, 0, 0, 1, 0, 1],
                             [0, 0, 0, 1, 1, 0]]))

    #  2        5
    #  | \    / |
    #  0  1--3--4
    cases.append(csr_matrix([[0, 0, 1, 0, 0, 0],
                             [0, 0, 1, 1, 0, 0],
                             [1, 1, 0, 0, 0, 0],
                             [0, 1, 0, 0, 1, 1],
                             [0, 0, 0, 1, 0, 1],
                             [0, 0, 0, 1, 1, 0]]))

    #  2        5
    #  | \    / |
    #  0--1  3--4
    cases.append(csr_matrix([[0, 1, 1, 0, 0, 0],
                             [1, 0, 1, 0, 0, 0],
                             [1, 1, 0, 0, 0, 0],
                             [0, 0, 0, 0, 1, 1],
                             [0, 0, 0, 1, 0, 1],
                             [0, 0, 0, 1, 1, 0]]))

    # Create complex data entries
    cases = [G+1.0j*G for G in cases]

    # Compare to reference implementation #
    for G in cases:
        result = connected_components(G)

        assert_equal(result.min(), 0)

        def array_to_set_of_sets(arr):
            """convert array to set of sets format"""
            D = {}
            for i in set(arr):
                D[i] = set()
            for n, i in enumerate(arr):
                D[i].add(n)
            return set([frozenset(s) for s in D.values()])

        result = array_to_set_of_sets(result)
        expected = reference_connected_components(G)

        assert_equal(result, expected)