
    tfFo                       d Z ddlmZ g dZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZ dd	lmamZ dd
lmZmZ ddlmZ  ed          Z ed          ZdZd Zde_        de_         de_!        d Z"d5dZ#d6dZ$d6dZ%d Z&	 d5d7dZ'd5dZ(d Z)d  Z* G d! d"          Z+ G d# d$          Z, G d% d&          Z-d' Z.d( Z/d) Z0d* Z1d+ Z2d, Z3 ed-ed.ef         /          Z4	 d5d8d4Z5dS )9a  
Deprecation framework for Twisted.

To mark a method, function, or class as being deprecated do this::

    from incremental import Version
    from twisted.python.deprecate import deprecated

    @deprecated(Version("Twisted", 22, 10, 0))
    def badAPI(self, first, second):
        '''
        Docstring for badAPI.
        '''
        ...

    @deprecated(Version("Twisted", 22, 10, 0))
    class BadClass:
        '''
        Docstring for BadClass.
        '''

The newly-decorated badAPI will issue a warning when called, and BadClass will
issue a warning when instantiated. Both will also have  a deprecation notice
appended to their docstring.

To deprecate properties you can use::

    from incremental import Version
    from twisted.python.deprecate import deprecatedProperty

    class OtherwiseUndeprecatedClass:

        @deprecatedProperty(Version("Twisted", 22, 10, 0))
        def badProperty(self):
            '''
            Docstring for badProperty.
            '''

        @badProperty.setter
        def badProperty(self, value):
            '''
            Setter sill also raise the deprecation warning.
            '''


While it's best to avoid this as it adds performance overhead to *any* usage of
the module, to mark module-level attributes as being deprecated you can use::

    badAttribute = "someValue"

    ...

    deprecatedModuleAttribute(
        Version("Twisted", 22, 10, 0),
        "Use goodAttribute instead.",
        "your.full.module.name",
        "badAttribute")

The deprecated attributes will issue a warning whenever they are accessed. If
the attributes being deprecated are in the same module as the
L{deprecatedModuleAttribute} call is being made from, the C{__name__} global
can be used as the C{moduleName} parameter.


To mark an optional, keyword parameter of a function or method as deprecated
without deprecating the function itself, you can use::

    @deprecatedKeywordParameter(Version("Twisted", 22, 10, 0), "baz")
    def someFunction(foo, bar=0, baz=None):
        ...

See also L{incremental.Version}.

@type DEPRECATION_WARNING_FORMAT: C{str}
@var DEPRECATION_WARNING_FORMAT: The default deprecation warning string format
    to use when one is not provided by the user.
    )annotations)
deprecateddeprecatedPropertygetDeprecationWarningStringgetWarningMethodsetWarningMethoddeprecatedModuleAttributedeprecatedKeywordParameterN)findlinestartswraps)
ModuleType)AnyCallableDictOptionalTypeVarcast)warnwarn_explicit)VersiongetVersionString)	ParamSpec_P_Rz&%(fqpn)s was deprecated in %(version)sc                    	 | j         }n# t          $ r
 | j        }Y nw xY wt          j        |           st          j        |           r| j        }| d| S t          j        |           r| j         d| j          S |S )z
    Return the fully qualified name of a module, class, method or function.
    Classes and functions need to be module level ones to be correctly
    qualified.

    @rtype: C{str}.
    .)__qualname__AttributeError__name__inspectisclass
