Source code for stochastic_matching.simulator.logs

from numba import int64
from numba.experimental import jitclass
import numpy as np


[docs] @jitclass class Logs: """ Jitclass for logs. Parameters ---------- n: :class:`int` Number of nodes. m: :class:`int` Number of edges. max_queue: :class:`int` Maximum number of items per class. """ income: int64[:] traffic: int64[:] queue_log: int64[:, :] def __init__(self, n, m, max_queue): self.income = np.zeros(n, dtype=np.int64) self.traffic = np.zeros(m, dtype=np.int64) self.queue_log = np.zeros((n, max_queue), dtype=np.int64) @property def steps_done(self): return int(np.sum(self.income)) def update(self, queue_size, node, edge): self.income[node] += 1 if edge > -1: self.traffic[edge] += 1 for i, q in enumerate(queue_size): self.queue_log[i, q] += 1
[docs] @jitclass class PhantomLogs: """ Jitclass for logs of e-filtering policies. automatically concatenates the results in the original format. Parameters ---------- n: :class:`int` Number of nodes of the original graph. m: :class:`int` Number of edges of the original graph. max_queue: :class:`int` Maximum number of items per class. edges: :class:`~numpy.ndarray` Edge index. """ income: int64[:] traffic: int64[:] edges: int64[:] queue_log: int64[:, :] steps_done: int n: int def __init__(self, n, m, max_queue, edges): self.income = np.zeros(n, dtype=np.int64) self.traffic = np.zeros(m, dtype=np.int64) self.edges = edges self.queue_log = np.zeros((n, max_queue), dtype=np.int64) self.steps_done = 0 self.n = n def update(self, queue_size, node, edge): self.income[node % self.n] += 1 if edge > -1: self.traffic[self.edges[edge]] += 1 for i in range(self.n): q = queue_size[i] + queue_size[i + self.n] self.queue_log[i, q] += 1 self.steps_done += 1
[docs] def repr_logs(logs): """ Parameters ---------- logs: :class:`~stochastic_matching.simulator.logs.Logs` Logs to display. Relies on `print`. Returns ------- None """ print( f"Arrivals: {logs.income.astype(int)}\n" f"Traffic: {logs.traffic.astype(int)}\n" f"Queues: {logs.queue_log.astype(int)}\n" f"Steps done: {logs.steps_done}" )