[Scipy-svn] r7110 - trunk/scipy/fftpack
scipy-svn at scipy.org
scipy-svn at scipy.org
Mon Jan 31 16:14:51 EST 2011
Author: ptvirtan
Date: 2011-01-31 15:14:50 -0600 (Mon, 31 Jan 2011)
New Revision: 7110
Modified:
trunk/scipy/fftpack/basic.py
Log:
BUG: fftpack: fix data overwriting in FFT routines (#1353)
The _fix_shape helper routine in some cases returns slices of the input
array, which does not create copies. In those cases, one should not set
overwrite_x=1.
Modified: trunk/scipy/fftpack/basic.py
===================================================================
--- trunk/scipy/fftpack/basic.py 2011-01-30 21:05:44 UTC (rev 7109)
+++ trunk/scipy/fftpack/basic.py 2011-01-31 21:14:50 UTC (rev 7110)
@@ -113,14 +113,14 @@
index = [slice(None)]*len(s)
index[axis] = slice(0,n)
x = x[index]
+ return x, False
else:
index = [slice(None)]*len(s)
index[axis] = slice(0,s[axis])
s[axis] = n
z = zeros(s,x.dtype.char)
z[index] = x
- x = z
- return x
+ return z, True
def _raw_fft(x, n, axis, direction, overwrite_x, work_function):
@@ -128,8 +128,8 @@
if n is None:
n = x.shape[axis]
elif n != x.shape[axis]:
- x = _fix_shape(x,n,axis)
- overwrite_x = 1
+ x, copy_made = _fix_shape(x,n,axis)
+ overwrite_x = overwrite_x or copy_made
if axis == -1 or axis == len(x.shape)-1:
r = work_function(x,n,direction,overwrite_x=overwrite_x)
else:
@@ -208,8 +208,8 @@
if n is None:
n = tmp.shape[axis]
elif n != tmp.shape[axis]:
- tmp = _fix_shape(tmp,n,axis)
- overwrite_x = 1
+ tmp, copy_made = _fix_shape(tmp,n,axis)
+ overwrite_x = overwrite_x or copy_made
if axis == -1 or axis == len(tmp.shape) - 1:
return work_function(tmp,n,1,0,overwrite_x)
@@ -261,8 +261,8 @@
if n is None:
n = tmp.shape[axis]
elif n != tmp.shape[axis]:
- tmp = _fix_shape(tmp,n,axis)
- overwrite_x = 1
+ tmp, copy_made = _fix_shape(tmp,n,axis)
+ overwrite_x = overwrite_x or copy_made
if axis == -1 or axis == len(tmp.shape) - 1:
return work_function(tmp,n,-1,1,overwrite_x)
@@ -379,7 +379,7 @@
# No need to swap axes, array is in C order
if noaxes:
for i in axes:
- x = _fix_shape(x, s[i], i)
+ x, copy_made = _fix_shape(x, s[i], i)
#print x.shape, s
return work_function(x,s,direction,overwrite_x=overwrite_x)
@@ -403,7 +403,7 @@
shape[waxes] = s
for i in range(len(waxes)):
- x = _fix_shape(x, s[i], waxes[i])
+ x, copy_made = _fix_shape(x, s[i], waxes[i])
r = work_function(x, shape, direction, overwrite_x=overwrite_x)
More information about the Scipy-svn
mailing list