code: def test_get_type_to_process(self):
      gt = _get_type_to_process
      self.assertIsNone(gt(int))
      self.assertEqual(gt(Fruit), (Fruit, _ProcessType.REPLACEABLE))
      self.assertEqual(
          gt(Optional[Fruit]),
          (Fruit, _ProcessType.OPTIONAL_REPLACEABLE),
      )
      self.assertEqual(
          gt(MainTest), (MainTest, _ProcessType.CONFIGURABLE)
      )
      self.assertEqual(
          gt(Optional[MainTest]),
          (MainTest, _ProcessType.OPTIONAL_CONFIGURABLE),
      )
      self.assertIsNone(gt(Optional[int]))
      self.assertIsNone(gt(Tuple[Fruit]))
      self.assertIsNone(gt(Tuple[Fruit, Animal]))
      self.assertIsNone(gt(Optional[List[int]]))
  
imports: import pickle
  import textwrap
  import unittest
  from dataclasses import dataclass, field, is_dataclass
  from enum import Enum
  from typing import Any, Dict, List, Optional, Tuple
  from unittest.mock import Mock
  from omegaconf import DictConfig, ListConfig, OmegaConf, ValidationError
  from pytorch3d.implicitron.tools.config import _get_type_to_process, _is_actually_dataclass, _ProcessType, _Registry, Configurable, enable_get_default_args, expand_args_fields, get_default_args, get_default_args_field, registry, remove_unused_components, ReplaceableBase, run_auto_creation
label_desc: Use image node_id 2 for calling the TestConfig obj's underlying member method code with example usage: obj.test_get_type_to_process() without return types