[Python-checkins] python/dist/src/Lib random.py,1.26.6.2,1.26.6.3

rhettinger@sourceforge.net rhettinger@sourceforge.net
Mon, 13 May 2002 23:56:30 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv5803

Modified Files:
      Tag: release22-maint
	random.py 
Log Message:
Closes patch 529408 deprecating random.stdgamma().


Index: random.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/random.py,v
retrieving revision 1.26.6.2
retrieving revision 1.26.6.3
diff -C2 -d -r1.26.6.2 -r1.26.6.3
*** random.py	13 May 2002 23:43:06 -0000	1.26.6.2
--- random.py	14 May 2002 06:56:27 -0000	1.26.6.3
***************
*** 443,454 ****
  
      def gammavariate(self, alpha, beta):
-         # beta times standard gamma
-         return beta * self.stdgamma(alpha)
  
!     def stdgamma(self, alpha, *args):  # *args for Py2.2 compatiblity
!         random = self.random
!         if alpha <= 0.0:
!             raise ValueError, 'stdgamma: alpha must be > 0.0'
  
          if alpha > 1.0:
  
--- 443,455 ----
  
      def gammavariate(self, alpha, beta):
  
!         # alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2
!         
! 	# Warning: a few older sources define the gamma distribution in terms
! 	# of alpha > -1.0
! 	if alpha <= 0.0 or beta <= 0.0:
! 	    raise ValueError, 'gammavariate: alpha and beta must be > 0.0'
  
+         random = self.random
          if alpha > 1.0:
  
***************
*** 469,473 ****
                  r = bbb+ccc*v-x
                  if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= _log(z):
!                     return x
  
          elif alpha == 1.0:
--- 470,474 ----
                  r = bbb+ccc*v-x
                  if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= _log(z):
!                     return x * beta
  
          elif alpha == 1.0:
***************
*** 476,480 ****
              while u <= 1e-7:
                  u = random()
!             return -_log(u)
  
          else:   # alpha is between 0 and 1 (exclusive)
--- 477,481 ----
              while u <= 1e-7:
                  u = random()
!             return -_log(u) * beta
  
          else:   # alpha is between 0 and 1 (exclusive)
***************
*** 495,499 ****
                            ((p > 1)  and  (u1 > pow(x, alpha - 1.0)))):
                      break
!             return x
  
  
--- 496,520 ----
                            ((p > 1)  and  (u1 > pow(x, alpha - 1.0)))):
                      break
!             return x * beta
! 
! 
!     def stdgamma(self, alpha, ainv, bbb, ccc):
!         # This method was (and shall remain) undocumented.
!         # This method is deprecated
!         # for the following reasons:
!         # 1. Returns same as .gammavariate(alpha, 1.0)
!         # 2. Requires caller to provide 3 extra arguments
!         #    that are functions of alpha anyway
!         # 3. Can't be used for alpha < 0.5
! 
!         # ainv = sqrt(2 * alpha - 1)
!         # bbb = alpha - log(4)
!         # ccc = alpha + ainv
!         import warnings
!         warnings.warn("The stdgamma function is deprecated; "
!                       "use gammavariate() instead",
!                       DeprecationWarning)
!         return self.gammavariate(alpha, 1.0)
! 
  
  
***************
*** 594,598 ****
                (avg, stddev, smallest, largest)
  
! def _test(N=200):
      print 'TWOPI         =', TWOPI
      print 'LOG4          =', LOG4
--- 615,619 ----
                (avg, stddev, smallest, largest)
  
! def _test(N=20000):
      print 'TWOPI         =', TWOPI
      print 'LOG4          =', LOG4
***************
*** 605,608 ****
--- 626,632 ----
      _test_generator(N, 'expovariate(1.0)')
      _test_generator(N, 'vonmisesvariate(0.0, 1.0)')
+     _test_generator(N, 'gammavariate(0.01, 1.0)')
+     _test_generator(N, 'gammavariate(0.1, 1.0)')
+     _test_generator(N, 'gammavariate(0.1, 2.0)')    
      _test_generator(N, 'gammavariate(0.5, 1.0)')
      _test_generator(N, 'gammavariate(0.9, 1.0)')