<s> from math import fabs , exp , sqrt , log , pi <EOL> def zprob ( z ) : <EOL> """<STR_LIT>""" <EOL> Z_MAX = <NUM_LIT> <EOL> if z == <NUM_LIT:0.0> : <EOL> x = <NUM_LIT:0.0> <EOL> else : <EOL> y = <NUM_LIT:0.5> * fabs ( z ) <EOL> if y >= ( Z_MAX * <NUM_LIT:0.5> ) : <EOL> x = <NUM_LIT:1.0> <EOL> elif ( y < <NUM_LIT:1.0> ) : <EOL> w = y * y <EOL> x = ( ( ( ( ( ( ( ( <NUM_LIT> * w <EOL> - <NUM_LIT> ) * w + <NUM_LIT> ) * w <EOL> - <NUM_LIT> ) * w + <NUM_LIT> ) * w <EOL> - <NUM_LIT> ) * w + <NUM_LIT> ) * w <EOL> - <NUM_LIT> ) * w + <NUM_LIT> ) * y * <NUM_LIT> <EOL> else : <EOL> y = y - <NUM_LIT> <EOL> x = ( ( ( ( ( ( ( ( ( ( ( ( ( - <NUM_LIT> * y <EOL> + <NUM_LIT> ) * y - <NUM_LIT> ) * y <EOL> - <NUM_LIT> ) * y + <NUM_LIT> ) * y <EOL> - <NUM_LIT> ) * y - <NUM_LIT> ) * y <EOL> + <NUM_LIT> ) * y - <NUM_LIT> ) * y <EOL> + <NUM_LIT> ) * y - <NUM_LIT> ) * y <EOL> + <NUM_LIT> ) * y - <NUM_LIT> ) * y <EOL> + <NUM_LIT> ) * y + <NUM_LIT> <EOL> if z > <NUM_LIT:0.0> : <EOL> prob = ( ( x + <NUM_LIT:1.0> ) * <NUM_LIT:0.5> ) <EOL> else : <EOL> prob = ( ( <NUM_LIT:1.0> - x ) * <NUM_LIT:0.5> ) <EOL> return prob <EOL> def chisqprob ( chisq , df ) : <EOL> """<STR_LIT>""" <EOL> BIG = <NUM_LIT> <EOL> def ex ( x ) : <EOL> BIG = <NUM_LIT> <EOL> if x < - BIG : <EOL> return <NUM_LIT:0.0> <EOL> else : <EOL> return exp ( x ) <EOL> if chisq <= <NUM_LIT:0> or df < <NUM_LIT:1> : <EOL> return <NUM_LIT:1.0> <EOL> a = <NUM_LIT:0.5> * chisq <EOL> if df % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> even = <NUM_LIT:1> <EOL> else : <EOL> even = <NUM_LIT:0> <EOL> if df > <NUM_LIT:1> : <EOL> y = ex ( - a ) <EOL> if even : <EOL> s = y <EOL> else : <EOL> s = <NUM_LIT> * zprob ( - sqrt ( chisq ) ) <EOL> if ( df > <NUM_LIT:2> ) : <EOL> chisq = <NUM_LIT:0.5> * ( df - <NUM_LIT:1.0> ) <EOL> if even : <EOL> z = <NUM_LIT:1.0> <EOL> else : <EOL> z = <NUM_LIT:0.5> <EOL> if a > BIG : <EOL> if even : <EOL> e = <NUM_LIT:0.0> <EOL> else : <EOL> e = log ( sqrt ( pi ) ) <EOL> c = log ( a ) <EOL> while ( z <= chisq ) : <EOL> e = log ( z ) + e <EOL> s = s + ex ( c * z - a - e ) <EOL> z = z + <NUM_LIT:1.0> <EOL> return s <EOL> else : <EOL> if even : <EOL> e = <NUM_LIT:1.0> <EOL> else : <EOL> e = <NUM_LIT:1.0> / sqrt ( pi ) / sqrt ( a ) <EOL> c = <NUM_LIT:0.0> <EOL> while ( z <= chisq ) : <EOL> e = e * ( a / float ( z ) ) <EOL> c = c + e <EOL> z = z + <NUM_LIT:1.0> <EOL> return ( c * y + s ) <EOL> else : <EOL> return s </s>
