|  | @@ -30,8 +30,7 @@
 | 
	
		
			
				|  |  |  from scipy import stats
 | 
	
		
			
				|  |  |  import math
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -_THRESHOLD = 1e-10
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +_DEFAULT_THRESHOLD = 1e-10
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def scale(a, mul):
 | 
	
		
			
				|  |  |    return [x * mul for x in a]
 | 
	
	
		
			
				|  | @@ -40,19 +39,18 @@ def scale(a, mul):
 | 
	
		
			
				|  |  |  def cmp(a, b):
 | 
	
		
			
				|  |  |    return stats.ttest_ind(a, b)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def speedup(new, old):
 | 
	
		
			
				|  |  | +def speedup(new, old, threshold = _DEFAULT_THRESHOLD):
 | 
	
		
			
				|  |  |    if (len(set(new))) == 1 and new == old: return 0
 | 
	
		
			
				|  |  |    s0, p0 = cmp(new, old)
 | 
	
		
			
				|  |  |    if math.isnan(p0): return 0
 | 
	
		
			
				|  |  |    if s0 == 0: return 0
 | 
	
		
			
				|  |  | -  if p0 > _THRESHOLD: return 0
 | 
	
		
			
				|  |  | +  if p0 > _DEFAULT_THRESHOLD: return 0
 | 
	
		
			
				|  |  |    if s0 < 0:
 | 
	
		
			
				|  |  |      pct = 1
 | 
	
		
			
				|  |  |      while pct < 100:
 | 
	
		
			
				|  |  |        sp, pp = cmp(new, scale(old, 1 - pct / 100.0))
 | 
	
		
			
				|  |  |        if sp > 0: break
 | 
	
		
			
				|  |  | -      if pp > _THRESHOLD: break
 | 
	
		
			
				|  |  | +      if pp > _DEFAULT_THRESHOLD: break
 | 
	
		
			
				|  |  |        pct += 1
 | 
	
		
			
				|  |  |      return -(pct - 1)
 | 
	
		
			
				|  |  |    else:
 | 
	
	
		
			
				|  | @@ -60,13 +58,13 @@ def speedup(new, old):
 | 
	
		
			
				|  |  |      while pct < 10000:
 | 
	
		
			
				|  |  |        sp, pp = cmp(new, scale(old, 1 + pct / 100.0))
 | 
	
		
			
				|  |  |        if sp < 0: break
 | 
	
		
			
				|  |  | -      if pp > _THRESHOLD: break
 | 
	
		
			
				|  |  | +      if pp > _DEFAULT_THRESHOLD: break
 | 
	
		
			
				|  |  |        pct += 1
 | 
	
		
			
				|  |  |      return pct - 1
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if __name__ == "__main__":
 | 
	
		
			
				|  |  |    new = [0.0, 0.0, 0.0, 0.0] 
 | 
	
		
			
				|  |  | -  old=[2.96608e-06, 3.35076e-06, 3.45384e-06, 3.34407e-06]
 | 
	
		
			
				|  |  | +  old = [2.96608e-06, 3.35076e-06, 3.45384e-06, 3.34407e-06]
 | 
	
		
			
				|  |  |    print speedup(new, old, 1e-5)
 | 
	
		
			
				|  |  |    print speedup(old, new, 1e-5)
 |