def _poisson_ ( self , mu ) :
        mu = float ( mu )
        if _MAX <= mu :
            r = -1 
            while r < 0 : r = self.gauss ( mu , _sqrt( mu ) )
            return max ( _round ( r ) , 0 )
        x  = 0
        p  = _exp ( -mu )
        s  = p
        u  = self.uniform ( 0 , 1 )
        while s < u :
            x += 1
            p *= mu / x
            s += p
        return x