B
    w2[                 @   s&  d dl Z d dlmZmZ yd dlmZ W n  ek
rH   d dlmZ Y nX dddddd	d
gZdd Z	dd Z
dd Zdd Ze ZG dd	 d	ZG dd deZdZG dd deZG dd dedZG dd deeZdd ZG dd deZG dd deeZdd Zd d
 Zd!d" Zd#d$ ZdS )%    N)MappingProxyTypeDynamicClassAttribute)OrderedDictEnumMetaEnumIntEnumFlagIntFlagautouniquec             C   s   t | dpt | dpt | dS )N__get____set__
__delete__)hasattr)obj r   /root/Python-3.7.0/Lib/enum.py_is_descriptor   s    

r   c             C   sT   | d d | dd    ko"dkn  oR| dd dkoR| dd dkoRt | dkS )N   Z__   _   )len)namer   r   r   
_is_dunder   s    (r   c             C   sL   | d | d   kodkn  oJ| dd dkoJ| dd dkoJt | dkS )Nr   r      r   r   )r   )r   r   r   r   
_is_sunder"   s     r   c             C   s   dd }|| _ d| _d S )Nc             S   s   t d|  d S )Nz%r cannot be pickled)	TypeError)selfprotor   r   r   _break_on_call_reduce+   s    z6_make_class_unpicklable.<locals>._break_on_call_reducez	<unknown>)__reduce_ex__
__module__)clsr#   r   r   r   _make_class_unpicklable)   s    r'   c               @   s   e Zd ZeZdS )r
   N)__name__r%   __qualname__
_auto_nullvaluer   r   r   r   r
   1   s   c                   s(   e Zd Z fddZ fddZ  ZS )	_EnumDictc                s    t    g | _g | _g | _d S )N)super__init___member_names_last_values_ignore)r!   )	__class__r   r   r.   ?   s    
z_EnumDict.__init__c                sP  t |r|dkrtd|dkr.t| d| nV|dkrt|trR|dd }nt|}|| _t	|t	| j
@ }|rtd|f nt|r|d	krd
}n|| j
krtd| n|| jkrn~t|s>|| krtd|| | f t|tr&|jtkr | |dt| j
| jd d  |_|j}| j
| | j| t || d S )N)_order__create_pseudo_member__generate_next_value_	_missing__ignore_z(_names_ are reserved for future Enum user5   _generate_next_valuer7   , z-_ignore_ cannot specify already set names: %rZ	__order__r3   zAttempted to reuse key: %rz%r already defined as: %rr   )r   
ValueErrorsetattr
isinstancestrreplacesplitlistr1   setr/   r   r    r   r
   r+   r*   r8   r   r0   appendr-   __setitem__)r!   keyr+   Zalready)r2   r   r   rD   E   s>    	



"z_EnumDict.__setitem__)r(   r%   r)   r.   rD   __classcell__r   r   )r2   r   r,   8   s   r,   c                   s   e Zd Zedd Z fddZdd Zd(ddddd	d
dZdd Z fddZ	dd Z
dd Zdd Zdd Zdd Zedd Zdd Zdd Z fd d!Zddddd	d"d#Zed$d% Zed&d' Z  ZS ))r   c             C   s0   t  }| |\}}|d k	r,t|dd |d< |S )Nr5   )r,   _get_mixins_getattr)metaclsr&   basesZ	enum_dictmember_type
first_enumr   r   r   __prepare__|   s
    zEnumMeta.__prepare__c          	      s     dg d  d }x|D ]} |d  q W | |\}|  |\}}}	 fdd jD }
x jD ]
} |= qrW  dd }t|
dh@ }|rtdd	|d krd	 d< t
 | || }g |_t |_|_d
