import warnings
import functools


__all__ = ['deprecated']


class deprecated(object):
    '''Decorator to mark deprecated functions with warning.

    Adapted from <http://wiki.python.org/moin/PythonDecoratorLibrary>.

    Parameters
    ----------
    alt_func : str
        If given, tell user what function to use instead.
    behavior : {'warn', 'raise'}
        Behavior during call to deprecated function: 'warn' = warn user that
        function is deprecated; 'raise' = raise error.
    '''

    def __init__(self, alt_func=None, behavior='warn'):
        self.alt_func = alt_func
        self.behavior = behavior

    def __call__(self, func):

        msg = 'Call to deprecated function `%s`.' % func.__name__
        if self.alt_func is not None:
            msg += ' Use `%s` instead.' % self.alt_func

        @functools.wraps(func)
        def wrapped(*args, **kwargs):
            if self.behavior == 'warn':
                warnings.warn_explicit(msg,
                    category=DeprecationWarning,
                    filename=func.func_code.co_filename,
                    lineno=func.func_code.co_firstlineno + 1)
            elif self.behavior == 'raise':
                raise DeprecationWarning(msg)
            return func(*args, **kwargs)

        # modify doc string to display deprecation warning
        doc = 'Deprecated function.'
        if self.alt_func is not None:
            doc += ' Use `%s` instead.' % self.alt_func

        if wrapped.__doc__ is None:
            wrapped.__doc__ = doc
        else:
            wrapped.__doc__ = doc + '\n\n' + wrapped.__doc__

        return wrapped

import warnings
import functools


__all__ = ['deprecated']


class deprecated(object):
    '''Decorator to mark deprecated functions with warning.

    Adapted from <http://wiki.python.org/moin/PythonDecoratorLibrary>.

    Parameters
    ----------
    alt_func : str
        If given, tell user what function to use instead.
    behavior : {'warn', 'raise'}
        Behavior during call to deprecated function: 'warn' = warn user that
        function is deprecated; 'raise' = raise error.
    '''

    def __init__(self, alt_func=None, behavior='warn'):
        self.alt_func = alt_func
        self.behavior = behavior

    def __call__(self, func):

        alt_msg = ''
        if self.alt_func is not None:
            alt_msg = ' Use `%s` instead.' % self.alt_func

        msg = 'Call to deprecated function `%s`.' % func.__name__
        msg += alt_msg

        @functools.wraps(func)
        def wrapped(*args, **kwargs):
            if self.behavior == 'warn':
                warnings.warn_explicit(msg,
                    category=DeprecationWarning,
                    filename=func.func_code.co_filename,
                    lineno=func.func_code.co_firstlineno + 1)
            elif self.behavior == 'raise':
                raise DeprecationWarning(msg)
            return func(*args, **kwargs)

        # modify doc string to display deprecation warning
        doc = 'Deprecated function.' + alt_msg
        if wrapped.__doc__ is None:
            wrapped.__doc__ = doc
        else:
            wrapped.__doc__ = doc + '\n\n' + wrapped.__doc__

        return wrapped

Remove duplicate code for alternative function
Remove duplicate code for alternative function

  import warnings
  import functools
  
  
  __all__ = ['deprecated']
  
  
  class deprecated(object):
      '''Decorator to mark deprecated functions with warning.
  
      Adapted from <http://wiki.python.org/moin/PythonDecoratorLibrary>.
  
      Parameters
      ----------
      alt_func : str
          If given, tell user what function to use instead.
      behavior : {'warn', 'raise'}
          Behavior during call to deprecated function: 'warn' = warn user that
          function is deprecated; 'raise' = raise error.
      '''
  
      def __init__(self, alt_func=None, behavior='warn'):
          self.alt_func = alt_func
          self.behavior = behavior
  
      def __call__(self, func):
  
+         alt_msg = ''
+         if self.alt_func is not None:
+             alt_msg = ' Use `%s` instead.' % self.alt_func
+ 
          msg = 'Call to deprecated function `%s`.' % func.__name__
