Returns a decorator to copy documentation from the given function.

  Docstring is copied, including *args and **kwargs documentation.

  Args:
    fn_with_doc_to_copy: Function whose docstring, including *args and
      **kwargs documentation, is to be copied.

  Returns:
    Decorated version of `wrapper_init` with documentation copied from
    `fn_with_doc_to_copy`.

def with_doc(fn_with_doc_to_copy):
  """Returns a decorator to copy documentation from the given function.

  Docstring is copied, including *args and **kwargs documentation.

  Args:
    fn_with_doc_to_copy: Function whose docstring, including *args and
      **kwargs documentation, is to be copied.

  Returns:
    Decorated version of `wrapper_init` with documentation copied from
    `fn_with_doc_to_copy`.
  """

  def decorator(wrapper_init):
    # Wrap the target class's constructor (to assume its docstring),
    # but invoke the wrapper class's constructor.
    @wrapt.decorator
    def wrapping_fn(unused_wrapped, instance, args, kwargs):
      wrapper_init(instance, *args, **kwargs)
    return wrapping_fn(fn_with_doc_to_copy)  # pylint: disable=no-value-for-parameter

  return decorator