o
    CRhC                    @   s  d dl mZ ddlT ddlmZ ddlmZ d dlmZ d dl	Z
g dZeZzd dlZW n ey<   dZed	 Y nw ze W n eyL   eZY nw ze W n ey^   d
d ZY nw dZz%d dlZeedroedd dlmZmZmZ d Z Z Z Z!eefZW n ey   d Z Z Z Z Z Z  Z Z!Y nw erzd dlm"Zm#Z eeef7 ZW n	 ey   Y nw zd dlm$Z  ee f7 ZW n	 ey   Y nw zd dlm%Z! ee!f7 ZW n	 ey   Y nw d Z& Z' Z( Z)Z*dddZ+dd Z,dd Z-dd Z.dddZdd Z/z
d dl0m1Z1 e1Z2W n ey&   e3Z2dZ1Y nw G d d! d!e2Z4e4Z5e1du r8e4Z1e4Z6G d"d# d#e7Z8e8d$e3fi Z9d%d& Z:d'd( Z;d)d Z,d*d+ Z<d,d Z-d-d. Z=d/d0 Z>e+e? G d1d2 d2eZ@d Z Z% Z Z$ Z# Z" ZAZBG d3d4 d4e3Ze8d5e3fi ZCG d6d7 d7eZDdd8lEmZ e4e_4eDe_D[G d9d: d:eZFG d;d< d<ZGG d=d> d>eHZIe8d?e7fi ZJG d@dA dAe7ZKerG dBdA dAeKeZKeKZeLeKMdCe3fdDe? dEZNeNeOdFdG ZPeNdHdI ZQeNdJdK ZReNeOdLdM ZSeNeTdNdO ZUeNeOdPdQ ZVeNeOdRdS ZWeNeOdTdU ZXeNdVdW ZYeNdXdY ZZe[r8eNdZd[ Z\eNd\d] Z]eNd^d_ Z^eNd`da Z_eNdbdc Z`eNddde ZaeNdfdg ZbeNdhdi ZceNdjdk ZdeNdldm ZeeNe4dndo ZfeNe4dpdq ZgeNe4drds Zhepe3ZieKdCeifeNj Z[Ndtdu ZkekZldvdw Zmdxdy Zne!ree!fZonefZoeKdzeod{d|iZ%G d}d~ d~epe%ZG dd deqe%Z$G dd de$ZrG dd de$Zse[rG dd deZteud G dd deZvG dd deZwG dd deZxG dd deZyG dd deZzerG dd	 d	eZ{G dd deZ|dddZ}dd Z~dddZdd Zzd dlmZ W n eyO   G dd de$ZY nw e+ee?  er^eefZnefZeLeKMdede? dEZeed< eed< eddO ZUeeOdd Zeed< eeOdd ZeeOddQ ZVeeOdd ZeeOdd Zedd Zedd Zedd ZeddW ZYeddY ZZeredd Znedd Zedd Zedd Zedd Zedd Zeed< eed< eed< eKdeej Z#[G ddǄ depe%e#Z"ddɄ Zdd˄ Zdd̈́ Zddτ ZdddфZer2d dlmZ ddԄ Zddք Zdd؄ Zddڄ ZG dd܄ de3ZdS )    )print_function   )*)NamedConstant)
NamedTuple)defaultdictN).	bit_countis_single_bitbinpropertybitsAddValue
MagicValue
MultiValueNoAliasUniqueenumautoAddValueEnumMultiValueEnumNoAliasEnum
UniqueEnumAutoNumberEnumOrderedEnumuniqueno_argextend_enumenum_propertyEnumTypeEnumMetaEnumDictEnumIntEnumStrEnumFlagIntFlagLowerStrEnumUpperStrEnumReprEnum
SqliteEnumsqlite3FlagBoundarySTRICTCONFORMEJECTKEEPadd_stdlib_integrationremove_stdlib_integrationexport
cls2module_reduce_ex_by_nameshow_flag_valuesr)   c                 C   s   | D ]}|r	 dS qdS )NTF )iterableelementr6   r6   M/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/aenum/_enum.pyany'   s
   r:   r6   versionzwrong version)r   r!   r"   )r%   r$   )r#   )r(   c                    s    du r|   fdd}|S t | tr(| j D ]\}}t|tr%| |< q| S t | ts4trFt | trF| j }|D ]\}}| |< q;| S td| f )z
    export([collection,] namespace) -> Export members to target namespace.

    If collection is not given, act as a decorator.
    Nc                    s
   t |  S N)r2   )
collection	namespacer6   r9   export_decoratorV      
z export.<locals>.export_decoratorz %r is not a supported collection)	
issubclassr   __dict__items
isinstancer!   stdlib_enums__members__	TypeError)r=   r?   r@   ncdatamr6   r>   r9   r2   N   s    



r2   c                 C   $   d}| r| | d M } |d7 }| s|S )aR  
    return number of set bits

    Counting bits set, Brian Kernighan's way*

        unsigned int v;          // count the number of bits set in v
        unsigned int c;          // c accumulates the total bits set in v
        for (c = 0; v; c++)
        {   v &= v - 1;  }       //clear the least significant bit set

    This method goes through as many iterations as there are set bits. So if we
    have a 32-bit word with only the high bit set, then it will only go once
    through the loop.

    * The C Programming Language 2nd Ed., Kernighan & Ritchie, 1988.

    This works because each subtraction "borrows" from the lowest 1-bit. For
    example:

          loop pass 1     loop pass 2
          -----------     -----------
               101000          100000
             -      1        -      1
             = 100111        = 011111
             & 101000        & 100000
             = 100000        =      0

    It is an excellent technique for Python, since the size of the integer need
    not be determined beforehand.

    (from https://wiki.python.org/moin/BitManipulation)
    r   r   r6   numcountr6   r6   r9   r   e   s   !r   c                 C   s    | dkrdS | | d M } | dkS )z>
    True if only one bit set in value (should be an int)
    r   Fr   r6   valuer6   r6   r9   r	      s   r	   c                 c   s.    | r| |  d @ }|V  | |N } | sdS dS )zZ
    Return each bit value one at a time.

    >>> list(_iter_bits_lsb(6))
    [2, 4]
    r   Nr6   )rR   bitr6   r6   r9   _iter_bits_lsb   s   rT   c                 C   s   d|    }| dkrt| | ddd}nt|  |d | A }|dd }|dd }|s1d}|durHt||k rH|d | | | d }d	||f S )
z
    Like built-in bin(), except negative values are represented in
    twos-compliment, and the leading bit always indicates sign
    (0=positive, 1=negative).

    >>> bin(10)
    '0b0 1010'
    >>> bin(~10)   # ~10 is -11
    '0b1 0101'
       r   10r   N   z%s %s)
bit_length
_bltin_binreplacelen)rR   max_bitsceilingssigndigitsr6   r6   r9   r
      s   r
   c                 C   s   t t| S r<   )listrT   rQ   r6   r6   r9   r5         r5   )DynamicClassAttributec                   @   s\   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdddZ	dd Z
dd Zdd ZdS )r   a  
    This is a descriptor, used to define attributes that act differently
    when accessed through an enum member and through an enum class.
    Instance access is the same as property(), but access to an attribute
    through the enum class will look in the class' _member_map_.
    Nc                 C   s>   || _ || _|| _|p|j| _|d u | _tt|dd| _d S )N__isabstractmethod__F)fgetfsetfdel__doc__overwrite_docboolgetattrrf   )selfrg   rh   ri   docr6   r6   r9   __init__   s   
zproperty.__init__c                 C   s<   | j r|jnd }t| || j| j|p| j}| jd u |_ |S r<   )rk   rj   typerh   ri   )rn   rg   fdocresultr6   r6   r9   getter   s   zproperty.getterc                 C   s8   | j rtjnd }t| | j|| j| j}| jd u |_ |S r<   )rk   rg   rj   rq   ri   )rn   rh   rr   rs   r6   r6   r9   setter      zproperty.setterc                 C   s8   | j rtjnd }t| | j| j|| j}| jd u |_ |S r<   )rk   rg   rj   rq   rh   )rn   ri   rr   rs   r6   r6   r9   deleter   rv   zproperty.deleterc                 C   sZ   | j j| j}| jp| jp| j}g }|r|d|  |r&|d|j  dd	| S )N%rzfunction=%szproperty(%s), )

ownerclass_member_map_getnamerg   rh   ri   append__name__join)rn   memberfuncstringsr6   r6   r9   __repr__   s   zproperty.__repr__c                 C   s   |d u rz|j | j W S  ty   td|| jf w | jd ur&| |S | jd ur4td| j|f z|j| j W S  tyK   td|| jf w )Nz%r has no attribute %rzcannot read attribute %r on %rz%r member has no attribute %r)r{   r}   KeyErrorAttributeErrorrg   rh   rC   )rn   instancerz   r6   r6   r9   __get__   s*   


zproperty.__get__c                 C   sD   | j d u r| jd urtd| j| jf ||j| j< d S |  ||S )Nz%cannot set attribute %r on <aenum %r>)rh   rg   r   r}   clsnamerC   )rn   r   rR   r6   r6   r9   __set__  s   

zproperty.__set__c                 C   sb   | j d u r,| js| jrtd| j| jf | j|jv r"|j| j= d S td| j| jf |  |S )Nz(cannot delete attribute %r on <aenum %r>z$no attribute %r on <aenum %r> member)ri   rg   rh   r   r}   r   rC   )rn   r   r6   r6   r9   
__delete__  s   

