o
    IAf                     @   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.10/enum.py_is_descriptor   s   
r   c                 C   sN   	 t | dko&| d d | dd    kodkn  o&| d dko&| d dkS )N      ___lennamer   r   r   
_is_dunder   s   &

r   c                 C   sN   	 t | dko&| d | d   kodkn  o&| dd dko&| dd dkS )Nr   r   r      r   r   r   r   r   r   
_is_sunder!   s   r    c                 C   s^   d| f }t |}t ||kr-||r-|||d  dgkr-|d dks+|d dkr-dS dS )Nz_%s__r   r   r   r   TF)r   
startswith)cls_namer   patternpat_lenr   r   r   _is_private,   s   
r%   c                 C   s   	 dd }|| _ d| _d S )Nc                 S   s   t d|  )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	   D   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   R   s
   

z_EnumDict.__init__c                    s  	 t | j|rdd l}|jd|f tdd t|r`|dvr"td|dkr4| jr-tdt	| d	| n|d
kr_t
|trF|dd }nt|}|| _t|t| j@ }|r_td|f n[t|rk|dkrjd}nP|| jv rvtd| || jv r|n?t|s|| v rtd|| | f t
|tr|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.11r   
stacklevel)_order__create_pseudo_member__generate_next_value_	_missing__ignore_z(_names_ are reserved for future Enum userA   z4_generate_next_value_ must be defined before members_generate_next_valuerC   , 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   rD   r   r7   appendr4   __setitem__)r(   keyr2   rI   alreadyr;   r   r   rU   Y   sl   




z_EnumDict.__setitem__)r/   r,   r0   r5   rU   __classcell__r   r   r;   r   r3   K   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 )NrA   )_check_for_existing_membersr3   rH   _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 ]}|= q7dd }t|ddh@ }|rWtdd	|d	vr_d
d	< t
 j| ||fi |}g |_i |_|_dd | D }i |_dvrՈturd}tfdd|D sdv rt| n6d }|D ]+}|jD ]  tu rqt fdd|D rd} n
d jv rd} nq|d ur nq|rt| jD ]}|| }t|ts|f}n|}tu r|f}|
s||}t|ds||_n||g|R  }t|dstu r||_n| |_|j}||_||_|j|  |j D ]\}}|j|jkr=|} nq.|j| ||vrPt||| ||j|< z||j|< W q tyf   Y qw dD ]+}|v rrqit ||}t |d }t ||d }|d ur||u rt||| qit!d ur|	r||_"t!j|_|d urt|t#r|$dd% }||jkrtd|S )NrC   c                    s   i | ]}| | qS r   r   ).0k)	classdictr   r   
<dictcomp>   s    z$EnumMeta.__new__.<locals>.<dictcomp>r?   mro zInvalid enum member name: {0}rE   __doc__zAn enumeration.c                 S   s.   h | ]}|j  D ]\}}t|tr	|q	qS r   )__dict__itemsrN   r   )rc   crd   vr   r   r   	<setcomp>   s    z#EnumMeta.__new__.<locals>.<setcomp>r+   )__getnewargs_ex____getnewargs__r+   
__reduce__c                 3       | ]}| j v V  qd S Nrj   rc   m)r`   r   r   	<genexpr>       z#EnumMeta.__new__.<locals>.<genexpr>__new__c                 3   rr   rs   rt   ru   )baser   r   rw     rx   FT_value_)__repr____str__
__format__r+   rF   z#member order does not match _order_)&
setdefaultrT   poprZ   
_find_new_r6   rS   rL   formatjoinr4   ry   _member_names__member_map__member_type_rg   _value2member_map_objectanyr.   __mro__rj   rN   tupler   r{   _name___objclass__r5   rk   rM   r&   r[   r   __new_member__rO   rP   rQ   )r\   r-   r]   re   r^   ignorerV   ra   ry   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;   )rz   re   r`   r   ry      s   
















zEnumMeta.__new__c                 C   s   	 dS )NTr   r:   r   r   r   __bool__a  s   zEnumMeta.__bool__Nr   modulequalnametypestartc                C   s,   	 |d u r|  | |S | j||||||dS )Nr   )ry   _create_)r-   r2   namesr   r   r   r   r   r   r   __call__g  s   zEnumMeta.__call__c                 C   sR   t |tsdd l}|jdtdd tdt|j| jjf t || o(|j	| j
v S )Nr   zpin 3.12 __contains__ will no longer raise TypeError, but will return True if
obj is a member or a member's valuer   r=   3unsupported operand type(s) for 'in': '%s' and '%s')rN   r   rI   rJ   rK   r&   r   r0   r<   r   r   )r-   r   rI   r   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   s8   	 t |r	t|z| j| W S  ty   t|d w rs   )r   r   r   KeyErrorr-   r   r   r   r   __getattr__  s   
zEnumMeta.__getattr__c                 C   s
   | j | S rs   r   r   r   r   r   __getitem__     
zEnumMeta.__getitem__c                    s   	  fdd j D S )Nc                 3       | ]} j | V  qd S rs   r   rc   r   r-   r   r   rw     rx   z$EnumMeta.__iter__.<locals>.<genexpr>r   r   r   r   r   __iter__  s   zEnumMeta.__iter__c                 C   
   t | jS rs   )r   r   r   r   r   r   __len__  r   zEnumMeta.__len__c                 C   s   	 t | jS rs   )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   r|     r   zEnumMeta.__repr__c                    s   	  fddt  jD S )Nc                 3   r   rs   r   r   r   r   r   rw     rx   z(EnumMeta.__reversed__.<locals>.<genexpr>)reversedr   r   r   r   r   __reversed__  s   zEnumMeta.__reversed__c                    s2   	 | 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   sh  	 | j }|d u r| fn|| f}| | |\}	}
|||}t|tr*|dd }t|ttfrb|rbt|d trb|g }}g }t	|D ]\}}|

||||d d  }|| |||f qE|D ]}t|trs||| }}n|\}}|||< qd|||||}|d u rz
tdjd }W n tttfy   Y nw |d u rt| n||_|d ur||_|S )NrE   rF   r   r   r/   )r<   rZ   rb   rN   rO   rP   rQ   r   rR   	enumeraterA   rT   ry   sys	_getframe	f_globalsr   rL   r   r.   r,   r0   )r-   
class_namer   r   r   r   r   r\   r]   r   ra   re   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y7   |jdd d Y nw | |||d} t| _|| j	 | ||< | S )Nc                    s    g | ]\}} |r||fqS r   r   )rc   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>/  s    z$EnumMeta._convert_.<locals>.<lambda>)rV   c                 S   s   | d S Nr   r   r   r   r   r   r   2  s    )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 ]}|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   rz   r   r   r   rY   9  s   
z$EnumMeta._check_for_existing_membersc                    sV   	 |st tfS  fdd}|d }t|tstd||pt }|jr'td||fS )Nc                    s   t  }| D ]:}d }|jD ]2}|tu rqt|tr&|jtur%||j  nqd|jv r:t|tr1q||p6|  n|p=|}qqt|dkrNt	d |f |rT|
 S d S )Nry   r   z%r: too many data types: %r)rS   r   r   r   r   r   addrj   r   r&   r   )r]   
data_typesr   	candidaterz   r   r   r   _find_data_typeN  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   ra   r`   r   r   r   rZ   C  s   
zEnumMeta._get_mixins_c           	      C   s   	 |  dd }|d u}|d u r9dD ]$}||fD ]}t||d }|d d jtjtjhvr.|} nq|d ur5 nqtj}|tju rAd}nd}|||fS )Nry   )r   ry   FT)r   r[   ry   r   r   )	re   r`   ra   ry   r   methodpossibletargetr   r   r   r   r   r  s0   


zEnumMeta._find_new_rs   )r/   r,   r0   classmethodrb   ry   r   r   r   r   r   r   r   r   r   propertyr   r|   r   r   r   r   staticmethodrY   rZ   r   rX   r   r   r;   r   r      s8    
 .%
	
5!
	
.r   c                   @   sr   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 n ty2   | j D ]}|j|kr/|   Y S q"Y nw z	d }| |}W n tyR } z
|}d }W Y d }~nd }~ww z6t	|| r`|W d }d }S t
d|| jf }|d u rs|d u rs||d u rtd| j|f }t	|t
s||_|d }d }w )N%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member)r   r   r   r&   r   valuesr{   rB   	ExceptionrN   rL   r0   r/   __context__)r-   r2   memberexcresulteve_excr   r   r   ry     sP   


