1- #!/usr/bin/env python2
1+ #!/usr/bin/env python3
22######################################################################
33#
44# File: durability.py
@@ -82,12 +82,12 @@ def pad(self, s, width):
8282
8383
8484def 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 ) ))
8888 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 ()
9191
9292
9393def factorial (n ):
@@ -108,8 +108,8 @@ def choose(n, r):
108108 assert n >= 0
109109 assert 0 <= r <= n
110110
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 )):
113113 c = (c * num ) // denom
114114 return c
115115
@@ -175,7 +175,7 @@ def probability_of_failure_in_any_period(p, n):
175175 n_int = int (n )
176176 result = 0.0
177177 sign = 1
178- for i in xrange (1 , n_int + 1 ):
178+ for i in range (1 , n_int + 1 ):
179179 p_exp_i = p ** i
180180 if p_exp_i != 0 :
181181 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
270270 num_periods = 365.0 / shard_replacement_days
271271 failure_rate_per_period = annual_shard_failure_rate / num_periods
272272
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 ()
280280
281281 failure_probability_per_period = 1.0 - math .exp (- failure_rate_per_period )
282282 data = []
283283 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 ):
285285 period_failure_prob = binomial_probability (failed_shards , total_shards , failure_probability_per_period )
286286 period_cumulative_prob += period_failure_prob
287287 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
299299 'nines' : nines
300300 })
301301
302- print Table (data , ['failure_threshold' ,
302+ print ( Table (data , ['failure_threshold' ,
303303 'individual_prob' ,
304304 'cumulative_prob' ,
305305 'annual_loss_rate' ,
306306 'annual_odds' ,
307307 'durability' ,
308308 'nines'
309- ])
309+ ]))
310310 print
311311
312312 return dict (
@@ -323,18 +323,18 @@ def example():
323323 p = 2.0
324324 data = [
325325 { '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 )
327327 ]
328328 print_markdown_table (data , ['k' , 'p' ])
329329
330- print 'Probability of n Failing'
330+ print ( 'Probability of n Failing' )
331331 annual_rate = 0.25
332332 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 ()
338338 probs = {'ok' : (1 - p_one_failing ), 'FAIL' : p_one_failing }
339339 data = []
340340 total_prob = 0.0
@@ -352,12 +352,12 @@ def example():
352352 })
353353 total_prob += probs [a ] * probs [b ] * probs [c ]
354354 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 )
356356 print
357357
358358 data = [
359359 {'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 )
361361 ]
362362 print_markdown_table (data , ['Number of Failures' , 'Probability' ])
363363
0 commit comments