+
    Dfjo                       R t ^ RIHt . R,Ot^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHtHtHt ^ RIHsHt ^ RIHtHt ^ R	IHt ]! R
4      t]! R4      tRtR tR]n        R]n        R]n         R t!R-R lt"R.R lt#R.R lt$R t%R-R R llt&R-R R llt'R t(R t) ! R R4      t* ! R R4      t+ ! R R 4      t,R! t-R" t.R# t/R$ t0R% t1R& t2]! R']R(]3,          R)7      t3R-R* R+ llt4R# )/a  
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.
)annotationsN)findlinestartswraps)
ModuleType)AnyCallableDictOptionalTypeVarcast)warnwarn_explicit)VersiongetVersionString)	ParamSpec_P_Rz&%(fqpn)s was deprecated in %(version)sc                ^    V P                   p\        P                  ! V 4      '       g   \        P
                  ! V 4      '       d   V P                  pV RV 2# \        P                  ! V 4      '       d   V P                   RV P                    2# V#   \         d    T P                  p Li ; i)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   &  :/usr/lib/python3/dist-packages/twisted/python/deprecate.py_fullyQualifiedNamer"   t   s     sw11#66^^
Qtf%%			#		..!3#3#3"455K  ||s   B B,+B,ztwisted.python.reflectfullyQualifiedNamec                F    \        V 4      '       d   \        V 4      p RV  R2# )z
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!   _getReplacementStringr(      s(     )+6X..    c                `    R\        V 4       2pV'       d   V R\        V4       2pVR,           # )ax  
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   r(   )versionr'   docs   && r!   _getDeprecationDocstringr.      s;     +G45
6CR-k:;<9r)   c                    Vf   \         pVRV R\        V4      /,          pV'       d   RP                  V\        V4      4      pV# )a  
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}
fqpnr,   z{}; {})DEPRECATION_WARNING_FORMATr   formatr(   )r0   r,   r2   r'   warningStrings   &&&& r!   _getDeprecationWarningStringr4      sK    2 ~+fdI7G7PQQM 0=
 r)   c                .    \        \        V 4      WV4      # )a#  
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}
)r4   r"   )callableThingr,   r2   r'   s   &&&&r!   getDeprecationWarningStringr7      s    2 (M*G[ r)   c                   V P                   '       d   V P                   P                  4       pM. p\        V4      ^ 8X  d   VP                  V4       M\        V4      ^8X  d   VP	                  RVR.4       MjVR,          pRpVP                  4       '       g   VP                  4       pVP	                  RWA,           V.4       V Uu. uF  qUP                  R4      NK  	  ppRP                  V4      V n         R# u upi )a^  
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.
  
N)	__doc__
splitlineslenappendextendstrippoplstripjoin)thingWithDoctextToAppenddocstringLinestrailerspacesls   &&    r!   _appendToDocstringrL      s     %--88:
>al+	^		!r<45 $}}#'')Fr6#8&AB1?@A((3-@99^4L As   C9c               $    V ^8  d   QhRRRRRR/#    r,   r   r'   z"str | Callable[..., object] | Nonereturnz.Callable[[Callable[_P, _R]], Callable[_P, _R]] )r2   s   "r!   __annotate__rR     s$     &  & & #E& 3& r)   c                   a a R VV 3R llpV# )ag  
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
c                    V ^8  d   QhRRRR/# )rO   functionzCallable[_P, _R]rP   rQ   )r2   s   "r!   rR    deprecated.<locals>.__annotate__#  s     " "'7 "<L "r)   c                   <a a \        S SRS4      o\        S 4      R V V3R ll4       p\        V\        SS4      4       SVn        V# )z1
Decorator that marks C{function} as deprecated.
Nc               $    V ^8  d   QhRRRRRR/# )rO   argsz_P.argskwargsz	_P.kwargsrP   r   rQ   )r2   s   "r!   rR   >deprecated.<locals>.deprecationDecorator.<locals>.__annotate__,  s!     	- 	-g 	- 	-r 	-r)   c                 8   < \        S\        ^R7       S! V / VB # rO   
stacklevelr   DeprecationWarningrY   rZ   rU   r3   s   *,r!   deprecatedFunctionDdeprecated.<locals>.deprecationDecorator.<locals>.deprecatedFunction+        2qAT,V,,r)   )r7   r   rL   r.   deprecatedVersion)rU   rc   r3   r'   r,   s   f @r!   deprecationDecorator(deprecated.<locals>.deprecationDecorator#  s]     4gt[
 
x	- 	- 
	- 	 8+ N	
 07,!!r)   rQ   )r,   r'   rg   s   ff r!   
deprecatedri     s    &" "&  r)   c               $    V ^8  d   QhRRRRRR/# rN   rQ   )r2   s   "r!   rR   rR   9  s)     @  @ @ #E@ 3@ r)   c                :   a aa  ! R R\         4      oVVV 3R lpV# )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                  &    ] tR tRtRtR tR tRtR# )/deprecatedProperty.<locals>._DeprecatedPropertyiR  zA
Extension of the build-in property to allow deprecated setters.
c                	4   a a \        S4      VV 3R  l4       pV# )c                 L   < \        SP                  \        ^R7       S! V / VB # r]   )r   r3   ra   )rY   rZ   rU   selfs   *,r!   rc   ^deprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapper.<locals>.deprecatedFunctionX  s,    &&& 
  000r)   r   )rp   rU   rc   s   ff r!   _deprecatedWrapperBdeprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapperW  s!    8_1 1 &%r)   c                	J    \         P                  W P                  V4      4      # N)propertysetterrr   )rp   rU   s   &&r!   rw   6deprecatedProperty.<locals>._DeprecatedProperty.setterc  s    ??4)@)@)JKKr)   rQ   N)r   r   r   __firstlineno__r=   rr   rw   __static_attributes__rQ   r)   r!   _DeprecatedPropertyrm   R  s    	
	&	Lr)   r{   c                   <a a \        S SR S4      o\        S 4      V V3R l4       p\        V\        SS4      4       SVn        S! V4      pSVn        V# )Nc                 8   < \        S\        ^R7       S! V / VB # r]   r`   rb   s   *,r!   rc   LdeprecatedProperty.<locals>.deprecationDecorator.<locals>.deprecatedFunctionk  re   r)   )r7   r   rL   r.   rf   r3   )rU   rc   resultr3   r{   r'   r,   s   f  @r!   rg   0deprecatedProperty.<locals>.deprecationDecoratorf  sh    3gt[
 
x	- 
	- 	 8+ N	
 07,$%78,r)   )rv   )r,   r'   rg   r{   s   ff @r!   deprecatedPropertyr   9  s    2Lh L(&  r)   c                     \         # )zJ
