U
    b                      @   sN  d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZej	d  dkZ
e dkZej	dd dkZeZej	dd dkZesereZnd dlmZ eZe
rd dlmZmZ d d	lmZ d
d Zdd ZdZdd ZG dd deZdd Zdd Zn:d dlmZmZ dd Zdd ZdZdd ZejZdd Zdd Z e  Z!e" Z#dS )    )absolute_importdivisionprint_functionN   PyPy)      )r   
   )OrderedDict)MappingSequence)IterableUserDictc                 C   s   t | ttjfS N)
isinstancetypetypesZ	ClassTypeklass r   0/tmp/pip-unpacked-wheel-9rkxrohn/attr/_compat.pyisclass"   s    r   c                 C   s   i }|| t | ||S )zP
        A minimal stub of types.new_class that we need for make_class.
        )r   )namebaseskwds	exec_bodynsr   r   r   	new_class%   s    r   r   c                 C   s   |   S r   )	iteritemsdr   r   r   r   1   s    r   c                   @   sT   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	dddZ
dd Zd
S )ReadOnlyDictz5
        Best-effort read-only dict wrapper.
        c                 C   s   t dd S )Nz6'mappingproxy' object does not support item assignment	TypeError)selfkeyvalr   r   r   __setitem__:   s    zReadOnlyDict.__setitem__c                 C   s   t dd S )Nz/'mappingproxy' object has no attribute 'update'AttributeErrorr#   _r   r   r   update@   s    zReadOnlyDict.updatec                 C   s   t dd S )Nz4'mappingproxy' object does not support item deletionr!   r)   r   r   r   __delitem__F   s    zReadOnlyDict.__delitem__c                 C   s   t dd S )Nz.'mappingproxy' object has no attribute 'clear'r'   r#   r   r   r   clearL   s    zReadOnlyDict.clearNc                 C   s   t dd S )Nz,'mappingproxy' object has no attribute 'pop'r'   r#   r$   defaultr   r   r   popR   s    zReadOnlyDict.popc                 C   s   t dd S )Nz0'mappingproxy' object has no attribute 'popitem'r'   r-   r   r   r   popitemX   s    zReadOnlyDict.popitemc                 C   s   t dd S )Nz3'mappingproxy' object has no attribute 'setdefault'r'   r/   r   r   r   
setdefault^   s    zReadOnlyDict.setdefaultc                 C   s   dt | j d S )Nzmappingproxy())reprdatar-   r   r   r   __repr__d   s    zReadOnlyDict.__repr__)N)N)__name__
__module____qualname____doc__r&   r+   r,   r.   r1   r2   r3   r7   r   r   r   r   r    5   s   

r    c                 C   s   t  }|j|  |S r   )r    r6   r+   )r   resr   r   r   metadata_proxyh   s    r=   c                  O   s   dS )
        We only warn on Python 3 because we are not aware of any concrete
        consequences of not setting the cell on Python 2.
        Nr   argskwr   r   r   	just_warnm   s    rB   c                  O   s   t jdtdd dS )r>   zRunning interpreter doesn't sufficiently support code object introspection.  Some features like bare super() or accessing __class__ will not work with slotted classes.r   )
stacklevelN)warningswarnRuntimeWarningr?   r   r   r   rB   v   s
    c                 C   s
   t | tS r   )r   r   r   r   r   r   r      s    classc                 C   s   |   S r   )itemsr   r   r   r   r      s    c                 C   s   t t| S r   )r   MappingProxyTypedictr   r   r   r   r=      s    c                     s4  t rdd } | S dd }ztr&|j}n|j}|jdks@|jdkrDttjdkrb|j	|j|jd n`|j
g}tsz||j ||j|j|j|j|j|j|j|j|j|j|j|j|jg tj|   fd	d} d
d }tr| jd }n| jd }| |d |jdkrtW n tk
r*   t Y S X | S dS )z|Return a function of two arguments (cell, value) which sets
    the value stored in the closure cell `cell` to `value`.
    c                 S   s   |  |f d S r   )__setstate__)cellvaluer   r   r   set_closure_cell   s    z/make_set_closure_cell.<locals>.set_closure_cellc                    s   |  d S )Nc                      s    S r   r   r   xr   r   force_x_to_be_a_cell   s    zQmake_set_closure_cell.<locals>.set_first_cellvar_to.<locals>.force_x_to_be_a_cellr   )rM   rQ   r   rO   r   set_first_cellvar_to   s    z3make_set_closure_cell.<locals>.set_first_cellvar_torO   r   )r      )co_cellvarsco_freevarsc                    s    t  i dd| f}|| d S )Nsetterr   )r   FunctionType)rL   rM   rV   Zset_first_freevar_coder   r   rN      s        c                     s   d   fdd} | S )Nc                      s    S r   r   r   rO   r   r   func   s    z@make_set_closure_cell.<locals>.make_func_with_cell.<locals>.funcr   )rY   r   rO   r   make_func_with_cell   s    z2make_set_closure_cell.<locals>.make_func_with_cellr   d   N) PYPYPY2	func_code__code__rT   rU   AssertionErrorsysversion_inforeplaceco_argcountappendco_kwonlyargcountextend
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_filenameco_nameco_firstlineno	co_lnotabr   CodeTypeZfunc_closure__closure__cell_contents	ExceptionrB   )rN   rR   cor@   rZ   rL   r   rX   r   make_set_closure_cell   s\    

 


rx   )$
__future__r   r   r   platformra   	threadingr   rD   rb   r]   python_implementationr\   ZPY36ZHAS_F_STRINGSZPY310rJ   Zordered_dictcollectionsr
   r   r   UserDictr   r   r   ZTYPEr   r    r=   rB   collections.abcrx   rN   localZrepr_contextr   r   r   r   <module>   sD   
3
f