B
    	YK,                 @   sp   d dl Z ddlmZ ddlmZ ddlmZ ddlmZ G dd deZG d	d
 d
e	Z
G dd dee
ZdS )    N   )PY2)PY3)with_metaclass)identityc               @   sX   e Zd Zedd Zejdd Zedd Zejdd Zedd Zed	d
 ZdS )_ProxyMethodsc             C   s   | j jS )N)__wrapped__
__module__)self r   6lib/python3.7/site-packages/lazy_object_proxy/slots.pyr	      s    z_ProxyMethods.__module__c             C   s   || j _d S )N)r   r	   )r
   valuer   r   r   r	      s    c             C   s   | j jS )N)r   __doc__)r
   r   r   r   r      s    z_ProxyMethods.__doc__c             C   s   || j _d S )N)r   r   )r
   r   r   r   r   r      s    c             C   s   | j jS )N)r   __dict__)r
   r   r   r   r   &   s    z_ProxyMethods.__dict__c             C   s   | j jS )N)r   __weakref__)r
   r   r   r   r   /   s    z_ProxyMethods.__weakref__N)__name__r	   __qualname__propertysetterr   r   r   r   r   r   r   r   	   s   
	r   c               @   s   e Zd Zdd ZdS )_ProxyMetaTypec             C   s   | tt t| |||S )N)updatevarsr   type__new__)clsnamebasesZ
dictionaryr   r   r   r   5   s    z_ProxyMetaType.__new__N)r   r	   r   r   r   r   r   r   r   4   s   r   c               @   sd  e Zd ZdZdZdd Zeejej	ej
fddZejej
fddZejej	fddZed	d
 Z e jdd
 Z edd Zejdd Zedd Zejdd Zdd Zdd Zerdd ZejfddZdd Zerdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zej	fd0d1Z	d2d3 Z ej
fd4d5Z
d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=dpdq Z>drds Z?dtdu Z@dvdw ZAdxdy ZBdzd{ ZCd|d} ZDd~d ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNeOrdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbdS )Proxya  
    A proxy implementation in pure Python, using slots. You can subclass this to add
    local methods or attributes, or enable __dict__.

    The most important internals:

    * ``__factory__`` is the callback that "materializes" the object we proxy to.
    * ``__target__`` will contain the object we proxy to, once it's "materialized".
    * ``__wrapped__`` is a property that does either:

      * return ``__target__`` if it's set.
      * calls ``__factory__``, saves result to ``__target__`` and returns said result.
    )
__target____factory__c             C   s   t | d| d S )Nr   )object__setattr__)r
   factoryr   r   r   __init__Q   s    zProxy.__init__c             C   sb   y
|| dS  t k
r\   y|| d}W n t k
rD   tdY nX | }|| d| |S X d S )Nr   r   z4Proxy hasn't been initiated: __factory__ is missing.)AttributeError
ValueError)r
   __getattr__r!   __delattr__r"   targetr   r   r   r   T   s    