+         msg += alt_msg
-         if self.alt_func is not None:
-             msg += ' Use `%s` instead.' % self.alt_func
  
          @functools.wraps(func)
          def wrapped(*args, **kwargs):
              if self.behavior == 'warn':
                  warnings.warn_explicit(msg,
                      category=DeprecationWarning,
                      filename=func.func_code.co_filename,
                      lineno=func.func_code.co_firstlineno + 1)
              elif self.behavior == 'raise':
                  raise DeprecationWarning(msg)
              return func(*args, **kwargs)
  
          # modify doc string to display deprecation warning
-         doc = 'Deprecated function.'
+         doc = 'Deprecated function.' + alt_msg
-         if self.alt_func is not None:
-             doc += ' Use `%s` instead.' % self.alt_func
- 
          if wrapped.__doc__ is None:
              wrapped.__doc__ = doc
          else:
              wrapped.__doc__ = doc + '\n\n' + wrapped.__doc__
  
          return wrapped
  
Remove duplicate code for alternative function
## Code Before:
import warnings
import functools


__all__ = ['deprecated']


class deprecated(object):
    '''Decorator to mark deprecated functions with warning.

    Adapted from <http://wiki.python.org/moin/PythonDecoratorLibrary>.

    Parameters
    ----------
    alt_func : str
        If given, tell user what function to use instead.
    behavior : {'warn', 'raise'}
        Behavior during call to deprecated function: 'warn' = warn user that
        function is deprecated; 'raise' = raise error.
    '''

    def __init__(self, alt_func=None, behavior='warn'):
        self.alt_func = alt_func
        self.behavior = behavior

    def __call__(self, func):

        msg = 'Call to deprecated function `%s`.' % func.__name__
        if self.alt_func is not None:
            msg += ' Use `%s` instead.' % self.alt_func

        @functools.wraps(func)
        def wrapped(*args, **kwargs):
            if self.behavior == 'warn':
                warnings.warn_explicit(msg,
                    category=DeprecationWarning,
                    filename=func.func_code.co_filename,
                    lineno=func.func_code.co_firstlineno + 1)
            elif self.behavior == 'raise':
                raise DeprecationWarning(msg)
            return func(*args, **kwargs)

        # modify doc string to display deprecation warning
        doc = 'Deprecated function.'
        if self.alt_func is not None:
            doc += ' Use `%s` instead.' % self.alt_func

        if wrapped.__doc__ is None:
            wrapped.__doc__ = doc
        else:
            wrapped.__doc__ = doc + '\n\n' + wrapped.__doc__

        return wrapped

## Instruction:
Remove duplicate code for alternative function
## Code After:
import warnings
import functools


__all__ = ['deprecated']


class deprecated(object):
    '''Decorator to mark deprecated functions with warning.

    Adapted from <http://wiki.python.org/moin/PythonDecoratorLibrary>.

    Parameters
    ----------
    alt_func : str
        If given, tell user what function to use instead.
    behavior : {'warn', 'raise'}
        Behavior during call to deprecated function: 'warn' = warn user that
        function is deprecated; 'raise' = raise error.
    '''

    def __init__(self, alt_func=None, behavior='warn'):
        self.alt_func = alt_func
        self.behavior = behavior

    def __call__(self, func):

        alt_msg = ''
        if self.alt_func is not None:
            alt_msg = ' Use `%s` instead.' % self.alt_func

        msg = 'Call to deprecated function `%s`.' % func.__name__
        msg += alt_msg

        @functools.wraps(func)
        def wrapped(*args, **kwargs):
            if self.behavior == 'warn':
                warnings.warn_explicit(msg,
                    category=DeprecationWarning,
                    filename=func.func_code.co_filename,
                    lineno=func.func_code.co_firstlineno + 1)
            elif self.behavior == 'raise':
                raise DeprecationWarning(msg)
            return func(*args, **kwargs)

        # modify doc string to display deprecation warning
        doc = 'Deprecated function.' + alt_msg
        if wrapped.__doc__ is None:
            wrapped.__doc__ = doc
        else:
            wrapped.__doc__ = doc + '\n\n' + wrapped.__doc__

        return wrapped
