class_docstr: Dialect op for 1-D RFFT. It's similar to 1-D FFT, but the input is real number. The FFT of a
  real signal is Hermitian-symmetric, ``X[i] = conj(X[-i])``, so the output contains only the
  positive frequencies below the Nyquist frequency. To compute the full output, use FFT.
  
  Parameters
  ----------
  See the ``complex_fft`` op.
  
  Returns
  -------
  tensor<\*V, complex64>
      * Based on the output of FFT, further remove the redundant conjugate part, which means
        ``V[dim] = V[dim] // 2 + 1``.
  
  Attributes
  ----------
  T: fp32
  
  References
  ----------
  See `torch.fft.rfft <https://pytorch.org/docs/stable/generated/torch.fft.rfft.html>`_.
class_docstr_tok: ["Dialect","op","for","1-D","RFFT",".","It","'s","similar","to","1-D","FFT",",","but","the","input","is","real","number",".","The","FFT","of","a","real","signal","is","Hermitian-symmetric",",","``","X","[","i","]","=","conj","(","X","[","-i","]",")","``",",","so","the","output","contains","only","the","positive","frequencies","below","the","Nyquist","frequency",".","To","compute","the","full","output",",","use","FFT",".","Parameters","--","--","--","--","--","See","the","``","complex_fft","``","op",".","Returns","--","--","--","-","tensor","<","\\","*","V",",","complex64",">","*","Based","on","the","output","of","FFT",",","further","remove","the","redundant","conjugate","part",",","which","means","``","V","[","dim","]","=","V","[","dim","]","\/\/","2","+","1","``",".","Attributes","--","--","--","--","--","T",":","fp32","References","--","--","--","--","--","See","`","torch.fft.rfft","<","https",":","\/\/pytorch.org\/docs\/stable\/generated\/torch.fft.rfft.html",">","`","_","."]
code: def type_inference(self):
      if types.is_complex(self.data.dtype):
          raise ValueError(
              "RFFT requires real-value input. For complex input, please use FFT."
          )
      output_type = infer_complex_dtype(
          self.data.dtype, self.data.dtype
      )
      output_shape = list(self.data.shape)
      n, dim = fft_canonicalize_length_dim(self.data, self.n, self.dim)
      output_shape[dim] = n
      # The shape of RFFT output is FFT after removing redundant conjugate part.
      output_shape[self.dim.val] = output_shape[self.dim.val] // 2 + 1
      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_rfft obj's underlying member method code with example usage: obj.type_inference() and returns: types