Package: python-scipy Version: 0.3.2-6 Severity: normal Tags: patch
There are typographic bugs in stats.py that make two functions fail. In addition, the calculation for nanstd() provides obviously wrong answers. I have not done any formal checking for the correction attached below. In the distributions.py file, the calculation of est_loc_scale() uses a sibling method wrongly and references an import by the wrong name. In the same file, nnlf() method passes its own object twice to _nnlf() and its parameter parsing is incompatible with the fit() method's needs. The patch below is on directory /lib/python*/site-packages/scipy/stats *** stats.py 2005-08-10 10:05:38.000000000 -0700 --- stats.py.orig 2005-08-10 09:31:59.000000000 -0700 *************** *** 241,249 **** x = x.copy() Norig = x.shape[axis] factor = 1.0-sum(isnan(x),axis)*1.0/Norig ! n = N.sum(isnan(x),axis) N.putmask(x,isnan(x),0) ! return mean(x,axis)/factor def nanstd(x,axis=-1,bias=0): """Compute the standard deviation over the given axis ignoring nans --- 241,249 ---- x = x.copy() Norig = x.shape[axis] factor = 1.0-sum(isnan(x),axis)*1.0/Norig ! n = N-sum(isnan(x),axis) N.putmask(x,isnan(x),0) ! return stats.mean(x,axis)/factor def nanstd(x,axis=-1,bias=0): """Compute the standard deviation over the given axis ignoring nans *************** *** 253,266 **** Norig = x.shape[axis] n = Norig - sum(isnan(x),axis)*1.0 factor = n/Norig N.putmask(x,isnan(x),0) ! mn = expand_dims(mean(x,axis),axis) ! y = ss(x-mn,axis) if bias: ! y /= n else: ! y /= n-1 ! return sqrt(y) def _nanmedian(arr1d): # This only works on 1d arrays cond = 1-isnan(arr1d) --- 253,268 ---- Norig = x.shape[axis] n = Norig - sum(isnan(x),axis)*1.0 factor = n/Norig + n = N-sum(isnan(x),axis) N.putmask(x,isnan(x),0) ! m1 = stats.mean(x,axis) ! m1c = m1/factor ! m2 = stats.mean((x-m1c)**2.0,axis) if bias: ! m2c = m2/factor else: ! m2c = m2*Norig/(n-1.0) ! return m2c def _nanmedian(arr1d): # This only works on 1d arrays cond = 1-isnan(arr1d) *** distributions.py.orig 2005-08-10 09:25:14.000000000 -0700 --- distributions.py 2005-08-10 10:32:11.000000000 -0700 *************** *** 730,740 **** # try: x = args[-1] ! loc = args[-2] ! scale = args[-3] ! args = args[:-3] except IndexError: ! raise ValueError, "Not enough input arguments." if not self._argcheck(*args) or scale <= 0: return inf x = arr((x-loc) / scale) --- 730,746 ---- # try: x = args[-1] ! args = args[:-1] except IndexError: ! raise ValueError, "Need shape and data arguments." ! try: ! if len(args) == 1: ! args = args[0] ! loc = args[-1] ! scale = args[-2] ! args = args[:-2] ! except IndexError: ! raise ValueError, "Not enough shape arguments." if not self._argcheck(*args) or scale <= 0: return inf x = arr((x-loc) / scale) *************** *** 743,749 **** return inf else: N = len(x) ! return self._nnlf(self, x, *args) + N*log(scale) def fit(self, data, *args, **kwds): loc0, scale0 = map(kwds.get, ['loc', 'scale'],[0.0, 1.0]) --- 749,755 ---- return inf else: N = len(x) ! return self._nnlf(x, *args) + N*log(scale) def fit(self, data, *args, **kwds): loc0, scale0 = map(kwds.get, ['loc', 'scale'],[0.0, 1.0]) *************** *** 758,766 **** return optimize.fmin(self.nnlf,x0,args=(ravel(data),),disp=0) def est_loc_scale(self, data, *args): ! mu, mu2, g1, g2 = self.stats(*args,**{'moments':'mv'}) ! muhat = stats.nanmean(data) ! mu2hat = stats.nanstd(data) Shat = sqrt(mu2hat / mu2) Lhat = muhat - Shat*mu return Lhat, Shat --- 764,772 ---- return optimize.fmin(self.nnlf,x0,args=(ravel(data),),disp=0) def est_loc_scale(self, data, *args): ! mu, mu2 = self.stats(*args,**{'moments':'mv'}) ! muhat = st.nanmean(data) ! mu2hat = st.nanstd(data) Shat = sqrt(mu2hat / mu2) Lhat = muhat - Shat*mu return Lhat, Shat -- System Information: Debian Release: testing/unstable APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.4.23 Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1) Versions of packages python-scipy depends on: ii python2.3-scipy 0.3.2-6 scientific tools for Python 2.3 python-scipy recommends no packages. -- no debconf information