a
    ze                     @   s   d dl Z d dlmZmZ g dZdd 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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   /usr/lib/python3.9/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      ___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   sT   d| f }t |dkrL||rL|t | dkrL|d dksH|d dkrLdS dS d S )Nz_%s__   r   r   r   TF)r   
startswith)cls_namer   patternr   r   r   _is_private,   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_unpicklable9   s    r.   c                   @   s   e Zd ZeZdS )r	   N)__name__r,   __qualname__
_auto_nullvaluer   r   r   r   r	   C   s   r	   c                       s(   e Zd Z fddZ fddZ  ZS )	_EnumDictc                    s&   t    g | _g | _g | _d| _d S )NF)super__init___member_names_last_values_ignore_auto_calledr(   	__class__r   r   r5   Q   s
    
z_EnumDict.__init__c                    s  t | j|r*dd l}|jd|f tdd t|r|dvrBtd|dkrf| jrXtdt	| d	| nV|d
krt
|tr|dd }nt|}|| _t|t| j@ }|rtd|f nt|r|dkrd}n|| jv rtd| n|| jv rnt|s~|| v r td|| | f t
|trf|jtkr`| |dt| j| jd d  |_d| _|j}| j| | j| t || d S )Nr   z@private variables, such as %r, will be normal attributes in 3.10r   )
stacklevel)_order__create_pseudo_member__generate_next_value_	_missing__ignore_z(_names_ are reserved for future Enum user@   z4_generate_next_value_ must be defined before members_generate_next_valuerB   , z-_ignore_ cannot specify already set names: %r	__order__r>   zAttempted to reuse key: %rz%r already defined as: %rr   T)r%   	_cls_namewarningswarnDeprecationWarningr    
ValueErrorr9   r&   setattr
isinstancestrreplacesplitlistr8   setr6   r   r   r	   r2   r1   rC   r   r7   appendr4   __setitem__)r(   keyr2   rH   alreadyr;   r   r   rT   X   sf    	




z_EnumDict.__setitem__)r/   r,   r0   r5   rT   __classcell__r   r   r;   r   r3   J   s   r3   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ed&d' Zed(d) Zed*d+ Z  ZS ).r   c                 K   sD   |  || t }||_| ||\}}|d ur@t|dd |d< |S )Nr@   )_check_for_existing_membersr3   rG   _get_mixins_getattr)metaclsr-   baseskwds	enum_dictmember_type
first_enumr   r   r   __prepare__   s    zEnumMeta.__prepare__c              	      s   dg d d }|D ]}|d  q| ||\}| |\}}	}
fddjD }jD ]
}|= qndd }t|ddh@ }|rtdd	|d	vrd
d	< t
 j| ||fi |}g |_i |_|_dd | D }i |_dvr̈turd}tfdd|D sdv rFt| nd }|D ]n}|jD ]P  tu rlqXn:t fdd|D rd} qnd jv rXd} qqX|d urN qqN|rt| jD ]*}|| }t|ts|f}n|}tu r|f}|
s*||}t|dsb||_n8||g|R  }t|dsbtu rX||_n
| |_|j}||_||_|j|  |j D ]"\}}|j|jkr|} qq|j| ||vrt||| ||j|< z||j|< W n ty   Y n0 qdD ]V}|v rqt ||}t |d }t ||d }|d ur||u rt||| qt!d urz|	rr||_"t!j|_|d urt|t#r|$dd% }||jkrtd|S )NrB   c                    s   i | ]}| | qS r   r   ).0k)	classdictr   r   
<dictcomp>       z$EnumMeta.__new__.<locals>.<dictcomp>r>   mro zInvalid enum member name: {0}rD   __doc__zAn enumeration.c                 S   s.   h | ]&}|j  D ]\}}t|tr|qqS r   )__dict__itemsrM   r   )rb   crc   vr   r   r   	<setcomp>   s   
z#EnumMeta.__new__.<locals>.<setcomp>r+   )__getnewargs_ex____getnewargs__r+   
__reduce__c                 3   s   | ]}| j v V  qd S Nrj   rb   m)r_   r   r   	<genexpr>   rf   z#EnumMeta.__new__.<locals>.<genexpr>__new__c                 3   s   | ]}| j v V  qd S rr   rs   rt   )baser   r   rv     rf   FT_value_)__repr____str__
__format__r+   rE   z#member order does not match _order_)&
setdefaultrS   poprY   
_find_new_r6   rR   rK   formatjoinr4   rw   _member_names__member_map__member_type_rg   _value2member_map_objectanyr.   __mro__rj   rM   tupler   ry   _name___objclass__r5   rk   rL   r&   rZ   r   __new_member__rN   rO   rP   )r[   r-   r\   rd   r]   ignorerU   r`   rw   save_newuse_argsenum_membersr   r>   invalid_names
enum_classdynamic_attributesmethodssabotagechainmember_namer2   argsenum_membercanonical_memberclass_method
obj_methodenum_methodr;   )rx   rd   r_   r   rw      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 u r|  | |S | j||||||dS )Nr   )rw   _create_)r-   r2   namesr   r   r   r   r   r   r   __call__f  s    zEnumMeta.__call__c                 C   s:   t |ts$tdt|j| jjf t || o8|j| jv S Nz3unsupported operand type(s) for 'in': '%s' and '%s')rM   r   r&   r   r0   r<   r   r   )r-   memberr   r   r   __contains__  s    
zEnumMeta.__contains__c                    s(   || j v rtd| j t | d S )Nz%s: cannot delete Enum member.)r   AttributeErrorr/   r4   __delattr__)r-   attrr;   r   r   r     s    
zEnumMeta.__delattr__c                 C   s   g d| j  S )N)r<   ri   __members__r,   r   r:   r   r   r   __dir__  s    zEnumMeta.__dir__c                 C   s>   t |rt|z| j| W S  ty8   t|d Y n0 d S rr   )r   r   r   KeyErrorr-   r   r   r   r   __getattr__  s    	zEnumMeta.__getattr__c                 C   s
   | j | S rr   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 rr   r   rb   r   r-   r   r   rv     rf   z$EnumMeta.__iter__.<locals>.<genexpr>r   r   r   r   r   __iter__  s    zEnumMeta.__iter__c                 C   s
   t | jS rr   )r   r   r   r   r   r   __len__  s    zEnumMeta.__len__c                 C   s
   t | jS rr   )r   r   r   r   r   r   r     s    zEnumMeta.__members__c                 C   s
   d| j  S )Nz	<enum %r>)r/   r   r   r   r   rz     s    zEnumMeta.__repr__c                    s    fddt  jD S )Nc                 3   s   | ]} j | V  qd S rr   r   r   r   r   r   rv     rf   z(EnumMeta.__reversed__.<locals>.<genexpr>)reversedr   r   r   r   r   __reversed__  s    zEnumMeta.__reversed__c                    s0   | j di }||v rtdt || d S )Nr   zCannot reassign members.)rj   getr   r4   __setattr__)r-   r   r2   