Return the warning method currently used to record deprecation warnings.
r   rQ   r)   r!   getWarningMethodr   |  s	     Kr)   c                
    V s R# )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!   setWarningMethodr     s	     Dr)   c                  ,    ] tR tRtRtR tR tR tRtR# )_InternalStatei  z
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                	4    \         P                  V R V4       R# )proxyN)object__setattr__)rp   r   s   &&r!   __init___InternalState.__init__  s    4%0r)   c                	V    \         P                  \         P                  V R 4      V4      # r   )r   __getattribute__)rp   r   s   &&r!   r   _InternalState.__getattribute__  s"    &&v'>'>tW'MtTTr)   c                	V    \         P                  \         P                  V R 4      W4      # r   )r   r   r   )rp   r   values   &&&r!   r   _InternalState.__setattr__  s"    !!&"9"9$"H$VVr)   rQ   N)	r   r   r   ry   r=   r   r   r   rz   rQ   r)   r!   r   r     s    1UWr)   r   c                  8    ] tR tRtRtR tR R ltR tR tRt	R	# )
_ModuleProxyi  aX  
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                	D    \        V 4      pWn        / Vn        R Vn        R# )FN)r   _module_deprecatedAttributes_lastWasPath)rp   modulestates   && r!   r   _ModuleProxy.__init__  s!    t$&(#"r)   c                   V ^8  d   QhRR/# )rO   rP   strrQ   )r2   s   "r!   rR   _ModuleProxy.__annotate__  s     C C# Cr)   c                f    \        V 4      pR\        V 4      P                   RVP                  : R2# )zi
Get a string containing the type of the module proxy and a
representation of the wrapped module object.
<z module=>)r   typer   r   )rp   r   s   & r!   __repr___ModuleProxy.__repr__  s3    
 t$4:&&'x/@BBr)   c                V    \        V 4      pRVn        \        VP                  W4       R# )z0
