
    #HJjS                     l   d Z ddlZddlZddlZddlZ G d de      Z G d d      Z G d d      Ze	j                  d	   j                  e      d	   Zd
 Z ee      Z G d de	      Z G d dee      Z G d de      Z G d de      Z G d de      Z ed      Z G d de      Z G d de      Zy)z7Core object proxy and function wrapper implementations.    Nc                       e Zd ZdZy)WrapperNotInitializedErrorz
    Exception raised when a wrapper is in an inconsistent state: __init__ was
    called but __wrapped__ is not set. Inherits from ValueError only, so it is
    not silently swallowed by hasattr/getattr/except AttributeError patterns.
    N__name__
__module____qualname____doc__     X/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/wrapt/wrappers.pyr   r   	   s     	r   r   c                       e Zd Zed        Zej                  d        Zed        Zej                  d        Zed        Zed        Zy)_ObjectProxyMethodsc                 .    | j                   j                  S N__wrapped__r   selfs    r   r   z_ObjectProxyMethods.__module__%   s    ***r   c                 &    || j                   _        y r   r   r   values     r   r   z_ObjectProxyMethods.__module__)   s    &+#r   c                 .    | j                   j                  S r   r   r	   r   s    r   r	   z_ObjectProxyMethods.__doc__-   s    '''r   c                 &    || j                   _        y r   r   r   s     r   r	   z_ObjectProxyMethods.__doc__1   s    #( r   c                 .    | j                   j                  S r   )r   __dict__r   s    r   r   z_ObjectProxyMethods.__dict__8       (((r   c                 .    | j                   j                  S r   )r   __weakref__r   s    r   r   z_ObjectProxyMethods.__weakref__A   s    +++r   N)r   r   r   propertysetterr	   r   r   r
   r   r   r   r      s    $ + + , , ( ( ^^) ) ) ) , ,r   r   c                       e Zd ZdZy)_ObjectProxyDictBasea  Base class whose sole purpose is to provide a ``getset_descriptor``
    for ``__dict__`` that is valid for all ``ObjectProxy`` subclasses.
    The metaclass installs this descriptor as ``__self_dict__`` so that
    the real instance dictionary of the proxy can always be accessed,
    even though ``ObjectProxy`` replaces ``__dict__`` with a property
    that delegates to the wrapped object.Nr   r
   r   r   r#   r#   F   s    - 	r   r#   r   c                 ,    t         j                  |       S r   )_REAL_DICT_DESCRIPTOR__get__r   s    r   _get_self_dictr'   V   s     ((..r   c                   z    e Zd Zed        Zej                  d        Zed        Zej                  d        Zd Zy)_ObjectProxyMetaTypec                 :    | j                   j                  dd      S )N_cls_real_modulebuiltinsr   getclss    r   r   z_ObjectProxyMetaType.__module__j   s    || 2J??r   c                 2    t         j                  | d|       y )Nr+   type__setattr__r0   r   s     r   r   z_ObjectProxyMetaType.__module__n   s    0%8r   c                 8    | j                   j                  d      S N_cls_real_docr-   r/   s    r   r	   z_ObjectProxyMetaType.__doc__r   s    ||00r   c                 2    t         j                  | d|       y r7   r2   r5   s     r   r	   z_ObjectProxyMetaType.__doc__v   s    ou5r   c                 v   |j                  d      }|j                  d      }|j                  d      }|j                  t        t                     |||d<   |j	                  dt
               t        j                  | |||      }|t        j                  |d|       |t        j                  |d|       |S )Nr   r	   r   __self_dict__r+   r8   )	r.   updatevarsr   
setdefault_SELF_DICT_PROPERTYr3   __new__r4   )r0   namebases
dictionaryreal_modulereal_doccustom_dictklasss           r   r@   z_ObjectProxyMetaType.__new__z   s     !nn\2>>), !nnZ0$234"%0Jz"o/BCS$z:"U$6DUOX>r   N)r   r   r   r    r!   r	   r@   r
   r   r   r)   r)   a   sc     @ @ 9 9 1 1 ^^6 6&r   r)   c                      e Zd ZdZ eej                        Zd Ze	d        Z