member_mapr;   r   r   r     s    zEnumMeta.__setattr__c             
   C   sn  | j }|d u r| fn|| f}| | |\}	}
|||}t|trR|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 u r@ztdjd }W n tttfy>   Y n0 |d u rTt| n||_|d urj||_|S )NrD   rE   r   r   r/   )r<   rY   ra   rM   rN   rO   rP   r   rQ   	enumerater@   rS   rw   sys	_getframe	f_globalsr   rK   r   r.   r,   r0   )r-   
class_namer   r   r   r   r   r[   r\   r   r`   rd   original_nameslast_valuescountr   r2   itemr   member_valuer   r   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yl   |jdd d Y n0 | |||d} t| _|| j	 | ||< | S )Nc                    s    g | ]\}} |r||fqS r   r   )rb   r   r2   filterr   r   
<listcomp>!  s   z&EnumMeta._convert_.<locals>.<listcomp>c                 S   s   | d | d fS )Nr   r   r   tr   r   r   <lambda>'  rf   z$EnumMeta._convert_.<locals>.<lambda>)rU   c                 S   s   | d S Nr   r   r   r   r   r   r   *  rf   )r   )
varsr   modulesrk   sortr&   _reduce_ex_by_namer+   updater   )r-   r   r   r   sourcemodule_globalsmembersr   r   r   	_convert_  s     	

zEnumMeta._convert_c                 C   s<   |D ]2}|j D ]&}t|tr|jrtd| |jf qqd S )Nz %s: cannot extend enumeration %r)r   
issubclassr   r   r&   r/   )r   r\   r   rx   r   r   r   rX   1  s    
z$EnumMeta._check_for_existing_membersc                    sT   |st tfS  fdd}|d }t|ts2td||p<t }|jrLtd||fS )Nc                    s   t  }| D ]x}d }|jD ]h}|tu r(qqt|trN|jtur||j  q
qd|jv rxt|trdq||pn|  q
q|p~|}qq
t|dkrt	d |f n|r|
 S d S d S )Nrw   r   z%r: too many data types: %r)rR   r   r   r   r   r   addrj   r   r&   r~   )r\   
data_typesr   	candidaterx   r   r   r   _find_data_typeF  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)r   r   r   r&   r   )r   r\   r   r`   r_   r   r   r   rY   ;  s    
zEnumMeta._get_mixins_c           	      C   s   |  dd }|d u}|d u rpdD ]H}||fD ].}t||d }|d d jtjtjhvr,|} q\q,|d ur  qpq tj}|tju rd}nd}|||fS )Nrw   )r   rw   FT)r   rZ   rw   r   r   )	rd   r_   r`   rw   r   methodpossibletargetr   r   r   r   r   j  s*    
zEnumMeta._find_new_)N)N)r/   r,   r0   classmethodra   rw   r   r   r   r   r   r   r   r   r   propertyr   rz   r   r   r   r   staticmethodrX   rY   r   rW   r   r   r;   r   r      s4   
 .%
	5
!
	
.r   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 || u r|S z| j| W S  ty.   Y n8 tyd   | j D ]}|j|krD|   Y S qDY n0 zd }| |}W n, ty } z|}d }W Y d }~n
d }~0 0 zrt	|| r|W d }d }S t
d|| jf }|d u r|d u r|n|d u rtd| j|f }||_|W d }d }n
d }d }0 d S )N%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member)r   r   r   r&   r   valuesry   rA   	ExceptionrM   rK   r0   r/   __context__)r-   r2   r   excresulteve_excr   r   r   rw     sJ    


zEnum.__new__c              	   C   s4   t |D ]&}z|d W   S  ty,   Y q0 q|S Nr   )r   r&   )r   r   r   r   
last_valuer   r   r   r@     s    	zEnum._generate_next_value_c                 C   s   d S rr   r   )r-   r2   r   r   r   rA     s    zEnum._missing_c                 C   s   d| j j| j| jf S )N<%s.%s: %r>)r<   r/   r   ry   r:   r   r   r   rz     s    zEnum.__repr__c                 C   s   d| j j| jf S )N%s.%s)r<   r/   r   r:   r   r   r   r{     s    zEnum.__str__c                    s4    fdd j  D dd  jD  }g d| S )Nc                    s2   g | ]*}|j D ]}|d  dkr| jvr|qqS r   r   )rj   r   )rb   r-   ru   r:   r   r   r     s   
z Enum.__dir__.<locals>.<listcomp>c                 S   s   g | ]}|d  dkr|qS r   r   rt   r   r   r   r     rf   )r<   ri   r,   )r<   rg   rj   )r(   added_behaviorr   r:   r   r     s    
zEnum.__dir__c                 C   sJ   t | jtjtjfv}| jtu s$|r2t}t| }n| j}| j}|||S rr   )	r   r{   r   r   r   r   rN   ry   r|   )r(   format_specstr_overriddenr-   valr   r   r   r|     s    	
zEnum.__format__c                 C   s
   t | jS rr   )hashr   r:   r   r   r   __hash__  s    zEnum.__hash__c                 C   s   | j | jffS rr   r<   ry   r'   r   r   r   r+   	  s    zEnum.__reduce_ex__c                 C   s   | j S rr   )r   r:   r   r   r   r     s    z	Enum.namec                 C   s   | j S rr   ry   r:   r   r   r   r2     s    z
Enum.valueN)r/   r,   r0   rw   r@   r   rA   rz   r{   r   r|   r   r+   r   r   r2   r   r   r   r   r     s   -


r   )	metaclassc                   @   s   e Zd ZdS )r   N)r/   r,   r0   r   r   r   r   r     s   r   c                 C   s   | j S rr   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   sb   |s|d ur|S dS t |D ]8}zt|}W  qVW q tyR   td| d Y q0 qd|d  S )Nr   zInvalid Flag value: %rr   )r   	_high_bitr   r&   )r   r   r   r   r   high_bitr   r   r   r@   *  s    	
zFlag._generate_next_value_c                 C   s.   |}|dk r| }|  |}|dk r*| }|S r   )r?   )r-   r2   original_valuepossible_memberr   r   r   rA   =  s    
zFlag._missing_c                 C   sb   | j |d }|d u r^t| |\}}|r:td|| jf t| }d |_||_| j 	||}|S Nr   )
r   r   
_decomposerK   r0   r   rw   r   ry   r}   )r-   r2   pseudo_memberr   extra_flagsr   r   r   r?   J  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   )rM   r<   r&   r   r0   ry   r(   otherr   r   r   r   ^  s    zFlag.__contains__c                 C   sV   | j }| jd u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   rN   r   ry   rt   r   r   r   r   o  rf   z!Flag.__repr__.<locals>.<listcomp>)r<   r   r/   ry   r   r   r(   r-   r   	uncoveredr   r   r   rz   h  s    
zFlag.__repr__c                 C   s   | j }| jd ur d|j| jf S t|| j\}}t|dkr^|d jd u 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  rt   r   r   r   r   }  rf   z Flag.__str__.<locals>.<listcomp>)r<   r   r/   r   ry   r   r   r  r   r   r   r{   s  s    
zFlag.__str__c                 C   s
   t | jS rr   )boolry   r:   r   r   r   r     s    zFlag.__bool__c                 C   s"   t || jstS | | j|jB S rr   rM   r<   NotImplementedry   r  r   r   r   __or__  s    zFlag.__or__c                 C   s"   t || jstS | | j|j@ S rr   r	  r  r   r   r   __and__  s    zFlag.__and__c                 C   s"   t || jstS | | j|jA S rr   r	  r  r   r   r   __xor__  s    zFlag.__xor__c                 C   sN   t | j| j\}}| d}| jD ] }||vr"|j| j@ s"||B }q"| |S r   )r   r<   ry   )r(   r   r  invertedru   r   r   r   
__invert__  s    


zFlag.__invert__N)r/   r,   r0   r@   r   rA   r?   r   rz   r{   r   r  r  r  r  r   r   r   r   r   %  s   


r   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   )rM   intrK   r0   r?   )r-   r2   
new_memberr   r   r   rA     s    

zIntFlag._missing_c                 C   s   | j |d }|d u r|g}t| |\}}|rtt|}d| }|| j vrZ||vrZ|| || krjd}q*||N }q*t|D ]*}t| |}d |_||_	| j 
||}q||S )Nr   r   )r   r   r   r   rS   r   r  rw   r   ry   r}   )r-   r2   r   need_to_creater   r  bit
flag_valuer   r   r   r?     s(    



zIntFlag._create_pseudo_member_c                 C   s0   t || jtfstS | | j| |jB }|S rr   rM   r<   r  r
  ry   )r(   r  r   r   r   r   r    s    zIntFlag.__or__c                 C   s,   t || jtfstS | | j| |j@ S rr   r  r  r   r   r   r    s    zIntFlag.__and__c                 C   s,   t || jtfstS | | j| |jA S rr   r  r  r   r   r   r    s    zIntFlag.__xor__c                 C   s   |  | j }|S rr   r   )r(   r   r   r   r   r    s    zIntFlag.__invert__N)r/   r,   r0   r   rA   r?   r  r  r  __ror____rand____rxor__r  r   r   r   r   r     s   
	
 r   c                 C   s   |   d S r   )
bit_length)r2   r   r   r   r     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   )rb   aliasr   r   r   r   r     rf   zunique.<locals>.<listcomp>z duplicate values found in %r: %s)r   rk   r   rS   r   rK   )enumeration
duplicatesr   r   alias_detailsr   r   r   r
     s    
r
   c           	      C   s   |}|dk }g }| D ].}|j }|r||@ |kr|| || M }q|s|}|rdt| }|| jv r|| j|  || M }|| M }qL|s|| jv r|| j|  |jdd dd t|dkr|d j |kr|d ||fS )Nr   r   c                 S   s   | j S rr   r   )ru   r   r   r   r     rf   z_decompose.<locals>.<lambda>T)rU   reverser   )r2   rS   r   r   r   r   r~   )	flagr2   not_coverednegativer   r   r   tmpr  r   r   r   r     s,    



r   )r   typesr   r   __all__r   r   r    r%   r.   r   r1   r	   dictr3   r   r   r   r  r   r   r   r   r   r
   r   r   r   r   r   <module>   s0   
	T   { vI