code: def _fftn_wrapper(fft_n, default_name):
      """Wrapper around gen_spectral_ops.fftn."""
  
      def _fftn(
          input_tensor, fft_length=None, axes=None, norm=None, name=None
      ):
          """Wrapper around gen_spectral_ops.*fft that infers fft_length and axes arguments."""
          with _ops.name_scope(
              name, default_name, [input_tensor, fft_length, axes]
          ) as name:
              axes = _process_empty_axes(input_tensor, axes)
              fft_rank = axes.shape[0]
              input_tensor = _ops.convert_to_tensor(
                  input_tensor, preferred_dtype=_dtypes.complex64
              )
              input_tensor.shape.with_rank_at_least(fft_rank)
              if fft_length is None:
                  fft_length = _infer_fft_length_for_fftn(input_tensor)
              else:
                  fft_length = _ops.convert_to_tensor(
                      fft_length, _dtypes.int32
                  )
              input_tensor = _maybe_pad_for_rfft(
                  input_tensor, fft_rank, fft_length
              )
  
              fft_length_static = _tensor_util.constant_value(
                  fft_length
              )
              if fft_length_static is not None:
                  fft_length = fft_length_static
              if norm is None:
                  norm = "backward"
              n = 1
              if norm != "backward":
                  for fft_length_i in fft_length:
                      n *= fft_length_i
                  if norm == "forward":
                      input_tensor /= n
                  elif norm == "ortho":
                      input_tensor /= np.sqrt(n)  # should be sqrt(N)
              return fft_n(input_tensor, fft_length, axes, name=name)
  
      _fftn.__doc__ = re.sub(r"    Tcomplex.*?\n", "", fft_n.__doc__)
      return _fftn
  
imports: import re
  import numpy
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import tensor_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import array_ops_stack
  from tensorflow.python.ops import gen_spectral_ops
  from tensorflow.python.ops import manip_ops
  from tensorflow.python.ops import math_ops
  from tensorflow.python.util import dispatch
  from tensorflow.python.util.tf_export import tf_export
label_desc: Use image node_id 10 for calling a global function with example usage: _fftn_wrapper(fft_n, default_name) and returns: _fftn, fft_n