U
    wy]8                     @   s   d dl Z d dlmZmZ 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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   A/home/stadmin/Documents/SimTableSoftware/Python-3.8.0/Lib/enum.py_is_descriptor   s
    
r   c                 C   sL   t | dkoJ| d d | dd    ko.dkn  oJ| d dkoJ| d dkS )N      Z___lennamer   r   r   
_is_dunder   s    &

r   c                 C   sL   t | dkoJ| d | d   ko&dkn  oJ| dd dkoJ| dd 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selfZ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	   ,   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 user8   _generate_next_valuer:   , z-_ignore_ cannot specify already set names: %rZ	__order__r6   zAttempted to reuse key: %rz%r already defined as: %rr   )r   
ValueErrorsetattr
isinstancestrreplacesplitlistr2   setr0   r   r    r   r	   r+   r*   r;   r   r1   appendr.   __setitem__)r"   keyr+   Zalreadyr4   r   r   rG   @   s<    	



"z_EnumDict.__setitem__)r(   r%   r)   r/   rG   __classcell__r   r   r4   r   r,   3   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d-d$d%Z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 )Nr8   )r,   _get_mixins_getattr)metaclsr&   basesZ	enum_dictmember_type
first_enumr   r   r   __prepare__w   s
    zEnumMeta.__prepare__c              	      s    dg d  d }|D ]} |d  q| |\}|  |\}}}	 fdd jD }
 jD ]
} |= ql dd }t|
ddh@ }|rtdd	|d	 krd
 d	< t
 | || }g |_i |_|_dd | D }i |_d kr0tk	r0d}tfdd|D s0t|  jD ]*}|
| }t|tsX|f}n|}tkrl|f}|	s||}t|ds||_n6||f| }t|dsĈtkr||_n
| |_|j}||_||_|j|  |j D ]"\}}|j|jkr|} qq|j| ||kr0t||| ||j|< z||j|< W n tk
r^   Y nX q6dD ]H}t||}t|d }t||d }|d k	rh||krht||| qhtd k	r|r||_ tj|_|d k	r
t|t!r|"dd# }||jkr
td|S )Nr:   c                    s   i | ]}| | qS r   r   ).0k)	classdictr   r   
<dictcomp>   s      z$EnumMeta.__new__.<locals>.<dictcomp>r6   mro zInvalid enum member name: {0}r<   __doc__zAn enumeration.c                 S   s.   h | ]&}|j  D ]\}}t|tr|qqS r   )__dict__itemsr@   r   )rQ   crR   vr   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 r-   )rX   rQ   m)rN   r   r   	<genexpr>   s     z#EnumMeta.__new__.<locals>.<genexpr>_value_)__repr____str__
__format__r$   r=   z#member order does not match _order_)$
setdefaultrF   poprJ   
_find_new_r0   rE   r>   formatjoinr.   __new___member_names__member_map__member_type_rU   _value2member_map_objectanyr'   r@   tupler   rb   _name___objclass__r/   rY   r?   r    rK   r   __new_member__rA   rB   rC   )rL   r&   rM   rS   ignorerH   rO   rk   save_newuse_argsZenum_membersr   r6   Zinvalid_names
enum_classZdynamic_attributesZmethodsmember_namer+   argsZenum_memberZcanonical_memberZclass_methodZ
obj_methodZenum_methodr4   )rS   rN   r   rk      s    














zEnumMeta.__new__c                 C   s   dS )NTr   r3   r   r   r   __bool__  s    zEnumMeta.__bool__Nr   modulequalnametypestartc                C   s*   |d kr|  | |S | j||||||dS )Nr}   )rk   _create_)r&   r+   namesr~   r   r   r   r   r   r   __call__  s    zEnumMeta.__call__c                 C   s:   t |ts$tdt|j| jjf t || o8|j| jkS Nz3unsupported operand type(s) for 'in': '%s' and '%s')r@   r   r    r   r)   r5   rs   rm   )r&   memberr   r   r   __contains__4  s    
 zEnumMeta.__contains__c                    s(   || j krtd| j t | d S )Nz%s: cannot delete Enum member.)rm   AttributeErrorr(   r.   __delattr__)r&   Zattrr4   r   r   r   ;  s
    
