コード例 #1
0
def from_networkx_graph(nx_graph):
    """Returns an UndirectedHypergraph object that is the graph equivalent of
    the given NetworkX Graph object.

    :param nx_graph: the NetworkX undirected graph object to transform.
    :returns: UndirectedHypergraph -- H object equivalent to the
            NetworkX undirected graph.
    :raises: TypeError -- Transformation only applicable to undirected
            NetworkX graphs

    """
    import networkx as nx

    if not isinstance(nx_graph, nx.Graph):
        raise TypeError("Transformation only applicable to undirected \
                        NetworkX graphs")

    G = UndirectedHypergraph()

    for node in nx_graph.nodes():
        G.add_node(node, copy.copy(nx_graph.nodes[node]))

    for edge in nx_graph.edges():
        G.add_hyperedge([edge[0], edge[1]],
                        copy.copy(nx_graph[edge[0]][edge[1]]))

    return G
コード例 #2
0
def from_networkx_graph(nx_graph):
    """Returns an UndirectedHypergraph object that is the graph equivalent of
    the given NetworkX Graph object.

    :param nx_graph: the NetworkX undirected graph object to transform.
    :returns: UndirectedHypergraph -- H object equivalent to the
            NetworkX undirected graph.
    :raises: TypeError -- Transformation only applicable to undirected
            NetworkX graphs

    """
    import networkx as nx

    if not isinstance(nx_graph, nx.Graph):
        raise TypeError("Transformation only applicable to undirected \
                        NetworkX graphs")

    G = UndirectedHypergraph()

    for node in nx_graph.nodes_iter():
        G.add_node(node, copy.copy(nx_graph.node[node]))

    for edge in nx_graph.edges_iter():
        G.add_hyperedge([edge[0], edge[1]],
                        copy.copy(nx_graph[edge[0]][edge[1]]))

    return G
コード例 #3
0
def test_add_hyperedge():
    node_a = 'A'
    node_b = 'B'
    node_c = 'C'
    node_d = 'D'

    nodes1 = set([node_a, node_b, node_c])
    frozen_nodes1 = frozenset(nodes1)

    attrib = {'weight': 6, 'color': 'black'}

    H = UndirectedHypergraph()
    H.add_node(node_a, label=1337)
    hyperedge_name = H.add_hyperedge(nodes1, attrib, weight=5)

    assert hyperedge_name == 'e1'

    # Test that all hyperedge attributes are correct
    assert H._hyperedge_attributes[hyperedge_name]['nodes'] == nodes1
    assert H._hyperedge_attributes[hyperedge_name]['__frozen_nodes'] == \
        frozen_nodes1
    assert H._hyperedge_attributes[hyperedge_name]['weight'] == 5
    assert H._hyperedge_attributes[hyperedge_name]['color'] == 'black'

    # Test that compose_hyperedge list contains the correct info
    assert frozen_nodes1 in H._node_set_to_hyperedge
    assert hyperedge_name == H._node_set_to_hyperedge[frozen_nodes1]

    # Test that the stars contain the correct info
    for node in frozen_nodes1:
        assert hyperedge_name in H._star[node]

    # Test that adding same hyperedge will only update attributes
    new_attrib = {'weight': 10}
    H.add_hyperedge(nodes1, new_attrib)
    assert H._hyperedge_attributes[hyperedge_name]['weight'] == 10
    assert H._hyperedge_attributes[hyperedge_name]['color'] == 'black'

    try:
        H.add_hyperedge(set())
        assert False
    except ValueError:
        pass
    except BaseException as e:
        assert False, e
コード例 #4
0
def test_add_hyperedge():
    node_a = 'A'
    node_b = 'B'
    node_c = 'C'
    node_d = 'D'

    nodes1 = set([node_a, node_b, node_c])
    frozen_nodes1 = frozenset(nodes1)

    attrib = {'weight': 6, 'color': 'black'}

    H = UndirectedHypergraph()
    H.add_node(node_a, label=1337)
    hyperedge_name = H.add_hyperedge(nodes1, attrib, weight=5)

    assert hyperedge_name == 'e1'

    # Test that all hyperedge attributes are correct
    assert H._hyperedge_attributes[hyperedge_name]['nodes'] == nodes1
    assert H._hyperedge_attributes[hyperedge_name]['__frozen_nodes'] == \
        frozen_nodes1
    assert H._hyperedge_attributes[hyperedge_name]['weight'] == 5
    assert H._hyperedge_attributes[hyperedge_name]['color'] == 'black'

    # Test that compose_hyperedge list contains the correct info
    assert frozen_nodes1 in H._node_set_to_hyperedge
    assert hyperedge_name == H._node_set_to_hyperedge[frozen_nodes1]

    # Test that the stars contain the correct info
    for node in frozen_nodes1:
        assert hyperedge_name in H._star[node]

    # Test that adding same hyperedge will only update attributes
    new_attrib = {'weight': 10}
    H.add_hyperedge(nodes1, new_attrib)
    assert H._hyperedge_attributes[hyperedge_name]['weight'] == 10
    assert H._hyperedge_attributes[hyperedge_name]['color'] == 'black'

    try:
        H.add_hyperedge(set())
        assert False
    except ValueError:
        pass
    except BaseException as e:
        assert False, e