code: def _lower_complex_fft(op: Operation):
      if types.is_complex(op.data.dtype):
          real_data = op.data.real
          imag_data = op.data.imag
      else:
          real_data = op.data
          imag_data = mb.fill(
              shape=mb.shape(x=real_data, before_op=op),
              value=mb.cast(
                  x=mb.const(val=0.0, before_op=op),
                  dtype=real_data.dtype.__name__,
                  before_op=op,
              ),
              before_op=op,
          )
      real_data, imag_data = _fft_1d(
          real_data,
          imag_data,
          op.n,
          op.dim,
          op.norm,
          before_op=op,
      )
      return _wrap_complex_output(op.outputs[0], real_data, imag_data)
  
imports: import functools
  from typing import Callable, Dict, Optional, Tuple
  import numpy
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil.operation import Operation
  from coremltools.converters.mil.mil.ops.defs.complex_dialect_ops import fft_canonicalize_length_dim, fft_canonicalize_shapes_dims
  from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass
  from coremltools.converters.mil.mil.passes.helper import block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
  from coremltools.converters.mil.mil.var import ComplexVar, Var
label_desc: Use image node_id 11 for calling a global function with example usage: _lower_complex_fft(op) and returns: _wrap_complex_output