class_docstr: Fast Fourier Transform.
  
  .. TODO:
      The current implementation just works for matrix inputs, and permits
      taking a 1D FFT over either rows or columns. Add support for N-D FFTs
      as provided by either numpy or FFTW directly.
  
  .. TODO:
      Give the C code that uses FFTW.
  
  .. TODO:
      Unit tests.
class_docstr_tok: ["Fast","Fourier","Transform",".","..","TODO",":","The","current","implementation","just","works","for","matrix","inputs",",","and","permits","taking","a","1D","FFT","over","either","rows","or","columns",".","Add","support","for","N-D","FFTs","as","provided","by","either","numpy","or","FFTW","directly",".","..","TODO",":","Give","the","C","code","that","uses","FFTW",".","..","TODO",":","Unit","tests","."]
docstr: Compute an n-point fft of frames along given axis.
docstr_tok: ["Compute","an","n-point","fft","of","frames","along","given","axis","."]
code: def make_node(self, frames, n, axis):
      """
      Compute an n-point fft of frames along given axis.
  
      """
      _frames = tensor.as_tensor(frames, ndim=2)
      _n = tensor.as_tensor(n, ndim=0)
      _axis = tensor.as_tensor(axis, ndim=0)
      if self.half and _frames.type.dtype.startswith("complex"):
          raise TypeError(
              "Argument to HalfFFT must not be complex", frames
          )
      spectrogram = tensor.zmatrix()
      buf = generic()
      # The `buf` output is present for future work
      # when we call FFTW directly and re-use the 'plan' that FFTW creates.
      # In that case, buf would store a CObject encapsulating the plan.
      rval = Apply(self, [_frames, _n, _axis], [spectrogram, buf])
      return rval
  
file_path: Theano/theano/sandbox/fourier.py
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import numpy.fft
  from six.moves import xrange
  from theano import tensor
  from theano.gof import Op, Apply, generic
  import warnings
label_desc: Use image node_id 2 for calling the FFT obj's underlying member method code with example usage: obj.make_node(frames, n, axis) and returns: rval