d | D }i |_d kr8tk	r8d}tfdd|D s8t| x6 jD ]*}|
| }t|tsd|f}n|}tkrx|f}|	s||}t|ds||_n6||f| }t|dsЈtkr||_n
| |_|j}||_||_|j|  x8|j D ]\}}|j|jkr|}P qW |j| ||kr<t||| ||j|< y||j|< W n tk
rj   Y nX qBW xPdD ]H}t||}t|d }t||d }|d k	rx||krxt||| qxW t d k	r|r||_!t j|_|d k	rt|t"r|#dd$ }||jkrtd|S )Nr7   c                s   i | ]} | |qS r   r   ).0k)	classdictr   r   
<dictcomp>   s    z$EnumMeta.__new__.<locals>.<dictcomp>r3   mrozInvalid enum member name: {0}r9   __doc__zAn enumeration.c             S   s   h | ]}|j D ]}|qqS r   )__dict__)rN   bar   r   r   	<setcomp>   s    z#EnumMeta.__new__.<locals>.<setcomp>r$   )Z__getnewargs_ex____getnewargs__r$   
__reduce__c             3   s   | ]}| j kV  qd S )N)rT   )rN   m)rK   r   r   	<genexpr>   s    z#EnumMeta.__new__.<locals>.<genexpr>_value_)__repr____str__
__format__r$   r:   z#member order does not match _order_)%
setdefaultrC   poprG   
_find_new_r/   rB   r;   formatjoinr-   __new___member_names_r   _member_map__member_type_rR   _value2member_map_objectanyr'   r=   tupler   r\   _name___objclass__r.   itemsr<   r    rH   r   __new_member__r>   r?   r@   )rI   r&   rJ   rP   ignorerE   rL   re   save_newuse_argsZenum_membersr   r3   Zinvalid_names
enum_classZbase_attributesZmethodsmember_namer+   argsZenum_memberZcanonical_memberZclass_methodZ
obj_methodZenum_method)r2   )rP   rK   r   re      s    