isfunction
__module__ismethod)objname
moduleNames      W/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/python/deprecate.py_fullyQualifiedNamer*   t   s       | s 6w1#66 6^
%%t%%%		#		 6.553#3555Ks   
 ztwisted.python.reflectfullyQualifiedNamec                J    t          |           rt          |           } d|  dS )a
  
    Surround a replacement for a deprecated API with some polite text exhorting
    the user to consider it as an alternative.

    @type replacement: C{str} or callable

    @return: a string like "please use twisted.python.modules.getModule
        instead".
    zplease use z instead)callabler*   replacements    r)   _getReplacementStringr0      s2      7)+66.....    c                \    dt          |            }|r| dt          |           }|dz   S )a  
    Generate an addition to a deprecated object's docstring that explains its
    deprecation.

    @param version: the version it was deprecated.
    @type version: L{incremental.Version}

    @param replacement: The replacement, if specified.
    @type replacement: C{str} or callable

    @return: a string like "Deprecated in Twisted 27.2.0; please use
        twisted.timestream.tachyon.flux instead."
    zDeprecated in ; r   )r   r0   )versionr/   docs      r)   _getDeprecationDocstringr6      sH     7+G44
6
6C =<<-k::<<9r1   c                    |t           }|| t          |          dz  }|r#d                    |t          |                    }|S )ag  
    Return a string indicating that the Python name was deprecated in the given
    version.

    @param fqpn: Fully qualified Python name of the thing being deprecated
    @type fqpn: C{str}

    @param version: Version that C{fqpn} was deprecated in.
    @type version: L{incremental.Version}

    @param format: A user-provided format to interpolate warning values into, or
        L{DEPRECATION_WARNING_FORMAT
        <twisted.python.deprecate.DEPRECATION_WARNING_FORMAT>} if L{None} is
        given.
    @type format: C{str}

    @param replacement: what should be used in place of C{fqpn}. Either pass in
        a string, which will be inserted into the warning message, or a
        callable, which will be expanded to its full import path.
    @type replacement: C{str} or callable

    @return: A textual description of the deprecation
    @rtype: C{str}
    N)fqpnr4   z{}; {})DEPRECATION_WARNING_FORMATr   formatr0   )r8   r4   r:   r/   warningStrings        r)   _getDeprecationWarningStringr<      sZ    2 ~+d7G7P7PQQQM 
 0==
 
 r1   c                @    t          t          |           |||          S )ak  
    Return a string indicating that the callable was deprecated in the given
    version.

    @type callableThing: C{callable}
    @param callableThing: Callable object to be deprecated

    @type version: L{incremental.Version}
    @param version: Version that C{callableThing} was deprecated in.

    @type format: C{str}
    @param format: A user-provided format to interpolate warning values into,
        or L{DEPRECATION_WARNING_FORMAT
        <twisted.python.deprecate.DEPRECATION_WARNING_FORMAT>} if L{None} is
        given

    @param replacement: what should be used in place of the callable. Either
        pass in a string, which will be inserted into the warning message,
        or a callable, which will be expanded to its full import path.
    @type replacement: C{str} or callable

    @return: A string describing the deprecation.
    @rtype: C{str}
    )r<   r*   )callableThingr4   r:   r/   s       r)   r   r      s'    2 (M**GV[  r1   c                   | j         r| j                                         }ng }t          |          dk    r|                    |           nt          |          dk    r|                    d|dg           nY|d         }d}|                                s|                                }|                    d||z   |g           d |D             }d                    |          | _         dS )av  
    Append the given text to the docstring of C{thingWithDoc}.

    If C{thingWithDoc} has no docstring, then the text just replaces the
    docstring. If it has a single-line docstring then it appends a blank line
    and the message text. If it has a multi-line docstring, then in appends a
    blank line a the message text, and also does the indentation correctly.
    r       c                8    g | ]}|                     d           S ) )lstrip).0ls     r)   
<listcomp>z&_appendToDocstring.<locals>.<listcomp>  s"    @@@A!((3--@@@r1   
N)__doc__
splitlineslenappendextendstrippopjoin)thingWithDoctextToAppenddocstringLinestrailerspacess        r)   _appendToDocstringrW      s     %-88::
>al++++	^			!	!r<45555 $}} 	*#''))Fr6L#8&ABBB@@@@@99^44Lr1   r4   r   r/   "str | Callable[..., object] | Nonereturn.Callable[[Callable[_P, _R]], Callable[_P, _R]]c                     d fd}|S )a  
    Return a decorator that marks callables as deprecated. To deprecate a
    property, see L{deprecatedProperty}.

    @type version: L{incremental.Version}
    @param version: The version in which the callable will be marked as
        having been deprecated.  The decorated function will be annotated
        with this version, having it set as its C{deprecatedVersion}
        attribute.

    @param replacement: what should be used in place of the callable. Either
        pass in a string, which will be inserted into the warning message,
        or a callable, which will be expanded to its full import path.
    @type replacement: C{str} or callable
    functionCallable[_P, _R]rY   c                     t           d          t                     d	 fd            }t          |t                               |_        |S )
