code: def get_generic_out_dtypes(
      call_node: "relay.Call", mixed_precision_type: str
  ) -> List[str]:
      """A function which returns output dtypes in a way which works for most ops.
  
      Parameters
      ---------
      call_node: relay.Call
          The call node containing the op.
      mixed_precision_type: str
          The target type to run the operation in.
      Returns
      -------
      output_dtypes : [str, str]
          A list of two strings. The first represents the datatype used for accumulation
          in the operation. The second represents the actual output datatype.
      """
      # Assume support accumulation dtypes <---> has out_dtype attr.
      # This is because there is no better way right now to tell which ops support accumulating
      # at different data types.
      # Some discussion here about making this better is here:
      # https://discuss.tvm.apache.org/t/rfc-relay-fp32-fp16-model-support/9994/4?u=andrewzhaoluo
      if hasattr(call_node.attrs, "out_dtype"):
          # TODO (AndrewZhaoLuo): evaluate consistent support for mixed_type accumulators
          # return ["float32", mixed_precision_type]
          return [mixed_precision_type, mixed_precision_type]
  
      # [accumulation_dtype, output_dtype] for the operations
      return [mixed_precision_type, mixed_precision_type]
  
imports: from typing import List
  from tvm.relay.op import register_mixed_precision_conversion
label_desc: Use image node_id 2 for calling a global function with example usage: get_generic_out_dtypes(call_node, mixed_precision_type) and returns: list, list