zEnumMeta.__new__c             C   s   dS )NTr   )r!   r   r   r   __bool__  s    zEnumMeta.__bool__Nr   )modulequalnametypestartc            C   s*   |d kr|  | |S | j||||||dS )N)rx   ry   rz   r{   )re   _create_)r&   r+   namesrx   ry   rz   r{   r   r   r   __call__  s    zEnumMeta.__call__c             C   s6   t |ts dd l}|dtd t || o4|j| jkS )Nr   zHusing non-Enums in containment checks will raise TypeError in Python 3.8r   )r=   r   warningswarnDeprecationWarningrm   rg   )r&   memberr   r   r   r   __contains__7  s    
zEnumMeta.__contains__c                s(   || j krtd| j t | d S )Nz%s: cannot delete Enum member.)rg   AttributeErrorr(   r-   __delattr__)r&   Zattr)r2   r   r   r   @  s    
zEnumMeta.__delattr__c             C   s   ddddg| j  S )Nr2   rS   __members__r%   )rf   )r!   r   r   r   __dir__H  s    
zEnumMeta.__dir__c             C   s>   t |rt|y
| j| S  tk
r8   t|d Y nX d S )N)r   r   rg   KeyError)r&   r   r   r   r   __getattr__L  s    	
zEnumMeta.__getattr__c             C   s
   | j | S )N)rg   )r&   r   r   r   r   __getitem__\  s    zEnumMeta.__getitem__c                s    fdd j D S )Nc             3   s   | ]} j | V  qd S )N)rg   )rN   r   )r&   r   r   r[   `  s    z$EnumMeta.__iter__.<locals>.<genexpr>)rf   )r&   r   )r&   r   __iter___  s    zEnumMeta.__iter__c             C   s
   t | jS )N)r   rf   )r&   r   r   r   __len__b  s    zEnumMeta.__len__c             C   s
   t | jS )N)r   rg   )r&   r   r   r   r   e  s    zEnumMeta.__members__c             C   s
   d| j  S )Nz	<enum %r>)r(   )r&   r   r   r   r]   o  s    zEnumMeta.__repr__c                s    fddt  jD S )Nc             3   s   | ]} j | V  qd S )N)rg   )rN   r   )r&   r   r   r[   s  s    z(EnumMeta.__reversed__.<locals>.<genexpr>)reversedrf   )r&   r   )r&   r   __reversed__r  s    zEnumMeta.__reversed__c                s0   | j di }||krtdt || d S )Nrg   zCannot reassign members.)rT   getr   r-   __setattr__)r&   r   r+   Z
member_map)r2   r   r   r   u  s    zEnumMeta.__setattr__c         
   C   s  | j }|d kr| fn|| f}| |\}	}
|||}t|trP|dd }t|ttfr|rt|d tr|g  }}g }xDt	|D ]8\}}|

||||d d  }|| |||f qW x6|D ].}t|tr|||  }}n|\}}|||< qW |||||}|d krTytdjd }W n( ttfk
rR } zW d d }~X Y nX |d krht| n||_|d k	r~||_|S )Nr9   r:   r   r   r(   )r2   rG   rM   r=   r>   r?   r@   rl   rA   	enumerater5   rC   re   sys	_getframe	f_globalsr   r;   r'   r%   r)   )r&   Z
class_namer}   rx   ry   rz   r{   rI   rJ   r   rL   rP   Zoriginal_nameslast_valuescountr   r+   itemru   member_valuert   excr   r   r   r|     s<    
 







zEnumMeta._create_c             C   s   | st tfS d  }}x,| D ]$}|tk	rt|tr|jrtdqW t|tsTtdt| d tst| d }| d }n8x6| d jD ](}t|tr|d kr|}q|d kr|}qW ||fS )NzCannot extend enumerationszHnew enumerations must be created as `ClassName([mixin_type,] enum_type)`r   r   )rj   r   
issubclassrf   r    __mro__)rJ   rK   rL   baser   r   r   rG     s(    




zEnumMeta._get_mixins_c       	      C   s   |  dd }|d k	}|d krtxVdD ]H}x8||fD ],}t||d }|d d jtjtjhkr0|}P q0W |d k	r"P q"W tj}|tjkrd}nd}|||fS )Nre   )rp   re   FT)r   rH   re   rj   r   )	rP   rK   rL   re   rr   methodZpossibletargetrs   r   r   r   rb     s(    


zEnumMeta._find_new_)N)r(   r%   r)   classmethodrM   re   rw   r~   r   r   r   r   r   r   r   propertyr   r]   r   r   r|   staticmethodrG   rb   rF   r   r   )r2   r   r   z   s&   
 	
5-c               @   s~   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zedd Zedd ZedddZdS )r   c             C   sj   t || kr|S y|| jkr&| j| S W n6 tk
r^   x | j D ]}|j|krD|S qDW Y nX | |S )N)rz   ri   r    rg   valuesr\   r6   )r&   r+   r   r   r   r   re     s    

zEnum.__new__c          	   C   s8   x2t |D ]"}y|d S  tk
r*   Y q
X q
W |S d S )Nr   )r   r    )r   r{   r   r   
last_valuer   r   r   r5   -  s    
zEnum._generate_next_value_c             C   s   t d|| jf d S )Nz%r is not a valid %s)r;   r(   )r&   r+   r   r   r   r6   6  s    zEnum._missing_c             C   s   d| j j| j| jf S )Nz<%s.%s: %r>)r2   r(   rm   r\   )r!   r   r   r   r]   :  s    zEnum.__repr__c             C   s   d| j j| jf S )Nz%s.%s)r2   r(   rm   )r!   r   r   r   r^   >  s    zEnum.__str__c                s&    fdd j  D }dddg| S )Nc                s2   g | ]*}|j D ]}|d  dkr| jkr|qqS )r   r   )rT   rg   )rN   r&   rZ   )r!   r   r   
<listcomp>C  s   
z Enum.__dir__.<locals>.<listcomp>r2   rS   r%   )r2   rR   )r!   Zadded_behaviorr   )r!   r   r   A  s    
zEnum.__dir__c             C   s0   | j tkrt}t| }n| j }| j}|||S )N)rh   rj   r>   r\   r_   )r!   Zformat_specr&   Zvalr   r   r   r_   J  s    

zEnum.__format__c             C   s
   t | jS )N)hashrm   )r!   r   r   r   __hash__Y  s    zEnum.__hash__c             C   s   | j | jffS )N)r2   r\   )r!   r"   r   r   r   r$   \  s    zEnum.__reduce_ex__c             C   s   | j S )N)rm   )r!   r   r   r   r   f  s    z	Enum.namec             C   s   | j S )N)r\   )r!   r   r   r   r+   k  s    z
Enum.valueNc                s   t tj| }rt n| fdd D }y|jdd d W n$ tk
rp   |jdd d Y nX | |||d} t| _|| j	 | ||< | S )Nc                s    g | ]} |r|| fqS r   r   )rN   r   )filtersourcer   r   r     s   z!Enum._convert.<locals>.<listcomp>c             S   s   | d | d fS )Nr   r   r   )tr   r   r   <lambda>  s    zEnum._convert.<locals>.<lambda>)rE   c             S   s   | d S )Nr   r   )r   r   r   r   r     s    )rx   )
varsr   moduleskeyssortr    _reduce_ex_by_namer$   updater   )r&   r   rx   r   r   module_globalsmembersr   )r   r   r   _convertp  s    

zEnum._convert)N)r(   r%   r)   re   r5   r   r6   r]   r^   r   r_   r   r$   r   r   r+   r   r   r   r   r   r     s   		
)	metaclassc               @   s   e Zd ZdS )r   N)r(   r%   r)   r   r   r   r   r     s   c             C   s   | j S )N)r   )r!   r"   r   r   r   r     s    r   c               @   sl   e Zd Zdd Zedd Ze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dS )r   c          	   C   sd   |s|d k	r|S dS xBt |D ]6}yt|}P W q tk
rR   td| d Y qX qW d|d  S )Nr   zInvalid Flag value: %rr   )r   	_high_bit	Exceptionr    )r   r{   r   r   r   Zhigh_bitr   r   r   r5     s    	zFlag._generate_next_value_c             C   s.   |}|dk r| }|  |}|dk r*| }|S )Nr   )r4   )r&   r+   Zoriginal_valueZpossible_memberr   r   r   r6     s    
zFlag._missing_c             C   sb   | j |d }|d kr^t| |\}}|r:td|| jf t| }d |_||_| j 	||}|S )Nz%r is not a valid %s)
ri   r   
_decomposer;   r(   rj   re   rm   r\   r`   )r&   r+   pseudo_memberr   extra_flagsr   r   r   r4     s    
zFlag._create_pseudo_member_c             C   s8   t || js&dd l}|dtd dS |j| j@ |jkS )Nr   zHusing non-Flags in containment checks will raise TypeError in Python 3.8r   F)r=   r2   r   r   r   r\   )r!   otherr   r   r   r   r     s    zFlag.__contains__c             C   sV   | j }| jd k	r$d|j| j| jf S t|| j\}}d|jddd |D | jf S )Nz<%s.%s: %r>|c             S   s   g | ]}t |jp|jqS r   )r>   rm   r\   )rN   rZ   r   r   r   r     s    z!Flag.__repr__.<locals>.<listcomp>)r2   rm   r(   r\   r   rd   )r!   r&   r   	uncoveredr   r   r   r]     s    
zFlag.__repr__c             C   s   | j }| jd k	r d|j| jf S t|| j\}}t|dkr^|d jd kr^d|j|d jf S d|jddd |D f S d S )Nz%s.%sr   r   z%s.%rr   c             S   s   g | ]}t |jp|jqS r   )r>   rm   r\   )rN   rZ   r   r   r   r     s    z Flag.__str__.<locals>.<listcomp>)r2   rm   r(   r   r\   r   rd   )r!   r&   r   r   r   r   r   r^     s    
zFlag.__str__c             C   s
   t | jS )N)boolr\   )r!   r   r   r   rw     s    zFlag.__bool__c             C   s"   t || jstS | | j|jB S )N)r=   r2   NotImplementedr\   )r!   r   r   r   r   __or__  s    zFlag.__or__c             C   s"   t || jstS | | j|j@ S )N)r=   r2   r   r\   )r!   r   r   r   r   __and__  s    zFlag.__and__c             C   s"   t || jstS | | j|jA S )N)r=   r2   r   r\   )r!   r   r   r   r   __xor__  s    zFlag.__xor__c             C   sR   t | j| j\}}| d}x*| jD ] }||kr$|j| j@ s$||B }q$W | |S )Nr   )r   r2   r\   )r!   r   r   ZinvertedrZ   r   r   r   
