@@ -163,7 +163,7 @@ def _sum(data, start=0):
163
163
T = _coerce (int , type (start ))
164
164
for typ , values in groupby (data , type ):
165
165
T = _coerce (T , typ ) # or raise TypeError
166
- for n ,d in map (_exact_ratio , values ):
166
+ for n , d in map (_exact_ratio , values ):
167
167
count += 1
168
168
partials [d ] = partials_get (d , 0 ) + n
169
169
if None in partials :
@@ -261,7 +261,7 @@ def _convert(value, T):
261
261
return T (value )
262
262
except TypeError :
263
263
if issubclass (T , Decimal ):
264
- return T (value .numerator )/ T (value .denominator )
264
+ return T (value .numerator ) / T (value .denominator )
265
265
else :
266
266
raise
267
267
@@ -277,8 +277,8 @@ def _find_lteq(a, x):
277
277
def _find_rteq (a , l , x ):
278
278
'Locate the rightmost value exactly equal to x'
279
279
i = bisect_right (a , x , lo = l )
280
- if i != (len (a )+ 1 ) and a [i - 1 ] == x :
281
- return i - 1
280
+ if i != (len (a ) + 1 ) and a [i - 1 ] == x :
281
+ return i - 1
282
282
raise ValueError
283
283
284
284
@@ -315,7 +315,7 @@ def mean(data):
315
315
raise StatisticsError ('mean requires at least one data point' )
316
316
T , total , count = _sum (data )
317
317
assert count == n
318
- return _convert (total / n , T )
318
+ return _convert (total / n , T )
319
319
320
320
321
321
def fmean (data ):
@@ -403,11 +403,11 @@ def harmonic_mean(data):
403
403
else :
404
404
raise TypeError ('unsupported type' )
405
405
try :
406
- T , total , count = _sum (1 / x for x in _fail_neg (data , errmsg ))
406
+ T , total , count = _sum (1 / x for x in _fail_neg (data , errmsg ))
407
407
except ZeroDivisionError :
408
408
return 0
409
409
assert count == n
410
- return _convert (n / total , T )
410
+ return _convert (n / total , T )
411
411
412
412
413
413
# FIXME: investigate ways to calculate medians without sorting? Quickselect?
@@ -428,11 +428,11 @@ def median(data):
428
428
n = len (data )
429
429
if n == 0 :
430
430
raise StatisticsError ("no median for empty data" )
431
- if n % 2 == 1 :
432
- return data [n // 2 ]
431
+ if n % 2 == 1 :
432
+ return data [n // 2 ]
433
433
else :
434
- i = n // 2
435
- return (data [i - 1 ] + data [i ])/ 2
434
+ i = n // 2
435
+ return (data [i - 1 ] + data [i ]) / 2
436
436
437
437
438
438
def median_low (data ):
@@ -451,10 +451,10 @@ def median_low(data):
451
451
n = len (data )
452
452
if n == 0 :
453
453
raise StatisticsError ("no median for empty data" )
454
- if n % 2 == 1 :
455
- return data [n // 2 ]
454
+ if n % 2 == 1 :
455
+ return data [n // 2 ]
456
456
else :
457
- return data [n // 2 - 1 ]
457
+ return data [n // 2 - 1 ]
458
458
459
459
460
460
def median_high (data ):
@@ -473,7 +473,7 @@ def median_high(data):
473
473
n = len (data )
474
474
if n == 0 :
475
475
raise StatisticsError ("no median for empty data" )
476
- return data [n // 2 ]
476
+ return data [n // 2 ]
477
477
478
478
479
479
def median_grouped (data , interval = 1 ):
@@ -510,15 +510,15 @@ class 3.5-4.5, and interpolation is used to estimate it.
510
510
return data [0 ]
511
511
# Find the value at the midpoint. Remember this corresponds to the
512
512
# centre of the class interval.
513
- x = data [n // 2 ]
513
+ x = data [n // 2 ]
514
514
for obj in (x , interval ):
515
515
if isinstance (obj , (str , bytes )):
516
516
raise TypeError ('expected number but got %r' % obj )
517
517
try :
518
- L = x - interval / 2 # The lower limit of the median interval.
518
+ L = x - interval / 2 # The lower limit of the median interval.
519
519
except TypeError :
520
520
# Mixed type. For now we just coerce to float.
521
- L = float (x ) - float (interval )/ 2
521
+ L = float (x ) - float (interval ) / 2
522
522
523
523
# Uses bisection search to search for x in data with log(n) time complexity
524
524
# Find the position of leftmost occurrence of x in data
@@ -528,7 +528,7 @@ class 3.5-4.5, and interpolation is used to estimate it.
528
528
l2 = _find_rteq (data , l1 , x )
529
529
cf = l1
530
530
f = l2 - l1 + 1
531
- return L + interval * ( n / 2 - cf )/ f
531
+ return L + interval * ( n / 2 - cf ) / f
532
532
533
533
534
534
def mode (data ):
@@ -554,8 +554,7 @@ def mode(data):
554
554
If *data* is empty, ``mode``, raises StatisticsError.
555
555
556
556
"""
557
- data = iter (data )
558
- pairs = Counter (data ).most_common (1 )
557
+ pairs = Counter (iter (data )).most_common (1 )
559
558
try :
560
559
return pairs [0 ][0 ]
561
560
except IndexError :
@@ -597,7 +596,7 @@ def multimode(data):
597
596
# For sample data where there is a positive probability for values
598
597
# beyond the range of the data, the R6 exclusive method is a
599
598
# reasonable choice. Consider a random sample of nine values from a
600
- # population with a uniform distribution from 0.0 to 100 .0. The
599
+ # population with a uniform distribution from 0.0 to 1 .0. The
601
600
# distribution of the third ranked sample point is described by
602
601
# betavariate(alpha=3, beta=7) which has mode=0.250, median=0.286, and
603
602
# mean=0.300. Only the latter (which corresponds with R6) gives the
@@ -643,9 +642,8 @@ def quantiles(data, *, n=4, method='exclusive'):
643
642
m = ld - 1
644
643
result = []
645
644
for i in range (1 , n ):
646
- j = i * m // n
647
- delta = i * m - j * n
648
- interpolated = (data [j ] * (n - delta ) + data [j + 1 ] * delta ) / n
645
+ j , delta = divmod (i * m , n )
646
+ interpolated = (data [j ] * (n - delta ) + data [j + 1 ] * delta ) / n
649
647
result .append (interpolated )
650
648
return result
651
649
if method == 'exclusive' :
@@ -655,7 +653,7 @@ def quantiles(data, *, n=4, method='exclusive'):
655
653
j = i * m // n # rescale i to m/n
656
654
j = 1 if j < 1 else ld - 1 if j > ld - 1 else j # clamp to 1 .. ld-1
657
655
delta = i * m - j * n # exact integer math
658
- interpolated = (data [j - 1 ] * (n - delta ) + data [j ] * delta ) / n
656
+ interpolated = (data [j - 1 ] * (n - delta ) + data [j ] * delta ) / n
659
657
result .append (interpolated )
660
658
return result
661
659
raise ValueError (f'Unknown method: { method !r} ' )
@@ -689,9 +687,9 @@ def _ss(data, c=None):
689
687
T , total , count = _sum ((x - c )** 2 for x in data )
690
688
# The following sum should mathematically equal zero, but due to rounding
691
689
# error may not.
692
- U , total2 , count2 = _sum ((x - c ) for x in data )
690
+ U , total2 , count2 = _sum ((x - c ) for x in data )
693
691
assert T == U and count == count2
694
- total -= total2 ** 2 / len (data )
692
+ total -= total2 ** 2 / len (data )
695
693
assert not total < 0 , 'negative sum of square deviations: %f' % total
696
694
return (T , total )
697
695
@@ -740,7 +738,7 @@ def variance(data, xbar=None):
740
738
if n < 2 :
741
739
raise StatisticsError ('variance requires at least two data points' )
742
740
T , ss = _ss (data , xbar )
743
- return _convert (ss / ( n - 1 ), T )
741
+ return _convert (ss / ( n - 1 ), T )
744
742
745
743
746
744
def pvariance (data , mu = None ):
@@ -784,7 +782,7 @@ def pvariance(data, mu=None):
784
782
if n < 1 :
785
783
raise StatisticsError ('pvariance requires at least one data point' )
786
784
T , ss = _ss (data , mu )
787
- return _convert (ss / n , T )
785
+ return _convert (ss / n , T )
788
786
789
787
790
788
def stdev (data , xbar = None ):
@@ -993,7 +991,7 @@ def overlap(self, other):
993
991
if not isinstance (other , NormalDist ):
994
992
raise TypeError ('Expected another NormalDist instance' )
995
993
X , Y = self , other
996
- if (Y ._sigma , Y ._mu ) < (X ._sigma , X ._mu ): # sort to assure commutativity
994
+ if (Y ._sigma , Y ._mu ) < (X ._sigma , X ._mu ): # sort to assure commutativity
997
995
X , Y = Y , X
998
996
X_var , Y_var = X .variance , Y .variance
999
997
if not X_var or not Y_var :
0 commit comments