code: def perform(self, node, inputs, output_storage):
      a = inputs[0]
      s = inputs[1]
  
      A = np.fft.rfftn(a, s=tuple(s))
      # Format output with two extra dimensions for real and imaginary
      # parts.
      out = np.zeros(A.shape + (2,), dtype=a.dtype)
      out[..., 0], out[..., 1] = np.real(A), np.imag(A)
      output_storage[0][0] = out
  
imports: import numpy
  from pytensor.gradient import DisconnectedType
  from pytensor.graph.basic import Apply
  from pytensor.graph.op import Op
  from pytensor.tensor.basic import as_tensor_variable
  from pytensor.tensor.math import sqrt
  from pytensor.tensor.subtensor import set_subtensor
  from pytensor.tensor.type import TensorType, integer_dtypes
label_desc: Use image node_id 3 for calling the RFFTOp obj's underlying member method code with example usage: obj.perform(node, inputs, output_storage) without return types