__invert__  s    
zFlag.__invert__N)r(   r%   r)   r5   r   r6   r4   r   r]   r^   rw   r   r   r   r   r   r   r   r   r     s   

c               @   sP   e Zd Zedd Zedd Zdd Zdd Zd	d
 ZeZ	eZ
eZdd ZdS )r	   c             C   s*   t |tstd|| jf | |}|S )Nz%r is not a valid %s)r=   intr;   r(   r4   )r&   r+   Z
new_memberr   r   r   r6     s    

zIntFlag._missing_c             C   s   | j |d }|d kr|g}t| |\}}xL|rvt|}d| }|| j kr\||kr\|| || krld}q,||N }q,W x6t|D ]*}t| |}d |_||_	| j 
||}qW |S )Nr   r   )ri   r   r   r   rC   r   r   re   rm   r\   r`   )r&   r+   r   Zneed_to_creater   r   ZbitZ
flag_valuer   r   r   r4     s&    


zIntFlag._create_pseudo_member_c             C   s0   t || jtfstS | | j| |jB }|S )N)r=   r2   r   r   r\   )r!   r   resultr   r   r   r   5  s    zIntFlag.__or__c             C   s,   t || jtfstS | | j| |j@ S )N)r=   r2   r   r   r\   )r!   r   r   r   r   r   ;  s    zIntFlag.__and__c             C   s,   t || jtfstS | | j| |jA S )N)r=   r2   r   r   r\   )r!   r   r   r   r   r   @  s    zIntFlag.__xor__c             C   s   |  | j }|S )N)r2   r\   )r!   r   r   r   r   r   I  s    zIntFlag.__invert__N)r(   r%   r)   r   r6   r4   r   r   r   __ror____rand____rxor__r   r   r   r   r   r	     s   c             C   s   |   d S )Nr   )
bit_length)r+   r   r   r   r   N  s    r   c             C   sb   g }x0| j  D ]"\}}||jkr|||jf qW |r^ddd |D }td| |f | S )Nz, c             S   s   g | ]\}}d ||f qS )z%s -> %sr   )rN   aliasr   r   r   r   r   Z  s    zunique.<locals>.<listcomp>z duplicate values found in %r: %s)r   ro   r   rC   rd   r;   )ZenumerationZ
duplicatesr   r   Zalias_detailsr   r   r   r   R  s    
c             C   s   |}|dk }|r*dd t | j D }ndd t | j D }g }x4|D ],\}}|rL||@ |krL|| || M }qLW |s|| jkr|| j|  |jdd dd t|d	kr|d j|kr|d ||fS )
Nr   c             S   s"   g | ]\}}|j d k	r||fqS )N)r   )rN   vrZ   r   r   r   r   j  s   z_decompose.<locals>.<listcomp>c             S   s*   g | ]"\}}|j d k	st|r||fqS )N)r   _power_of_two)rN   r   rZ   r   r   r   r   q  s   c             S   s   | j S )N)r\   )rZ   r   r   r   r   |  s    z_decompose.<locals>.<lambda>T)rE   reverser   )rA   ri   ro   rC   r   r   r+   ra   )Zflagr+   Znot_coveredZnegativeZflags_to_checkr   r   r   r   r   r   r   _  s$    

r   c             C   s   | dk rdS | dt |  kS )Nr   Fr   )r   )r+   r   r   r   r     s    r   )r   Ztypesr   r   Z_collectionsr   ImportErrorZcollections__all__r   r   r   r'   rj   r*   r
   dictr,   r   rz   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   <module>   s<   ?    qA#