zproperty.__delete__c                 C   s   || _ |j| _|| _d S r<   )r}   r   r   rz   )rn   rz   r}   r6   r6   r9   __set_name__+  s   
zproperty.__set_name__)NNNNr<   )r   
__module____qualname__rj   rp   rt   ru   rw   r   r   r   r   r   r6   r6   r6   r9   r      s    



r   c                   @      e Zd Zdd ZdS )SentinelTypec                 C   s
   d| j  S )Nz<%s>r   clsr6   r6   r9   r   9  rA   zSentinelType.__repr__N)r   r   r   r   r6   r6   r6   r9   r   8      r   Sentinelc                 C   s   | dk rdS | dt |  kS )Nr   FrU   )	_high_bitrQ   r6   r6   r9   _power_of_two=  s   r   c                 C   s^   | dv rt | S d}| dk rd}|  } t| d? t | d@  }|r-dddd	 |D  }|S )
N)r   r   Fr   Tr   rV    c                 S   s   g | ]}d |dk qS )10rV   r6   ).0dr6   r6   r9   
<listcomp>K      zbits.<locals>.<listcomp>)strr   r   )rO   negativers   r6   r6   r9   r   B  s   r   c                 C   rM   )ae  
        return number of set bits

        Counting bits set, Brian Kernighan's way*

            unsigned int v;          // count the number of bits set in v
            unsigned int c;          // c accumulates the total bits set in v
            for (c = 0; v; c++)
            {   v &= v - 1;  }       //clear the least significant bit set

        This method goes through as many iterations as there are set bits. So if we
        have a 32-bit word with only the high bit set, then it will only go once
        through the loop.

        * The C Programming Language 2nd Ed., Kernighan & Ritchie, 1988.

        This works because each subtraction "borrows" from the lowest 1-bit. For example:

              loop pass 1     loop pass 2
              -----------     -----------
                   101000          100000
                 -      1        -      1
                 = 100111        = 011111
                 & 101000        & 100000
                 = 100000        =      0

        It is an excellent technique for Python, since the size of the integer need not
        be determined beforehand.
    r   r   r6   rN   r6   r6   r9   r   O  s   c                 C   s    d}| r|d7 }| dL } | s|S )Nr   r   r6   )rO   lengthr6   r6   r9   bit_lens  s   r   c                 C   s   | dko| | d @ dkS )z<
    True if only one bit set in num (should be an int)
    r   r   r6   )rO   r6   r6   r9   r	   z  s   c                 C   s@   t | tr
| t} t| d| } t| \}}}}|duo|duS )z6check if new generate method supports *args and **kwdsim_funcN)rE   staticmethodr   rq   rm   
getargspec)methodargsvarargskeywordsdefaultsr6   r6   r9   _check_auto_args  s
   

r   c                    s   | s| S t | d  t ts&t fdd| dd D s"tdt| S t | d d  zt fdd| dd D rGt| dd	 d
W S td ty[   t| dd	 d
 Y S w )zC
    sorts things by value if all same type; otherwise by name
    r   c                 3   s    | ]	}t | u V  qd S r<   rq   r   v	sort_typer6   r9   	<genexpr>      zenumsort.<locals>.<genexpr>r   Nz$cannot sort items of different typesc                 3   s     | ]}t |d   u V  qdS )r   Nr   r   r   r6   r9   r     s    c                 S      | d S Nr   r6   ir6   r6   r9   <lambda>      zenumsort.<locals>.<lambda>keyztry name sort insteadc                 S   r   Nr   r6   r   r6   r6   r9   r     r   )rq   rB   tupleallrH   sorted)thingsr6   r   r9   enumsort  s   
r   c                   @   sF   e Zd ZeddZeddZeddZeddZed	d
Zdd Z	dS )EnumConstantsaddvaluez;prepends value(s) from _generate_next_value_ to each member
magicvaluez7calls _generate_next_value_ when no arguments are given
multivaluez#each member can have several valuesnoaliasz2duplicate valued members are distinct, not aliasedr   z(duplicate valued members are not allowedc                 C      | j S r<   _name_rn   r6   r6   r9   r        zEnumConstants.__repr__N)
r   r   r   constantr   r   r   r   r   r   r6   r6   r6   r9   r     s    




r   c                   @   sP   e Zd 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S )r   z+
    Helper class to track args, kwds.
    c                 O   s(   || _ t| | _t|| _d | _d S r<   )_argsdictrD   _kwdshash_hashr}   )rn   r   kwdsr6   r6   r9   rp     s   

zenum.__init__c                 C   r   r<   )r   r   r6   r6   r9   r        z	enum.argsc                 C   
   | j  S r<   )r   copyr   r6   r6   r9   r        
z	enum.kwdsc                 C   r   r<   )r   r   r6   r6   r9   __hash__  r   zenum.__hash__c                 C   s(   t || jstS | j|jko| j|jkS r<   rE   	__class__NotImplementedr   r   rn   otherr6   r6   r9   __eq__     zenum.__eq__c                 C   s(   t || jstS | j|jkp| j|jkS r<   r   r   r6   r6   r9   __ne__  r   zenum.__ne__c                 C   sn   g }d dd | jD }|r|| d dd tt| j D }|r,|| d| jjd |f S )Nry   c                 S   s   g | ]}d |f qS )rx   r6   r   ar6   r6   r9   r     s    z!enum.__repr__.<locals>.<listcomp>c                 S      g | ]
\}}d ||f qS )%s=%rr6   r   kr   r6   r6   r9   r         %s(%s))	r   r   r~   r   rc   r   rD   r   r   )rn   finalr   r   r6   r6   r9   r     s   
"
zenum.__repr__N)r   r   r   rj   rp   bltin_propertyr   r   r   r   r   r   r6   r6   r6   r9   r     s    

r   no_valuec                   @   s<  e Zd ZdZeZeZg 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d Zdd Zdd Zdd ZerBd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,d- Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'e(d@dA Z)e)j*dBdA Z)dFdDdEZ+dCS )Gr   zP
    Instances are replaced with an appropriate value in Enum class suites.
    c                 C   0   |   }| jd d  |_|jt| |ff |S r<   r   _operationsr~   _and_rn   r   new_autor6   r6   r9   __and__     zauto.__and__c                 C   0   |   }| jd d  |_|jt|| ff |S r<   r   r   r6   r6   r9   __rand__   r   zauto.__rand__c                 C   .   |   }| jd d  |_|jt| ff |S r<   )r   r   r~   _inv_rn   r   r6   r6   r9   
__invert__     zauto.__invert__c                 C   r   r<   r   r   r~   _or_r   r6   r6   r9   __or__  r   zauto.__or__c                 C   r   r<   r   r   r6   r6   r9   __ror__  r   zauto.__ror__c                 C   r   r<   r   r   r~   _xor_r   r6   r6   r9   __xor__  r   zauto.__xor__c                 C   r   r<   r   r   r6   r6   r9   __rxor__  r   zauto.__rxor__c                 C   r   r<   )r   r   r~   _abs_r   r6   r6   r9   __abs__$  r   zauto.__abs__c                 C   r   r<   r   r   r~   _add_r   r6   r6   r9   __add__*  r   zauto.__add__c                 C   r   r<   r  r   r6   r6   r9   __radd__0  r   zauto.__radd__c                 C   r   r<   )r   r   r~   _neg_r   r6   r6   r9   __neg__6  r   zauto.__neg__c                 C   r   r<   )r   r   r~   _pos_r   r6   r6   r9   __pos__<  r   zauto.__pos__c                 C   r   r<   r   r   r~   _div_r   r6   r6   r9   __div__C  r   zauto.__div__c                 C   r   r<   r
  r   r6   r6   r9   __rdiv__I  r   zauto.__rdiv__c                 C   r   r<   r   r   r~   
_floordiv_r   r6   r6   r9   __floordiv__O  r   zauto.__floordiv__c                 C   r   r<   r  r   r6   r6   r9   __rfloordiv__U  r   zauto.__rfloordiv__c                 C   r   r<   r   r   r~   	_truediv_r   r6   r6   r9   __truediv__[  r   zauto.__truediv__c                 C   r   r<   r  r   r6   r6   r9   __rtruediv__a  r   zauto.__rtruediv__c                 C   r   r<   r   r   r~   _lshift_r   r6   r6   r9   
__lshift__g  r   zauto.__lshift__c                 C   r   r<   r  r   r6   r6   r9   __rlshift__m  r   zauto.__rlshift__c                 C   r   r<   r   r   r~   _rshift_r   r6   r6   r9   
__rshift__s  r   zauto.__rshift__c                 C   r   r<   r  r   r6   r6   r9   __rrshift__y  r   zauto.__rrshift__c                 C   r   r<   r   r   r~   _mod_r   r6   r6   r9   __mod__  r   zauto.__mod__c                 C   r   r<   r  r   r6   r6   r9   __rmod__  r   zauto.__rmod__c                 C   r   r<   r   r   r~   _mul_r   r6   r6   r9   __mul__  r   zauto.__mul__c                 C   r   r<   r"  r   r6   r6   r9   __rmul__  r   zauto.__rmul__c                 C   r   r<   r   r   r~   _pow_r   r6   r6   r9   __pow__  r   zauto.__pow__c                 C   r   r<   r&  r   r6   r6   r9   __rpow__  r   zauto.__rpow__c                 C   r   r<   r   r   r~   _sub_r   r6   r6   r9   __sub__  r   zauto.__sub__c                 C   r   r<   r*  r   r6   r6   r9   __rsub__  r   zauto.__rsub__c                 C   s   | j rdS d| j| j| jf S )Nz	auto(...)zauto(%r, *%r, **%r))r   _valuer   r   r   r6   r6   r9   r     s   zauto.__repr__c                 C   sF   | j tur| jrtd| j tu r| js| j S | j tur| j S |  S )Nzauto() object out of sync)r.  
_auto_nullr   rH   _resolver   r6   r6   r9   rR     s   
z
auto.valuec                 C   s   | j r| |}|| _d S r<   )r   r0  r.  rn   rR   r6   r6   r9   rR     s   

