
    wijc                     t   d Z ddl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__     c/var/www/html/emotional.easysim.app/public_html/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__2   s    #( r   c                 .    | j                   j                  S r   )r   __dict__r   s    r   r   z_ObjectProxyMethods.__dict__9       (((r   c                 .    | j                   j                  S r   )r   __weakref__r   s    r   r   z_ObjectProxyMethods.__weakref__B   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#   G   s    - 	r   r#   r   c                 ,    t         j                  |       S r   )_REAL_DICT_DESCRIPTOR__get__r   s    r   _get_self_dictr'   W   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__k   s    || 2J??r   c                 2    t         j                  | d|       y )Nr+   type__setattr__r0   r   s     r   r   z_ObjectProxyMetaType.__module__o   s    0%8r   c                 8    | j                   j                  d      S N_cls_real_docr-   r/   s    r   r	   z_ObjectProxyMetaType.__doc__s   s    ||00r   c                 2    t         j                  | d|       y r7   r2   r5   s     r   r	   z_ObjectProxyMetaType.__doc__w   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__{   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)   b   sc     @ @ 9 9 1 1 ^^6 6&r   r)   c                      e Zd ZdZed        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- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQdQ ZRdR ZSdS ZTdT ZUdU ZVdV ZWdW ZXdX ZYdY ZZdZ Z[d[ Z\d\ Z]d] Z^d^ Z_d_ Z`y)aObjectProxyzSA transparent object proxy that delegates attribute access to a
    wrapped object.c                .    t        j                  | |      S r   )typesGenericAlias)r0   items     r   __class_getitem__zObjectProxy.__class_getitem__   s    !!#t,,r   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_inforU   rV   )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   )rW   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   rd   r   s     r   r   zObjectProxy.__name__   s    $)!r   c                 .    | j                   j                  S r   r   	__class__r   s    r   rh   zObjectProxy.__class__   s    )))r   c                 &    || j                   _        y r   rg   r   s     r   rh   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__   rm   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                  | j                        S r   )mathtruncr   r   s    r   	__trunc__zObjectProxy.__trunc__      zz$**++r   c                 @    t        j                  | j                        S r   )r   floorr   r   s    r   	__floor__zObjectProxy.__floor__  r   r   c                 @    t        j                  | j                        S r   )r   ceilr   r   s    r   __ceil__zObjectProxy.__ceil__  s    yy))**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__0  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   rR   rU   rV   __wrapped_setattr_fixups__)
