Ejemplo n.º 1
0
def test_file(seed, maximum_size, runs, file_extension):

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)
        mc_to = _MarkovChain.random(size, zeros=zeros, seed=seed)

        file_handler, file_path = _tf_mkstemp(suffix=file_extension)
        _os_close(file_handler)

        # noinspection PyBroadException
        try:

            mc_to.to_file(file_path)
            mc_from = _MarkovChain.from_file(file_path)

            exception = False

        except Exception:

            mc_from = None
            exception = True

        _os_remove(file_path)

        assert exception is False

        _npt.assert_allclose(mc_from.p, mc_to.p, rtol=1e-5, atol=1e-8)
Ejemplo n.º 2
0
def test_plot_redistributions(seed, maximum_size, maximum_distributions, runs):

    rs = _rd_getstate()
    _rd_seed(seed)

    configs = []

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)

        configs.append((size, zeros))

    _rd_setstate(rs)

    mcs = []
    plot_types = ['heatmap', 'projection']

    for i in range(runs):

        size, zeros = configs[i]
        mc = _MarkovChain.random(size, zeros=zeros, seed=seed)

        if i == 0:
            distributions = mc.redistribute(1, output_last=False)
            initial_status = None
            plot_type = 'projection'
        else:
            r = _rd_randint(1, maximum_distributions)
            distributions = r if _rd_random() < 0.5 else mc.redistribute(r, output_last=False)
            initial_status = None if isinstance(distributions, int) or _rd_random() < 0.5 else distributions[0]
            plot_type = _rd_choice(plot_types)

        configs[i] = (distributions, initial_status, plot_type)
        mcs.append(mc)

    for i in range(runs):

        mc = mcs[i]
        distributions, initial_status, plot_type = configs[i]

        # noinspection PyBroadException
        try:

            figure, _ = _plot_redistributions(mc, distributions, initial_status, plot_type)
            _mplp.close(figure)

            exception = False

        except Exception:
            exception = True

        assert exception is False
Ejemplo n.º 3
0
def test_dictionary(seed, maximum_size, runs):

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)
        mc_to = _MarkovChain.random(size, zeros=zeros, seed=seed)

        d = mc_to.to_dictionary()
        mc_from = _MarkovChain.from_dictionary(d)

        _npt.assert_allclose(mc_from.p, mc_to.p, rtol=1e-5, atol=1e-8)
Ejemplo n.º 4
0
def test_plot_walk(seed, maximum_size, maximum_simulations, runs):

    rs = _rd_getstate()
    _rd_seed(seed)

    configs = []

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)

        configs.append((size, zeros))

    _rd_setstate(rs)

    mcs = []
    plot_types = ['histogram', 'sequence', 'transitions']

    for i in range(runs):

        size, zeros = configs[i]
        mc = _MarkovChain.random(size, zeros=zeros, seed=seed)

        r = _rd_randint(2, maximum_simulations)

        walk = r if _rd_random() < 0.5 else mc.walk(r, output_indices=True)
        initial_state = None if isinstance(walk, int) or _rd_random() < 0.5 else walk[0]
        plot_type = _rd_choice(plot_types)

        configs[i] = (walk, initial_state, plot_type)
        mcs.append(mc)

    for i in range(runs):

        mc = mcs[i]
        walk, initial_state, plot_type = configs[i]

        # noinspection PyBroadException
        try:

            figure, _ = _plot_walk(mc, walk, initial_state, plot_type)
            _mplp.close(figure)

            exception = False

        except Exception:
            exception = True

        assert exception is False
Ejemplo n.º 5
0
def test_graph(seed, maximum_size, runs):

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)
        mc_to = _MarkovChain.random(size, zeros=zeros, seed=seed)

        graph = mc_to.to_graph(False)
        mc_from = _MarkovChain.from_graph(graph)

        _npt.assert_allclose(mc_from.p, mc_to.p, rtol=1e-5, atol=1e-8)

        graph = mc_to.to_graph(True)
        mc_from = _MarkovChain.from_graph(graph)

        _npt.assert_allclose(mc_from.p, mc_to.p, rtol=1e-5, atol=1e-8)
Ejemplo n.º 6
0
def test_plot_eigenvalues(seed, maximum_size, runs):

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)
        mc = _MarkovChain.random(size, zeros=zeros, seed=seed)

        # noinspection PyBroadException
        try:

            figure, _ = _plot_eigenvalues(mc)
            _mplp.close(figure)

            exception = False

        except Exception:
            exception = True

        assert exception is False
Ejemplo n.º 7
0
def test_plot_graph(seed, maximum_size, runs):

    rs = _rd_getstate()
    _rd_seed(seed)

    configs = []

    for _ in range(runs):

        size = _rd_randint(2, maximum_size)
        zeros = _rd_randint(0, size)

        configs.append((size, zeros) + tuple(_rd_random() < 0.5 for _ in range(4)))

    _rd_setstate(rs)

    for i in range(runs):

        size, zeros, nodes_color, nodes_type, edges_color, edges_value = configs[i]

        mc = _MarkovChain.random(size, zeros=zeros, seed=seed)

        # noinspection PyBroadException
        try:

            figure, _ = _plot_graph(mc, nodes_color=nodes_color, nodes_type=nodes_type, edges_color=edges_color, edges_value=edges_value, force_standard=True)
            _mplp.close(figure)

            figure, _ = _plot_graph(mc, nodes_color=nodes_color, nodes_type=nodes_type, edges_color=edges_color, edges_value=edges_value, force_standard=False)
            _mplp.close(figure)

            exception = False

        except Exception:
            exception = True

        assert exception is False
Ejemplo n.º 8
0
def test_random(seed, size, zeros, mask, value):

    mc = _MarkovChain.random(size, None, zeros, mask, seed)

    actual = mc.p
    expected = _np.asarray(value)

    _npt.assert_allclose(actual, expected, rtol=1e-5, atol=1e-8)

    if zeros > 0 and mask is None:

        actual = size**2 - _np.count_nonzero(mc.p)
        expected = zeros

        assert actual == expected

    if mask is not None:

        indices = ~_np.isnan(_np.asarray(mask))

        actual = mc.p[indices]
        expected = _np.asarray(value)[indices]

        _npt.assert_allclose(actual, expected, rtol=1e-5, atol=1e-8)