def test_mixture_density(self): process1 = RenewalProcess(PoissonDensity(), ConstantIntensity()) process2 = RenewalProcess(PoissonDensity(), ExponentialDecay()) mixed_process = MixedProcess(process1, process2) intensities_params = [1, 10, 2] t = 0.5 vals = mixed_process._intensity_func(t, *intensities_params) ints = mixed_process._intensity_integral(t, *intensities_params) d_mix = mixed_process._density_func(vals, ints, 4) d1 = process1._density_func(vals[0], ints[0]) d2 = process1._density_func(vals[1], ints[1]) self.assertAlmostEqual(d_mix, 0.8 * d1 + 0.2 * d2)
def test_mixture_density_array(self): process1 = RenewalProcess(PoissonDensity(), ConstantIntensity()) process2 = RenewalProcess(PoissonDensity(), ExponentialDecay()) mixed_process = MixedProcess(process1, process2) intensities_params = [1, 10, 2] t = np.array([0.5, 1, 1.5]) vals = mixed_process._intensity_func(t, *intensities_params) ints = mixed_process._intensity_integral(t, *intensities_params) d_mix_arr = mixed_process._density_func(vals, ints, 4) d1_arr = process1._density_func(vals[:, 0], ints[:, 0]) d2_arr = process1._density_func(vals[:, 1], ints[:, 1]) for d_mix, d1, d2 in zip(d_mix_arr, d1_arr, d2_arr): self.assertAlmostEqual(d_mix, 0.8 * d1 + 0.2 * d2)