diff env/lib/python3.9/site-packages/networkx/utils/tests/test_misc.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/networkx/utils/tests/test_misc.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,222 @@
+import pytest
+import networkx as nx
+import random
+from networkx.utils import (
+    create_py_random_state,
+    create_random_state,
+    discrete_sequence,
+    dict_to_numpy_array,
+    dict_to_numpy_array1,
+    dict_to_numpy_array2,
+    is_string_like,
+    iterable,
+    groups,
+    make_list_of_ints,
+    make_str,
+    pairwise,
+    powerlaw_sequence,
+    PythonRandomInterface,
+    to_tuple,
+)
+
+
+def test_is_string_like():
+    assert is_string_like("aaaa")
+    assert not is_string_like(None)
+    assert not is_string_like(123)
+
+
+def test_iterable():
+    assert not iterable(None)
+    assert not iterable(10)
+    assert iterable([1, 2, 3])
+    assert iterable((1, 2, 3))
+    assert iterable({1: "A", 2: "X"})
+    assert iterable("ABC")
+
+
+def test_graph_iterable():
+    K = nx.complete_graph(10)
+    assert iterable(K)
+    assert iterable(K.nodes())
+    assert iterable(K.edges())
+
+
+def test_make_list_of_ints():
+    mylist = [1, 2, 3.0, 42, -2]
+    assert make_list_of_ints(mylist) is mylist
+    assert make_list_of_ints(mylist) == mylist
+    assert type(make_list_of_ints(mylist)[2]) is int
+    pytest.raises(nx.NetworkXError, make_list_of_ints, [1, 2, 3, "kermit"])
+    pytest.raises(nx.NetworkXError, make_list_of_ints, [1, 2, 3.1])
+
+
+def test_random_number_distribution():
+    # smoke test only
+    z = powerlaw_sequence(20, exponent=2.5)
+    z = discrete_sequence(20, distribution=[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3])
+
+
+def test_make_str_with_bytes():
+    x = "qualité"
+    y = make_str(x)
+    assert isinstance(y, str)
+    assert len(y) == 7
+
+
+def test_make_str_with_unicode():
+    x = "qualité"
+    y = make_str(x)
+    assert isinstance(y, str)
+    assert len(y) == 7
+
+
+class TestNumpyArray:
+    @classmethod
+    def setup_class(cls):
+        global numpy
+        global assert_allclose
+        numpy = pytest.importorskip("numpy")
+        assert_allclose = numpy.testing.assert_allclose
+
+    def test_numpy_to_list_of_ints(self):
+        a = numpy.array([1, 2, 3], dtype=numpy.int64)
+        b = numpy.array([1.0, 2, 3])
+        c = numpy.array([1.1, 2, 3])
+        assert type(make_list_of_ints(a)) == list
+        assert make_list_of_ints(b) == list(b)
+        B = make_list_of_ints(b)
+        assert type(B[0]) == int
+        pytest.raises(nx.NetworkXError, make_list_of_ints, c)
+
+    def test_dict_to_numpy_array1(self):
+        d = {"a": 1, "b": 2}
+        a = dict_to_numpy_array1(d, mapping={"a": 0, "b": 1})
+        assert_allclose(a, numpy.array([1, 2]))
+        a = dict_to_numpy_array1(d, mapping={"b": 0, "a": 1})
+        assert_allclose(a, numpy.array([2, 1]))
+
+        a = dict_to_numpy_array1(d)
+        assert_allclose(a.sum(), 3)
+
+    def test_dict_to_numpy_array2(self):
+        d = {"a": {"a": 1, "b": 2}, "b": {"a": 10, "b": 20}}
+
+        mapping = {"a": 1, "b": 0}
+        a = dict_to_numpy_array2(d, mapping=mapping)
+        assert_allclose(a, numpy.array([[20, 10], [2, 1]]))
+
+        a = dict_to_numpy_array2(d)
+        assert_allclose(a.sum(), 33)
+
+    def test_dict_to_numpy_array_a(self):
+        d = {"a": {"a": 1, "b": 2}, "b": {"a": 10, "b": 20}}
+
+        mapping = {"a": 0, "b": 1}
+        a = dict_to_numpy_array(d, mapping=mapping)
+        assert_allclose(a, numpy.array([[1, 2], [10, 20]]))
+
+        mapping = {"a": 1, "b": 0}
+        a = dict_to_numpy_array(d, mapping=mapping)
+        assert_allclose(a, numpy.array([[20, 10], [2, 1]]))
+
+        a = dict_to_numpy_array2(d)
+        assert_allclose(a.sum(), 33)
+
+    def test_dict_to_numpy_array_b(self):
+        d = {"a": 1, "b": 2}
+
+        mapping = {"a": 0, "b": 1}
+        a = dict_to_numpy_array(d, mapping=mapping)
+        assert_allclose(a, numpy.array([1, 2]))
+
+        a = dict_to_numpy_array1(d)
+        assert_allclose(a.sum(), 3)
+
+
+def test_pairwise():
+    nodes = range(4)
+    node_pairs = [(0, 1), (1, 2), (2, 3)]
+    node_pairs_cycle = node_pairs + [(3, 0)]
+    assert list(pairwise(nodes)) == node_pairs
+    assert list(pairwise(iter(nodes))) == node_pairs
+    assert list(pairwise(nodes, cyclic=True)) == node_pairs_cycle
+    empty_iter = iter(())
+    assert list(pairwise(empty_iter)) == []
+    empty_iter = iter(())
+    assert list(pairwise(empty_iter, cyclic=True)) == []
+
+
+def test_groups():
+    many_to_one = dict(zip("abcde", [0, 0, 1, 1, 2]))
+    actual = groups(many_to_one)
+    expected = {0: {"a", "b"}, 1: {"c", "d"}, 2: {"e"}}
+    assert actual == expected
+    assert {} == groups({})
+
+
+def test_to_tuple():
+    a_list = [1, 2, [1, 3]]
+    actual = to_tuple(a_list)
+    expected = (1, 2, (1, 3))
+    assert actual == expected
+
+    a_tuple = (1, 2)
+    actual = to_tuple(a_tuple)
+    expected = a_tuple
+    assert actual == expected
+
+    a_mix = (1, 2, [1, 3])
+    actual = to_tuple(a_mix)
+    expected = (1, 2, (1, 3))
+    assert actual == expected
+
+
+def test_create_random_state():
+    np = pytest.importorskip("numpy")
+    rs = np.random.RandomState
+
+    assert isinstance(create_random_state(1), rs)
+    assert isinstance(create_random_state(None), rs)
+    assert isinstance(create_random_state(np.random), rs)
+    assert isinstance(create_random_state(rs(1)), rs)
+    pytest.raises(ValueError, create_random_state, "a")
+
+    assert np.all(rs(1).rand(10) == create_random_state(1).rand(10))
+
+
+def test_create_py_random_state():
+    pyrs = random.Random
+
+    assert isinstance(create_py_random_state(1), pyrs)
+    assert isinstance(create_py_random_state(None), pyrs)
+    assert isinstance(create_py_random_state(pyrs(1)), pyrs)
+    pytest.raises(ValueError, create_py_random_state, "a")
+
+    np = pytest.importorskip("numpy")
+
+    rs = np.random.RandomState
+    nprs = PythonRandomInterface
+    assert isinstance(create_py_random_state(np.random), nprs)
+    assert isinstance(create_py_random_state(rs(1)), nprs)
+    # test default rng input
+    assert isinstance(PythonRandomInterface(), nprs)
+
+
+def test_PythonRandomInterface():
+    np = pytest.importorskip("numpy")
+    rs = np.random.RandomState
+    rng = PythonRandomInterface(rs(42))
+    rs42 = rs(42)
+
+    # make sure these functions are same as expected outcome
+    assert rng.randrange(3, 5) == rs42.randint(3, 5)
+    assert np.all(rng.choice([1, 2, 3]) == rs42.choice([1, 2, 3]))
+    assert rng.gauss(0, 1) == rs42.normal(0, 1)
+    assert rng.expovariate(1.5) == rs42.exponential(1 / 1.5)
+    assert np.all(rng.shuffle([1, 2, 3]) == rs42.shuffle([1, 2, 3]))
+    assert np.all(
+        rng.sample([1, 2, 3], 2) == rs42.choice([1, 2, 3], (2,), replace=False)
+    )
+    assert rng.randint(3, 5) == rs42.randint(3, 6)
+    assert rng.random() == rs42.random_sample()