zEnumMeta.__delattr__c                 C   s   ddddg| j  S )Nr5   rW   __members__r%   rl   r3   r   r   r   __dir__C  s    
zEnumMeta.__dir__c                 C   s@   t |rt|z| j| W S  tk
r:   t|d Y nX d S r-   )r   r   rm   KeyErrorr&   r   r   r   r   __getattr__G  s    	zEnumMeta.__getattr__c                 C   s
   | j | S r-   rm   r   r   r   r   __getitem__W  s    zEnumMeta.__getitem__c                    s    fdd j D S )Nc                 3   s   | ]} j | V  qd S r-   r   rQ   r   r&   r   r   ra   [  s     z$EnumMeta.__iter__.<locals>.<genexpr>r   r   r   r   r   __iter__Z  s    zEnumMeta.__iter__c                 C   s
   t | jS r-   )r   rl   r   r   r   r   __len__]  s    zEnumMeta.__len__c                 C   s
   t | jS r-   )r   rm   r   r   r   r   r   `  s    zEnumMeta.__members__c                 C   s
   d| j  S )Nz	<enum %r>)r(   r   r   r   r   rc   j  s    zEnumMeta.__repr__c                    s    fddt  jD S )Nc                 3   s   | ]} j | V  qd S r-   r   r   r   r   r   ra   n  s     z(EnumMeta.__reversed__.<locals>.<genexpr>)reversedrl   r   r   r   r   __reversed__m  s    zEnumMeta.__reversed__c                    s0   | j di }||krtdt || d S )Nrm   zCannot reassign members.)rX   getr   r.   __setattr__)r&   r   r+   Z
member_mapr4   r   r   r   p  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 }t	|D ]8\}}|

||||d d  }|| |||f q|D ].}t|tr|||  }}n|\}}|||< q|||||}|d krNztdjd }W n* tttfk
rL } zW 5 d }~X Y nX |d krbt| n||_|d k	rx||_|S )Nr<   r=   r   r   r(   )r5   rJ   rP   r@   rA   rB   rC   rr   rD   	enumerater8   rF   rk   sys	_getframe	f_globalsr   r>   r   r'   r%   r)   )r&   Z
class_namer   r~   r   r   r   rL   rM   r   rO   rS   Zoriginal_nameslast_valuescountr   r+   itemrz   member_valuery   excr   r   r   r   }  s<    
 







zEnumMeta._create_c                    s   t tj| }|rt |}n|} fdd| D }z|jdd d W n$ tk
rn   |jdd d Y nX | |||d} t| _|| j	 | ||< | S )Nc                    s    g | ]\}} |r||fqS r   r   )rQ   r   r+   filterr   r   
<listcomp>  s   z&EnumMeta._convert_.<locals>.<listcomp>c                 S   s   | d | d fS )Nr   r   r   tr   r   r   <lambda>      z$EnumMeta._convert_.<locals>.<lambda>)rH   c                 S   s   | d S Nr   r   r   r   r   r   r     r   )r~   )
varsr   modulesrY   sortr    _reduce_ex_by_namer$   updater   )r&   r   r~   r   sourcemodule_globalsmembersr   r   r   	_convert_  s     	

zEnumMeta._convert_c                 O   s$   dd l }|jdtdd | j||S )Nr   zI_convert is deprecated and will be removed in 3.9, use _convert_ instead.r   )
stacklevel)warningswarnDeprecationWarningr   )r&   r{   kwargsr   r   r   r   _convert  s     zEnumMeta._convertc                 C   sP   | st tfS dd }| d }t|ts.td|| p8t }|jrHtd||fS )Nc                 S   sH   | D ]>}|j D ]2}|tkrqqd|jkrt|tr4q|    S qqd S )Nrk   )__mro__rp   rX   
issubclassr   )rM   Zchainbaser   r   r   _find_data_type  s    


z.EnumMeta._get_mixins_.<locals>._find_data_typer   zZnew enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`zCannot extend enumerations)rp   r   r   r    rl   )rM   r   rO   rN   r   r   r   rJ     s    
zEnumMeta._get_mixins_c           	      C   s   |  dd }|d k	}|d krpdD ]H}||fD ].}t||d }|d d jtjtjhkr,|} q\q,|d k	r  qpq tj}|tjkrd}nd}|||fS )Nrk   )ru   rk   FT)r   rK   rk   rp   r   )	rS   rN   rO   rk   rw   methodZpossibletargetrx   r   r   r   rh     s*    
zEnumMeta._find_new_)N)N)r(   r%   r)   classmethodrP   rk   r|   r   r   r   r   r   r   r   r   propertyr   rc   r   r   r   r   r   staticmethodrJ   rh   rI   r   r   r4   r   r   u   s2   
	 
	5