Nc                 C   s   | j }| jD ]5\}}g }|D ](}t||r1|jtu r*|d u r$t    S || q||j q|| q|| }qg | jd d < || _|S r<   )r   r   rE   rR   r/  r~   r.  )rn   
base_valuer   opparamsvaluesparamrR   r6   r6   r9   r0    s   


zauto._resolver<   ),r   r   r   rj   r/  enum_memberr.  r   r   r   r   r   r   r   r   r  r  r  r  r	  PY2r  r  r  r  r  r  r  r  r  r  r   r!  r$  r%  r(  r)  r,  r-  r   r   rR   ru   r0  r6   r6   r6   r9   r     sT    


r   )_commonc                   @   s(   e Zd ZdZdZdZdZdZdd ZdS )	_EnumArgSpec)r   z all args except *args and **kwds)r   zthe name of the *args variable)rU   zthe name of the **kwds variable)rX   zany default values)   z0number of required values (no default available)c                 C   sN   t |}|\}}}}|r|dt|  }n|dd  }tt|||||fS r   )r   r]   r   __new__r:  )r   	_new_funcargspecr   r   r   r   reqsr6   r6   r9   r<    s   z_EnumArgSpec.__new__N)	r   r   r   r   r   r   r   requiredr<  r6   r6   r6   r9   r:    s    r:  c                   @       e Zd ZdZdd Zdd ZdS )_proto_memberzW
    intermediate step for enum members between class execution and final creation
    c                 C   s
   || _ d S r<   rQ   r1  r6   r6   r9   rp     rA   z_proto_member.__init__c              
      sn  t || | j i }d}d}d}d}t tr& r&t d tr& } d  t tr7 jtu r7 j} j}n6t trJ j} jf j } j n#t trV j} j}nt t	rb j  f}nt tsk f}n }|dur f|dd   i } }~|j
sd|jv r|j
r|d }|dd }d|jv r|dd }n|}|dd }|d  nE|jr|jr|t|j d d }|js|dt|jj }|d  n!|jr|dd }|dd }|d  n|jr|d  n|}n|}|jtu r|f}|js||}	n|j|g|R i |}	t|	dsB|jtu r  |	_n"z|j|i ||	_W n tyA }
 z	td}|
|_|d}
~
ww |	j ||	_||	_|	j|i | t|j|	_tdurt|tr| j  O  _ t! rw| j" O  _"d|j #  d |_$|j%r|j&| nt't(}zCz|j)  }	|j*r||	j+ &| W n- ty   |j,D ]\}}|j+}||	jkr|j*r|| &| |}	 nqt-Y nw W n2 t-y   tdu st|ts|j&| ntdurt|trt! r|j&| Y nw |r3g }|. D ]\}}d	/|}|&d
|||| jf  qt0d|j1d/|f t| jtr>|	| j_2d}d}d}|j3dd D ]5}|j45|}|durt|t6t7frh|}|}d} nt8|r{|}|psd}|px|}qKd}|}qK|rt6 }|	|_9|:|| |dv rt;|dd|_<t;|dd|_=t;|dd|_>t;|dd|_?t;|dd|_@t;|dd|_A||_B||_CtD||| ntD|||	 |	|jE|<  f| }|j
r||vr||f7 }||	_F|D ]E |j
r |j)v stG fdd|j,D rt0d f z|j%rtd|	|j) < W q ty4   | j, |	ff7  _,Y qw dS )zR
        convert each quasi-member into an instance of the new enum class
        r6   Nr   r   rR   _value_z/_value_ not set in __new__, unable to create itrU   ,z%s --> %s [%r]z%s: duplicate names found: %sz;  r   descattr)r   rE  rg   r   rh   r   ri   r   c                 3   s    | ]	\}}| kV  qd S r<   r6   r   r   rL   rQ   r6   r9   r     r   z-_proto_member.__set_name__.<locals>.<genexpr>z%r has already been usedzcannot use dict to store value)HdelattrrR   rE   r   r   r/  r   r   r   Member_multivalue__creating_init__auto_init_
_new_args_r]   _auto_args__member_type_
_use_args__new_member_hasattrobjectrC  	ExceptionrH   	__cause__r   __objclass__rp   _member_names__sort_order_r$   rB   _flag_mask_r	   _singles_mask_rZ   
_all_bits_	_noalias_r~   r   rc   _value2member_map__unique_r}   _value2member_seq_r   rD   r   
ValueErrorr   r7  __mro__rC   r|   r   re   is_descriptorr   r   rm   rg   _getrh   _setri   _del
_attr_type	_cls_typesetattrr{   _values_r:   )rn   
enum_classmember_namer   r   	init_argsextra_mv_argsr   mv_argr7  excte	nonuniqueunhashable_valuecanonical_memberr}   messagealiasesbad_aliasesfound_descriptordescriptor_type
class_typebaserF  redirectr5  r6   rQ   r9   r     sf  























z_proto_member.__set_name__N)r   r   r   rj   rp   r   r6   r6   r6   r9   rB    s    rB  c                       sH   e Zd ZdZ fddZ fddZ fddZdd	 Zd
d Z  Z	S )r    zTrack enum member order and ensure member names are not reused.

    EnumType will use the names found in self._member_names as the
    enumeration member names.
    c                    s   t t|   || _|| _|| _|| _d | _g | _t	 | _
|| _t|v  | _}t|v | _t|v | _| jr=| jr=td| | jrI| jrItd| || _|| _d| _d| _t|v| _g | _g | _| jrhg d| _d| _d| _g | _d| _d S )Nz2%r: AddValue and MagicValue are mutually exclusivez4%r: MultiValue and MagicValue are mutually exclusiver6   F)r   r   classmethodT)superr    rp   	_cls_name_constructor_init_constructor_start_constructor_boundary_generate_next_value_member_namesset_member_names_set	_settingsr   	_addvaluer   _magicvaluer   _multivaluerH   _start_addvalue_value	_new_args
_auto_args_locked_init_ignore_ignore_init_done_allow_init_last_values_auto_called)rn   cls_namesettingsstartconstructor_initconstructor_startconstructor_boundaryr   r   r6   r9   rp     s:   




zEnumDict.__init__c                    s   || j kr| j | vrtS | js || v s || jv s t|s t|r(tt| |S | j	rD| 
|| jt| j| jd d  }| || |S td)Nz"Magic is not set -- why am I here?)r~  r   r  r  	is_sunder	is_dunderr}  r    __getitem__r  r  r  r]   r  r  __setitem__rT  rn   r   rR   r  r6   r9   r    s    
"zEnumDict.__getitem__c                    s>  d}t | j|r
n5t| j|rn-t|r|dvr$td| j|f | js4|dvr4td| j|f |dkrr| jrBtd| j t|t	rL|
 }nt|}|| _t|| j@ }|rmtd| jd	d
d |D f d| _n|dkr| jrtd| j n|dkr| jrtd| j || _n|dkr.t|ttfs|f}t|tst|}|  j|O  _t|v rt|v rtd| j t|v rt|v rtd| j tg d}| jD ]}||vrtd| j||f d||< q|d | _|d | _|d | _| j | _| jr| jsg d| _| jr'| jr'd| jvr'| jdd t| j}n|dkrq| j r>td| j |}t|t	rN|!dd
 }| jr_d| jvr_| jdd | jrjtd| j || _|}n|d kr| j"r~td!|}|d"urt|t#r|j$}nt|t%rtd#| j |}t#|}t&|| _'t(| d$| nt)|r|d%krd&}| jstd| j|f n#|d'krt|t#r|j$}t*|| _+n|d(krt|t%st%|}t,|rd| _nI|| jv rtd)| j|f || jv rn2t,|s9d*| _|| v r&td+| j|| | f t-|t.u r<||_/| jr;td,| j n| jrK| jsK| 0||}n| jr{t-|turY|f}t|d t1rp| 2||d f|d-d"  }| jrz| 0||}nt|t1r| 2||}ntt-|tu rt3d.d |D rg }	|D ]}
t|
t1rd*}| 2||
}
|
j4}
| j56|
 |	6|
 qt|	}n:t|t1s| j+o| j+j7}t8| jp|}t|trt8|}nd-}t8| jd-kp|}||k r| 0||}n	 | jr,t|t1r
|j9}nt|ts|f}n|}t8| jt8|kr,td0| j|| j|f | j:6| | j;| nd| _d*| _t|st)|st| j|st,|s|s[d}n9t|t1ri| j56|j4 n+t-|tu r|rt|d t1r| j56|d j4 n| j56|d  n| j56| t<t=| >|| d"S )1zChanges anything not sundured, dundered, nor a descriptor.

        If an enum member name is used twice, an error is raised; duplicate
        values are not checked for.

        Single underscore (sunder) names are reserved.
        T)_init_
