code: def _raw_fft(
      a,
      n=None,
      axis=-1,
      init_function=fftpack.cffti,
      work_function=fftpack.cfftf,
      fft_cache=_fft_cache,
  ):
      a = asarray(a)
      axis = normalize_axis_index(axis, a.ndim)
  
      if n is None:
          n = a.shape[axis]
  
      if n < 1:
          raise ValueError(
              "Invalid number of FFT data points (%d) specified." % n
          )
  
      # We have to ensure that only a single thread can access a wsave array
      # at any given time. Thus we remove it from the cache and insert it
      # again after it has been used. Multiple threads might create multiple
      # copies of the wsave array. This is intentional and a limitation of
      # the current C code.
      wsave = fft_cache.pop_twiddle_factors(n)
      if wsave is None:
          wsave = init_function(n)
  
      if a.shape[axis] != n:
          s = list(a.shape)
          if s[axis] > n:
              index = [slice(None)] * len(s)
              index[axis] = slice(0, n)
              a = a[tuple(index)]
          else:
              index = [slice(None)] * len(s)
              index[axis] = slice(0, s[axis])
              s[axis] = n
              z = zeros(s, a.dtype.char)
              z[tuple(index)] = a
              a = z
  
      if axis != a.ndim - 1:
          a = swapaxes(a, axis, -1)
      r = work_function(a, wsave)
      if axis != a.ndim - 1:
          r = swapaxes(r, axis, -1)
  
      # As soon as we put wsave back into the cache, another thread could pick it
      # up and start using it, so we must not do this until after we're
      # completely done using it ourselves.
      fft_cache.put_twiddle_factors(n, wsave)
  
      return r
  
imports: from __future__ import division, absolute_import, print_function
  import functools
  from numpy.core import array, asarray, zeros, swapaxes, shape, conjugate, take, sqrt
  from numpy.core.multiarray import normalize_axis_index
  from numpy.core import overrides
  from .None import fftpack_lite
  from .helper import _FFTCache
label_desc: Use image node_id 1 for calling a global function with example usage: _raw_fft(a, n, axis, init_function, work_function, fft_cache) and returns: r