!
c                   @   sp   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dS )r   c              
   C   s  t || kr|S z| j| W S  tk
r0   Y n: tk
rh   | j D ]}|j|krH|   Y S qHY nX zd }| |}W n* tk
r } z|}d }W 5 d }~X Y nX t	|| r|S t
d|| jf }|d kr|d kr|n|d krtd| j|f }||_|d S )N%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member)r   ro   r   r    rm   valuesrb   r9   	Exceptionr@   r>   r(   __context__)r&   r+   r   r   resulteZve_excr   r   r   rk   -  s:    

zEnum.__new__c              	   C   s6   t |D ](}z|d W   S  tk
r.   Y qX q|S Nr   )r   r    )r   r   r   r   
last_valuer   r   r   r8   U  s    zEnum._generate_next_value_c                 C   s   t d|| jf d S Nr   )r>   r(   )r&   r+   r   r   r   r9   ^  s    zEnum._missing_c                 C   s   d| j j| j| jf S )N<%s.%s: %r>)r5   r(   rs   rb   r3   r   r   r   rc   b  s
      zEnum.__repr__c                 C   s   d| j j| jf S )N%s.%s)r5   r(   rs   r3   r   r   r   rd   f  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   )rX   rm   )rQ   r&   r`   r3   r   r   r   j  s     
z Enum.__dir__.<locals>.<listcomp>r5   rW   r%   )r5   rU   )r"   Zadded_behaviorr   r3   r   r   i  s    
zEnum.__dir__c                 C   s0   | j tkrt}t| }n| j }| j}|||S r-   )rn   rp   rA   rb   re   )r"   Zformat_specr&   Zvalr   r   r   re   r  s    

zEnum.__format__c                 C   s
   t | jS r-   )hashrs   r3   r   r   r   __hash__  s    zEnum.__hash__c                 C   s   | j | jffS r-   r5   rb   r!   r   r   r   r$     s    zEnum.__reduce_ex__c                 C   s   | j S r-   )rs   r3   r   r   r   r     s    z	Enum.namec                 C   s   | j S r-   rb   r3   r   r   r   r+     s    z
Enum.valueN)r(   r%   r)   rk   r8   r   r9   rc   rd   r   re   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 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 t |D ]:}zt|}W  qXW q tk
rT   td| d Y qX qd|d  S )Nr   zInvalid Flag value: %rr   )r   	_high_bitr   r    )r   r   r   r   r   Zhigh_bitr   r   r   r8     s    	
zFlag._generate_next_value_c                 C   s.   |}|dk r| }|  |}|dk r*| }|S r   )r7   )r&   r+   Zoriginal_valueZpossible_memberr   r   r   r9     s    
zFlag._missing_c                 C   sb   | j |d }|d kr^t| |\}}|r:td|| jf t| }d |_||_| j 	||}|S r   )
ro   r   
_decomposer>   r(   rp   rk   rs   rb   rf   )r&   r+   pseudo_memberr   extra_flagsr   r   r   r7     s    
zFlag._create_pseudo_member_c                 C   s8   t || js&tdt|j| jjf |j| j@ |jkS r   )r@   r5   r    r   r)   rb   r"   otherr   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 )Nr   |c                 S   s   g | ]}t |jp|jqS r   rA   rs   rb   r_   r   r   r   r     s     z!Flag.__repr__.<locals>.<listcomp>)r5   rs   r(   rb   r   rj   r"   r&   r   	uncoveredr   r   r   rc     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 )Nr   r   r   z%s.%rr   c                 S   s   g | ]}t |jp|jqS r   r   r_   r   r   r   r     s     z Flag.__str__.<locals>.<listcomp>)r5   rs   r(   r   rb   r   rj   r   r   r   r   rd     s    
zFlag.__str__c                 C   s
   t | jS r-   )boolrb   r3   r   r   r   r|     s    zFlag.__bool__c                 C   s"   t || jstS | | j|jB S r-   r@   r5   NotImplementedrb   r   r   r   r   __or__  s    zFlag.__or__c                 C   s"   t || jstS | | j|j@ S r-   r   r   r   r   r   __and__  s    zFlag.__and__c                 C   s"   t || jstS | | j|jA S r-   r   r   r   r   r   __xor__   s    zFlag.__xor__c                 C   sN   t | j| j\}}| d}| jD ] }||kr"|j| j@ s"||B }q"| |S r   )r   r5   rb   )r"   r   r   Zinvertedr`   r   r   r   
