Source code for kleinberg_grid_simulator.python_implementation.python_edt

"""Main module."""
import time

from numba import njit  # type: ignore

from kleinberg_grid_simulator.python_implementation.shortcuts import (draw_r_lt_1, draw_r_eq_1, draw_1_lt_r_lt_2,
                                                       draw_r_eq_2, draw_2_lt_r)
from kleinberg_grid_simulator.python_implementation.greedy_walk import edt_gen
from kleinberg_grid_simulator.utils import Result


[docs] def python_edt(n=1000, r=2, p=1, q=1, n_runs=10000, numba=True, parallel=False): """ Python-based computation of the expected delivery time (edt). Parameters ---------- n: :class:`int`, default=1000 Grid siDe r: :class:`float`, default=2.0 Shortcut exponent p: :class:`int`, default=1 Local range q: :class:`int`, default=1 Number of shortcuts n_runs: :class:`int`, default=10000 Number of routes to compute numba: :class:`bool`, default=True Use JiT compilation parallel: :class:`bool`, default=False Parallelize runs. Use for single, lengthy computation. Coarse-grained (high-level) parallelisation is preferred. Returns ------- :class:`~kleinberg_grid_simulator.utils.Result` The expected number of steps to go from one point of the grid to another point of the grid. """ start = time.process_time() if r < 1: gen = draw_r_lt_1(n, r) elif r == 1: gen = draw_r_eq_1(n) elif r < 2: gen = draw_1_lt_r_lt_2(n, r) elif r == 2: gen = draw_r_eq_2(n) else: gen = draw_2_lt_r(n, r) if numba: gen = njit(gen) main_loop = njit(edt_gen, parallel=parallel) else: main_loop = edt_gen edt = main_loop(gen=gen, n=n, p=p, q=q, n_runs=n_runs) return Result(edt=edt, process_time=time.process_time() - start, n=n, r=r, p=p, q=q, n_runs=n_runs, julia=False, numba=numba, parallel=parallel)