_settings__order__ignore__start__create_pseudo_member__create_pseudo_member_values__generate_next_value_
_boundary__numeric_repr_	_missing__missing_value__missing_name__iter_member__iter_member_by_value__iter_member_by_def_z@%r: _sunder_ names, such as %r, are reserved for future Enum use)create_pseudo_member_r  r  r  z"%r: cannot set %r after init phaser  z%%r: ignore can only be specified oncez0%r: _ignore_ cannot specify already set names %sry   c                 s       | ]}t |V  qd S r<   reprr   r6   r6   r9   r   C      z'EnumDict.__setitem__.<locals>.<genexpr>r  z4%r: boundary specified in constructor and class bodyr  z1%r: start specified in constructor and class bodyr  -%r: NoAlias and Unique are mutually exclusivez*cannot specify both MultiValue and NoAliasr   r   r   r   r   z"%r: unknown qualifier %r (from %r)r   r   r   )r   r|  r   rR   r   r  z3%r: init specified in constructor and in class bodyrD   z0%r: _init_ and MagicValue are mutually exclusiver  z4_generate_next_value_ must be defined before membersNzB%r: _generate_next_value must be a staticmethod, not a classmethodr  	__order__r  r<  __init_subclass__z%r: attempt to reuse name: %rFz%r: %s already defined as %rz(%r: enum() and AddValue are incompatibler   c                 s       | ]}t |tV  qd S r<   )rE   r   r   r6   r6   r9   r         r6   z=%s.%s: number of fields provided do not match init [%r != %r])?is_internal_classr~  is_private_namer  r`  r  r  rH   rE   
basestringsplitrc   r  r  r  r   r  r  r  r   r  r   r   r   r   fromkeysr  r  r  r  r  insertr  r\   r  r   __func__r|  r   r  rh  r  r:  r  rb  rq   r   r}   _gnvr   _convert_autor:   rR   r  r~   r@  r]   r   r  addr}  r    r  )rn   r   rR   
auto_storealreadyallowed_settingsargr  gnvauto_valuedr   new_args
target_len
source_len
multi_args
test_valuer  r6   r9   r    s^  
























"


,zEnumDict.__setitem__c                 C   s   |j s|js|jtu rU|j s|jr|j }nd}| jo| jj}t| jp#|p&d}t|t	u r2t|}nd}t| jdkp<|}||k rU| 
||}d| _|j rR||_|S ||_|S )Nr6   r   T)r   r   rR   r/  r  r@  r]   r  rq   r   r  r  r   )rn   r   rR   r5  r  r  r  r  r6   r6   r9   r    s$   
zEnumDict._convert_autoc                 C   s   | j r!t|ts|f}| j|| jt| j| jd d  g|R  }n| || jt| j| jd d  }t|trAt|dkrA|d }|S Nr   r   )r  rE   r   r  r  r]   r  r  r  r6   r6   r9   r     s   
,"zEnumDict._gnv)
r   r   r   rj   rp   r  r  r  r  __classcell__r6   r6   r  r9   r      s    # Rr    r   c                       s  e Zd ZdZed6ddZdd Zd6 fdd		Zd
d Ze	ddddddfddZ
dd Zdd Zdd Zedd Zdd Zdd Zdd Zdd ZeZdd  Zd!d" Zd#d$ Zd7d&d'Zd8d(d)Zed*d+ Zed,d- Zed.d/ Zed0d1 Zed2d3 Zed4d5 Z   Z!S )9r   zMetaclass for EnumNr6   c                    s  |  || td u r|dkrd}nd}|d u}	|d u}
|d u}t|ts'|f}t|}d }d }| ||\ }|d urbt|dd }t|d|}|| |O }|pV|jd d  }|j	}|d u ra|j
}nd}t|v r~|r~d|vr~t|trz|dd nd	| }t|v rt|v rtd
| t|v rt|v rtd| tg d}|D ]}||vrtd||f qt||||	|
|d} |_dtd u r|dkptd uotdd |D  |_td urtdd |D r ttf vrt|v rdd }t||d<  fdd}||d< nOzt|j|_W nF ty   Y n=w |sKt|dr*t|j|_|r4||d< d|_|d urJt|t rG|!dd" }||_#nt|drWt|j|_|d urbt||d< |S )Nr$   TFr  r   r   rR   r   zvalue r  z1%r: MultiValue and NoAlias are mutually exclusiver  z%r: unknown qualifier %r)r  r  r  r  r  r  )r   flagc                 s   r  r<   )rB   r$   r   br6   r6   r9   r   A  r  z'EnumType.__prepare__.<locals>.<genexpr>c                 s   s    | ]}|t u V  qd S r<   )r$   r  r6   r6   r9   r   C  r  c                 _   s   d| f| S )NrU   r6   )r}   r  rP   r5  r   r   r6   r6   r9   r  L  s   z3EnumType.__prepare__.<locals>._generate_next_value_c                    s     | |}||_|S r<   )r<  rC  )r   
flag_value
type_valueobjmember_typer6   r9   r<  O  s   z%EnumType.__prepare__.<locals>.__new__r<  __new_member__rD  r  r  )$_check_for_existing_members_r$   rE   r   r  _get_mixins_rm   _get_settings_rL  _order_function_r  r   rc   r  r   r   rH   r   r   r  r    _member_typer:   
_base_typebaseintegerrS  r   r:  r  r  rR  _inherited_gnvr  r\   r  r  )metaclsr   basesinitr  r  boundaryr   initial_flagr  r  r  generateorder
first_enumr  r  	enum_dictr  r<  r6   r  r9   __prepare__  s   

.



zEnumType.__prepare__c                 O   s   d S r<   r6   )r   r   r   r6   r6   r9   rp   i  s   zEnumType.__init__c           9   
      sF
  t |tur|dd }|dd }|dd}|d|dd }	|dd }
|dd }|d	d }|d
d }|dd }|dd }|dd }|dd }|dd }|dd }|dd }|dd }t|d|}t|d|}t fdd| D }|}| j |||d}|r||d< |p|j}|	d u r|d}	|	d ur|		 }	t
|tr|}n|	d u rdd tt| D }nt
|	tr|	dd  }}	nwt|	rK|rt
|tsd|}td|rd| pddg}g }| D ]D\}}|rt
|ts
|f}|f| }nt||f}|jt|kr7td|jd |jt|d d!d |D f |||  qd"d t||	d#D }n|	}d$D ]}t | }|d ur_|||< qO|D ]}z	|| ||< W qc tyy   Y qcw | D ]\}}||vr|||< q~~	~
~~~~~~d%|_|j} t| td&d'g@ }!|!rt d(d |!f |dd }	t
|	tr|	dd }	|j}|j!}|j"}g }"|j#}#|j$}$d)}%|d urd%}%|d d  }"d|"v r|"d* dkrtd+t%|v }&t&|v }'t'|v }(t(|v })|)dg d |d }*|*D ]	}+||+d  q|p'|dd }|d
},|,d ur=t |,t*ur=t*|,},t| }|,d urL|,|d
< | + |\}-| ,||-\}}.}/t*||d,< |/|d-< | D ]}|| }t-|||< qj|"|d.< |'|d/< |&|d0< |(|d1< |)|d2< g |d3< t |d4< |d5< i |d6< d|d7< ||d< ||d< ||d8< |#|d9< |$|d:< d |d;< | . ||d<< |pt|-dd |d< d*|d=< d*|d>< d*|d?< d |d@< | D ]\}}0t
|0t/r|0j0||< qd)}1dA|vrt1urdB}2t2fdCdD|2D st3| d%}1dE|vrdF|dE< zd }3t 4|  ||W n t5y? }4 z|4j6p4|4}3W Y d }4~4nd }4~4ww |3d urG|3t7t8k r| D ]}j9| :| qNj9 D ]\}}0|| v rkq`t;|0dGrw|0:| q`t<d urt;dHrt=>  t?d urt?|v rňt1u rtdIdJ|vrj@_@j@|dJ< dK|vrňjA}5|5t1jAu rjB}5|5_AjA|dK< dLD ]9}||v rАqt|}6t|d }7t|-|d }8|7d ur|7|6kr|dAkr|1rqtC||8 |8||< qtDd ur$tEtDr$dMD ]}||vr"tC|ttD| |8||< qt7tFk r9tEtGr8tCdNttGdN ntHrQtEtGrQdOD ]}5tC|5ttG|5 qDt<d urk|.rbtCdPj9d  tCdt<j9d  |	rt
|	t*rw|	jI}	t|	rt*|	_JdQd t|	d#D }	tDd u r dRkstDd urtEtDstKd tKd= tKd> tKd? tKd@ n,tDd urtEtDrdSd D tdSd D krۈjL_M|	rfdTd|	D }	j9 D ]\}}t
|tNrt
|j0tOr|j0j0|_0q|	r!fdUd|	D }	|	jPkr!tdVjP|	f S )WNr  r  r  r6   r  r  r  r  r  r  r  r  r  r  r  r  r  r<  r   r  c                    s:   g | ]\}}t |st|st |st|s||fqS r6   )r  r  r  rb  r   r   r6   r9   r     s    z$EnumType.__new__.<locals>.<listcomp>)r  r  c                 S      g | ]\}}|qS r6   r6   r   r}   rR   r6   r6   r9   r         rD  r  r   zname r}   rR   z)%d values expected (%s), %d received (%s)ry   c                 S   s   g | ]}t |qS r6   r  r   r6   r6   r9   r     r  c                 S      g | ]}|j qS r6   r}   r   rL   r6   r6   r9   r         r   )r  r  r  r  r  r  r  r  r<  r  r  r  r  r  r  r  Tmror   zinvalid enum member name(s): %sFr   z7'value', if specified, must be the first item in 'init'rQ  rP  rK  rJ  _magicvalue_r\  r^  rW  r{   rO  r]  r_  rL  rM  rN  r  _value_repr_rY  rZ  r[  
_inverted___reduce_ex__)__getnewargs_ex____getnewargs__r  
__reduce__c                 3   s    | ]}| j v V  qd S r<   rC   r  r  r6   r9   r   7  r  z#EnumType.__new__.<locals>.<genexpr>rj   zAn enumeration.r   r  zOReprEnum subclasses must be mixed with a data type (i.e. int, str, float, etc.)
__format____str__)r   r   r  r  )r   r   r   r   r   r   r   __cmp__)__le____lt____gt____ge__r   r   r   r  c                 S   r  r6   r  r  r6   r6   r9   r     r  r$   c                 S   r  r6   rC  r  r6   r6   r9   r     r  c                    s(   g | ]}| j vst | jr|qS r6   )r{   r	   rC  r   orj  r6   r9   r     s
    c                    s.   g | ]}| j vs| j v r| jv r|qS r6   )r{   rW  r  r	  r6   r9   r     s    
z*member order does not match _order_:
%r
%r)Qrq   r    poprm   r   rD   r  r  r|   r   rE   OrderedDictr   rc   r  r\   r  callabler   r   r   _defined_len_r]   rH   _fields_r~   r   localsr   r  r  r  r`  r  r  r  r  r   r   r   r   
setdefaultr   r  
_find_new_rB  _find_data_repr_	nonmemberrR   rS  r:   make_class_unpicklabler<  RuntimeErrorrU  pyverPY3_6rC   r   rR  r!   r}  r  r(   r  r   r   rh  r$   rB   PY2_6intr8  r  r  rH  r  r  r   r   rW  )9r  r   r  clsdictr  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r<  enum_membersoriginal_dictcalced_orderr   r}   rR   
name_valuerF  r   r   member_namesinvalid_namescreating_initr  	auto_args	auto_initr   r   r   r   ignorer   r  r  save_newnew_uses_argsr  unpicklablemethodsro  er   class_method
obj_methodenum_methodr  )r   rj  r  r9   r<  l  s  

































	







