from math import log, exp T = 100 N = 100 def kernel(t, mu): return mu * exp(-mu * t) def base_rate(t, lamb): return lamb def ll(crimes, weights, mu, lamb): r = 0 for i, crime in enumerate(crimes): t, v = crime a = sum(weights[(u, v)] * kernel(t - s, mu) for s, u in crimes[:t]) r += log(base_rate(t, lamb) + a) for j in range(N): a = sum(weights[(u, v)] * kernel(T - s, mu) for s, u in crimes) r -= log(a)