zProxy.__wrapped__c             C   s   || d d S )Nr   r   )r
   r'   r   r   r   r   b   s    c             C   s   || d| d S )Nr   r   )r
   r(   r!   r   r   r   r   f   s    c             C   s   | j jS )N)r   r   )r
   r   r   r   r   j   s    zProxy.__name__c             C   s   || j _d S )N)r   r   )r
   r   r   r   r   r   n   s    c             C   s   | j jS )N)r   	__class__)r
   r   r   r   r)   r   s    zProxy.__class__c             C   s   || j _d S )N)r   r)   )r
   r   r   r   r   r)   v   s    c             C   s   | j jS )N)r   Z__anotations__)r
   r   r   r   __annotations__z   s    zProxy.__annotations__c             C   s   || j _d S )N)r   r*   )r
   r   r   r   r   r*   ~   s    c             C   s
   t | jS )N)dirr   )r
   r   r   r   __dir__   s    zProxy.__dir__c             C   s
   t | jS )N)strr   )r
   r   r   r   __str__   s    zProxy.__str__c             C   s
   t | jS )N)bytesr   )r
   r   r   r   	__bytes__   s    zProxy.__bytes__c             C   s`   y|| d}W n* t k
r8   dt| jt| | jf S X dt| jt| |t|| jf S d S )Nr   z<%s at 0x%x with factory %r>z0<%s at 0x%x wrapping %r at 0x%x with factory %r>)r$   r   r   idr   )r
   r&   r(   r   r   r   __repr__   s    zProxy.__repr__c             C   s
   t | jS )N)reversedr   )r
   r   r   r   __reversed__   s    zProxy.__reversed__c             C   s
   t | jS )N)roundr   )r
   r   r   r   	__round__   s    zProxy.__round__c             C   s
   | j |k S )N)r   )r
   otherr   r   r   __lt__   s    zProxy.__lt__c             C   s
   | j |kS )N)r   )r
   r7   r   r   r   __le__   s    zProxy.__le__c             C   s
   | j |kS )N)r   )r
   r7   r   r   r   __eq__   s    zProxy.__eq__c             C   s
   | j |kS )N)r   )r
   r7   r   r   r   __ne__   s    zProxy.__ne__c             C   s
   | j |kS )N)r   )r
   r7   r   r   r   __gt__   s    zProxy.__gt__c             C   s
   | j |kS )N)r   )r
   r7   r   r   r   __ge__   s    zProxy.__ge__c             C   s
   t | jS )N)hashr   )r
   r   r   r   __hash__   s    zProxy.__hash__c             C   s
   t | jS )N)boolr   )r
   r   r   r   __nonzero__   s    zProxy.__nonzero__c             C   s
   t | jS )N)r@   r   )r
   r   r   r   __bool__   s    zProxy.__bool__c             C   s.   t t| |r|| || nt| j|| d S )N)hasattrr   setattrr   )r
   r   r   r!   r   r   r   r!      s    zProxy.__setattr__c             C   s"   |dkrt |nt| j|S d S )N)r   r   )r$   getattrr   )r
   r   r   r   r   r&      s    
zProxy.__getattr__c             C   s*   t t| |r|| | nt| j| d S )N)rC   r   delattrr   )r
   r   r'   r   r   r   r'      s    zProxy.__delattr__c             C   s
   | j | S )N)r   )r
   r7   r   r   r   __add__   s    zProxy.__add__c             C   s
   | j | S )N)r   )r
   r7   r   r   r   __sub__   s    zProxy.__sub__c             C   s
   | j | S )N)r   )r
   r7   r   r   r   __mul__   s    zProxy.__mul__c             C   s   t | j|S )N)operatordivr   )r
   r7   r   r   r   __div__   s    zProxy.__div__c             C   s   t | j|S )N)rJ   truedivr   )r
   r7   r   r   r   __truediv__   s    zProxy.__truediv__c             C   s
   | j | S )N)r   )r
   r7   r   r   r   __floordiv__   s    zProxy.__floordiv__c             C   s
   | j |A S )N)r   )r
   r7   r   r   r   __mod__   s    zProxy.__mod__c             C   s   t | j|S )N)divmodr   )r
   r7   r   r   r   
__divmod__   s    zProxy.__divmod__c             G   s   t | j|f| S )N)powr   )r
   r7   argsr   r   r   __pow__   s    zProxy.__pow__c             C   s
   | j |> S )N)r   )r
   r7   r   r   r   
__lshift__   s    zProxy.__lshift__c             C   s
   | j |? S )N)r   )r
   r7   r   r   r   
__rshift__   s    zProxy.__rshift__c             C   s
   | j |@ S )N)r   )r
   r7   r   r   r   __and__   s    zProxy.__and__c             C   s
   | j |A S )N)r   )r
   r7   r   r   r   __xor__   s    zProxy.__xor__c             C   s
   | j |B S )N)r   )r
   r7   r   r   r   __or__   s    zProxy.__or__c             C   s
   || j  S )N)r   )r
   r7   r   r   r   __radd__   s    zProxy.__radd__c             C   s
   || j  S )N)r   )r
   r7   r   r   r   __rsub__   s    zProxy.__rsub__c             C   s
   || j  S )N)r   )r
   r7   r   r   r   __rmul__   s    zProxy.__rmul__c             C   s   t || jS )N)rJ   rK   r   )r
   r7   r   r   r   __rdiv__  s    zProxy.__rdiv__c             C   s   t || jS )N)rJ   rM   r   )r
   r7   r   r   r   __rtruediv__  s    zProxy.__rtruediv__c             C   s
   || j  S )N)r   )r
   r7   r   r   r   __rfloordiv__  s    zProxy.__rfloordiv__c             C   s
   || j  S )N)r   )r
   r7   r   r   r   __rmod__  s    zProxy.__rmod__c             C   s   t || jS )N)rQ   r   )r
   r7   r   r   r   __rdivmod__  s    zProxy.__rdivmod__c             G   s   t || jf| S )N)rS   r   )r
   r7   rT   r   r   r   __rpow__  s    zProxy.__rpow__c             C   s
   || j > S )N)r   )r
   r7   r   r   r   __rlshift__  s    zProxy.__rlshift__c             C   s
   || j ? S )N)r   )r
   r7   r   r   r   __rrshift__  s    zProxy.__rrshift__c             C   s
   || j @ S )N)r   )r
   r7   r   r   r   __rand__  s    zProxy.__rand__c             C   s
   || j A S )N)r   )r
   r7   r   r   r   __rxor__  s    zProxy.__rxor__c             C   s
   || j B S )N)r   )r
   r7   r   r   r   __ror__   s    zProxy.__ror__c             C   s   |  j |7  _ | S )N)r   )r
   r7   r   r   r   __iadd__#  s    zProxy.__iadd__c             C   s   |  j |8  _ | S )N)r   )r
   r7   r   r   r   __isub__'  s    zProxy.__isub__c             C   s   |  j |9  _ | S )N)r   )r
   r7   r   r   r   __imul__+  s    zProxy.__imul__c             C   s   t | j|| _| S )N)rJ   Zidivr   )r
   r7   r   r   r   __idiv__/  s    zProxy.__idiv__c             C   s   t | j|| _| S )N)rJ   itruedivr   )r
   r7   r   r   r   __itruediv__3  s    zProxy.__itruediv__c             C   s   |  j |  _ | S )N)r   )r
   r7   r   r   r   __ifloordiv__7  s    zProxy.__ifloordiv__c             C   s   |  j |;  _ | S )N)r   )r
   r7   r   r   r   __imod__;  s    zProxy.__imod__c             C   s   |  j |C  _ | S )N)r   )r
   r7   r   r   r   __ipow__?  s    zProxy.__ipow__c             C   s   |  j |K  _ | S )N)r   )r
   r7   r   r   r   __ilshift__C  s    zProxy.__ilshift__c             C   s   |  j |L  _ | S )N)r   )r
   r7   r   r   r   __irshift__G  s    zProxy.__irshift__c             C   s   |  j |M  _ | S )N)r   )r
   r7   r   r   r   __iand__K  s    zProxy.__iand__c             C   s   |  j |N  _ | S )N)r   )r
   r7   r   r   r   __ixor__O  s    zProxy.__ixor__c             C   s   |  j |O  _ | S )N)r   )r
   r7   r   r   r   __ior__S  s    zProxy.__ior__c             C   s   | j  S )N)r   )r
   r   r   r   __neg__W  s    zProxy.__neg__c             C   s   | j 
 S )N)r   )r
   r   r   r   __pos__Z  s    zProxy.__pos__c             C   s
   t | jS )N)absr   )r
   r   r   r   __abs__]  s    zProxy.__abs__c             C   s   | j  S )N)r   )r
   r   r   r   
__invert__`  s    zProxy.__invert__c             C   s
   t | jS )N)intr   )r
   r   r   r   __int__c  s    zProxy.__int__c             C   s
   t | jS )N)Zlongr   )r
   r   r   r   __long__g  s    zProxy.__long__c             C   s
   t | jS )N)floatr   )r
   r   r   r   	__float__j  s    zProxy.__float__c             C   s
   t | jS )N)octr   )r
   r   r   r   __oct__m  s    zProxy.__oct__c             C   s
   t | jS )N)hexr   )r
   r   r   r   __hex__p  s    zProxy.__hex__c             C   s   t | jS )N)rJ   indexr   )r
   r   r   r   	__index__s  s    zProxy.__index__c             C   s
   t | jS )N)lenr   )r
   r   r   r   __len__v  s    zProxy.__len__c             C   s
   || j kS )N)r   )r
   r   r   r   r   __contains__y  s    zProxy.__contains__c             C   s
   | j | S )N)r   )r
   keyr   r   r   __getitem__|  s    zProxy.__getitem__c             C   s   || j |< d S )N)r   )r
   r   r   r   r   r   __setitem__  s    zProxy.__setitem__c             C   s   | j |= d S )N)r   )r
   r   r   r   r   __delitem__  s    zProxy.__delitem__c             C   s   | j || S )N)r   )r
   ijr   r   r   __getslice__  s    zProxy.__getslice__c             C   s   || j ||< d S )N)r   )r
   r   r   r   r   r   r   __setslice__  s    zProxy.__setslice__c             C   s   | j ||= d S )N)r   )r
   r   r   r   r   r   __delslice__  s    zProxy.__delslice__c             C   s
   | j  S )N)r   	__enter__)r
   r   r   r   r     s    zProxy.__enter__c             O   s   | j j||S )N)r   __exit__)r
   rT   kwargsr   r   r   r     s    zProxy.__exit__c             C   s
   t | jS )N)iterr   )r
   r   r   r   __iter__  s    zProxy.__iter__c             O   s   | j ||S )N)r   )r
   rT   r   r   r   r   __call__  s    zProxy.__call__c             C   s   t | jffS )N)r   r   )r
   r   r   r   
__reduce__  s    zProxy.__reduce__c             C   s   t | jffS )N)r   r   )r
   Zprotocolr   r   r   __reduce_ex__  s    zProxy.__reduce_ex__N)cr   r	   r   r   	__slots__r#   r   r    __getattribute__r!   r'   r   deleterr   r)   r*   r,   r.   r   r0   r2   r4   r6   r8   r9   r:   r;   r<   r=   r?   rA   rB   r&   rG   rH   rI   rL   rN   rO   rP   rR   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   rz   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   @   s   r   )rJ   compatr   r   r   Zutilsr   r    r   r   r   r   r   r   r   r   <module>   s   +