"

	zEnumType.__new__c                 C      dS )z6
        classes/types should always be True.
        Tr6   r   r6   r6   r9   __bool__     zEnumType.__bool__r   c              	   C   s,   |du r
|  | |S | j|||||||dS )a  Either returns an existing member, or creates a new enum class.

        This method is used both when an enum class is given a value to match
        to an enumeration member (i.e. Color(3)) and for the functional API
        (i.e. Color = Enum('Color', names='red green blue')).

        When used for the functional API: `module`, if set, will be stored in
        the new class' __module__ attribute; `type`, if set, will be mixed in
        as the first base class.

        Note: if `module` is not set this routine will attempt to discover the
        calling module by walking the frame stack; if this is unsuccessful
        the resulting class will not be pickleable.
        N)modulequalnamerq   r  r  )r<  _create_)r   rR   namesr0  r1  rq   r  r  r6   r6   r9   __call__  s   zEnumType.__call__c                 C   sB   t || rdS z|| jv W S  ty    |dd | jD v  Y S w )zReturn True if `value` is in `cls`.

        `value` is in `cls` if:
        1) `value` is a member of `cls`, or
        2) `value` is the value of one of the `cls`'s members.
        Tc                 S   r  r6   r6   rG  r6   r6   r9   r     r  z)EnumType.__contains__.<locals>.<listcomp>)rE   r]  rH   r_  r   rR   r6   r6   r9   __contains__  s   
zEnumType.__contains__c                 C   sn   || j v rtd| j|f t| |}t|tr!td| j|f t|tr/td| j|f t| | d S )Nz!%s: cannot delete Enum member %r.z%s: cannot delete constant %rz%s: cannot delete property %r)	r{   r   r   get_attr_from_chainrE   r   r   rq   __delattr__)r   rF  
found_attrr6   r6   r9   r8  
  s   



zEnumType.__delattr__c                 C   s   t | jg d }| jtjur|d | jtjur|d ttdr)|d dD ]}t	| |t	t|t	t
|fvrA|| q+| jtu rKt|S tt t| j|B S )N)	r   r6  rj   r  __iter____len__rG   r   r   r<  r  r   )rp   r  r   r   )r  rW  rQ  rS  r<  r  r  r!   rR  rm   r$   rO  r   dir)r   interestingr   r6   r6   r9   __dir__  s   





zEnumType.__dir__c                 C   r   )zReturns a mapping of member name->value.

        This mapping lists all enum members, including aliases. Note that this
        is a copy of the internal mapping.
        )r{   r   r   r6   r6   r9   rG   1  s   
zEnumType.__members__c                 C   s   z| j | W S  ty   t d }Y nw td urBt| trBd|v rBz| d}|dD ]}|| | O }q-|W S  tyA   |w | |}t|| rN|S |)Nr   |r   )	r{   r   _sysexc_infor$   rB   r  r  rE   )r   r}   ro  rs   rI   r6   r6   r9   r  :  s$   

zEnumType.__getitem__c                    s    fdd j D S )Nc                 3       | ]} j | V  qd S r<   r{   r   r}   r   r6   r9   r   O  r  z$EnumType.__iter__.<locals>.<genexpr>rW  r   r6   r   r9   r:  N  s   zEnumType.__iter__c                    s    fddt  jD S )Nc                 3   rB  r<   rC  rD  r   r6   r9   r   R  r  z(EnumType.__reversed__.<locals>.<genexpr>)reversedrW  r   r6   r   r9   __reversed__Q  s   zEnumType.__reversed__c                 C   
   t | jS r<   )r]   rW  r   r6   r6   r9   r;  T  rA   zEnumType.__len__c                 C   s   d| j f S )Nz
<aenum %r>r   r   r6   r6   r9   r   Y  rd   zEnumType.__repr__c                 C   s   | j di }||v rtd| j|f t| |}t|tr'td| j|f t|ttfr<t|ts<td| j|f t	
| || dS )a  Block attempts to reassign Enum members/constants.

        A simple assignment to the class namespace only changes one of the
        several possible ways to get an Enum member from the Enum class,
        resulting in an inconsistent Enumeration.
        r{   z%s: cannot rebind member %r.z%s: cannot rebind constant %rz%s: cannot rebind property %rN)rC   r|   r   r   r7  rE   r   r   r   rq   __setattr__)r   r}   rR   
member_mapr9  r6   r6   r9   rI  \  s   

zEnumType.__setattr__c                 O   s(   dd l }|jdtdd | j|i |S )Nr   zB_convert is deprecated and will be removed, use _convert_ instead.rU   )
stacklevel)warningswarnDeprecationWarning	_convert_)r   r   r   rL  r6   r6   r9   _converts  s
   zEnumType._convertFc           	         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 | ||||p?td} t| _|rLt	|  n|
| j | ||< | S )z[
        Create a new Enum subclass that replaces a collection of global constants
        c                    s    g | ]} |r|| fqS r6   r6   )r   r   filtersourcer6   r9   r     s     z&EnumType._convert_.<locals>.<listcomp>c                 S   s   | d | d fS r  r6   tr6   r6   r9   r     s    z$EnumType._convert_.<locals>.<lambda>r   c                 S   r   r   r6   rT  r6   r6   r9   r     r   )r0  r  )varsr@  moduleskeyssortrH   r/   r4   r  global_enumupdaterG   )	r   r}   r0  rR  rS  r  	as_globalmodule_globalsmembersr6   rQ  r9   rO  y  s"   	

zEnumType._convert_c              	   C   s  t rt|trz|d}W n ty   td|f w | j}|du r(| f}	n|| f}	| ||	\}
}t|dd}t|d|}t|t	rM|
dd }t|ttfr|rt|d t	r|g }}g }t|D ]\}}|||||dd }|| |||f qhd}d}|D ])}|du rt|t	ri }n|||	}t|t	r||| }}n|\}}|||< q|du r|||	}|j|||	||d	}|du rz
td
jd }W n ttfy   Y nw |du rt| n||_|dur||_|S )a|  Convenience method to create a new Enum class.

        `names` can be:

        * A string containing member names, separated either with spaces or
          commas.  Values are auto-numbered from 1.
        * An iterable of member names.  Values are auto-numbered from 1.
        * An iterable of (member name, value) pairs.
        * A mapping of member name -> value.
        asciiz %r is not representable in ASCIINr  r   rD  r  r   )r  rU   r   )r8  rE   unicodeencodeUnicodeEncodeErrorrH   r   r  rm   r  r\   r  r   rc   	enumerater~   r  r<  r@  	_getframe	f_globalsr   r   r  r   r   )r   
class_namer3  r0  r1  rq   r  r  r  r  _r  r  original_nameslast_valuesrP   r}   rR   itemr  rk  member_valuerj  r6   r6   r9   r2    sb   

 





