1
- #!/usr/bin/env python2
1
+ #!/usr/bin/env python3
2
2
######################################################################
3
3
#
4
4
# File: durability.py
@@ -82,12 +82,12 @@ def pad(self, s, width):
82
82
83
83
84
84
def print_markdown_table (data , column_names ):
85
- print
86
- print ' | ' .join (column_names )
87
- print ' | ' .join (['---' ] * len (column_names ))
85
+ print ()
86
+ print ( ' | ' .join (column_names ) )
87
+ print ( ' | ' .join (['---' ] * len (column_names ) ))
88
88
for item in data :
89
- print ' | ' .join (item [cn ] for cn in column_names )
90
- print
89
+ print ( ' | ' .join (item [cn ] for cn in column_names ) )
90
+ print ()
91
91
92
92
93
93
def factorial (n ):
@@ -108,8 +108,8 @@ def choose(n, r):
108
108
assert n >= 0
109
109
assert 0 <= r <= n
110
110
111
- c = 1L
112
- for num , denom in zip (xrange (n , n - r , - 1 ), xrange (1 , r + 1 , 1 )):
111
+ c = 1
112
+ for num , denom in zip (range (n , n - r , - 1 ), range (1 , r + 1 , 1 )):
113
113
c = (c * num ) // denom
114
114
return c
115
115
@@ -175,7 +175,7 @@ def probability_of_failure_in_any_period(p, n):
175
175
n_int = int (n )
176
176
result = 0.0
177
177
sign = 1
178
- for i in xrange (1 , n_int + 1 ):
178
+ for i in range (1 , n_int + 1 ):
179
179
p_exp_i = p ** i
180
180
if p_exp_i != 0 :
181
181
result += sign * choose (n_int , i ) * (p ** i )
@@ -270,18 +270,18 @@ def do_scenario(total_shards, min_shards, annual_shard_failure_rate, shard_repla
270
270
num_periods = 365.0 / shard_replacement_days
271
271
failure_rate_per_period = annual_shard_failure_rate / num_periods
272
272
273
- print
274
- print '#'
275
- print '# total shards:' , total_shards
276
- print '# replacement period (days): %6.4f' % (shard_replacement_days )
277
- print '# annual shard failure rate: %6.4f' % (annual_shard_failure_rate )
278
- print '#'
279
- print
273
+ print ()
274
+ print ( '#' )
275
+ print ( '# total shards:' , total_shards )
276
+ print ( '# replacement period (days): %6.4f' % (shard_replacement_days ) )
277
+ print ( '# annual shard failure rate: %6.4f' % (annual_shard_failure_rate ) )
278
+ print ( '#' )
279
+ print ()
280
280
281
281
failure_probability_per_period = 1.0 - math .exp (- failure_rate_per_period )
282
282
data = []
283
283
period_cumulative_prob = 0.0
284
- for failed_shards in xrange (total_shards , - 1 , - 1 ):
284
+ for failed_shards in range (total_shards , - 1 , - 1 ):
285
285
period_failure_prob = binomial_probability (failed_shards , total_shards , failure_probability_per_period )
286
286
period_cumulative_prob += period_failure_prob
287
287
annual_loss_prob = probability_of_failure_in_any_period (period_cumulative_prob , num_periods )
@@ -299,14 +299,14 @@ def do_scenario(total_shards, min_shards, annual_shard_failure_rate, shard_repla
299
299
'nines' : nines
300
300
})
301
301
302
- print Table (data , ['failure_threshold' ,
302
+ print ( Table (data , ['failure_threshold' ,
303
303
'individual_prob' ,
304
304
'cumulative_prob' ,
305
305
'annual_loss_rate' ,
306
306
'annual_odds' ,
307
307
'durability' ,
308
308
'nines'
309
- ])
309
+ ]))
310
310
print
311
311
312
312
return dict (
@@ -323,18 +323,18 @@ def example():
323
323
p = 2.0
324
324
data = [
325
325
{ 'k' : str (k ), 'p' : '%6.4f' % (math .exp (- p ) * p ** k / factorial (k ),) }
326
- for k in xrange (7 )
326
+ for k in range (7 )
327
327
]
328
328
print_markdown_table (data , ['k' , 'p' ])
329
329
330
- print 'Probability of n Failing'
330
+ print ( 'Probability of n Failing' )
331
331
annual_rate = 0.25
332
332
p_one_failing = probability_of_failure_for_failure_rate (annual_rate )
333
- print 'probability of one failing: %6.4f' % p_one_failing
334
- print 'probability of none failing: %6.4f' % (1 - p_one_failing )
335
- print 'probability of three not failing: %6.4f' % (1 - p_one_failing ) ** 3
336
- print 'probability of two or more failing: %6.4f' % (binomial_probability (2 , 3 , p_one_failing ) + binomial_probability (3 , 3 , p_one_failing ))
337
- print
333
+ print ( 'probability of one failing: %6.4f' % p_one_failing )
334
+ print ( 'probability of none failing: %6.4f' % (1 - p_one_failing ) )
335
+ print ( 'probability of three not failing: %6.4f' % (1 - p_one_failing ) ** 3 )
336
+ print ( 'probability of two or more failing: %6.4f' % (binomial_probability (2 , 3 , p_one_failing ) + binomial_probability (3 , 3 , p_one_failing ) ))
337
+ print ()
338
338
probs = {'ok' : (1 - p_one_failing ), 'FAIL' : p_one_failing }
339
339
data = []
340
340
total_prob = 0.0
@@ -352,12 +352,12 @@ def example():
352
352
})
353
353
total_prob += probs [a ] * probs [b ] * probs [c ]
354
354
print_markdown_table (data , ['A' , 'A prob' , 'B' , 'B prob' , 'C' , 'C prob' , 'Probability' ])
355
- print 'sum of probabilities: %6.4f' % total_prob
355
+ print ( 'sum of probabilities: %6.4f' % total_prob )
356
356
print
357
357
358
358
data = [
359
359
{'Number of Failures' : str (k ), 'Probability' : '%6.4f' % binomial_probability (k , 3 , p_one_failing )}
360
- for k in xrange (4 )
360
+ for k in range (4 )
361
361
]
362
362
print_markdown_table (data , ['Number of Failures' , 'Probability' ])
363
363
0 commit comments