code: def _convert_access_handles(self, obj):
      if isinstance(obj, SignatureParam):
          return SignatureParam(
              *self._convert_access_handles(tuple(obj))
          )
      elif isinstance(obj, tuple):
          return tuple(self._convert_access_handles(o) for o in obj)
      elif isinstance(obj, list):
          return [self._convert_access_handles(o) for o in obj]
      elif isinstance(obj, AccessHandle):
          try:
              # Rewrite the access handle to one we're already having.
              obj = self.get_access_handle(obj.id)
          except KeyError:
              obj.add_subprocess(self)
              self.set_access_handle(obj)
      elif isinstance(obj, AccessPath):
          return AccessPath(self._convert_access_handles(obj.accesses))
      return obj
  
imports: import os
  import sys
  import subprocess
  import socket
  import errno
  import weakref
  import traceback
  from functools import partial
  from threading import Thread
  from jedi._compatibility import queue, is_py3, force_unicode, pickle_dump, pickle_load, GeneralizedPopen, print_to_stderr
  from jedi import debug
  from jedi.cache import memoize_method
  from jedi.evaluate.compiled.subprocess import functions
  from jedi.evaluate.compiled.access import DirectObjectAccess, AccessPath, SignatureParam
  from jedi.api.exceptions import InternalError
label_desc: Use image node_id 3 for calling the EvaluatorSubprocess obj's underlying member method code with example usage: obj._convert_access_handles(obj) and returns: obj, SignatureParam, tuple, unknown, AccessPath