zEnum.__new__c              	   C   s4   	 t |D ]}z|d W   S  ty   Y qw |S Nr   )r   r&   )r   r   r   r   
last_valuer   r   r   rA     s   zEnum._generate_next_value_c                 C   s   d S rs   r   )r-   r2   r   r   r   rB     s   zEnum._missing_c                 C   s   d| j j| j| jf S )N<%s.%s: %r>)r<   r/   r   r{   r:   r   r   r   r|     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                    s6   	  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   )rc   r-   rv   r:   r   r   r     s    z Enum.__dir__.<locals>.<listcomp>c                 S   s   g | ]
}|d  dkr|qS r   r   ru   r   r   r   r         )r<   ri   r,   )r<   rg   rj   )r(   added_behaviorr   r:   r   r     s   
zEnum.__dir__c                 C   sL   	 t | jtjtjfv}| jtu s|rt}t| }n| j}| j}|||S rs   )	r   r}   r   r   r   r   rO   r{   r~   )r(   format_specstr_overriddenr-   valr   r   r   r~     s   
zEnum.__format__c                 C   r   rs   )hashr   r:   r   r   r   __hash__  r   zEnum.__hash__c                 C   s   | j | jffS rs   r<   r{   r'   r   r   r   r+     s   zEnum.__reduce_ex__c                 C      	 | j S rs   )r   r:   r   r   r   r        z	Enum.namec                 C   r   rs   r{   r:   r   r   r   r2   !  r   z
Enum.valueN)r/   r,   r0   ry   rA   r   rB   r|   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      | j S rs   r   r'   r   r   r   r   +  s   r   c                   @   sn   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   sZ   	 |s|d ur	|S dS t |D ]}zt|}W  n ty&   td| d w d|d  S )Nr   zInvalid Flag value: %rr   )r   	_high_bitr   r&   )r   r   r   r   r   high_bitr   r   r   rA   3  s   zFlag._generate_next_value_c                 C   s0   	 |}|dk r
| }|  |}|dk r| }|S r   )r@   )r-   r2   original_valuepossible_memberr   r   r   rB   F  s   
zFlag._missing_c                 C   sd   	 | j |d }|d u r0t| |\}}|rtd|| jf t| }d |_||_| j 	||}|S Nr   )
r   r   
_decomposerL   r0   r   ry   r   r{   r   )r-   r2   pseudo_memberr   extra_flagsr   r   r   r@   S  s   
zFlag._create_pseudo_member_c                 C   s:   	 t || jstdt|j| jjf |j| j@ |jkS )Nr   )rN   r<   r&   r   r0   r{   r(   otherr   r   r   r   g  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      g | ]
}t |jp
|jqS r   rO   r   r{   ru   r   r   r   r   x  r   z!Flag.__repr__.<locals>.<listcomp>)r<   r   r/   r{   r  r   r(   r-   r   	uncoveredr   r   r   r|   q  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 )Nr   r   r   z%s.%rr  c                 S   r  r   r  ru   r   r   r   r     r   z Flag.__str__.<locals>.<listcomp>)r<   r   r/   r  r{   r   r   r  r   r   r   r}   |  s   
zFlag.__str__c                 C   r   rs   )boolr{   r:   r   r   r   r     r   zFlag.__bool__c                 C   s"   t || jstS | | j|jB S rs   rN   r<   NotImplementedr{   r  r   r   r   __or__     zFlag.__or__c                 C   s"   t || jstS | | j|j@ S rs   r  r  r   r   r   __and__  r  zFlag.__and__c                 C   s"   t || jstS | | j|jA S rs   r  r  r   r   r   __xor__  r  zFlag.__xor__c                 C   sN   t | j| j\}}| d}| jD ]}||vr!|j| j@ s!||B }q| |S r   )r  r<   r{   )r(   r   r  invertedrv   r   r   r   
__invert__  s   


zFlag.__invert__N)r/   r,   r0   rA   r   rB   r@   r   r|   r}   r   r  r  r  r  r   r   r   r   r   .  s    


