docs: def inject(module_name=None, module_prefix='[???]', DEBUG=False, module=None, N=1):
      """
      Injects your module with utool magic
  
      Utool magic is not actually magic. It just turns your ``print`` statments into
      logging statments, allows for your module to be used with the utool.Indent
      context manager and the and utool.indent_func decorator. ``printDBG`` will soon
      be deprecated as will ``print_``. The function rrr is a developer convinience for
      reloading the module dynamically durring runtime. The profile decorator is
      a no-op if not using kernprof.py, otherwise it is kernprof.py's profile
      decorator.
  
      Args:
          module_name (str): the __name__ varaible in your module
          module_prefix (str): a user defined module prefix
          DEBUG (bool):
          module (None): the actual module (optional)
  
      Returns:
          tuple : (print, print_, printDBG, rrr, profile_)
  
      Example:
          >>> # DISABLE_DOCTEST
          >>> from utool.util_inject import *  # NOQA
          >>> from __future__ import absolute_import, division, print_function, unicode_literals
          >>> from util.util_inject import inject
          >>> print, rrr, profile = inject2(__name__, '[mod]')
      """
      #noinject(module_name, module_prefix, DEBUG, module, N=1)
      noinject(module_name, module_prefix, DEBUG, module, N=N)
      module = _get_module(module_name, module)
      rrr         = make_module_reload_func(None, module_prefix, module)
      profile_    = make_module_profile_func(None, module_prefix, module)
      print_funcs = inject_print_functions(None, module_prefix, DEBUG, module)
      (print, print_, printDBG) = print_funcs
      return (print, print_, printDBG, rrr, profile_)