def test_multi_gauss_process(self): grid = list(range(0, 10)) r = .9 producer = GaussEvolutionProducer( MultiGauss([0., 0.], [[1., r], [r, 1.]], [0., 0.])) consumer = ConsumerConsumer(TransposedConsumer(lambda s: s.value[0]), TransposedConsumer(lambda s: s.value[1])) first, second = Engine(producer, consumer).run(grid, 500, num_of_workers=None) if plt is not None: t = '2d-Scatter-MultiGauss' fig, ax = plt.subplots() ax.scatter(first[1], second[1]) plt.title(t) plt.savefig('.' + sep + 'pdf' + sep + t.replace(' ', '_') + '.pdf') plt.close() t = '3d-Scatter-MultiGauss' fig = plt.figure() ax = fig.add_subplot(111, projection='3d') for i in grid: ax.scatter([i] * len(first[i]), first[i], second[i]) for x, y in zip(first[i], second[i]): self.assertAlmostEqual(x, y, -100) plt.title(t) plt.savefig('.' + sep + 'pdf' + sep + t.replace(' ', '_') + '.pdf') plt.close()
def test_statistics(self): producer = GaussEvolutionProducer(self.process) consumer = StatisticsConsumer(statistics=_MultiStatistics) stats = Engine(producer, consumer).run(self.grid, self.path) for p, s in stats: for pm, sm in zip(self.process.mean(p), s.mean): self.assertAlmostEqual(pm, sm, self.places) for pv, sv in zip(self.process.variance(p), s.variance): self.assertAlmostEqual(pv, sv, self.places)
def test_statistics(self): producer = GaussEvolutionProducer(self.process) consumer = StatisticsConsumer(func=self.eval) stats = Engine(producer, consumer).run(self.grid, self.path) for p, s in stats: self.assertAlmostEqual(self.process.mean(p), s.mean, self.places) # self.assertAlmostEqual(self.process.mean(p), s.median, self.places) self.assertAlmostEqual(self.process.variance(p), s.variance, self.places)
def test_statistics(self): producer = GaussEvolutionProducer(self.process) consumer = StatisticsConsumer(lambda s: s.value[0]) stats = Engine(producer, consumer).run(self.grid, 50000) for p, s in stats: # print p, self.process.mean(p), self.process.variance(p), '\n', s self.assertAlmostEqual(self.process.mean(p), s.mean, self.places) self.assertAlmostEqual(self.process.mean(p), s.median, self.places) self.assertAlmostEqual(self.process.variance(p), s.variance, self.places)
def test_random_statistics(self): for d in range(2, 4, 2): process = self.process.__class__.random(d) producer = GaussEvolutionProducer(process) consumer = StatisticsConsumer(statistics=_MultiStatistics) stats = Engine(producer, consumer).run(self.grid, self.path) msg = '\ntransition matrix:\n' + str(process._transition_matrix) msg += '\nstart distribution:\n' + str(process.start) for p, s in stats: for pm, sm in zip(process.mean(p), s.mean): self.assertAlmostEqual( pm, sm, self.places, 'mean at %d: %f vs. %f' % (p, pm, sm) + msg) for pv, sv in zip(process.variance(p), s.variance): self.assertAlmostEqual( pv, sv, self.places, 'variance t %d: %f vs. %f' % (p, pv, sv) + msg)
def test_mean(self): start, drift, vol, time = 1., 0.1, 0.02, 1. expected = start * exp((drift + 0.5 * vol**2) * time) process = GeometricBrownianMotion(drift, vol, start) e = Engine(GaussEvolutionProducer(process), StatisticsConsumer()) mean = list() median = list() variance = list() for seed in range(100): d, r = e.run(grid=[0., time], seed=seed, num_of_paths=5000)[-1] mean.append(r.mean) median.append(r.median) variance.append(r.variance) self.assertTrue(min(mean) <= expected <= max(mean)) self.assertTrue(min(median) <= expected <= max(median)) self.assertTrue(min(mean) <= process.mean(time) <= max(mean)) self.assertTrue( min(variance) <= process.variance(time) <= max(variance))
def test_3d_plot(self): producer = GaussEvolutionProducer(self.process) consumer = TimeWaveConsumer(lambda s: s.value[0]) Engine(producer, consumer).run(self.grid, 5000) plot_timewave_result(consumer.result, '3d-' + str(self.process), '.' + sep + 'pdf')
def test_2d_plot(self): producer = GaussEvolutionProducer(self.process) consumer = Consumer(lambda s: s.value[0]) Engine(producer, consumer).run(self.grid, 500) plot_consumer_result(consumer.result, consumer.grid, '2d-' + str(self.process), '.' + sep + 'pdf')