zA
        Decorator that marks C{function} as deprecated.
        Nargs_P.argskwargs	_P.kwargsrY   r   c                 B    t          t          d            | i |S N   
stacklevelr   DeprecationWarningr_   ra   r\   r;   s     r)   deprecatedFunctionzDdeprecated.<locals>.deprecationDecorator.<locals>.deprecatedFunction+  .     2qAAAA8T,V,,,r1   )r_   r`   ra   rb   rY   r   )r   r   rW   r6   deprecatedVersion)r\   rk   r;   r/   r4   s   ` @r)   deprecationDecoratorz(deprecated.<locals>.deprecationDecorator#  s     4gt[
 
 
x	- 	- 	- 	- 	- 	- 
	- 	 8+ N N	
 	
 	
 07,!!r1   )r\   r]   rY   r]    )r4   r/   rn   s   `` r)   r   r     s/    &" " " " " " "&  r1   c                @      G d dt                      fd}|S )a  
    Return a decorator that marks a property as deprecated. To deprecate a
    regular callable or class, see L{deprecated}.

    @type version: L{incremental.Version}
    @param version: The version in which the callable will be marked as
        having been deprecated.  The decorated function will be annotated
        with this version, having it set as its C{deprecatedVersion}
        attribute.

    @param replacement: what should be used in place of the callable.
        Either pass in a string, which will be inserted into the warning
        message, or a callable, which will be expanded to its full import
        path.
    @type replacement: C{str} or callable

    @return: A new property with deprecated setter and getter.
    @rtype: C{property}

    @since: 16.1.0
    c                      e Zd ZdZd Zd ZdS )/deprecatedProperty.<locals>._DeprecatedPropertyzQ
        Extension of the build-in property to allow deprecated setters.
        c                @     t                     fd            }|S )Nc                 L    t          j        t          d            | i |S rd   )r   r;   ri   )r_   ra   r\   selfs     r)   rk   z^deprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapper.<locals>.deprecatedFunctionV  s=    &&    
  x0000r1   r   )ru   r\   rk   s   `` r)   _deprecatedWrapperzBdeprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapperU  s:    8__1 1 1 1 1 _1 &%r1   c                ^    t                               | |                     |                    S N)propertysetterrv   )ru   r\   s     r)   rz   z6deprecatedProperty.<locals>._DeprecatedProperty.settera  s$    ??4)@)@)J)JKKKr1   N)r    r$   r   rJ   rv   rz   ro   r1   r)   _DeprecatedPropertyrr   P  sA        	 	
	& 
	& 
	&	L 	L 	L 	L 	Lr1   r{   c                     t           d           t                      fd            }t          |t                               |_         |          }|_        |S )Nc                 B    t          t          d            | i |S rd   rh   rj   s     r)   rk   zLdeprecatedProperty.<locals>.deprecationDecorator.<locals>.deprecatedFunctioni  rl   r1   )r   r   rW   r6   rm   r;   )r\   rk   resultr;   r{   r/   r4   s   `  @r)   rn   z0deprecatedProperty.<locals>.deprecationDecoratord  s    3gt[
 
 
x	- 	- 	- 	- 	- 
	- 	 8+ N N	
 	
 	
 07,$$%788,r1   )ry   )r4   r/   rn   r{   s   `` @r)   r   r   9  sb    .L L L L Lh L L L(      &  r1   c                     t           S )zR
    Return the warning method currently used to record deprecation warnings.
    r   ro   r1   r)   r   r   z  s	     Kr1   c                
    | a dS )z
    Set the warning method to use to record deprecation warnings.

    The callable should take message, category and stacklevel. The return
    value is ignored.
    Nr   )	newMethods    r)   r   r     s     DDDr1   c                  $    e Zd ZdZd Zd Zd ZdS )_InternalStatez
    An L{_InternalState} is a helper object for a L{_ModuleProxy}, so that it
    can easily access its own attributes, bypassing its logic for delegating to
    another object that it's proxying for.

    @ivar proxy: a L{_ModuleProxy}
    c                >    t                               | d|           d S Nproxy)object__setattr__)ru   r   s     r)   __init__z_InternalState.__init__  s     4%00000r1   c                j    t                               t                               | d          |          S r   )r   __getattribute__)ru   r'   s     r)   r   z_InternalState.__getattribute__  s(    &&v'>'>tW'M'MtTTTr1   c                l    t                               t                               | d          ||          S r   )r   r   r   )ru   r'   values      r)   r   z_InternalState.__setattr__  s+    !!&"9"9$"H"H$PUVVVr1   N)r    r$   r   rJ   r   r   r   ro   r1   r)   r   r     sS         1 1 1U U UW W W W Wr1   r   c                  ,    e Zd ZdZd Zd	dZd Zd ZdS )
_ModuleProxya  
    Python module wrapper to hook module-level attribute access.

    Access to deprecated attributes first checks
    L{_ModuleProxy._deprecatedAttributes}, if the attribute does not appear
    there then access falls through to L{_ModuleProxy._module}, the wrapped
    module object.

    @ivar _module: Module on which to hook attribute access.
    @type _module: C{module}

    @ivar _deprecatedAttributes: Mapping of attribute names to objects that
        retrieve the module attribute's original value.
    @type _deprecatedAttributes: C{dict} mapping C{str} to
        L{_DeprecatedAttribute}

    @ivar _lastWasPath: Heuristic guess as to whether warnings about this
        package should be ignored for the next call.  If the last attribute
        access of this module was a C{getattr} of C{__path__}, we will assume
        that it was the import system doing it and we won't emit a warning for
        the next access, even if it is to a deprecated attribute.  The CPython
        import system always tries to access C{__path__}, then the attribute
        itself, then the attribute itself again, in both successful and failed
        cases.
    @type _lastWasPath: C{bool}
    c                N    t          |           }||_        i |_        d|_        d S )NF)r   _module_deprecatedAttributes_lastWasPath)ru   modulestates      r)   r   z_ModuleProxy.__init__  s,    t$$&(#"r1   rY   strc                `    t          |           }dt          |           j         d|j        dS )z
        Get a string containing the type of the module proxy and a
        representation of the wrapped module object.
        <z module=>)r   typer    r   )ru   r   s     r)   __repr__z_ModuleProxy.__repr__  s5    
 t$$B4::&BBBBBBr1   c                ^    t          |           }d|_        t          |j        ||           dS )z@
        Set an attribute on the wrapped module object.
        FN)r   r   setattrr   )ru   r'   r   r   s       r)   r   z_ModuleProxy.__setattr__  s3     t$$"tU+++++r1   c                    t          |           }|j        rd}n|j                            |          }||                                }nt	          |j        |          }|dk    rd|_        nd|_        |S )aG  
        Get an attribute from the module object, possibly emitting a warning.

        If the specified name has been deprecated, then a warning is issued.
        (Unless certain obscure conditions are met; see
        L{_ModuleProxy._lastWasPath} for more information about what might quash
        such a warning.)
        N__path__TF)r   r   r   getgetattrr   )ru   r'   r   deprecatedAttributer   s        r)   r   z_ModuleProxy.__getattribute__  s     t$$ 	H"&"'"="A"A$"G"G* (++--EE EM400E:!%E!&Er1   N)rY   r   )r    r$   r   rJ   r   r   r   r   ro   r1   r)   r   r     sc         6# # #C C C C, , ,    r1   r   c                      e Zd ZdZd Zd ZdS )_DeprecatedAttributeaE  
    Wrapper for deprecated attributes.

    This is intended to be used by L{_ModuleProxy}. Calling
    L{_DeprecatedAttribute.get} will issue a warning and retrieve the
    underlying attribute's value.

    @type module: C{module}
    @ivar module: The original module instance containing this attribute

    @type fqpn: C{str}
    @ivar fqpn: Fully qualified Python name for the deprecated attribute

    @type version: L{incremental.Version}
    @ivar version: Version that the attribute was deprecated in

    @type message: C{str}
    @ivar message: Deprecation message
    c                b    || _         || _        |j        dz   |z   | _        || _        || _        dS )z7
        Initialise a deprecated name wrapper.
        r   N)r   r    r8   r4   message)ru   r   r'   r4   r   s        r)   r   z_DeprecatedAttribute.__init__  s7     Oc)D0	r1   c                    t          | j        | j                  }t          | j        | j        t          dz   | j        z             }t          |t          d           |S )zU
        Get the underlying attribute value and issue a deprecation warning.
        z:    rf   )