zEnumType._create_c                 C   sF   t d u rd S |D ]}|jD ]}t|t r|jrtd||f qqd S )Nz<aenum %r> cannot extend %r)r!   ra  rB   rW  rH   mclsrf  r  chainrz  r6   r6   r9   r    s   
z%EnumType._check_for_existing_members_c                 C   sp   |rt du r
tt fS | || |d }|tv r|d }t|t s%td| ||p,t}|jr4td||fS )zReturns the type for creating enum members, and the first inherited
        enum class.

        bases: the tuple of bases that was given to __new__
        NrY   zZnew enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`z*cannot extend enumerations via subclassing)r!   rS  r  rF   rB   rH   _find_data_type_rW  )rm  rf  r  r  r  r6   r6   r9   r    s   
zEnumType._get_mixins_c                 C   s   |D ]@}|j D ]:}|tft v rqt|tr|j    S d|jv rAd|jv r8d|jv r8|jd jr8t    S |jd     S qqd S )Nr   __dataclass_fields____dataclass_params__)	ra  rS  rF   rE   r   r  rC   r  _dataclass_reprrl  r6   r6   r9   r    s    





zEnumType._find_data_repr_c                 C   s   t  }|D ]L}d }|jD ]D}|tft v rqt|tr)|jtur(||j  n)qd|jv s3d|jv rLt|tr9qt	d urCt
|t	rCq||pH|  n|pO|}qqt|dkr`td||f |rf| S d S )Nr<  rq  r   z%r: too many data types: %r)r  ra  rS  rF   rE   r   rO  r  rC   
StdlibFlagrB   r]   rH   r
  )rm  rf  r  
data_typesrn  	candidaterz  r6   r6   r9   rp    s2   




zEnumType._find_data_type_c                 C   s@   t  }| D ]}|jD ]}t|tr|jD ]}|| qq
q|S )zuReturns the combined _settings_ of all Enum base classes

        bases: the tuple of bases given to __new__
        )r  ra  rB   r!   r  r  )r  r  rn  rz  r`   r6   r6   r9   r  5  s   


zEnumType._get_settings_c           
      C   s   | dd}|duo|du}|du r>dD ]&}||fD ]}t||d}|ddjtjtjtjfvr3|} nq|dur: nqtj}|du sJ|tjtjfv rMd}	nd}	|||	fS )a
  Returns the __new__ to be used for creating the enum members.

        clsdict: the class dictionary given to __new__
        member_type: the data type whose __new__ will be used by default
        first_enum: enumeration to check for an overriding __new__
        r<  N)r  r<  FT)r|   rm   r<  rS  r!   
StdlibEnum)
rm  r  r  r  r<  r%  r   possibletargetr&  r6   r6   r9   r  C  s0   	
zEnumType._find_new_)NNr6   N)NNF)NNNr   N)"r   r   r   rj   r|  r  rp   r<  r.  r   r4  r6  r8  r>  r   rG   r  r:  rG  r;  __nonzero__r   rI  rP  rO  r2  r  r  r  rp  r   r  r  r  r6   r6   r  r9   r     sJ    W  x


G





r   c                   @   s   e Zd ZdS )r   N)r   r   r   r6   r6   r6   r9   r   w  s    r!   zNGeneric enumeration.

    Derive from this class to define new enumerations.

)r   ro   nsc                 C   s   | j rdS dS )Nz	(*values)z\(new_class_name, /, names, *, module=None, qualname=None, type=None, start=1, boundary=None)rE  r   r6   r6   r9   __signature__  s   r|  c                 O   s   | j }|d u r	d S d|v r|dd  }|rtt|t|k r+tdt||t||f t||D ]
\}}t| || q0t|t|k rv|t|d  }|D ]}||t}|tu r`td|f t| || qM|rxtdd|  d S d S d S )NrR   r   z,%d arguments expected (%s), %d received (%s)zmissing value for: %rzinvalid keyword(s): %sry   )	rL  r]   rH   ziprh  r
  	undefinedr   rX  )rn   r   r   rL  r}   r  remaining_argsrR   r6   r6   r9   rp     s0   rp   c                 C   s   t | jv r	tdt|| u r|S z| j| W S  ty    Y n ty:   | jD ]\}}||kr7|   Y S q)Y nw | |}t|| rG|S |d urUt	| dd t
u rU|S |d u rn|tu retd| jf td|| jf td| j|f )Nz1NoAlias enumerations cannot be looked up by valuer  z"%s() should be called with a value%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member)r   r  rH   rq   r]  r   r_  r  rE   rm   r.   r   r`  r   )r   rR   rk  r   rs   r6   r6   r9   r<    s:   


r<  c                 K   s8   t tk r|rtd|f d S tt| jdi | d S )Nz unconsumed keyword arguments: %rr6   )r  r  rH   r}  r!   r  )r   r   r6   r6   r9   r    s
   r  c              	   O   sD   t |D ]}z|d }W  n ty   Y qw |}|r |f| S |S r   )rF  rH   )r}   r  rP   ri  r   r   
last_value	new_valuer6   r6   r9   r    s   
r  c                 C   r-  )z'deprecated, use _missing_value_ insteadNr6   r5  r6   r6   r9   r    r/  r  c                 C   
   |  |S )zused for failed value access)r  r5  r6   r6   r9   r    s   
r  c                 C   r-  )zused for failed item accessNr6   )r   r}   r6   r6   r9   r    r/  r  c                 C   s,   | j jp| jj j}d| j j| j|| jf S )Nz<%s.%s: %s>)r   r  rC  r   r   r   )rn   v_reprr6   r6   r9   r     s   r   c                 C   s   d| j j| jf S N%s.%s)r   r   r   r   r6   r6   r9   r     s   r   c                    s    j jtu rtg d}nt fddt D }t dg D ]}|d dkr.|| q! j  D ]9}|j	 D ]1\}}|d dkrFq;t
|tra|jdusU| jvr[|| q;|| q;t
| j sl|| q;q4t|S )z<
        Returns all members and all public methods
        )r   rj   r   r   r   c                 3   s    | ]
}| j vr|V  qd S r<   rC  )r   rI   r   r6   r9   r   
	  s    z__dir__.<locals>.<genexpr>rC   r   rg  N)r   rO  rS  r  r>  rm   r  r  rC   rD   rE   r   rg   r{   discardr   )rn   r=  r}   r   r  r6   r   r9   r>  	  s(   


r>  c                 C   s   t t | |S r<   )r   r  )rn   format_specr6   r6   r9   r  	     r  c                 C   rH  r<   )r   r   r   r6   r6   r9   r   !	  r   r   c                 C   s   | j | jffS r<   )r   rC  rn   protor6   r6   r9   r  %	  s   r  c                 C      t d| jj|jjf )Nzunorderable types: %s() <= %s()rH   r   r   r   r6   r6   r9   r  )	     r  c                 C   r  )Nzunorderable types: %s() < %s()r  r   r6   r6   r9   r  -	  r  r  c                 C   r  )Nzunorderable types: %s() >= %s()r  r   r6   r6   r9   r  1	  r  r  c                 C   r  )Nzunorderable types: %s() > %s()r  r   r6   r6   r9   r  5	  r  r  c                 C   s   t || jr
| |u S tS r<   rE   r   r   r   r6   r6   r9   r   :	     r   c                 C   s   t || jr
| |uS tS r<   r  r   r6   r6   r9   r   @	  r  r   c                 C   r   r<   r   r   r6   r6   r9   r}   N	     r}   c                 C   r   r<   r  r   r6   r6   r9   rR   S	  r  rR   c                 C   r   r<   )ri  r   r6   r6   r9   r5  X	  r  r5  c                 C   r   r<   r  r  r6   r6   r9   pickle_by_global_namec	  r   r  c                 C   s   t | j| jffS r<   )rm   r   r   r  r6   r6   r9   pickle_by_enum_nameh	  r  r  c                    s$   j  d fdd  D S )Nry   c                 3   s,    | ]} | j rd |t|f V  qdS )r   N)r  rm   )r   r   dcfrn   r6   r9   r   n	  s    
z"_dataclass_repr.<locals>.<genexpr>)rq  r   rX  r   r6   r  r9   rs  l	  s   rs  r(   rj   zIOnly changes the repr(), leaving str() and format() to the mixed-in type.c                   @   s   e Zd ZdZdS )r"   z8
    Enum where members are also (and must be) ints
    N)r   r   r   rj   r6   r6   r6   r9   r"   	      r"   c                   @   s&   e Zd ZdZdd ZejZdd ZdS )r#   zr
    Enum where members are also (and must already be) strings

    default value is member name, lower-cased
    c                 O   sb   |r	t d| j |r"t|d ts"t d| j|d t|d f t| }t| |}||_|S )Nz#%r: keyword arguments not supportedr   z#%s: values must be str [%r is a %r])rH   r   rE   r   rq   r<  rC  )r   r5  r   rR   r   r6   r6   r9   r<  	  s    zStrEnum.__new__c                 C      |   S )zD
        Return the lower-cased version of the member name.
        )lower)r}   r  rP   ri  r6   r6   r9   r  	  s   zStrEnum._generate_next_value_N)r   r   r   rj   r<  r   r   r  r6   r6   r6   r9   r#   	  s
    r#   c                   @      e Zd ZdZdd ZdS )r&   z}
    Enum where members are also (and must already be) lower-case strings

    default value is member name, lower-cased
    c                 O   6   t j| |g|R i |}|| krtd| |S )Nz%r is not lower-case)r#   r  r  r`  r   rR   r   r   r  r6   r6   r9   r<  	     zLowerStrEnum.__new__Nr   r   r   rj   r<  r6   r6   r6   r9   r&   	  s    r&   c                   @   rA  )r'   z}
    Enum where members are also (and must already be) upper-case strings

    default value is member name, upper-cased
    c                 O   r  )Nz%r is not upper-case)r#   r  upperr`  r  r6   r6   r9   r<  	  r  zUpperStrEnum.__new__c                 O   r  r<   )r  )r}   r  rP   ri  r   r   r6   r6   r9   r  	  s   z"UpperStrEnum._generate_next_value_N)r   r   r   rj   r<  r  r6   r6   r6   r9   r'   	  s    r'   c                   @      e Zd ZdZeZdS )AutoEnumza
        automatically use _generate_next_value_ when values are missing (Python 3 only)
        N)r   r   r   rj   r   r  r6   r6   r6   r9   r  	      r  c                   @   r  )r   z
    Automatically assign increasing values to members.

    Py3: numbers match creation order
    Py2: numbers are assigned alphabetically by member name
         (unless `_order_` is specified)
    c                 O   sR   t | jd }| jtu rt| |}n| jtu rt| |}nt| }||_|S r   )r]   rG   rO  r  r<  longrS  rC  )r   r   r   rR   r  r6   r6   r9   r<  	  s   


