def w_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = (Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: return 1.0 vt = v_within_margin(team_performance_difference_abs, draw_margin) return (vt ** 2 + ( (draw_margin - team_performance_difference_abs) * Gaussian.at(draw_margin - team_performance_difference_abs) - (-draw_margin - team_performance_difference_abs) * Gaussian.at(-draw_margin - team_performance_difference_abs)) / denominator)
def testAt(self): expected = 0.352065326764300 answer = Gaussian.at(0.5) self.assertAlmostEqual( expected, answer, None, "testAt expected %.15f, got %.15f" % (expected, answer), GaussianDistributionTest.ERROR_TOLERANCE)
def v_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return -team_performance_difference - draw_margin return -team_performance_difference + draw_margin numerator = (Gaussian.at(-draw_margin - team_performance_difference_abs) - Gaussian.at(draw_margin - team_performance_difference_abs)) if team_performance_difference < 0.0: return -numerator / denominator return numerator / denominator
def w_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: return 1.0 vt = v_within_margin(team_performance_difference_abs, draw_margin) return (vt**2 + ((draw_margin - team_performance_difference_abs) * Gaussian.at(draw_margin - team_performance_difference_abs) - (-draw_margin - team_performance_difference_abs) * Gaussian.at(-draw_margin - team_performance_difference_abs)) / denominator)
def v_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return -team_performance_difference - draw_margin return -team_performance_difference + draw_margin numerator = (Gaussian.at(-draw_margin - team_performance_difference_abs) - Gaussian.at(draw_margin - team_performance_difference_abs)) if team_performance_difference < 0.0: return -numerator / denominator return numerator / denominator
def v_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if (denominator < 2.22275874e-162): return -team_performance_difference + draw_margin return Gaussian.at(team_performance_difference - draw_margin) / denominator
def testAt(self): expected = 0.352065326764300 answer = Gaussian.at(0.5) self.assertAlmostEqual(expected, answer, None, "testAt expected %.15f, got %.15f" % (expected, answer), GaussianDistributionTest.ERROR_TOLERANCE)
def v_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if (denominator < 2.22275874e-162): return -team_performance_difference + draw_margin return Gaussian.at(team_performance_difference - draw_margin) / denominator