d Ze	d        Z e j                  d        Z e	d        Zej                  d        Zd	 Zd
 Zd Zd Zd Zd Zd\dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z?d< Z@d= ZAd> ZBd? ZCd@ ZDdA ZEdB ZFdC ZGdD ZHdE ZIdF ZJdG ZKdH ZLdI ZMdJ ZNdK ZOdL ZPdM ZQdN ZRdO ZSdP ZTdQ ZUdR ZVdS ZWdT ZXdU ZYdV ZZdW Z[dX Z\dY Z]dZ Z^d[ Z_y)]ObjectProxyzSA transparent object proxy that delegates attribute access to a
    wrapped object.c                 8   |2	 t         j                  | d      }|n/t         j                  | d|       nt         j                  | d|       t         j                  | dd       	 t         j                  | d|j                         t
        j                  dk\  r#	 t         j                  | d|j                         y	 t         j                  | d	|j                         y# t        $ r d}Y w xY w# t        $ r Y uw xY w# t        $ r Y yw xY w# t        $ r Y yw xY w)
z/Create an object proxy around the given object.N__wrapped_factory__r   __init_called__Tr         __annotate____annotations__)	object__getattribute__AttributeErrorr4   r   sysversion_inforP   rQ   )r   wrappedcallbacks      r   __init__zObjectProxy.__init__   s    ? !2249NO #  ""4@t]G<4!2D9	t^W5I5IJ w&""49M9MN""4):G<S<STS "   0  		 " 
 " sG   C $!C/ !C> <!D C,+C,/	C;:C;>	D
	D
	DDc                     t         S r   )rI   r   s    r   __object_proxy__zObjectProxy.__object_proxy__   s    r   c                 2    t         j                  | ||       y r   )rR   r4   )r   rA   r   s      r   __self_setattr__zObjectProxy.__self_setattr__   s    4u-r   c                 .    | j                   j                  S r   r   r   r   s    r   r   zObjectProxy.__name__   r   r   c                 &    || j                   _        y r   r_   r   s     r   r   zObjectProxy.__name__   s    $)!r   c                 .    | j                   j                  S r   r   	__class__r   s    r   rc   zObjectProxy.__class__   s    )))r   c                 &    || j                   _        y r   rb   r   s     r   rc   zObjectProxy.__class__   s    %*"r   c                 ,    t        | j                        S r   )dirr   r   s    r   __dir__zObjectProxy.__dir__       4##$$r   c                 ,    t        | j                        S r   )strr   r   s    r   __str__zObjectProxy.__str__   rh   r   c                 ,    t        | j                        S r   )bytesr   r   s    r   	__bytes__zObjectProxy.__bytes__       T%%&&r   c           
          dt        |       j                   dt        |       ddt        | j                        j                   dt        | j                        dd	S )N<z at 0xxz for >)r3   r   idr   r   s    r   __repr__zObjectProxy.__repr__   sY    4:&&'vbhq\tDDTDT?U?^?^>__efhimiyiyfz{|e}}~r   c                 .    t        | j                  |      S r   )formatr   )r   format_specs     r   