__invert__  s    


zFlag.__invert__N)r(   r%   r)   r8   r   r9   r7   r   rc   rd   r|   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 r   )r@   intr>   r(   r7   )r&   r+   Z
new_memberr   r   r   r9     s    

zIntFlag._missing_c                 C   s   | j |d }|d kr|g}t| |\}}|rtt|}d| }|| j krZ||krZ|| || krjd}q*||N }q*t|D ]*}t| |}d |_||_	| j 
||}q||S )Nr   r   )ro   r   r   r   rF   r   r   rk   rs   rb   rf   )r&   r+   r   Zneed_to_creater   r   ZbitZ
flag_valuer   r   r   r7     s(    



zIntFlag._create_pseudo_member_c                 C   s0   t || jtfstS | | j| |jB }|S r-   r@   r5   r   r   rb   )r"   r   r   r   r   r   r   6  s    zIntFlag.__or__c                 C   s,   t || jtfstS | | j| |j@ S 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 r-   r   r   r   r   r   r   A  s    zIntFlag.__xor__c                 C   s   |  | j }|S r-   r   )r"   r   r   r   r   r   J  s    zIntFlag.__invert__N)r(   r%   r)   r   r9   r7   r   r   r   __ror____rand____rxor__r   r   r   r   r   r     s   

c                 C   s   |   d S r   )
bit_lengthr+   r   r   r   r   O  s    r   c                 C   s^   g }| j  D ]"\}}||jkr|||jf q|rZddd |D }td| |f | S )Nz, c                 S   s   g | ]\}}d ||f qS )z%s -> %sr   )rQ   aliasr   r   r   r   r   [  s     zunique.<locals>.<listcomp>z duplicate values found in %r: %s)r   rY   r   rF   rj   r>   )ZenumerationZ
duplicatesr   r   Zalias_detailsr   r   r   r
   S  s    
c                 C   s   |}|dk }|r*dd t | j D }ndd t | j D }g }|D ],\}}|rJ||@ |krJ|| || M }qJ|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 r-   r   rQ   r[   r`   r   r   r   r   j  s   
z_decompose.<locals>.<listcomp>c                 S   s*   g | ]"\}}|j d k	st|r||fqS r-   )r   _power_of_twor   r   r   r   r   q  s   
 c                 S   s   | j S r-   r   )r`   r   r   r   r   }  r   z_decompose.<locals>.<lambda>T)rH   reverser   )rD   ro   rY   rF   r   r   r+   rg   )Zflagr+   Znot_covered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   __all__r   r   r   r'   rp   r*   r	   dictr,   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   <module>   s<       ?   5rnA#