code: def _address_to_placement(address):
      """
  
      Parameters
      ----------
      address : str
          The address of a node or an actor pool which running in a ray actor.
  
      Returns
      -------
      tuple
          A tuple consisting of placement group name, bundle index, process index.
      """
      parsed_url = urlparse(unquote(address))
      if parsed_url.scheme != "ray":
          raise ValueError(f"The address scheme is not ray: {address}")
      # os.path.split will not handle backslashes (\) correctly,
      # so we use the posixpath.
      parts = []
      if parsed_url.netloc:
          tmp = parsed_url.path
          while tmp and tmp != "/":
              tmp2, item = posixpath.split(tmp)
              parts.append(item)
              if tmp2 != tmp:
                  tmp = tmp2
              else:
                  parts.append(tmp2)
                  break
      parts = list(reversed(parts))
      return parsed_url.netloc, parts
  
file_path: mars/mars/oscar/backends/ray/utils.py
imports: import asyncio
  import enum
  import logging
  import os
  import posixpath
  from urllib.parse import urlparse, unquote
  from ....utils import lazy_import, lazy_import_on_load
label_desc: Use image node_id 4 for calling a global function with example usage: _address_to_placement(address) and returns: parsed_url,  parts