code: def deprecated_method(to_be_removed_in_version, new_method=None):
      
      def decorator(method):
          deprecation_message = generate_method_deprecation_message(
              to_be_removed_in_version=to_be_removed_in_version,
              old_method_name=method.__name__,
              method_name=new_method.__name__,
              module_name=inspect.getmodule(new_method).__name__,
          )
  
          @functools.wraps(method)
          def new_func(*args, **kwargs):
              warnings.simplefilter('always', DeprecationWarning)  # turn off filter
              warnings.warn(
                  message=deprecation_message,
                  category=DeprecationWarning,
                  stacklevel=2,
              )
              warnings.simplefilter('default', DeprecationWarning)  # reset filter
              return method(*args, **kwargs)
  
          if new_method:
              new_func.__doc__ = """\
                  {message}
                  Docstring content from this method's replacement copied below:
                  {new_docstring}
                  """.format(
                      message=deprecation_message,
                      new_docstring=dedent(new_method.__doc__),
                  )
  
          else:
              new_func.__doc__ = deprecation_message
          return new_func
      return decorator
docs: This is a decorator which can be used to mark methods as deprecated. It will result in a warning being emitted
      when the function is used.
  
      :param to_be_removed_in_version: Version of this module the decorated method will be removed in.
      :type to_be_removed_in_version: str
      :param new_method: Method intended to replace the decorated method. This method's docstrings are included in the
          decorated method's docstring.
      :type new_method: function
      :return: Wrapped function that includes a deprecation warning and update docstrings from the replacement method.
      :rtype: types.FunctionType