mrbell / gfft

A generalized FFT for Python that is able to handle data that is defined on an irregular grid.
mrbell.github.com/gfft
GNU General Public License v3.0
13 stars 8 forks source link

3D CTYPE / DTYPE error #5

Open kaggie opened 10 years ago

kaggie commented 10 years ago

The following example code does not work, as it appears CTYPE and DTYPE are interchanged in gridding.pyx.

import numpy as np import gfft as gf input = np.ones((20, 20, 20), dtype=np.complex128).flatten()

irregular grids are flat

meshx, meshy, meshz = np.meshgrid(np.arange(20), np.arange(20), np.arange(20)) x = meshx.flatten().astype(np.float64) y = meshy.flatten().astype(np.float64) z = meshz.flatten().astype(np.float64)

irregular grid positions are doubles

out = [(1.05 ,21), (1.05, 21),(1.05,21)]

different grid points (?!)

output = gf.gfft(input,in_ax=[x,y,z],out_ax=out) # prints ...

The output is then,

gfft v. 0.2.1 Requested mode = irregular to regular (gridding) Number of dimensions = 3

Axis#, FFT, IFFT, ZCIN, ZCOUT, HERM 3, True, False, True, True, False Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/gfft/gfft.py", line 538, in gfft hermitianized_axes[2]) File "gridding.pyx", line 81, in gfft.gridding.grid_3d (gridding.c:2421) ValueError: Buffer dtype mismatch, expected 'double complex' but got 'double'

Because the 2D example works, but the 3D doesn't with such a minor modification, I presume it's a bug. Based on looking at the 2D code, it appears that many points in the 3D gridding, such as lines 81 / 82, should be changed so that when the cdef has "cdef np.ndarray[CTYPE_T, ndim=3..." that the following line should have "DTYPE" replaced with "CTYPE".

   cdef np.ndarray[CTYPE_t, ndim=1, mode='c'] tvis1 = \
       np.zeros(W, dtype=DTYPE)  ### CHANGE THIS TO dtype=CTYPE
mreineck commented 7 years ago

Should be addressed in pull request #6 .