__format__zObjectProxy.__format__   s    d&&44r   c                 ,    t        | j                        S r   )reversedr   r   s    r   __reversed__zObjectProxy.__reversed__  s    (())r   Nc                 .    t        | j                  |      S r   )roundr   )r   ndigitss     r   	__round__zObjectProxy.__round__  s    T%%w//r   c                     t        | j                  t              s1t        | j                  d      r| j                  j	                  |      S | j                  fS )N__mro_entries__)
isinstancer   r3   hasattrr   )r   rB   s     r   r   zObjectProxy.__mro_entries__  sM    $**D1g/7
 ##33E::  ""r   c                      | j                   |k  S r   r   r   others     r   __lt__zObjectProxy.__lt__      %''r   c                      | j                   |k  S r   r   r   s     r   __le__zObjectProxy.__le__      5((r   c                      | j                   |k(  S r   r   r   s     r   __eq__zObjectProxy.__eq__  r   r   c                      | j                   |k7  S r   r   r   s     r   __ne__zObjectProxy.__ne__  r   r   c                      | j                   |kD  S r   r   r   s     r   __gt__zObjectProxy.__gt__  r   r   c                      | j                   |k\  S r   r   r   s     r   __ge__zObjectProxy.__ge__  r   r   c                 ,    t        | j                        S r   )hashr   r   s    r   __hash__zObjectProxy.__hash__!      D$$%%r   c                 ,    t        | j                        S r   )boolr   r   s    r   __bool__zObjectProxy.__bool__$  r   r   c                    |j                  d      rt        j                  | ||       y |dk(  rt        j                  | ||       	 t        j                  | d       	 t        j                  | d|j
                         t        j                  dk\  r:	 t        j                  | d       	 t        j                  | d|j                         n9	 t        j                  | d       	 t        j                  | d|j                         t        | dd       }| |        y y |dk(  r/t        | j                  ||       t        j                  | ||       y |dk(  r/t        | j                  ||       t        j                  | ||       y |dk(  r/t        | j                  ||       t        j                  | ||       y t        t        |       |      rt        j                  | ||       y t        | j                  ||       y # t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y 5w xY w# t        $ r Y gw xY w# t        $ r Y Uw xY w)N_self_r   r   rM   rP   rQ   __wrapped_setattr_fixups__)
startswithrR   r4   __delattr__rT   r   rU   rV   rP   rQ   getattrsetattrr   r   r3   )r   rA   r   r   s       r   r4   zObjectProxy.__setattr__'  s9   ??8$tT51]"tT51""48""49K9KL 7*&&t^<&&t^U=O=OP&&t->?&&t->@U@UV *12D*& *5*, 6 ^#D$$dE2tT51&&D$$dE2tT51^#D$$dE2tT51T$Z&tT51 D$$dE2a "  " 
 &  & 
 &  & sl   G> !H H *!H. H> $!I >	H
H	HH	H+*H+.	H;:H;>	I
I	IIc                 Z   |dk(  r1	 t         j                  | d       t        j                  | d             S t        | j                  |      S # t        $ r Y nw xY w	 t         j                  | d       t        d      # t        $ r# t        dt        |       j                   d      w xY w)Nr   rK   __wrapped_get__rL   'z'' object has no attribute '__wrapped__'z;wrapper is in an inconsistent state: __wrapped__ is not set)rR   rS   rT   r3   r   r   r   r   r   rA   s     r   __getattr__zObjectProxy.__getattr__b  s    
 = J''.CD ..t5FGII$ t''..+ " ''.?@ -M  " $T
++,,WX s   A 	AAA> >,B*c                 d   |j                  d      rt        j                  | |       y |dk(  rt        d      |dk(  r-t        j                  | |       t	        | j
                  |       y |dk(  r.	 t        j                  | |       t	        | j
                  |       y |dk(  r.	 t        j                  | |       t	        | j
                  |       y t        t        |       |      rt        j                  | |       y t	        | j
                  |       y # t        $ r Y w xY w# t        $ r Y tw xY w)Nr   r   z"can't delete __wrapped__ attributer   rQ   rP   )	r   rR   r   	TypeErrordelattrr   rT   r   r3   r   s     r   r   zObjectProxy.__delattr__  s   ??8$tT*]"@AA^#tT*D$$d+&&""4. D$$d+^#""4. D$$d+T$Z&tT* D$$d+ "  " s$   1D $D# 	D D #	D/.D/c                      | j                   |z   S r   r   r   s     r   __add__zObjectProxy.__add__  r   r   c                      | j                   |z
  S r   r   r   s     r   __sub__zObjectProxy.__sub__  r   r   c                      | j                   |z  S r   r   r   s     r   __mul__zObjectProxy.__mul__  r   r   c                 B    t        j                  | j                  |      S r   operatortruedivr   r   s     r   __truediv__zObjectProxy.__truediv__  s     0 0%88r   c                      | j                   |z  S r   r   r   s     r   __floordiv__zObjectProxy.__floordiv__  r   r   c                      | j                   |z  S r   r   r   s     r   __mod__zObjectProxy.__mod__  r   r   c                 .    t        | j                  |      S r   divmodr   r   s     r   
__divmod__zObjectProxy.__divmod__  s    d&&..r   c                 0    t        | j                  |g| S r   powr   r   r   argss      r   __pow__zObjectProxy.__pow__  s    4##U2T22r   c                      | j                   |z  S r   r   r   s     r   
__lshift__zObjectProxy.__lshift__  r   r   c                      | j                   |z	  S r   r   r   s     r   
__rshift__zObjectProxy.__rshift__  r   r   c                      | j                   |z  S r   r   r   s     r   __and__zObjectProxy.__and__  r   r   c                      | j                   |z  S r   r   r   s     r   __xor__zObjectProxy.__xor__  r   r   c                      | j                   |z  S r   r   r   s     r   __or__zObjectProxy.__or__  r   r   c                      || j                   z   S r   r   r   s     r   __radd__zObjectProxy.__radd__      t''''r   c                      || j                   z
  S r   r   r   s     r   __rsub__zObjectProxy.__rsub__  r   r   c                      || j                   z  S r   r   r   s     r   __rmul__zObjectProxy.__rmul__  r   r   c                 B    t        j                  || j                        S r   r   r   s     r   __rtruediv__zObjectProxy.__rtruediv__  s    t'7'788r   c                      || j                   z  S r   r   r   s     r   __rfloordiv__zObjectProxy.__rfloordiv__      ((((r   c                      || j                   z  S r   r   r   s     r   __rmod__zObjectProxy.__rmod__  r   r   c                 .    t        || j                        S r   r   r   s     r   __rdivmod__zObjectProxy.__rdivmod__  s    eT--..r   c                 0    t        || j                  g| S r   r   r   s      r   __rpow__zObjectProxy.__rpow__  s    5$**2T22r   c                      || j                   z  S r   r   r   s     r   __rlshift__zObjectProxy.__rlshift__  r   r   c                      || j                   z	  S r   r   r   s     r   __rrshift__zObjectProxy.__rrshift__  r   r   c                      || j                   z  S r   r   r   s     r   __rand__zObjectProxy.__rand__  r   r   c                      || j                   z  S r   r   r   s     r   __rxor__zObjectProxy.__rxor__  r   r   c                      || j                   z  S r   r   r   s     r   __ror__zObjectProxy.__ror__  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z         S )N__iadd__r   r   r[   r   s     r   r   zObjectProxy.__iadd__  D    4##Z0%K(()9)9E)ABBr   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z
        S )N__isub__r   r   s     r   r   zObjectProxy.__isub__  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__imul__r   r   s     r   r   zObjectProxy.__imul__  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__itruediv__r   r   s     r   r   zObjectProxy.__itruediv__
  sD    4##^4%K(()9)9E)ABBr   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__ifloordiv__r   r   s     r   r   zObjectProxy.__ifloordiv__  sD    4##_5&K(()9)9U)BCCr   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__imod__r   r   s     r   r   zObjectProxy.__imod__  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__ipow__r   r   s     r   r   zObjectProxy.__ipow__  sD    4##Z0&K(()9)95)@AAr   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__ilshift__r   r   s     r   r   zObjectProxy.__ilshift__&  D    4##]3&K(()9)9U)BCCr   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z	        S )N__irshift__r   r   s     r   r   zObjectProxy.__irshift__-  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__iand__r   r   s     r   r  zObjectProxy.__iand__4  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__ixor__r   r   s     r   r  zObjectProxy.__ixor__;  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__ior__r   r   s     r   r  zObjectProxy.__ior__B  sD    4##Y/%K(()9)9E)ABBr   c                     | j                    S r   r   r   s    r   __neg__zObjectProxy.__neg__I          r   c                     | j                   S r   r   r   s    r   __pos__zObjectProxy.__pos__L  r  r   c                 ,    t        | j                        S r   )absr   r   s    r   __abs__zObjectProxy.__abs__O  rh   r   c                     | j                    S r   r   r   s    r   
__invert__zObjectProxy.__invert__R  r  r   c                 ,    t        | j                        S r   )intr   r   s    r   __int__zObjectProxy.__int__U  rh   r   c                 ,    t        | j                        S r   )floatr   r   s    r   	__float__zObjectProxy.__float__X  ro   r   c                 ,    t        | j                        S r   )complexr   r   s    r   __complex__zObjectProxy.__complex__[  s    t''((r   c                 @    t        j                  | j                        S r   )r   indexr   r   s    r   	__index__zObjectProxy.__index__^  s    ~~d..//r   c                      | j                   |z  S r   r   r   s     r   
__matmul__zObjectProxy.__matmul__a  r   r   c                      || j                   z  S r   r   r   s     r   __rmatmul__zObjectProxy.__rmatmul__d  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__imatmul__r   r   s     r   r!  zObjectProxy.__imatmul__g  sD    4##]3%K(()9)9E)ABBr   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zObjectProxy.__len__n  rh   r   c                     || j                   v S r   r   r   s     r   __contains__zObjectProxy.__contains__q  s    ((((r   c                      | j                   |   S r   r   r   keys     r   __getitem__zObjectProxy.__getitem__t  s    $$r   c                 "    || j                   |<   y r   r   )r   r)  r   s      r   __setitem__zObjectProxy.__setitem__w  s     %r   c                     | j                   |= y r   r   r(  s     r   __delitem__zObjectProxy.__delitem__z  s    S!r   c                 6    | j                   j                         S r   )r   	__enter__r   s    r   r0  zObjectProxy.__enter__}  s    ))++r   c                 :     | j                   j                  |i |S r   )r   __exit__r   r   kwargss      r   r2  zObjectProxy.__exit__  s     (t(($9&99r   c                 6    | j                   j                         S r   )r   
__aenter__r   s    r   r6  zObjectProxy.__aenter__  s    **,,r   c                 :     | j                   j                  |i |S r   )r   	__aexit__r3  s      r   r8  zObjectProxy.__aexit__  s     )t))4:6::r   c                     t        d      )Nz#object proxy must define __copy__()NotImplementedErrorr   s    r   __copy__zObjectProxy.__copy__  s    !"GHHr   c                     t        d      )Nz'object proxy must define __deepcopy__()r:  )r   memos     r   __deepcopy__zObjectProxy.__deepcopy__  s    !"KLLr   c                     t        d      )Nz%object proxy must define __reduce__()r:  r   s    r   
__reduce__zObjectProxy.__reduce__  s    !"IJJr   c                 .    t        || j                        S r   )r   r   )r   instances     r   __instancecheck__zObjectProxy.__instancecheck__  s    (D$4$455r   c                     t        |d      r t        |j                  | j                        S t        || j                        S )Nr   )r   
issubclassr   )r   subclasss     r   __subclasscheck__zObjectProxy.__subclasscheck__  s8    8]+h22D4D4DEEh(8(899r   r   )`r   r   r   r	   classmethodtypesGenericAlias__class_getitem__rY   r    r[   r]   r!   rc   rg   rk   rn   ru   ry   r|   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r  r!  r$  r&  r*  r,  r.  r0  r2  r6  r8  r<  r?  rA  rD  rH  r
   r   r   rI   rI      s@    $E$6$671f  . ) ) __* * * * + +%%'@5*0#()))()&&93v$/L,>(((9)(/3))((((((9)(/3))(((CCCCDCBDDCCC!!%!%')0((C%)%&",:-;IMK6:r   rI   )	metaclassc                       e Zd ZdZd Zy)CallableObjectProxyz>An object proxy for callable objects that also forwards calls.c                  <    d } ||  \  }}  |j                   | i |S )Nc                 
    | |fS r   r
   r   r   s     r   _unpack_selfz2CallableObjectProxy.__call__.<locals>._unpack_self      :r   r   )r   r4  rS  r   s       r   __call__zCallableObjectProxy.__call__  s/    	 "4(
dt000r   N)r   r   r   r	   rU  r
   r   r   rO  rO    s
    H1r   rO  c                   (     e Zd ZdZ fdZd Z xZS )PartialCallableObjectProxyz]A callable object proxy that supports partial application of arguments
    and keywords.
    c                      d } ||  \  }} t        |       dk  rt        d      | d   | dd } }t        |      st        d      t        t        |  |       | |_        ||_        y)a  Create a callable object proxy with partial application of the given
        arguments and keywords. This behaves the same as `functools.partial`, but
        implemented using the `ObjectProxy` class to provide better support for
        introspection.
        c                 
    | |fS r   r
   rR  s     r   rS  z9PartialCallableObjectProxy.__init__.<locals>._unpack_self  rT  r      z(partial type takes at least one argumentr   Nz#the first argument must be callable)r#  r   callablesuperrW  rY   
_self_args_self_kwargs)r   r4  rS  r   rW   rc   s        r   rY   z#PartialCallableObjectProxy.__init__  sw    	 "4(
dt9q=FGGQab ABB
 	($8A"r   c                      d } ||  \  }} |j                   | z   }t        |j                        }|j                  |        |j                  |i |S )Nc                 
    | |fS r   r
   rR  s     r   rS  z9PartialCallableObjectProxy.__call__.<locals>._unpack_self  rT  r   )r]  dictr^  r<   r   )r   r4  rS  r   _args_kwargss         r   rU  z#PartialCallableObjectProxy.__call__  sY    	 "4(
d$&t(()vt2'22r   )r   r   r   r	   rY   rU  __classcell__rc   s   @r   rW  rW    s    #83r   rW  c                   :     e Zd Z	 	 	 	 d fd	Zd Zd Zd Z xZS )_FunctionWrapperBasec                 @   t         t        |   |       t        j	                  | d|       t        j	                  | d|       t        j	                  | d|       t        j	                  | d|       t        j	                  | d|       t        j	                  | d|       y )N_self_instance_self_wrapper_self_enabled_self_binding_self_parent_self_owner)r\  rg  rY   rR   r4   )	r   rW   rC  wrapperenabledbindingparentownerrc   s	           r   rY   z_FunctionWrapperBase.__init__  s     	"D27;4!18<4':4':4':4846r   c           	      &   | j                   {| j                  dk(  r| S | j                  dk(  r| S t        | j                  dd       }|| S  |||      }| j	                  ||| j
                  | j                  | j                  | |      S | j                  }| j                  dv ro| j                   j                  j                  ||      }| j                   j	                  ||| j
                  | j                  | j                  | j                   |      S | S )Nbuiltinclassr&   )functioninstancemethodr[  )	rm  rl  r   r   __bound_function_wrapper__rj  rk  ri  r&   )r   rC  rs  binder
descriptors        r   r&   z_FunctionWrapperBase.__get__  s*   * $ !!Y.!!W,T--y$?F~%0J22"""""" $ &4+=+= B
 ,

 **66>>xOJ$$??""""""!!  r   c                     d } ||  \  }} |j                   Ut        |j                         r"|j                         s0 |j                  | i |S |j                   s |j                  | i |S |j                  dv rC|j                  7t        |j                  dd       }||j                  |j                  || |      S |j                  |j                  |j                  | |      S )Nc                 
    | |fS r   r
   rR  s     r   rS  z3_FunctionWrapperBase.__call__.<locals>._unpack_self<  rT  r   )rw  rx  rI  r[  __self__)rk  r[  r   rl  ri  r   rj  )r   r4  rS  r   rC  s        r   rU  z_FunctionWrapperBase.__call__;  s    	 "4(
d )**+))++4++T<V<<'''t''888  "
 
 ""*"4#3#3ZF'--d.>.>$PVWW !!$"2"2D4G4GvVVr   c                 j    t        | j                  d      r| j                  j                  ||       y y )N__set_name__)r   r   r  )r   rs  rA   s      r   r  z!_FunctionWrapperBase.__set_name__e  s/     4##^4))%6 5r   )Nr[  NN)r   r   r   rY   r&   rU  r  rd  re  s   @r   rg  rg    s)     7.IV(WT7r   rg  )ri  rj  rk  rl  rm  rn  c                   2     e Zd ZdZ fdZ fdZd Z xZS )BoundFunctionWrapperz=A wrapper for bound methods, classmethods, and staticmethods.c                     |j                  d      r6|t        vr.| j                  "t        j	                  | j                  ||       y t
        |   ||       y )Nr   )r   _FUNCTION_WRAPPER_SLOTSrm  rR   r4   r\  )r   rA   r   rc   s      r   r4   z BoundFunctionWrapper.__setattr__  sM    ??8$5L)L  ,""4#4#4dEBD%(r   c                     | j                   	 t        | j                   |      S t        |   |      S # t        $ r Y w xY wr   )rm  r   rT   r\  r   )r   rA   rc   s     r   r   z BoundFunctionWrapper.__getattr__  sM    (t00$77 w"4(( " s   4 	A A c                     d } ||  \  }} |j                   Ut        |j                         r"|j                         s0 |j                  | i |S |j                   s |j                  | i |S |j                  dk(  r|j                  L| rJ| d   | dd  }}t        ||j                        r*t        |j                  |      }|j                  ||||      S |j                  |j                  |j                  | |      S |j                  dk(  r|j                  L| rJ| d   | dd  }}t        ||j                        r*t        |j                  |      }|j                  ||||      S |j                  |j                  |j                  | |      S t        |j                  dd       }|j                  |j                  || |      S )Nc                 
    | |fS r   r
   rR  s     r   rS  z3BoundFunctionWrapper.__call__.<locals>._unpack_self  rT  r   rw  r   rZ  r[  r~  )
rk  r[  r   rl  ri  r   rn  rW  rj  r   )r   r4  rS  r   rC  newargsrW   s          r   rU  zBoundFunctionWrapper.__call__  s   	 "4(
d )**+))++4++T<V<<'''t''888
 +""*t$(GT!"X'h(8(8989I9I8TG--gx&QQ%%  $"5"5tV  :-""*t %)GT!"X'h(8(8989I9I8TG--gx&QQ%%  $"5"5tV $ t//TBH%%d&6&6$OOr   )r   r   r   r	   r4   r   rU  rd  re  s   @r   r  r  |  s    G))CPr   r  c                   (     e Zd ZdZeZd fd	Z xZS )FunctionWrappera  
    A wrapper for callable objects that can be used to apply decorators to
    functions, methods, classmethods, and staticmethods, or any other callable.
    It handles binding and unbinding of methods, and allows for the wrapper to
    be enabled or disabled.
    c                    d}t        |t              r|j                  }|st        j                  |      rd}nt        j
                  |      rd}nt        j                  |      rd}nqt        |t              rd}n^t        |t              rd}nKt        |d      r=t        j                  |j                        rd}nt        j                  |      rd}nd	}nd	}t        t        | ;  |d|||       y)
a  
        Initialize the `FunctionWrapper` with the `wrapped` callable, the
        `wrapper` function, and an optional `enabled` argument. The `enabled`
        argument can be a boolean or a callable that returns a boolean. When a
        callable is provided, it will be called each time the wrapper is
        invoked to determine if the wrapper function should be executed or
        whether the wrapped function should be called directly. If `enabled`
        is not provided, the wrapper is enabled by default.
        Nru  rw  rv  rI  staticmethodr~  rx  r[  )r   rg  rl  inspect	isbuiltin
isfunctionisclassrI  r  r   r~  ismethodr\  r  rY   )r   rW   ro  rp  rq  rc   s        r   rY   zFunctionWrapper.__init__  s    f g34++G  )###G,$)!G[1'G\2(*-??7#3#34+G%%g..G(G %
 	ot-gtWgwWr   r   )r   r   r   r	   r  ry  rY   rd  re  s   @r   r  r    s     "6vX vXr   r  )r	   r  r   rU   rJ  
ValueErrorr   r   r#   r3   r   r&   r%   r'   r    r?   r)   rI   rO  rW  rg  	frozensetr  r  r  r
   r   r   <module>r     s    =   
 	 	0, 0,f	 	 j199:NO 
/ ~. ?4 ?Dv:&2F v:r	1+ 	1,3 ,3^V7; V7r $	 UP/ UPp@X* @Xr   