zAutoNumberEnum.__new__Nr  r6   r6   r6   r9   r   	  s    r   c                   @   s   e Zd ZeZdS )r   N)r   r   r   r   r  r6   r6   r6   r9   r   	  r  r   c                   @   r  )r   z1
    Multiple values can map to each member.
    N)r   r   r   rj   r   r  r6   r6   r6   r9   r   	  r  r   c                   @   r  )r   zQ
    Duplicate value members are distinct, but cannot be looked up by value.
    N)r   r   r   rj   r   r  r6   r6   r6   r9   r   	  r  r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )r   z7
    Add ordering based on values of Enum members.
    c                 C   s   | j |j u r| j|jkS tS r<   r   rC  r   r   r6   r6   r9   r  	     zOrderedEnum.__ge__c                 C   s   | j |j u r| j|jkS tS r<   r  r   r6   r6   r9   r  	  r  zOrderedEnum.__gt__c                 C   s   | j |j u r| j|jkS tS r<   r  r   r6   r6   r9   r  
  r  zOrderedEnum.__le__c                 C   s   | j |j u r| j|jk S tS r<   r  r   r6   r6   r9   r  
  r  zOrderedEnum.__lt__N)r   r   r   rj   r  r  r  r  r6   r6   r6   r9   r   	  s    r   c                   @   r   )r)   c                 C   s   |t ju r| jS d S r<   )r*   PrepareProtocolr}   )rn   protocolr6   r6   r9   __conform__
  s   
zSqliteEnum.__conform__N)r   r   r   r  r6   r6   r6   r9   r)   
  r   c                   @   r  )r   z+
    Ensure no duplicate values exist.
    N)r   r   r   rj   r   r  r6   r6   r6   r9   r   
  r  r   c                    sf   t tj| }|rt |}n|}t fdd| D }| |||d} t| _|| j | ||< dS )aL  
    Create a new Enum subclass that replaces a collection of global constants

    enum: Enum, IntEnum, ...
    name: name of new Enum
    module: name of module (__name__ in global context)
    filter: function that returns True if name should be converted to Enum member
    source: namespace to check (defaults to 'module')
    c                 3   s$    | ]\}} |r||fV  qd S r<   r6   r  rR  r6   r9   r   .
  s   " zconvert.<locals>.<genexpr>r0  N)	rV  r@  rW  r   rD   r4   r  r[  rG   )r   r}   r0  rR  rS  r]  r^  r6   r  r9   convert
  s   
r  c           $      O   s  || j v s|| jv s|dd t| ddD v r&td|| j || | f d}| jdd D ]}|j |}|durMt|ttfrD n
td||j	f q/z| j}| j
}| j}| j}	td	d |  D }
W n tyu   td
| f w z| j}t| jv }t| jv }t| jv }| jpg }W n ty   g }d}d}d}g }Y nw |r|std| j	 |j}t| ddpt| ddp|}|sdd | D }t| }t| dd}|du r|r|d d pd}t| dd}|dur|||||f}n|f}|tju rd}nd}t|dkr|\}n|}d}i }t|tr|j}|j}t|ts'|f}n|}d|v rEd|v r9|d}n#|d |dd }}n|r\|d |dd d}}}|r\|f}|tu rd|f}|su|| }t|dst||_ n|| g|R i |}t|ds|| |_ |j }|rd|v r|}n|f| }||_!| j"|_#|j$|  |f| |_%t| j
|_&d }}t| dr| j'|B }| j(|B }| j)dkrt*t+|| @ }|rtdt,d-dd |D f |rt.| |||dS |j%}|/ D ]:}t|d|j g}|D ],} |D ]&}!| |!kr3|s|r#td||f t.| ||||dd       S qq
qt0t1k rBt2f}"nt2t3f}"t4| |"rt| drt5|r_t.| |||dS || j(@ |kr~|	|dur~|	|}#t.| |#|||dd S t.| |||dd!S t.| |S )"z/
    Add a new member to an existing Enum.
    c                 S   s   g | ]}|d  qS )r   r6   )r   rU  r6   r6   r9   r   B
  r  zextend_enum.<locals>.<listcomp>r_  r6   z%r already in use as %rNr   "%r already in use in superclass %rc                 S   s   g | ]
}|j D ]}|qqS r6   r  )r   r  r   r6   r6   r9   r   S
  r   z%r is not a supported EnumFz*no values specified for MultiValue enum %rrQ  r  c                 S   r  r6   rQ   r  r6   r6   r9   r   i
  r  r  rY   r  TrR   r   rC  r[  keepz%invalid Flag %r -- missing values: %sry   c                 s   r  r<   )r   )r   r   r6   r6   r9   r   
  r  zextend_enum.<locals>.<genexpr>)r   maskri  z%r is a duplicate of %r)r}   r   r  is_alias)r   r  r  )6rC   r{   rm   rH   r|   ra  rE   r   re   r   rW  rO  r]  r  r  r   r_  r   r  r   r   rL  r`  r<  r]   rS  r   r   r   r   r
  rR  rC  r   r   rV  rp   ri  rX  r[  rY  r  rc   rT   r   r   _finalize_extend_enumr5  r  r  r$   rt  rB   r	   )$enumerationr}   r   r   
descriptorrz  r{   rW  rO  r]  base_attributesr_  _multi_value_
_no_alias_r^  rL  mt_new_newri  rP   r  r  r&  rR   more_values
new_memberr[  rY  missed
new_valuesrs  canonical_values_canonical_valuer  
flag_bases	canonicalr6   r6   r9   r   4
  s   















 

 

r   Fc           
   	   C   s  |p|j }d }| jdd  D ]}|j|}|d ur,t|ttfr# n
td||jf q|s>t }|	| | t
| || |sF| j| || j|< t|d|jgD ]}	z|| j|	< W qS tyo   |  j|	|ff7  _Y qSw |r|| _|| _t|jr|  j|jO  _|S )Nr   r  ri  )r}   ra  rC   r|   rE   r   re   rH   r   r   rh  rW  r~   r{   rm   rC  r]  r_  r[  rY  r	   rZ  )
r  r  r}   r   r  r  r  rz  r{  r   r6   r6   r9   r  
  s8   


r  c                 C   s^   g }| j  D ]\}}||jkr|||jf q|r-ddd |D }td| |f | S )zS
    Class decorator that ensures only unique members exist in an enumeration.
    ry   c                 S   r   )z%s -> %sr6   )r   aliasr}   r6   r6   r9   r     r   zunique.<locals>.<listcomp>zduplicate names found in %r: %s)rG   rD   r}   r~   r   r`  )r  
duplicatesr}   r   duplicate_namesr6   r6   r9   r   
  s   
r   )r+   c                   @   s(   e Zd ZdZe Ze Ze Ze ZdS )r+   z
        control how out of range values are handled
        "strict" -> error is raised  [default]
        "conform" -> extra bits are discarded
        "eject" -> lose flag status (becomes a normal integer)
        N)	r   r   r   rj   r   r,   r-   r.   r/   r6   r6   r6   r9   r+     s    
r+   r$   zRGeneric flag enumeration.

Derive from this class to define new flag enumerations.r  r  c           	      O   s   |s|rd|f|du f| S d|f|du S t |}zt|}d|d  }|r.|f| W S |W S  ty9   Y nw td| )z
    Generate the next value when not given.

    name: the name of the member
    start: the initital start value or None
    count: the number of existing members
    last_value: the last value assigned or None
    r   NrU   zinvalid Flag value: %r)maxr   rT  rH   )	r}   r  rP   ri  r   r   r  high_bitrs   r6   r6   r9   r  /  s   
c                 c   s(    t || j@ D ]	}| j|V  qdS )zY
    Extract all members from the value in definition (i.e. increasing value) order.
    N)rT   rZ  r]  r|   )r   rR   valr6   r6   r9   r  K  s   r  r  c                 c   s4    t | |}|jdd d |D ]}|V  qdS )zA
    Extract all members from the value in definition order.
    c                 S   r   r<   rX  rL   r6   r6   r9   r   ]      z&_iter_member_by_def_.<locals>.<lambda>r   N)rc   r  rY  )r   rR   r^  r   r6   r6   r9   r  V  s   r  c                 C   r  )z;
    return a member matching the given value, or None
    )r  r5  r6   r6   r9   r  a  s   
c                 G   s  |d  }}t |tstd|| jf | j}| j}| j}||A }|| @ }| j}	d|f|dk  }
|
ri|
| krc|	tu r>|S |	t	u rKd|

  |
 }n|	tu rZd|

  |
 |@ }ntd|| jf |d |
 }||@ }||@ | @ }|| @ }|	tu r|r|S n|	tu rd}n|	tu r|rtd|| jf t| |}|}d}|rd}| j D ]'\}}||vr|jr|j|@ |jkr|j|@ r|| ||jO }||jO }q|| @ |A }|r|	t	u rn|	tu rd}n|	tu r|S td|| jf ||O }||O }|f|dd  }|jdd d | j|g|R  }t| d	d}| jtu r/|s/t| }n|p5| jj| g|R  }t|d
