class_docstr: Dialect op for N-D IFFT (ifftn).
  
  Parameters
  ----------
  All parameters except ``norm`` are same as the ``complex_fftn`` op.
  norm: const str (Optional. Default=``backward``)
      * Normalization mode. For the backward transform (ifftn()), these correspond to:
          * "forward" - no normalization
          * "backward" - normalize by 1/n
          * "ortho" - normalize by 1/sqrt(n) (making the IFFT orthonormal)
        where n = prod(s) is the logical IFFT size. Calling the forward transform (fftn()) with
        the same normalization mode will apply an overall normalization of 1/n between the two
        transforms. This is required to make ifftn() the exact inverse.
      * Default is "backward" (normalize by 1/n).
  
  Returns
  -------
  tensor<\*V, T>
      * A complex tensor where real and imag parts have the same shape. The shape is the same as
        the input except for the ``dim`` in ``dims``:
          * If ``shapes`` and ``dims`` are both None, the shape is same as the input.
          * If ``shapes`` or ``dims`` is specified, shape at ``dim`` is ``shapes[dim]``.
  
  Attributes
  ----------
  T: complex64
  
  References
  ----------
  See `torch.fft.ifftn <https://pytorch.org/docs/stable/generated/torch.fft.ifftn.html>`_.
class_docstr_tok: ["Dialect","op","for","N-D","IFFT","(","ifftn",")",".","Parameters","--","--","--","--","--","All","parameters","except","``","norm","``","are","same","as","the","``","complex_fftn","``","op",".","norm",":","const","str","(","Optional",".","Default=","``","backward","``",")","*","Normalization","mode",".","For","the","backward","transform","(","ifftn","(",")",")",",","these","correspond","to",":","*","``","forward","''","-","no","normalization","*","``","backward","''","-","normalize","by","1\/n","*","``","ortho","''","-","normalize","by","1\/sqrt","(","n",")","(","making","the","IFFT","orthonormal",")","where","n","=","prod","(","s",")","is","the","logical","IFFT","size",".","Calling","the","forward","transform","(","fftn","(",")",")","with","the","same","normalization","mode","will","apply","an","overall","normalization","of","1\/n","between","the","two","transforms",".","This","is","required","to","make","ifftn","(",")","the","exact","inverse",".","*","Default","is","``","backward","''","(","normalize","by","1\/n",")",".","Returns","--","--","--","-","tensor","<","\\","*","V",",","T",">","*","A","complex","tensor","where","real","and","imag","parts","have","the","same","shape",".","The","shape","is","the","same","as","the","input","except","for","the","``","dim","``","in","``","dims","``",":","*","If","``","shapes","``","and","``","dims","``","are","both","None",",","the","shape","is","same","as","the","input",".","*","If","``","shapes","``","or","``","dims","``","is","specified",",","shape","at","``","dim","``","is","``","shapes","[","dim","]","``",".","Attributes","--","--","--","--","--","T",":","complex64","References","--","--","--","--","--","See","`","torch.fft.ifftn","<","https",":","\/\/pytorch.org\/docs\/stable\/generated\/torch.fft.ifftn.html",">","`","_","."]
code: def type_inference(self):
      output_type = self.data.dtype
      output_shape = list(self.data.shape)
      shapes, dims = fft_canonicalize_shapes_dims(
          self.data, self.shapes, self.dims
      )
      for shape, dim in zip(shapes, dims):
          output_shape[dim] = shape
      return types.tensor(output_type, tuple(output_shape))
  
imports: from typing import Optional, Tuple
  import numpy
  from coremltools.converters.mil.mil import Operation, types
  from coremltools.converters.mil.mil.input_type import DefaultInputs, InputSpec, TensorInputType
  from coremltools.converters.mil.mil.ops.registry import SSAOpRegistry
  from coremltools.converters.mil.mil.types.symbolic import any_symbolic, is_symbolic
  from coremltools.converters.mil.mil.types.type_mapping import infer_complex_dtype, infer_fp_dtype_from_complex
  from coremltools.converters.mil.mil.var import ComplexVar, Var
label_desc: Use image node_id 2 for calling the complex_ifftn obj's underlying member method code with example usage: obj.type_inference() and returns: types