def testSerialRandom():
    """ 50 Random serial test cases
    """

    N = 10
    p = .7
    runs = 0
    while runs < 50:

        # a random graph
        G = nx.fast_gnp_random_graph(N, p)
        try:
            nx.shortest_path(G, source=0, target=N - 1)
        except RuntimeError:
            continue
        # convert to plain ndarray
        nw1 = nx2nw(G)

        # copy and join network
        nw2 = serialCopy(nw1)

        # compute effective resistance
        ER1 = ResNetwork(nw1, silence_level=3).effective_resistance(
            0,
            len(nw1) - 1)
        ER2 = ResNetwork(nw2, silence_level=3).effective_resistance(
            0,
            len(nw2) - 1)

        # increment runs
        runs += 1
        # assertion
        print ER1 * 2 - ER2
        assert (ER1 * 2 - ER2) < 1E-6
def testParallelTrivial():
    """ Trivial parallel case:
    a)  0 --- 1 --- 2

        /---- 3 ---\
    b)  0 --- 1 --- 2

    c)  /---- 3 ---\
        0 --- 1 --- 2
        \____ 4 ___/

    ER(a) = 2*ER(b) = 3*ER(c)
    """
    nws = []
    # construct nw1
    idI, idJ = [0, 1], [1, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    # construct nw2
    idI += [0, 3]
    idJ += [3, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    # nw3
    idI += [0, 4]
    idJ += [4, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    ER = []
    for nw in nws:
        rnw = ResNetwork(nw)
        ER.append(rnw.effective_resistance(0, 2))

    assert abs(ER[0]/2-ER[1]) < .1E-6
    assert abs(ER[0]/3-ER[2]) < .1E-6
def testParallelTrivial():
    r""" Trivial parallel case:
    a)  0 --- 1 --- 2

        /---- 3 ---\
    b)  0 --- 1 --- 2

    c)  /---- 3 ---\
        0 --- 1 --- 2
        \____ 4 ___/

    ER(a) = 2*ER(b) = 3*ER(c)
    """
    nws = []
    # construct nw1
    idI, idJ = [0, 1], [1, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    # construct nw2
    idI += [0, 3]
    idJ += [3, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    # nw3
    idI += [0, 4]
    idJ += [4, 2]
    nws.append(makeNW(idI, idJ, [.1]))

    ER = []
    for nw in nws:
        rnw = ResNetwork(nw)
        ER.append(rnw.effective_resistance(0, 2))

    assert abs(ER[0] / 2 - ER[1]) < .1E-6
    assert abs(ER[0] / 3 - ER[2]) < .1E-6
def testSerialRandom():
    """ 50 Random serial test cases
    """

    N = 10
    p = .7
    runs = 50
    for run in range(0, runs):

        # a random graph
        G = nx.fast_gnp_random_graph(N, p)
        try:
            nx.shortest_path(G, source=0, target=N - 1)
        except RuntimeError:
            continue
        except nx.NetworkXNoPath:
            pass
        # convert to plain ndarray
        nw1 = nx2nw(G)

        # copy and join network
        nw2 = serialCopy(nw1)

        # compute effective resistance
        ER1 = ResNetwork(nw1, silence_level=3).effective_resistance(
            0,
            len(nw1) - 1)
        ER2 = ResNetwork(nw2, silence_level=3).effective_resistance(
            0,
            len(nw2) - 1)

        # assertion
        # print(ER1*2-ER2)
        assert (ER1 * 2 - ER2) < 1E-6
Example #5
0
def testParallelLessTrivial():
    """ Less Trivial Parallel Case:
            |--- 1 --- 0
        a) 2     |
            |--- 3 ----4

            |--- 1 --- 0 --- 5 --- |
        b) 2     |           |     7
            |--- 3 ----4 --- 6 --- |

                      |---- 8 ----------- |
                      |     |             |
                      |     |----------|  |
                      |                |  |
           |--- 1 --- 0 --- 5 --- |    |  |
        c) 2    |           |     7    |  9
           |--- 3 ----4 --- 6 --- |    |  |
                      |                |  |
                      |      ----------|  |
                      |      |            |
                      |---- 10 -----------|
    """
    nws = []

    idI = [0, 1, 1, 2, 3]
    idJ = [1, 2, 3, 3, 4]
    nws.append(makeNW(idI, idJ, [1] * len(idI)))

    idI.extend([0, 5, 5, 6, 6])
    idJ.extend([5, 6, 7, 7, 4])
    nws.append(makeNW(idI, idJ, [1] * len(idI)))

    idI.extend([0, 8, 8, 9, 10])
    idJ.extend([8, 9, 10, 10, 4])
    nws.append(makeNW(idI, idJ, [1] * len(idI)))

    ER = []
    Gs = []
    for nw in nws:
        rnw = ResNetwork(nw)
        ER.append(rnw.effective_resistance(0, 4))
    #     Gs.append(nx.DiGraph(nw))
    # # showGraphs(Gs)
    # # s = ''
    # # for i,e in enumerate(ER):
    # #     s = s + "NW{:d} {:.3f}\t".format(i,e)
    # # print("Effective resistances (0,2)\n %s" % (s))

    assert abs(ER[0] / 2 - ER[1]) < .1E-6
    assert abs(ER[0] / 3 - ER[2]) < .1E-6
def testParallelLessTrivial():
    """ Less Trivial Parallel Case:
            |--- 1 --- 0
        a) 2     |
            |--- 3 ----4

            |--- 1 --- 0 --- 5 --- |
        b) 2     |           |     7
            |--- 3 ----4 --- 6 --- |

                      |---- 8 ----------- |
                      |     |             |
                      |     |----------|  |
                      |                |  |
           |--- 1 --- 0 --- 5 --- |    |  |
        c) 2    |           |     7    |  9
           |--- 3 ----4 --- 6 --- |    |  |
                      |                |  |
                      |      ----------|  |
                      |      |            |
                      |---- 10 -----------|
    """
    nws = []

    idI = [0, 1, 1, 2, 3]
    idJ = [1, 2, 3, 3, 4]
    nws.append(makeNW(idI, idJ, [1]*len(idI)))

    idI.extend([0, 5, 5, 6, 6])
    idJ.extend([5, 6, 7, 7, 4])
    nws.append(makeNW(idI, idJ, [1]*len(idI)))

    idI.extend([0, 8, 8, 9, 10])
    idJ.extend([8, 9, 10, 10, 4])
    nws.append(makeNW(idI, idJ, [1]*len(idI)))

    ER = []
    Gs = []
    for nw in nws:
        rnw = ResNetwork(nw)
        ER.append(rnw.effective_resistance(0, 4))
    #     Gs.append(nx.DiGraph(nw))
    # # showGraphs(Gs)
    # # s = ''
    # # for i,e in enumerate(ER):
    # #     s = s + "NW{:d} {:.3f}\t".format(i,e)
    # # print "Effective resistances (0,2)\n %s" % (s)

    assert abs(ER[0]/2-ER[1]) < .1E-6
    assert abs(ER[0]/3-ER[2]) < .1E-6
def test_get_admittance():
    net = ResNetwork.SmallTestNetwork()

    res = net.get_admittance()
    exp = [[0., 0.5, 0., 0., 0.], [0.5, 0., 0.125, 0.5, 0.],
           [0., 0.125, 0., 0.125, 0.], [0., 0.5, 0.125, 0., 0.1],
           [0., 0., 0., 0.1, 0.]]
    assert np.allclose(res, exp, atol=1e-04)
def test_get_R():
    res = ResNetwork.SmallTestNetwork().get_R()
    exp = [[2.28444444, 0.68444444, -0.56, -0.20444444, -2.20444444],
           [0.68444444, 1.08444444, -0.16, 0.19555556, -1.80444444],
           [-0.56, -0.16, 3.04, -0.16, -2.16],
           [-0.20444444, 0.19555556, -0.16, 1.08444444, -0.91555556],
           [-2.20444444, -1.80444444, -2.16, -0.91555556, 7.08444444]]
    assert np.allclose(res, exp, atol=1e-04)
def test_effective_resistance_closeness_centrality():
    net = ResNetwork.SmallTestNetwork()

    res = net.effective_resistance_closeness_centrality(0)
    exp = 0.1538
    assert np.isclose(res, exp, atol=1e-04)

    res = net.effective_resistance_closeness_centrality(4)
    exp = 0.08
    assert np.isclose(res, exp, atol=1e-04)
def test_effective_resistance():
    net = ResNetwork.SmallTestNetwork()

    res = net.effective_resistance(1, 1)
    exp = 0.0
    assert np.isclose(res, exp, atol=1e-04)

    res = net.effective_resistance(1, 2)
    exp = 4.4444
    assert np.isclose(res, exp, atol=1e-04)
def testSerialTrivial():
    """Trivial serial test case

    a) 0 --- 1 --- 2

    b) 0 --- 1 --- 2 --- 3 --- 4

    ER(a)/2 = ER(b)
    """

    # construct nw1
    idI = [0, 1]
    idJ = [1, 2]
    val = [1, 1]

    nw1 = np.zeros((3, 3))
    G1 = nx.DiGraph()
    for i, j, v in zip(idI, idJ, val):
        nw1[i, j] = v
        nw1[j, i] = v

    # construct nw2
    idI = idI + [2, 3]
    idJ = idJ + [3, 4]
    val = val + [1, 1]

    nw2 = np.zeros((5, 5))
    for i, j, v in zip(idI, idJ, val):
        nw2[i, j] = v
        nw2[j, i] = v

    # init ResNetworks
    rnw1 = ResNetwork(nw1)
    rnw2 = ResNetwork(nw2)

    ER1 = rnw1.effective_resistance(0, 2)
    ER2 = rnw2.effective_resistance(0, 4)

    print "Effective resistances (0,2)"
    print "NW1 %.3f\tNW2 %.3f\t 2*NW1 = %.3f" % (ER1, ER2, 2*ER1)

    assert (ER1*2-ER2) < 1E-6
def test_init(capsys):
    print(ResNetwork.SmallTestNetwork())
    out, err = capsys.readouterr()
    out_ref = "ResNetwork:\nGeoNetwork:\n" + \
              "Network: undirected, 5 nodes, 5 links, link density 0.500." + \
              "\nGeographical boundaries:\n" + \
              "         time     lat     lon\n" + \
              "   min    0.0    0.00 -180.00\n" + \
              "   max    9.0   90.00  180.00\n" + \
              "Average resistance: 2.4\n"
    assert out == out_ref
def test_admittance_laplacian():
    res = ResNetwork.SmallTestNetwork().admittance_lapacian()
    exp = [[
        0.5,
        -0.5,
        0.,
        0.,
        0.,
    ], [-0.5, 1.125, -0.125, -0.5, 0.], [0., -0.125, 0.25, -0.125, 0.],
           [0., -0.5, -0.125, 0.725, -0.1], [0., 0., 0., -0.1, 0.1]]
    assert np.allclose(res, exp, atol=1e-04)
def testParallelRandom():
    """ 50 random parallel cases
    """

    N = 10
    p = .7

    runs = 0
    while runs < 50:

        G = nx.fast_gnp_random_graph(N, p)
        a = 0
        b = G.number_of_nodes() - 1

        try:
            nx.shortest_path(G, source=a, target=b)
        except RuntimeError:
            continue

        i, j = [], []
        for xx in G.edges():
            i.append(xx[0])
            j.append(xx[1])

        # %.1f values for resistance
        val = np.round(np.random.ranf(len(i)) * 100) / 10

        # and test
        nw1 = makeNW(i, j, val)
        nw2 = parallelCopy(nw1, a, b)
        ER1 = ResNetwork(nw1).effective_resistance(a, b)
        ER2 = ResNetwork(nw2).effective_resistance(a, b)

        # assertion
        assert (ER1 / 2 - ER2) < 1E-6

        # increment runs
        runs += 1
def test_update_resistances():
    net = ResNetwork.SmallTestNetwork()
    net.update_resistances(net.adjacency)

    res = net.get_admittance()
    exp = [[0., 1., 0., 0., 0.], [1., 0., 1., 1., 0.], [0., 1., 0., 1., 0.],
           [0., 1., 1., 0., 1.], [0., 0., 0., 1., 0.]]
    assert (res == exp).all()

    res = net.admittance_lapacian()
    exp = [[1., -1., 0., 0., 0.], [-1., 3., -1., -1., 0.],
           [0., -1., 2., -1., 0.], [0., -1., -1., 3., -1.],
           [0., 0., 0., -1., 1.]]
    assert (res == exp).all()
def test_edge_current_flow_betweenness():
    net = ResNetwork.SmallTestNetwork()

    res = net.edge_current_flow_betweenness()
    exp = [[0., 0.4, 0., 0., 0.], [0.4, 0., 0.2444, 0.5333, 0.],
           [0., 0.2444, 0., 0.2444, 0.], [0., 0.5333, 0.2444, 0., 0.4],
           [0., 0., 0., 0.4, 0.]]
    assert np.allclose(res, exp, atol=1e-04)

    net.update_resistances(net.adjacency)
    res = net.edge_current_flow_betweenness()
    exp = [[0., 0.4, 0., 0., 0.], [0.4, 0., 0.3333, 0.4, 0.],
           [0., 0.3333, 0., 0.3333, 0.], [0., 0.4, 0.3333, 0., 0.4],
           [0., 0., 0., 0.4, 0.]]
    assert np.allclose(res, exp, atol=1e-04)
def test_SmallComplexNetwork():
    net = ResNetwork.SmallComplexNetwork()
    assert net.flagComplex

    adm = net.get_admittance()

    res = adm.real
    exp = [[0., 0.1, 0., 0., 0.], [0.1, 0., 0.0625, 0.25, 0.],
           [0., 0.0625, 0., 0.0625, 0.], [0., 0.25, 0.0625, 0., 0.05],
           [0., 0., 0., 0.05, 0.]]
    assert np.allclose(res, exp, atol=1e-04)

    res = adm.imag
    exp = [[0., -0.2, 0., 0., 0.], [-0.2, 0., -0.0625, -0.25, 0.],
           [0., -0.0625, 0., -0.0625, 0.], [0., -0.25, -0.0625, 0., -0.05],
           [0., 0., 0., -0.05, 0.]]
    assert np.allclose(res, exp, atol=1e-04)
Example #18
0
def testSerialTrivial():
    """Trivial serial test case

    a) 0 --- 1 --- 2

    b) 0 --- 1 --- 2 --- 3 --- 4

    ER(a)/2 = ER(b)
    """

    # construct nw1
    idI = [0, 1]
    idJ = [1, 2]
    val = [1, 1]

    nw1 = np.zeros((3, 3))
    G1 = nx.DiGraph()
    for i, j, v in zip(idI, idJ, val):
        nw1[i, j] = v
        nw1[j, i] = v

    # construct nw2
    idI = idI + [2, 3]
    idJ = idJ + [3, 4]
    val = val + [1, 1]

    nw2 = np.zeros((5, 5))
    for i, j, v in zip(idI, idJ, val):
        nw2[i, j] = v
        nw2[j, i] = v

    # init ResNetworks
    rnw1 = ResNetwork(nw1)
    rnw2 = ResNetwork(nw2)

    ER1 = rnw1.effective_resistance(0, 2)
    ER2 = rnw2.effective_resistance(0, 4)

    print("Effective resistances (0,2)")
    print("NW1 %.3f\tNW2 %.3f\t 2*NW1 = %.3f" % (ER1, ER2, 2 * ER1))

    assert (ER1 * 2 - ER2) < 1E-6
Example #19
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2014 SWIPO Project
#
# Authors (this file):
#   Stefan Schinkel <*****@*****.**>
"""
Weave tests to check that python and weave implementations give the same
results
"""

from pyunicorn import ResNetwork

res = ResNetwork.SmallTestNetwork()
resC = ResNetwork.SmallComplexNetwork()


def testVCFB():
    for i in range(5):
        res.flagWeave = False
        vcfbPython = res.vertex_current_flow_betweenness(i)
        res.flagWeave = True
        vcfbWeave = res.vertex_current_flow_betweenness(i)
        assert vcfbPython == vcfbWeave


def testECFB():
    res.flagWeave = False
    ecfbPython = res.edge_current_flow_betweenness()
    res.flagWeave = True
Example #20
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2014 SWIPO Project
#
# Authors (this file):
#   Stefan Schinkel <*****@*****.**>
"""
Provides simple type check for resistive networks
"""

import numpy as np

from pyunicorn import ResNetwork

res = ResNetwork.SmallTestNetwork()


def testAdmittiveDegreeType():
    print("testing types")
    assert isinstance(res.admittive_degree(), np.ndarray)
def test_admittive_degree():
    res = ResNetwork.SmallTestNetwork().admittive_degree()
    exp = [0.5, 1.125, 0.25, 0.725, 0.1]
    assert np.allclose(res, exp, atol=1e-04)
def test_average_neighbors_admittive_degree():
    res = ResNetwork.SmallTestNetwork().average_neighbors_admittive_degree()
    exp = [2.25, 1.31111111, 7.4, 2.03448276, 7.25]
    assert np.allclose(res, exp, atol=1e-04)
def test_local_admittive_clustering():
    res = ResNetwork.SmallTestNetwork().local_admittive_clustering()
    exp = [0., 0.00694444, 0.0625, 0.01077586, 0.]
    assert np.allclose(res, exp, atol=1e-04)
def test_global_admittive_clustering():
    res = ResNetwork.SmallTestNetwork().global_admittive_clustering()
    exp = 0.016
    assert np.isclose(res, exp, atol=1e-04)
def test_average_effective_resistance():
    res = ResNetwork.SmallTestNetwork().average_effective_resistance()
    exp = 7.2889
    assert np.isclose(res, exp, atol=1e-04)
def test_diameter_effective_resistance():
    res = ResNetwork.SmallTestNetwork().diameter_effective_resistance()
    exp = 14.4444
    assert np.isclose(res, exp, atol=1e-04)
def test_vertex_current_flow_betweenness():
    net = ResNetwork.SmallTestNetwork()

    res = net.vertex_current_flow_betweenness(1)
    exp = 0.3889
    assert np.isclose(res, exp, atol=1e-04)
def test_update_R():
    net = ResNetwork.SmallTestNetwork()
    net.update_R()
    assert True
def test_SmallTestNetwork():
    assert isinstance(ResNetwork.SmallTestNetwork(), ResNetwork)
def test_update_admittance():
    net = ResNetwork.SmallTestNetwork()
    net.update_admittance()
    assert True