code: def _fourier_transform(seq, dps, inverse=False):
      """Utility function for the Discrete Fourier Transform"""
  
      if not iterable(seq):
          raise TypeError(
              "Expected a sequence of numeric coefficients "
              "for Fourier Transform"
          )
  
      a = [sympify(arg) for arg in seq]
      if any(x.has(Symbol) for x in a):
          raise ValueError("Expected non-symbolic coefficients")
  
      n = len(a)
      if n < 2:
          return a
  
      b = n.bit_length() - 1
      if n & (n - 1):  # not a power of 2
          b += 1
          n = 2**b
  
      a += [S.Zero] * (n - len(a))
      for i in range(1, n):
          j = int(ibin(i, b, str=True)[::-1], 2)
          if i < j:
              a[i], a[j] = a[j], a[i]
  
      ang = -2 * pi / n if inverse else 2 * pi / n
  
      if dps is not None:
          ang = ang.evalf(dps + 2)
  
      w = [cos(ang * i) + I * sin(ang * i) for i in range(n // 2)]
  
      h = 2
      while h <= n:
          hf, ut = h // 2, n // h
          for i in range(0, n, h):
              for j in range(hf):
                  u, v = a[i + j], expand_mul(a[i + j + hf] * w[ut * j])
                  a[i + j], a[i + j + hf] = u + v, u - v
          h *= 2
  
      if inverse:
          a = (
              [(x / n).evalf(dps) for x in a]
              if dps is not None
              else [x / n for x in a]
          )
  
      return a
  
file_path: sympy/sympy/discrete/transforms.py
imports: from sympy.core import S, Symbol, sympify
  from sympy.core.function import expand_mul
  from sympy.core.numbers import pi, I
  from sympy.functions.elementary.trigonometric import sin, cos
  from sympy.ntheory import isprime, primitive_root
  from sympy.utilities.iterables import ibin, iterable
  from sympy.utilities.misc import as_int
label_desc: Use image node_id 1 for calling a global function with example usage: _fourier_transform(seq, dps, inverse) and returns: a, a