docs: def make_default_docstr(func, with_args=True, with_ret=True,
                          with_commandline=True, with_example=True,
                          with_header=False, with_debug=False):
      r"""
      Tries to make a sensible default docstr so the user
      can fill things in without typing too much
  
      # TODO: Interleave old documentation with new documentation
  
      Args:
          func (function): live python function
          with_args (bool):
          with_ret (bool): (Defaults to True)
          with_commandline (bool): (Defaults to True)
          with_example (bool): (Defaults to True)
          with_header (bool): (Defaults to False)
          with_debug (bool): (Defaults to False)
  
      Returns:
          tuple: (argname, val)
  
      Ignore:
          pass
  
      CommandLine:
          python -m utool.util_autogen --exec-make_default_docstr --show
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_autogen import *  # NOQA
          >>> import utool as ut
          >>> func = ut.make_default_docstr
          >>> #func = ut.make_args_docstr
          >>> #func = PythonStatement
          >>> func = auto_docstr
          >>> default_docstr = make_default_docstr(func)
          >>> result = str(default_docstr)
          >>> print(result)
  
      """
      import utool as ut
      #from utool import util_inspect
      funcinfo = ut.util_inspect.infer_function_info(func)
  
      argname_list   = funcinfo.argname_list
      argtype_list   = funcinfo.argtype_list
      argdesc_list   = funcinfo.argdesc_list
      return_header  = funcinfo.return_header
      return_type    = funcinfo.return_type
      return_name    = funcinfo.return_name
      return_desc    = funcinfo.return_desc
      funcname       = funcinfo.funcname
      modname        = funcinfo.modname
      defaults       = funcinfo.defaults
      num_indent     = funcinfo.num_indent
      needs_surround = funcinfo.needs_surround
      funcname       = funcinfo.funcname
      ismethod       = funcinfo.ismethod
      va_name        = funcinfo.va_name
      kw_name        = funcinfo.kw_name
      kw_keys        = funcinfo.kw_keys
  
      docstr_parts = []
      # Header part
      if with_header:
          header_block = funcname
          docstr_parts.append(header_block)
  
      # Args part
      if with_args and len(argname_list) > 0:
          argheader = 'Args'
          arg_docstr = make_args_docstr(argname_list, argtype_list, argdesc_list,
                                        ismethod, va_name, kw_name, kw_keys)
          argsblock = make_docstr_block(argheader, arg_docstr)
  
          docstr_parts.append(argsblock)
  
      # if False:
      #     with_kw = with_args
      #     if with_kw and len(kwarg_keys) > 0:
      #         #ut.embed()
      #         import textwrap
      #         kwargs_docstr = ', '.join(kwarg_keys)
      #         kwargs_docstr = '\n'.join(textwrap.wrap(kwargs_docstr))
      #         kwargsblock = make_docstr_block('Kwargs', kwargs_docstr)
      #         docstr_parts.append(kwargsblock)
  
      # Return / Yeild part
      if with_ret and return_header is not None:
          if return_header is not None:
              return_doctr = make_returns_or_yeilds_docstr(return_type, return_name, return_desc)
              returnblock = make_docstr_block(return_header, return_doctr)
              docstr_parts.append(returnblock)
  
      # Example part
      # try to generate a simple and unit testable example
      if with_commandline:
          cmdlineheader = 'CommandLine'
          cmdlinecode = make_cmdline_docstr(funcname, modname)
          cmdlineblock = make_docstr_block(cmdlineheader, cmdlinecode)
          docstr_parts.append(cmdlineblock)
  
      if with_example:
          exampleheader = 'Example'
          examplecode = make_example_docstr(funcname, modname, argname_list,
                                            defaults, return_type, return_name,
                                            ismethod)
          examplecode_ = ut.indent(examplecode, '>>> ')
          exampleblock = make_docstr_block(exampleheader, examplecode_)
          docstr_parts.append(exampleblock)
  
      # DEBUG part (in case something goes wrong)
      if with_debug:
          debugheader = 'Debug'
          debugblock = ut.codeblock(
              '''
              num_indent = {num_indent}
              '''
          ).format(num_indent=num_indent)
          debugblock = make_docstr_block(debugheader, debugblock)
          docstr_parts.append(debugblock)
  
      # Enclosure / Indentation Parts
      if needs_surround:
          docstr_parts = ['r"""'] + ['\n\n'.join(docstr_parts)] + ['"""']
          default_docstr = '\n'.join(docstr_parts)
      else:
          default_docstr = '\n\n'.join(docstr_parts)
  
      docstr_indent = ' ' * (num_indent + 4)
      default_docstr = ut.indent(default_docstr, docstr_indent)
      return default_docstr