sE||_|rcddd |D |_|rb| jd| | 7  _nd|_| j||}|
durw|| j|
< |S )z$
    Create a composite member.
    r   r  NrU   r   c                 S   r   r<   r  r  r6   r6   r9   r     r  z(_create_pseudo_member_.<locals>.<lambda>r   r  rC  r?  c                 S   r  r6   r   r  r6   r6   r9   r     r  z*_create_pseudo_member_.<locals>.<listcomp>z|%s)rE   r  r`  r   rY  rZ  r[  r  r.   r/   rZ   r-   r,   rc   r  r{   rD   rC  r~   rY  r  rm   rO  rS  r<  rR  r   r   r  r]  r  )r   r5  rR   error_value	flag_masksingles_maskall_bitsunknown_bitsunnamed_bitsr  	neg_valuerk  unnamed_valueunknown_valuer^  final_valuestill_unknownfoundrI   pmr<  pseudo_memberr6   r6   r9   r  i  s   








r  c                 G   s2   | j ttf v r
|S t|dk r||   f S |S )zB
    Return values to be fed to __new__ to create new member.
    rU   )rO  r  rS  r]   )r   r^  r5  r6   r6   r9   r    s
   r  c                 C   sP   t || jstdt|j| jjf |jdks| jdkrdS |j| j@ |jkS )zH
    Returns True if self has at least the same flags set as other.
    3unsupported operand type(s) for 'in': '%s' and '%s'r   F)rE   r   rH   rq   r   rC  r   r6   r6   r9   r6    s   r6  c                 c   s    |  | jD ]}|V  qdS )z,
    Returns flags in definition order.
    N)r  rC  )rn   r   r6   r6   r9   r:    s   r:  c                 C   rH  r<   )r   rC  r   r6   r6   r9   r;    r   r;  c                 C   s4   | j }| jd u rd|j| jf S d|j| j| jf S )Nz<%s: %r>z<%s.%s: %r>r   r   r   rC  rn   r   r6   r6   r9   r     s   
c                 C   s0   | j }| jd u rd|j| jf S d|j| jf S )Nr   r  r  r  r6   r6   r9   r     s   
c                 C   rH  r<   rl   rC  r   r6   r6   r9   rz    r   rz  c                 C   rH  r<   r  r   r6   r6   r9   r.    r   r.  c                 C   sD   t || jr
|j}n| jturt || jr|}ntS | | j|B S r<   rE   r   rC  rO  rS  r   rn   r   other_valuer6   r6   r9   r        r   c                 C   sD   t || jr
|j}n| jturt || jr|}ntS | | j|@ S r<   r  r  r6   r6   r9   r   "  r  r   c                 C   sD   t || jr
|j}n| jturt || jr|}ntS | | j|A S r<   r  r  r6   r6   r9   r   ,  r  r   c                 C   s<   | j d u r| | j| j @ | _ t| j | jr| | j _ | j S r<   )r  r   rZ  rC  rE   r   r6   r6   r9   r   6  s
   
r   r   r   r   c                   @   s   e Zd ZdZeZdd ZdS )r%   zSupport for integer-based Flagsc                 C   sf   t |tr| |}nt || jstdt|j| jjf |jdks(| jdkr*dS |j| j@ |jkS )zP
        Returns True if self has at least the same flags set as other.
        r  r   F)rE   r  r   rH   rq   r   rC  r   r6   r6   r9   r6  L  s   
zIntFlag.__contains__N)r   r   r   rj   r/   r  r6  r6   r6   r6   r9   r%   G  s    r%   c                 C   s   |   d S )z@returns index of highest bit, or -1 if value is zero or negativer   )rZ   rQ   r6   r6   r9   r   ]  s   r   c                 C   s    | j jdd }d|| jf S )z{
    use module.enum_name instead of class.enum_name

    the module is the last module in case of a multi-module name
    .rY   r  )r   r   r  r   )rn   r0  r6   r6   r9   global_enum_repra  s   r  c                    s   | j jdd  | j j}| jdu rd || jf S t| r%d | jf S | jtj	ur;d
 fdd| jdD S g }| jdD ]}|d	  rQ|| qC|d |f  qCd
|S )
z{
    use module.flag_name instead of class.flag_name

    the module is the last module in case of a multi-module name
    r  rY   Nz	%s.%s(%r)r  r?  c                    s   g | ]}d  |f qS )r  r6   rD  r  r6   r9   r   w  r   z$global_flag_repr.<locals>.<listcomp>r   )r   r   r  r   r   rC  r	   r  r+   r/   r   r}   isdigitr~   )rn   r  r}   rI   r6   r  r9   global_flag_reprj  s   
 
r  c                 C   s&   | j du r| jj}d|| jf S | j S )z2
    use enum_name instead of class.enum_name
    Nz%s(%r))r   r   r   rC  )rn   r  r6   r6   r9   
global_str  s   
r  c                 C   sF   t | tr	t| _nt| _t | tr|rt| _tj	| j
 j| j | S )z
    decorator that makes the repr() of an enum member reference its module
    instead of its class; also exports all members to the enum's module's
    global namespace
    )rB   r$   r  r   r  r(   r  r   r@  rW  r   rC   r[  rG   )r   
update_strr6   r6   r9   rZ    s   
rZ  )WeakSetc                 C   sl  t |tstd|f z| jd  W n, ty$   t | _t | _Y n ty?   ddl	}|
 \}} }td}t| Y nw || jv rGdS || jv rNdS | |u rZ| j| dS | t|dd	v rj| j| dS | tu r{t|tr{| j| dS | tu rt|tr| j| dS | tu rt|tr| j| dS | tu rt|tr| j| dS | j| dS )
z9
        Override for issubclass(subclass, cls).
        z+issubclass() arg 1 must be a class (got %r)_subclass_cache_r   Npossible causes for endless recursion:
    - __getattribute__ is not ignoring __dunder__ attibutes
    - __instancecheck__ and/or __subclasscheck_ are (mutually) recursive
    see `aenum.remove_stdlib_integration` for temporary work-aroundTFra  r6   )rE   rq   rH   rC   r   r  r  _subclass_negative_cache_RecursionErrorsysrA  raise_from_noner  rm   StdlibIntFlagrB   r%   rt  r$   StdlibIntEnumr"   rw  r!   )r   subclassr  ro  tbr6   r6   r9   __subclasscheck__  sJ   


r  c                 C   sN   |j }z| |W S  ty&   dd l}| \}} }td}t| Y d S w )Nr   r  )r   r  r  r  rA  r  )r   r   r  r  ro  r  r6   r6   r9   __instancecheck__  s   r  c                   C   s   t r
tt_tt_d S d S r<   )rw  r  StdlibEnumMetar  r6   r6   r6   r9   r0     s   
r0   c                   C   s   t rt`t`dS dS )a  
    Remove the __instancecheck__ and __subclasscheck__ overrides from the stdlib Enum.

    Those overrides are in place so that code detecting stdlib enums will also detect
    aenum enums.  If a buggy __getattribute__, __instancecheck__, or __subclasscheck__
    is defined on a custom EnumMeta then RecursionErrors can result; using this
    function after importing aenum will solve that problem, but the better solution is
    to fix the buggy method.
    N)rw  r  r  r  r6   r6   r6   r9   r1     s   
r1   c                   @   s   e Zd Zdd Zdd ZdS )r3   c                 G   sZ   |j | _ |j| _g | _|j}|sdd | D }|D ]}|| | j|< | j| qd S )Nc                 S   s"   g | ]\}}t |ttfr|qS r6   )rE   r   r!   r   r6   r6   r9   r     s   " z'cls2module.__init__.<locals>.<listcomp>)r   r   _parent_module__all__rC   rD   r~   )rn   r   r   all_objectsr}   r6   r6   r9   rp     s   zcls2module.__init__c                 C   s   | t jd| j| jf < d S r  )r@  rW  r  r   r   r6   r6   r9   register  s   zcls2module.registerN)r   r   r   rp   r  r6   r6   r6   r9   r3     s    
r3   r<   )NNNF)F)
__future__r   r9  	_constantr   _tupler   collectionsr   r  r@  r  r
   r[   r*   ImportErrorremover  	NameErrorr  r:   rF   r   rR  r   r  r!   rw  r"   r  rt  r  StdlibStrEnumStdlibReprEnumr%   r$   r#   r(   r   r   r   r   r   r2   r   r	   rT   r5   typesre   rz  rS  r   _RouteClassAttributeToGetattrr   rq   r   r   r   r   r   r   r   globalsr   r.   r/   r/  r   r   r:  rB  r   r    r   r   	_Addendumr  r  r|  r|  rp   r<  r  r   r  r  r  r  r   r   PY3r>  r  r   r  r  r  r  r  r   r   r}   rR   r5  
_enum_baseresolver  r4   r  rs  _repr_basesr  r   r&   r'   r  r~   r   r   r   r   r   r)   r   r  r   r  r   r+   _flag_bases	flag_dictr,   r  r  r  r  r  r6  r:  r;  r8  rz  r.  r   r   r   r   r   r  r  r  rZ  _weakrefsetr  r  r  r0   r1   r3   r6   r6   r6   r9   <module>   s.   
$
'	
i
$- ) i l  3      n

(












	


 
-


	m






	
	
	
	

.