def test_isolates(self):
        """Should return None if the structure model only contains isolates"""

        nodes = [1, 3, 5, 2, 7]
        sm = StructureModel()
        sm.add_nodes_from(nodes)
        assert sm.get_largest_subgraph() is None
Esempio n. 2
0
    def test_get_largest_subgraph(self, test_input, expected):
        """Should be able to return the largest subgraph"""
        sm = StructureModel()
        sm.add_edges_from(test_input)
        largest_subgraph = sm.get_largest_subgraph()

        expected_graph = StructureModel()
        expected_graph.add_edges_from(expected)

        assert set(largest_subgraph.nodes) == set(expected_graph.nodes)
        assert set(largest_subgraph.edges) == set(expected_graph.edges)
Esempio n. 3
0
    def test_more_than_one_largest(self):
        """Return the first largest when there are more than one largest subgraph"""

        edges = [(0, 1), (1, 2), (3, 4), (3, 5)]
        sm = StructureModel()
        sm.add_edges_from(edges)
        largest_subgraph = sm.get_largest_subgraph()

        expected_edges = [(0, 1), (1, 2)]
        expected_graph = StructureModel()
        expected_graph.add_edges_from(expected_edges)

        assert set(largest_subgraph.nodes) == set(expected_graph.nodes)
        assert set(largest_subgraph.edges) == set(expected_graph.edges)
Esempio n. 4
0
    def test_different_origins_and_weights(self):
        """The largest subgraph returned should still have the edge data preserved from the original graph"""

        sm = StructureModel()
        sm.add_weighted_edges_from([(1, 2, 2.0)], origin="unknown")
        sm.add_weighted_edges_from([(1, 3, 1.0)], origin="learned")
        sm.add_weighted_edges_from([(5, 6, 0.7)], origin="expert")

        largest_subgraph = sm.get_largest_subgraph()

        assert set(largest_subgraph.edges.data("origin")) == {
            (1, 2, "unknown"),
            (1, 3, "learned"),
        }
        assert set(largest_subgraph.edges.data("weight")) == {(1, 2, 2.0), (1, 3, 1.0)}
Esempio n. 5
0
    def test_isolates_nodes_and_edges(self):
        """Should be able to return the largest subgraph"""

        edges = [(0, 1), (1, 2), (1, 3), (5, 6)]
        isolated_nodes = [7, 8, 9]
        sm = StructureModel()
        sm.add_edges_from(edges)
        sm.add_nodes_from(isolated_nodes)
        largest_subgraph = sm.get_largest_subgraph()

        expected_edges = [(0, 1), (1, 2), (1, 3)]
        expected_graph = StructureModel()
        expected_graph.add_edges_from(expected_edges)

        assert set(largest_subgraph.nodes) == set(expected_graph.nodes)
        assert set(largest_subgraph.edges) == set(expected_graph.edges)
Esempio n. 6
0
    def test_empty(self):
        """Should return None if the structure model is empty"""

        sm = StructureModel()
        assert sm.get_largest_subgraph() is None