code: def _rename(names, replace_str):
      """For both rename and inline."""
      order = sorted(
          names,
          key=lambda x: (x.module_path, x.line, x.column),
          reverse=True,
      )
  
      def process(path, old_lines, new_lines):
          if new_lines is not None:  # goto next file, save last
              dct[path] = path, old_lines, new_lines
  
      dct = {}
      current_path = object()
      new_lines = old_lines = None
      for name in order:
          if name.in_builtin_module():
              continue
          if current_path != name.module_path:
              current_path = name.module_path
  
              process(current_path, old_lines, new_lines)
              if current_path is not None:
                  # None means take the source that is a normal param.
                  with open(current_path) as f:
                      source = f.read()
  
              new_lines = split_lines(python_bytes_to_unicode(source))
              old_lines = new_lines[:]
  
          nr, indent = name.line, name.column
          line = new_lines[nr - 1]
          new_lines[nr - 1] = (
              line[:indent]
              + replace_str
              + line[indent + len(name.name) :]
          )
      process(current_path, old_lines, new_lines)
      return dct
  
file_path: catboost/contrib/python/jedi/py3/jedi/refactoring.py
imports: import difflib
  from parso import python_bytes_to_unicode, split_lines
  from jedi.evaluate import helpers
label_desc: Use image node_id 2 for calling a global function with example usage: _rename(names, replace_str) and returns: dct