import arcview,arcpy,math
from arcpy.sa import *
def erf(x):
    ''' Error function modified for rasters from the pure python implementation
        posted on StackExchange [1] of the algorithm from the
        Handbook of Mathematical Functions [2]
        [1] http://stackoverflow.com/a/457805/737471
        [2] http://people.math.sfu.ca/~cbm/aands/frameindex.htm
    '''
    # save the sign of x
    #sign = 1 if x >= 0 else -1 # This doesn't work with a Raster object
                                #   ValueError: The truth value of a raster is ambiguous.
                                #   Invalid use of raster with Boolean operator or function.
    sign = (x>=0) + ((x<0)*-1)
    x = Abs(x)
    # constants
    a1 =  0.254829592
    a2 = -0.284496736
    a3 =  1.421413741
    a4 = -1.453152027
    a5 =  1.061405429
    p  =  0.3275911
    # A&S formula 7.1.26
    t = 1.0/(1.0 + p*x)
    y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*Exp(-x*x)
    return sign*y
if __name__=='__main__':
    input_raster='path/to/input/raster'
    output_raster='path/to/output/raster'
    arcpy.CheckOutExtension('spatial')
    inras=Raster(input_raster)
    outras = 0.5*(1+erf((inras)/math.sqrt(2*2*2)))
    outras.save(output_raster)
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		math.sqrt(2*2*2)
