code: def add_newdoc(place, obj, doc):
      """
      Adds documentation to obj which is in module place.
  
      If doc is a string add it to obj as a docstring
  
      If doc is a tuple, then the first element is interpreted as
         an attribute of obj and the second as the docstring
            (method, docstring)
  
      If doc is a list, then each element of the list should be a
         sequence of length two --> [(method1, docstring1),
         (method2, docstring2), ...]
  
      This routine never raises an error if the docstring can't be written, but
      will raise an error if the object being documented does not exist.
  
      This routine cannot modify read-only docstrings, as appear
      in new-style classes or built-in functions. Because this
      routine never raises an error the caller must check manually
      that the docstrings were changed.
      """
      new = getattr(__import__(place, globals(), {}, [obj]), obj)
      if isinstance(doc, str):
          _add_docstring(new, doc.strip())
      elif isinstance(doc, tuple):
          _add_docstring(getattr(new, doc[0]), doc[1].strip())
      elif isinstance(doc, list):
          for val in doc:
              _add_docstring(getattr(new, val[0]), val[1].strip())
  
file_path: catboost/contrib/python/numpy/py2/numpy/core/function_base.py
imports: from __future__ import division, absolute_import, print_function
  import functools
  import warnings
  import operator
  from .None import numeric
  from .numeric import result_type, NaN, shares_memory, MAY_SHARE_BOUNDS, TooHardError, asanyarray, ndim
  from numpy.core.multiarray import add_docstring
  from numpy.core import overrides
label_desc: Use image node_id 9 for calling a global function with example usage: add_newdoc(place, obj, doc) without return types