startswithrW   r4   __delattr__rY   r   rZ   r[   rU   rV   getattrsetattrr   r   r3   )r   rA   r   r   s       r   r4   zObjectProxy.__setattr__3  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   rP   __wrapped_get__rQ   'z'' object has no attribute '__wrapped__'z;wrapper is in an inconsistent state: __wrapped__ is not set)rW   rX   rY   r3   r   r   r   r   r   rA   s     r   __getattr__zObjectProxy.__getattr__n  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   rV   rU   )	r   rW   r   	TypeErrordelattrr   rY   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__2  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__9  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__@  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__G  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__N  sD    4##Y/%K(()9)9E)ABBr   c                     | j                    S r   r   r   s    r   __neg__zObjectProxy.__neg__U          r   c                     | j                   S r   r   r   s    r   __pos__zObjectProxy.__pos__X  r  r   c                 ,    t        | j                        S r   )absr   r   s    r   __abs__zObjectProxy.__abs__[  rm   r   c                     | j                    S r   r   r   s    r   
__invert__zObjectProxy.__invert__^  r  r   c                 ,    t        | j                        S r   )intr   r   s    r   __int__zObjectProxy.__int__a  rm   r   c                 ,    t        | j                        S r   )floatr   r   s    r   	__float__zObjectProxy.__float__d  rt   r   c                 ,    t        | j                        S r   )complexr   r   s    r   __complex__zObjectProxy.__complex__g  s    t''((r   c                 @    t        j                  | j                        S r   )r   indexr   r   s    r   	__index__zObjectProxy.__index__j  s    ~~d..//r   c                      | j                   |z  S r   r   r   s     r   
__matmul__zObjectProxy.__matmul__m  r   r   c                      || j                   z  S r   r   r   s     r   __rmatmul__zObjectProxy.__rmatmul__p  r   r   c                     t        | j                  d      r| xj                  |z  c_        | S | j                  | j                  |z        S )N__imatmul__r   r   s     r   r1  zObjectProxy.__imatmul__s  sD    4##]3%K(()9)9E)ABBr   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zObjectProxy.__len__z  rm   r   c                     || j                   v S r   r   r   s     r   __contains__zObjectProxy.__contains__}  s    ((((r   c                      | j                   |   S r   r   r   keys     r   __getitem__zObjectProxy.__getitem__  s    $$r   c                 "    || j                   |<   y r   r   )r   r9  r   s      r   __setitem__zObjectProxy.__setitem__  s     %r   c                     | j                   |= y r   r   r8  s     r   __delitem__zObjectProxy.__delitem__  s    S!r   c                 6    | j                   j                         S r   )r   	__enter__r   s    r   r@  zObjectProxy.__enter__  s    ))++r   c                 :     | j                   j                  |i |S r   )r   __exit__r   r   kwargss      r   rB  zObjectProxy.__exit__  s     (t(($9&99r   c                 6    | j                   j                         S r   )r   
__aenter__r   s    r   rF  zObjectProxy.__aenter__  s    **,,r   c                 :     | j                   j                  |i |S r   )r   	__aexit__rC  s      r   rH  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__()rJ  )r   memos     r   __deepcopy__zObjectProxy.__deepcopy__  s    !"KLLr   c                     t        d      )Nz%object proxy must define __reduce__()rJ  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   )ar   r   r   r	   classmethodrN   r^   r    r`   rb   r!   rh   rl   rp   rs   rz   r~   r   r   r   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/  r1  r4  r6  r:  r<  r>  r@  rB  rF  rH  rL  rO  rQ  rT  rX  r
   r   r   rI   rI      sP    - -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   rD  r`  r   s       r   __call__zCallableObjectProxy.__call__  s/    	 "4(
dt000r   N)r   r   r   r	   rb  r
   r   r   r\  r\    s
    H1r   r\  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
   r_  s     r   r`  z9PartialCallableObjectProxy.__init__.<locals>._unpack_self  ra  r      z(partial type takes at least one argumentr   Nz#the first argument must be callable)r3  r   callablesuperrd  r^   
_self_args_self_kwargs)r   rD  r`  r   r\   rh   s        r   r^   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
   r_  s     r   r`  z9PartialCallableObjectProxy.__call__.<locals>._unpack_self  ra  r   )rj  dictrk  r<   r   )r   rD  r`  r   _args_kwargss         r   rb  z#PartialCallableObjectProxy.__call__  sY    	 "4(
d$&t(()vt2'22r   )r   r   r   r	   r^   rb  __classcell__rh   s   @r   rd  rd    s    #83r   rd  c                   <     e Zd Z	 	 	 	 d fd	Zd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)ri  rt  r^   rW   r4   )	r   r\   rS  wrapperenabledbindingparentownerrh   s	           r   r^   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instancemethodrh  )	rz  ry  r   r   __bound_function_wrapper__rw  rx  rv  r&   )r   rS  r  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
   r_  s     r   r`  z3_FunctionWrapperBase.__call__.<locals>._unpack_selfH  ra  r   )r  r  rY  rh  __self__)rx  rh  r   ry  rv  r   rw  )r   rD  r`  r   rS  s        r   rb  z_FunctionWrapperBase.__call__G  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   r  rA   s      r   r  z!_FunctionWrapperBase.__set_name__q  s/     4##^4))%6 5r   )Nrh  NNr   )r   r   r   r^   r&   rb  r  rq  rr  s   @r   rt  rt    s)     7.IV(WT7r   rt  )rv  rw  rx  ry  rz  r{  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_SLOTSrz  rW   r4   ri  )r   rA   r   rh   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   )rz  r   rY   ri  r   )r   rA   rh   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
   r_  s     r   r`  z3BoundFunctionWrapper.__call__.<locals>._unpack_self  ra  r   r  r   rg  rh  r  )
rx  rh  r   ry  rv  r   r{  rd  rw  r   )r   rD  r`  r   rS  newargsr\   s          r   rb  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   rb  rq  rr  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.
        Nr  r  r  rY  staticmethodr  r  rh  )r   rt  ry  inspect	isbuiltin
isfunctionisclassrY  r  r   r  ismethodri  r  r^   )r   r\   r|  r}  r~  rh   s        r   r^   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  r  r^   rq  rr  s   @r   r  r    s     "6vX vXr   r  )r	   r  r   r   rZ   rK   
ValueErrorr   r   r#   r3   r   r&   r%   r'   r    r?   r)   rI   r\  rd  rt  	frozensetr  r  r  r
   r   r   <module>r     s    =    
 	 	0, 0,f	 	 j199:NO 
/ ~. ?4 ?DA:&2F A:H	1+ 	1,3 ,3^V7; V7r $	 UP/ UPp@X* @Xr   