| 47 | # divisions by zero (or alternatively additional checks) in the case of |
| 48 | # zero-length axes during its computation. |
| 49 | def _raw_fft(a, n, axis, is_real, is_forward, inv_norm): |
| 50 | axis = normalize_axis_index(axis, a.ndim) |
| 51 | if n is None: |
| 52 | n = a.shape[axis] |
| 53 | |
| 54 | fct = 1/inv_norm |
| 55 | |
| 56 | if a.shape[axis] != n: |
| 57 | s = list(a.shape) |
| 58 | index = [slice(None)]*len(s) |
| 59 | if s[axis] > n: |
| 60 | index[axis] = slice(0, n) |
| 61 | a = a[tuple(index)] |
| 62 | else: |
| 63 | index[axis] = slice(0, s[axis]) |
| 64 | s[axis] = n |
| 65 | z = zeros(s, a.dtype.char) |
| 66 | z[tuple(index)] = a |
| 67 | a = z |
| 68 | |
| 69 | if axis == a.ndim-1: |
| 70 | r = pfi.execute(a, is_real, is_forward, fct) |
| 71 | else: |
| 72 | a = swapaxes(a, axis, -1) |
| 73 | r = pfi.execute(a, is_real, is_forward, fct) |
| 74 | r = swapaxes(r, axis, -1) |
| 75 | return r |
| 76 | |
| 77 | |
| 78 | def _get_forward_norm(n, norm): |