r   r   r    r<   r8   r4   r9   r   r   ri   )ru   r~   r   s      r)   r   z_DeprecatedAttribute.get  s[     dm44.It|%?$%F%U
 
 	W(Q7777r1   N)r    r$   r   rJ   r   r   ro   r1   r)   r   r     s<         (      r1   r   c                    t                               | d          }t          ||||          }t                               | d          }|||<   dS )a  
    Mark a module-level attribute as being deprecated.

    @type proxy: L{_ModuleProxy}
    @param proxy: The module proxy instance proxying the deprecated attributes

    @type name: C{str}
    @param name: Attribute name

    @type version: L{incremental.Version}
    @param version: Version that the attribute was deprecated in

    @type message: C{str}
    @param message: Deprecation message
    r   r   N)r   r   r   )r   r'   r4   r   r   attrr   s          r)   _deprecateAttributer     sV      %%eY77Gw@@D #33E;RSS"&$r1   c                    t           j        |         }t          |t                    s1t	          t
          t          |                    }|t           j        |<   t          ||| |           dS )aE  
    Declare a module-level attribute as being deprecated.

    @type version: L{incremental.Version}
    @param version: Version that the attribute was deprecated in

    @type message: C{str}
    @param message: Deprecation message

    @type moduleName: C{str}
    @param moduleName: Fully-qualified Python name of the module containing
        the deprecated attribute; if called from the same module as the
        attributes are being deprecated in, using the C{__name__} global can
        be helpful

    @type name: C{str}
    @param name: Attribute name to deprecate
    N)sysmodules
