retworkx 0.8.0

A python graph library implemented in Rust
Documentation
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

import unittest

import retworkx


class TestKShortestpath(unittest.TestCase):

    def test_digraph_k_shortest_path_lengths(self):
        graph = retworkx.PyDiGraph()
        graph.add_nodes_from(list(range(8)))
        graph.add_edges_from_no_data([
            (0, 1),
            (1, 2),
            (2, 3),
            (3, 0),
            (4, 5),
            (1, 4),
            (5, 6),
            (6, 7),
            (7, 5)
        ])
        res = retworkx.digraph_k_shortest_path_lengths(graph, 1, 2,
                                                       lambda _: 1)
        expected = {0: 7.0, 1: 4.0, 2: 5.0, 3: 6.0, 4: 5.0, 5: 5.0, 6: 6.0,
                    7: 7.0}
        self.assertEqual(res, expected)

    def test_digraph_k_shortest_path_lengths_with_goal(self):
        graph = retworkx.PyDiGraph()
        graph.add_nodes_from(list(range(8)))
        graph.add_edges_from_no_data([
            (0, 1),
            (1, 2),
            (2, 3),
            (3, 0),
            (4, 5),
            (1, 4),
            (5, 6),
            (6, 7),
            (7, 5)
        ])
        res = retworkx.digraph_k_shortest_path_lengths(graph, 1, 2,
                                                       lambda _: 1, 3)
        self.assertEqual(res, {3: 6})

    def test_graph_k_shortest_path_lengths(self):
        graph = retworkx.PyGraph()
        graph.add_nodes_from(list(range(8)))
        graph.add_edges_from_no_data([
            (0, 1),
            (1, 2),
            (2, 3),
            (3, 0),
            (4, 5),
            (1, 4),
            (5, 6),
            (6, 7),
            (7, 5)
        ])
        res = retworkx.graph_k_shortest_path_lengths(graph, 1, 2, lambda _: 1)
        expected = {0: 3, 1: 2, 2: 3, 3: 2, 4: 3, 5: 4, 6: 4, 7: 4}
        self.assertEqual(res, expected)

    def test_k_graph_shortest_path_with_goal(self):
        graph = retworkx.PyGraph()
        graph.add_nodes_from(list(range(7)))
        graph.add_edges_from_no_data([
            (0, 1), (0, 6), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)])
        res = retworkx.graph_k_shortest_path_lengths(graph, 0, 2, lambda _: 1,
                                                     3)
        self.assertEqual({3: 4}, res)