r   c                   @   sR   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  )rN   intrL   r0   r@   )r-   r2   
new_memberr   r   r   rB     s
   

zIntFlag._missing_c                 C   s   	 | j |d }|d u rV|g}t| |\}}|r<t|}d| }|| j vr.||vr.|| || kr6d}n||N }|st|D ]}t| |}d |_||_	| j 
||}q@|S )Nr   r   )r   r   r  r  rT   r   r  ry   r   r{   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 rs   rN   r<   r  r  r{   )r(   r  r   r   r   r   r    s   zIntFlag.__or__c                 C   s,   t || jtfs
tS | | j| |j@ S rs   r   r  r   r   r   r       zIntFlag.__and__c                 C   s,   t || jtfs
tS | | j| |jA S rs   r   r  r   r   r   r    r!  zIntFlag.__xor__c                 C   s   |  | j }|S rs   r   )r(   r   r   r   r   r    s   zIntFlag.__invert__N)r/   r,   r0   r   rB   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|r.ddd |D }td| |f | S )Nz, c                 S   s   g | ]
\}}d ||f qS )z%s -> %sr   )rc   aliasr   r   r   r   r     r   zunique.<locals>.<listcomp>z duplicate values found in %r: %s)r   rk   r   rT   r   rL   )enumeration
duplicatesr   r   alias_detailsr   r   r   r
     s   
r
   c           	      C   s   	 |}|dk }g }| D ]}|j }|r"||@ |kr"|| || M }q|sH|}|rHdt| }|| jv rA|| j|  || M }|| M }|s)|sW|| jv rW|| j|  |jdd dd t|dkrr|d j |krr|d ||fS )Nr   r   c                 S   r  rs   r   )rv   r   r   r   r     s    z_decompose.<locals>.<lambda>T)rV   reverser   )r2   rT   r  r   r   r   r   )	flagr2   not_coverednegativer   r   r   tmpr  r   r   r   r    s2   





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>   s4    
	T     vI