U
    Cvf                     @   sH   d dl Z d dlZd dlmZ e jjZe jjZe jjZe jjZ	dd Z
dS )    N)wrapsc                    s    fdd}|S )a  Decorator for methods that issues warnings for positional arguments

    Using the keyword-only argument syntax in pep 3102, arguments after the
    ``*`` will issue a warning when passed as a positional argument.

    Parameters
    ----------
    version : str
        version of the library when the positional arguments were deprecated

    Examples
    --------
    Deprecate passing `b` as positional argument:

    def func(a, b=1):
        pass

    @_deprecate_positional_args("v0.1.0")
    def func(a, *, b=2):
        pass

    func(1, 2)

    Notes
    -----
    This function is adapted from scikit-learn under the terms of its license. See
    licences/SCIKIT_LEARN_LICENSE
    c                    s   t  }g g |j D ]H\}}|jttfkr>| q|jtkr| |j	t
krtdqt  fdd}|S )Nz.Keyword-only param without default disallowed.c                     s    j }t| t }|dkrdd | }tjd| d| d dtdd td | | | d  }|d	d
 |D   | d |  |S  | |S )Nr   z, z	Passing 'z' as positional argument(s) to z was deprecated in version zS and will raise an error two releases later. Please pass them as keyword arguments.   )
stacklevelc                 S   s   i | ]\}}||qS  r   ).0nameargr   r   C/tmp/pip-unpacked-wheel-h316xyqg/xarray/util/deprecation_helpers.py
<dictcomp>m   s      zQ_deprecate_positional_args.<locals>._decorator.<locals>.inner.<locals>.<dictcomp>)__name__lenjoinwarningswarnFutureWarningzipupdate)argskwargsr   Zn_extra_args
extra_argsZzip_args)funckwonly_argspos_or_kw_argsversionr   r	   innerZ   s    	z=_deprecate_positional_args.<locals>._decorator.<locals>.inner)inspect	signature
parametersitemskindPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYappendKEYWORD_ONLYdefaultEMPTY	TypeErrorr   )r   r   r   paramr   r   )r   r   r   r	   
_decoratorJ   s    




z._deprecate_positional_args.<locals>._decoratorr   )r   r)   r   r(   r	   _deprecate_positional_args,   s    +r*   )r   r   	functoolsr   	Parameterr    r#   r!   emptyr%   r*   r   r   r   r	   <module>"   s   