Set an attribute on the wrapped module object.
FN)r   r   setattrr   )rp   r   r   r   s   &&& r!   r   _ModuleProxy.__setattr__  s$     t$"t+r)   c                    \        V 4      pVP                  '       d   RpMVP                  P                  V4      pVe   VP                  4       pM\	        VP
                  V4      pVR8X  d
   RVn        V# RVn        V# )a  
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   )rp   r   r   deprecatedAttributer   s   &&   r!   r   _ModuleProxy.__getattribute__  s     t$"&"'"="="A"A$"G* (++-E EMM40E:!%E  "'Er)   rQ   N)
r   r   r   ry   r=   r   r   r   r   rz   rQ   r)   r!   r   r     s    6#C,r)   r   c                  &    ] tR tRtRtR tR tRtR# )_DeprecatedAttributei  a  
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                t    Wn         W n        VP                  R,           V,           V n        W0n        W@n        R# )z'
Initialise a deprecated name wrapper.
r   N)r   r   r0   r,   message)rp   r   r   r,   r   s   &&&&&r!   r   _DeprecatedAttribute.__init__  s-     OOc)D0	r)   c                    \        V P                  V P                  4      p\        V P                  V P
                  \        R,           V P                  ,           4      p\        V\        ^R7       V# )zE
Get the underlying attribute value and issue a deprecation warning.
z: r^   )
r   r   r   r4   r0   r,   r1   r   r   ra   )rp   r   r   s   &  r!   r   _DeprecatedAttribute.get  sT     dmm4.IIt||%?$%F%U
 	W(Q7r)   )r   r0   r   r   r,   N)r   r   r   ry   r=   r   r   rz   rQ   r)   r!   r   r     s    (r)   r   c                ~    \         P                  V R4      p\        WAW#4      p\         P                  V R4      pWVV&   R# )al  
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   r,   r   r   attrr   s   &&&&   r!   _deprecateAttributer      s@      %%eY7Gw@D #33E;RS"&$r)   c                    \         P                  V,          p\        V\        4      '       g-   \	        \
        \        V4      4      pV\         P                  V&   \        WCW4       R# )a  
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   )r,   r   r    r   r   s   &&&& r!   deprecatedModuleAttributer   8  sH    & [[$Ffl++j,v"67"(Jg7r)   c                *   \         P                  V P                  ,          p\        V\        \
        P                  ! V4      \        R \        V P                  4       4       4      VP                  V P                  P                  R/ 4      RR7       R# )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  6   "   T F  w  rVf   K  Vx  K  	  R # 5iru   rQ   ).0_
lineNumbers   &  r!   	<genexpr>$warnAboutFunction.<locals>.<genexpr>l  s      
!B J!Bs   
__warningregistry__N)categoryfilenamelinenor   registrymodule_globals)r   r   r   r   ra   r   
getabsfilemaxr   __code__r   __globals__
setdefault)offenderr3   offenderModules   && r!   warnAboutFunctionr   S  sy    ( [[!4!45N###N3 
!/0A0A!B
 

 &&%%001FKr)   c                   / p\        V P                  4      \        V4      ,
          pV P                  e   / ;qSV P                  &   V^ 8  d>   V P                  f   \	        R4      hV\        V P                  4      R W0P                  &   \        V P                  V4       F	  w  rgWsV&   K  	  VP                  4        FJ  w  rgW`P                  9   d   Wc9   d   \	        R4      hWsV&   K,  V P                  e   VXV&   KA  \	        R4      h	  V# )ax  
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}
NToo many arguments.Already passed.no such param)r?   rY   keywordsvarargs	TypeErrorzipitems)argspec
positionalkeywordr   unpassedrZ   r   r   s   &&&     r!   _passedArgSpecr   w  s    & !#F7<< 3z?2H#,..(()!|??"122&0W\\1B1D&EF??#7<<4t 5}}<<~ 122 4L) F4LO,, ' Mr)   c                X   / pRp^ p\        V P                  P                  4       4       EF  w  pw  rxVP                  \        P
                  P                  8X  d!   WR W7&   \        W7,          4      ^,           pKR  VP                  \        P
                  P                  8X  d	   / ;qCV&   K  VP                  \        P
                  P                  \        P
                  P                  39   d(   V\        V4      8  d   W,          W7&   V^,          pK  K  VP                  \        P
                  P                  8X  dR   Wr9  dI   VP                  \        P
                  P                  8X  d   \        RV 24      hVP                  W7&   EKd  EKg  \        RV RVP                   24      h	  \        V4      V8  d   \        R4      hVP                  4        FM  w  ryWpP                  P                  4       9   d   Ws9   d   \        R4      hWV&   K:  Ve   WV&   KD  \        R4      h	  V# )at  
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}
Nzmissing keyword arg 'z' parameter is invalid kind: r   r   r   )	enumerate
parametersr   kindr   	ParameterVAR_POSITIONALr?   VAR_KEYWORDPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYKEYWORD_ONLYdefaultemptyr   keys)
	signaturer   r   r   rZ   numPositionalnr   paramr   s
   &&&       r!   _passedSignaturer     s   & FFM%i&:&:&@&@&BC=D::**999%b>FL-1MZZ7,,888$&&FD\ZZ33--
 
 3z?")}" # ZZ7,,999"==G$5$5$;$;;#&:4&$ABB#(==FL	 # av%B5::,OPP- D0 :&-..}}'',,..~ 122 4L 4LO,, ' Mr)   c                   a  V 3R lpV# )ak  
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   <a aa \         P                  ! S 4      o\        o\        S 4      VVVV 3R  l4       pV# )c                    < S! SW4      pS F4  w  r4W29   g   K  WB9   g   K  \        R V: RV: R\        S4      : R24      h	  S! V / VB # )The z and z arguments to z are mutually exclusive.)r   r"   )	rY   rZ   	argumentsthisthat_passedargumentPairsspecwrappees	   *,   r!   wrapped=_mutuallyExclusiveArguments.<locals>.wrapper.<locals>.wrapped  sX    d3I+
$):#':7'CE  , D+F++r)   )r   r   r   r   )r  r  r   r   r   s   f @@r!   wrapper,_mutuallyExclusiveArguments.<locals>.wrapper  s5      )"	w	, 
	, r)   rQ   )r   r  s   f r!   _mutuallyExclusiveArgumentsr    s    $" Nr)   _Tc.)boundc               (    V ^8  d   QhRRRRRRRR/# )	rO   r,   r   r   r   r'   zOptional[str]rP   zCallable[[_Tc], _Tc]rQ   )r2   s   "r!   rR   rR     s,     = ===.;==r)   c                "   a aa R VVV 3R llpV# )a?  
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
c                    V ^8  d   QhRRRR/# )rO   r  r  rP   rQ   )r2   s   "r!   rR   0deprecatedKeywordParameter.<locals>.__annotate__  s     $ $ $ $r)   c                .  <a aa \        R S: R\        S 4       2S	SR7      oRP                  S\        S	4      4      pS'       d   VR,           \	        S4      ,           pVR,          p\
        P                  ! S 4      P                  pSV9   dU   VS,          P                  \
        P                  P                  8X  d%   \        V4      P                  S4      oVVVV 3R lpMVVV 3R lp\        \        \        S 4      ! V4      4      p\!        WA4       V# )r   z parameter to r&   z'The {!r} parameter was deprecated in {}r+   r   c                 f   < \        V 4      S8  g   SV9   d   \        S\        ^R7       S! V / VB # r]   )r?   r   ra   )rY   rZ   r   parameterIndexr3   r  s   *,r!   checkDeprecatedParameterMdeprecatedKeywordParameter.<locals>.wrapper.<locals>.checkDeprecatedParameter3  s2    t9~-(:qI///r)   c                 F   < SV9   d   \        S\        ^R7       S! V / VB # r]   r`   )rY   rZ   r   r3   r  s   *,r!   r  r  :  s'    6>(:qI///r)   )r4   r"   r2   r   r(   r   r   r   r   r   r   listindexr   r  r   rL   )
r  r-   paramsr  	decoratedr  r3   r   r'   r,   s
   f    @@r!   r  +deprecatedKeywordParameter.<locals>.wrapper  s    44(.)<W)E(FG#
 8>>W%
 *4[AACs
""7+66FNt!!W%6%6%L%LL!&\//5N0 00
 eGn-EFG	9*r)   rQ   )r,   r   r'   r  s   fff r!   deprecatedKeywordParameterr    s    .$ $L Nr)   )ri   r   r7   r   r   r   r  ru   )NN)5r=   
__future__r   __all__r   r   disr   	functoolsr   typesr   typingr   r   r	   r
   r   r   warningsr   r   incrementalr   r   r   r   r   r1   r"   r   r   r   r(   r.   r4   r7   rL   ri   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rQ   r)   r!   <module>r!     s
  
LZ #  
    ? ? ( 1 t_T]E , ":  3  #7   /( F<5:& R@ FW W&M M`, ,^'086!H'T9x#L e8CH-.= =r)   