isinstancer   r   r   r   )r4   r   r(   r'   r   s        r)   r	   r	   6  s_    & [$Ffl++ )j,v"6"677"(Jgw77777r1   c                   t           j        | j                 }t          |t          t          j        |          t          d t          | j	                  D                       |j
        | j                            di           d           dS )a  
    Issue a warning string, identifying C{offender} as the responsible code.

    This function is used to deprecate some behavior of a function.  It differs
    from L{warnings.warn} in that it is not limited to deprecating the behavior
    of a function currently on the call stack.

    @param offender: The function that is being deprecated.

    @param warningString: The string that should be emitted by this warning.
    @type warningString: C{str}

    @since: 11.0
    c              3  $   K   | ]\  }}||V  d S rx   ro   )rF   _
lineNumbers      r)   	<genexpr>z$warnAboutFunction.<locals>.<genexpr>j  s8       
 
:% %%%%
 
r1   __warningregistry__N)categoryfilenamelinenor   registrymodule_globals)r   r   r$   r   ri   r!   
getabsfilemaxr   __code__r    __globals__
setdefault)offenderr;   offenderModules      r)   warnAboutFunctionr   Q  s    ( [!45N##N33 
 
!/0A!B!B
 
 
 
 

 &%001FKK     r1   c                   i }t          | j                  t          |          z
  }| j        i x}|| j        <   |dk     r:| j        t	          d          |t          | j                  d         || j        <   t          | j        |          D ]
\  }}|||<   |                                D ]B\  }}|| j        v r||v rt	          d          |||<   '| j        |||<   4t	          d          |S )a  
    Take an I{inspect.ArgSpec}, a tuple of positional arguments, and a dict of
    keyword arguments, and return a mapping of arguments that were actually
    passed to their passed values.

    @param argspec: The argument specification for the function to inspect.
    @type argspec: I{inspect.ArgSpec}

    @param positional: The positional arguments that were passed.
    @type positional: L{tuple}

    @param keyword: The keyword arguments that were passed.
    @type keyword: L{dict}

    @return: A dictionary mapping argument names (those declared in C{argspec})
        to values that were passed explicitly by the user.
    @rtype: L{dict} mapping L{str} to L{object}
    Nr   Too many arguments.Already passed.no such param)rL   r_   keywordsvarargs	TypeErrorzipitems)argspec
positionalkeywordr~   unpassedra   r'   r   s           r)   _passedArgSpecr   u  s   & !#F7<  3z??2H#,..()!||?"1222&0W\1B1B1D1D&EF7?#7<44  et}} - -e7<v~~ 1222 F4LL) F4LLO,,,Mr1   c                   i }d}d}t          | j                                                  D ]&\  }\  }}|j        t          j        j        k    r&||d         ||<   t          ||                   dz   }I|j        t          j        j        k    ri x}||<   k|j        t          j        j	        t          j        j
        fv r$|t          |          k     r||         ||<   |dz  }|j        t          j        j        k    r<||vr6|j        t          j        j        k    rt          d|           |j        ||<   t          d| d|j                   t          |          |k    rt          d          |                                D ]O\  }}	|| j                                        v r||v rt          d          |	||<   9||	||<   At          d	          |S )
a  
    Take an L{inspect.Signature}, a tuple of positional arguments, and a dict of
    keyword arguments, and return a mapping of arguments that were actually
    passed to their passed values.

    @param signature: The signature of the function to inspect.
    @type signature: L{inspect.Signature}

    @param positional: The positional arguments that were passed.
    @type positional: L{tuple}

    @param keyword: The keyword arguments that were passed.
    @type keyword: L{dict}

    @return: A dictionary mapping argument names (those declared in
        C{signature}) to values that were passed explicitly by the user.
    @rtype: L{dict} mapping L{str} to L{object}
    Nr   r@   zmissing keyword arg 'z' parameter is invalid kind: r   r   r   )	enumerate
parametersr   kindr!   	ParameterVAR_POSITIONALrL   VAR_KEYWORDPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYKEYWORD_ONLYdefaultemptyr   keys)
	signaturer   r   r~   ra   numPositionalnr'   paramr   s
             r)   _passedSignaturer     s   & FFM%i&:&@&@&B&BCC Q Q=D%:*999%abb>F4Lt--1MMZ7,888$&&FVD\\Z3-
 
 
 3z??"")!}t"Z7,9997""=G$5$;;;#$A4$A$ABBB#(=F4LOOO5:OOPPP
:&&-...}} - -e9',,....v~~ 1222 F4LL F4LLO,,,Mr1   c                      fd}|S )a  
    Decorator which causes its decoratee to raise a L{TypeError} if two of the
    given arguments are passed at the same time.

    @param argumentPairs: pairs of argument identifiers, each pair indicating
        an argument that may not be passed in conjunction with another.
    @type argumentPairs: sequence of 2-sequences of L{str}

    @return: A decorator, used like so::

            @_mutuallyExclusiveArguments([["tweedledum", "tweedledee"]])
            def function(tweedledum=1, tweedledee=2):
                "Don't pass tweedledum and tweedledee at the same time."

    @rtype: 1-argument callable taking a callable and returning a callable.
    c                ~     t          j                   t          t                      fd            }|S )Nc                      | |          }D ]3\  }}||v r*||v r&t          d|d|dt                    d          4 | i |S )NThe z and z arguments to z are mutually exclusive.)r   r*   )	r_   ra   	argumentsthisthat_passedargumentPairsspecwrappees	        r)   wrappedz=_mutuallyExclusiveArguments.<locals>.wrapper.<locals>.wrapped  s    dF33I+  
d9$$):):#)44':7'C'C'C'CE   7D+F+++r1   )r!   r   r   r   )r   r   r   r   r   s   ` @@r)   wrapperz,_mutuallyExclusiveArguments.<locals>.wrapper  sZ     ))"	w	, 	, 	, 	, 	, 	, 	, 
	, r1   ro   )r   r   s   ` r)   _mutuallyExclusiveArgumentsr     s#    $    " Nr1   _Tc.)boundr'   r   Optional[str]Callable[[_Tc], _Tc]c                     d fd}|S )aw  
    Return a decorator that marks a keyword parameter of a callable
    as deprecated. A warning will be emitted if a caller supplies
    a value for the parameter, whether the caller uses a keyword or
    positional syntax.

    @type version: L{incremental.Version}
    @param version: The version in which the parameter will be marked as
        having been deprecated.

    @type name: L{str}
    @param name: The name of the deprecated parameter.

    @type replacement: L{str}
    @param replacement: Optional text indicating what should be used in
        place of the deprecated parameter.

    @since: Twisted 21.2.0
    r   r   rY   c                *    t          ddt                      	          d                    t          	                    }r|dz   t	                    z   }|dz  }t          j                   j        }|v rK|         j        t
          j	        j
        k    r+t          |                                         fd}n fd}t          t           t                     |                    }t!          ||           |S )	Nr   z parameter to r.   z'The {!r} parameter was deprecated in {}r3   r   c                 p    t          |           k    s|v rt          t          d            | i |S rd   )rL   r   ri   )r_   ra   r'   parameterIndexr;   r   s     r)   checkDeprecatedParameterzMdeprecatedKeywordParameter.<locals>.wrapper.<locals>.checkDeprecatedParameter1  sG    t99~--(:qIIIIw////r1   c                 J    |v rt          t          d            | i |S rd   rh   )r_   ra   r'   r;   r   s     r)   r   zMdeprecatedKeywordParameter.<locals>.wrapper.<locals>.checkDeprecatedParameter8  s7    6>>(:qIIIIw////r1   )r<   r*   r:   r   r0   r!   r   r   r   r   r   listindexr   r   r   rW   )
r   r5   paramsr   	decoratedr   r;   r'   r/   r4   s
   `    @@r)   r   z+deprecatedKeywordParameter.<locals>.wrapper  sa   4G4GG)<W)E)EGG#
 
 
 8>>W%%
 
  	B*4[AAACs
"7++6FNNt!W%6%LLL!&\\//55N0 0 0 0 0 0 0 0 00 0 0 0 0 0 0
 neGnn-EFFGG	9c***r1   )r   r   rY   r   ro   )r4   r'   r/   r   s   ``` r)   r
   r
     s5    .$ $ $ $ $ $ $ $L Nr1   rx   )NN)r4   r   r/   rX   rY   rZ   )r4   r   r'   r   r/   r   rY   r   )6rJ   
__future__r   __all__r!   r   disr   	functoolsr   typesr   typingr   r   r   r   r   r   warningsr   r   incrementalr   r   typing_extensionsr   r   r   r9   r*   r$   r    r   r0   r6   r<   r   rW   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r
   ro   r1   r)   <module>r
     s  
L LZ # " " " " "    



                   ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( ( ( ( ( ( ( ( 1 1 1 1 1 1 1 1 ' ' ' ' ' 'Yt__WT]]E   , ":  3  #7   / / /   (       F   <5 5 5< IM&  &  &  &  & R>  >  >  > B    W W W W W W W W&M M M M M M M M`, , , , , , , ,^' ' '08 8 86! ! !H' ' 'T9 9 9x# # #L ge8CH-... ?C= = = = = = =r1   