3 \F@s>ddlZddlmZmZddlmZddlmZyddl m Z Wn e k r`ddl m Z YnXdddd d d d gZ d dZddZddZddZeZGdd d ZGdddeZdZGdddeZGdddedZGdddeeZddZGdd d eZGdd d eeZd d!Zd"d Z d#d$Z!d%d&Z"dS)'N)MappingProxyTypeDynamicClassAttribute)reduce)or_) OrderedDictEnumMetaEnumIntEnumFlagIntFlagautouniquecCst|dpt|dpt|dS)N__get____set__ __delete__)hasattr)objr/usr/lib64/python3.6/enum.py_is_descriptors  rcCsT|dd|ddko"dknoR|dddkoR|dddkoRt|dkS) N___r)len)namerrr _is_dunders(rcCsL|d|dkodknoJ|dddkoJ|dddkoJt|dkS)Nrrrrr!)r)rrrr _is_sunder$s r"cCsdd}||_d|_dS)NcSstd|dS)Nz%r cannot be pickled) TypeError)selfprotorrr_break_on_call_reduce-sz6_make_class_unpicklable.._break_on_call_reducez ) __reduce_ex__ __module__)clsr&rrr_make_class_unpicklable+sr*c@seZdZeZdS)r N)__name__r( __qualname__ _auto_nullvaluerrrrr 3scs(eZdZfddZfddZZS) _EnumDictcstjg|_g|_dS)N)super__init__ _member_names _last_values)r$) __class__rrr1As z_EnumDict.__init__cst|r.|d krtd|dkrt|d|nt|rD|dkrd}n||jkr\td|nxt|s||krtd |||ft|tr|j t kr|j |d t |j|j dd|_ |j }|jj||j j|tj||dS) N_order__create_pseudo_member__generate_next_value_ _missing_z(_names_ are reserved for future Enum use_generate_next_value __order__zAttempted to reuse key: %rz%r already defined as: %rr )r5r6r7r8)r" ValueErrorsetattrrr2r#r isinstancer r.r-r9rr3appendr0 __setitem__)r$keyr.)r4rrr?Fs,    "  z_EnumDict.__setitem__)r+r(r,r1r? __classcell__rr)r4rr/:s r/cseZdZeddZfddZddZd(ddddd d d Zd d ZfddZ ddZ ddZ ddZ ddZ ddZeddZddZddZfd d!Zddddd d"d#Zed$d%Zed&d'ZZS))rcCs0t}|j|\}}|dk r,t|dd|d<|S)Nr7)r/ _get_mixins_getattr)metaclsr)bases enum_dict member_type first_enumrrr __prepare__rs zEnumMeta.__prepare__c s|j|\}|j|\}}}fddjD}xjD] } | =q>Wjdd} t|dh@} | r~tdjdj| dkrdd<tj |||} g| _ t | _ | _ d d | jD} i| _d krtk rd}tfdd|Dst| x6jD]*}||}t|ts0|f}n|}tkrD|f}|sf|| }t|ds||_n6|| f|}t|dstkr||_n ||_|j}||_| |_|j|x8| j jD]\} }|j|jkr|}PqW| j j||| krt| |||| j |<y|| j|<Wntk r6YnXqWxPdD]H} t| | }t| d}t|| d}|dk rD||krDt| | |qDWtdk r|r|| _ tj | _ | dk rt| t!r| j"ddj#} | | j krtd| S)Ncsi|]}||qSrr).0k) classdictrr sz$EnumMeta.__new__..r5mrozInvalid enum member name: {0},__doc__zAn enumeration.cSs.h|]&}|jjD]\}}t|tr|qqSr)__dict__itemsr=r)rJcrKvrrr sz#EnumMeta.__new__..r'__getnewargs_ex____getnewargs__ __reduce__c3s|]}|jkVqdS)N)rQ)rJm)rGrr sz#EnumMeta.__new__.._value___repr____str__ __format__ z#member order does not match _order_)rVrWr'rX)r\r]r^r')$rB _find_new_r2popsetr;formatjoinr0__new___member_names_r _member_map_ _member_type_rN_value2member_map_objectanyr*r=tuplerr[_name_ __objclass__r1rRr>r<r#rCr__new_member__strreplacesplit)rDr)rErLrHresave_newuse_args enum_membersrr5 invalid_names enum_classdynamic_attributesmethods member_namer.args enum_membercanonical_member class_method obj_method enum_method)r4)rLrGrre|s                          zEnumMeta.__new__cCsdS)NTr)r$rrr__bool__szEnumMeta.__bool__Nr )modulequalnametypestartcCs*|dkr|j||S|j||||||dS)N)rrrr)re_create_)r)r.namesrrrrrrr__call__ s zEnumMeta.__call__cCst||o|j|jkS)N)r=rmrg)r)memberrrr __contains__)szEnumMeta.__contains__cs(||jkrtd|jtj|dS)Nz%s: cannot delete Enum member.)rgAttributeErrorr+r0 __delattr__)r)attr)r4rrr,s  zEnumMeta.__delattr__cCsddddg|jS)Nr4rP __members__r()rf)r$rrr__dir__4s zEnumMeta.__dir__c Cs>t|rt|y |j|Stk r8t|dYnXdS)N)rrrgKeyError)r)rrrr __getattr__8s  zEnumMeta.__getattr__cCs |j|S)N)rg)r)rrrr __getitem__HszEnumMeta.__getitem__csfddjDS)Nc3s|]}j|VqdS)N)rg)rJr)r)rrrZLsz$EnumMeta.__iter__..)rf)r)r)r)r__iter__KszEnumMeta.__iter__cCs t|jS)N)rrf)r)rrr__len__NszEnumMeta.__len__cCs t|jS)N)rrg)r)rrrrQszEnumMeta.__members__cCs d|jS)Nz )r+)r)rrrr\[szEnumMeta.__repr__csfddtjDS)Nc3s|]}j|VqdS)N)rg)rJr)r)rrrZ_sz(EnumMeta.__reversed__..)reversedrf)r)r)r)r __reversed__^szEnumMeta.__reversed__cs0|jjdi}||krtdtj||dS)NrgzCannot reassign members.)rQgetrr0 __setattr__)r)rr. member_map)r4rrraszEnumMeta.__setattr__cCs|j}|dkr|fn||f}|j|\} } |j||} t|trP|jddj}t|ttfr|rt|dtr|g} }g} xDt | D]8\}}| j |||| dd}| j ||j ||fqWx6|D].}t|tr|||}}n|\}}|| |<qW|j |||| }|dkrTyt jdjd}Wn(ttfk rR}zWYdd}~XnX|dkrht|n||_|dk r~||_|S)NrOr_rrr+)r4rBrIr=rprqrrrllist enumerater7r>resys _getframe f_globalsrr;r*r(r,)r) class_namerrrrrrDrErrHrLoriginal_names last_valuescountrr.itemrz member_valuerwexcrrrrns<             zEnumMeta._create_cCs|s ttfSd}}x,|D]$}|tk rt|tr|jrtdqWt|tsTtdt|dtst|d}|d}n8x6|djD](}t|tr|dkr|}q|dkr|}qW||fS)NzCannot extend enumerationszHnew enumerations must be created as `ClassName([mixin_type,] enum_type)`rr r!)rjr issubclassrfr#__mro__)rErGrHbaserrrrBs(      zEnumMeta._get_mixins_c Cs|jdd}|dk }|dkrtxVdD]H}x8||fD],}t||d}|ddjtjtjhkr0|}Pq0W|dk r"Pq"Wtj}|tjkrd}nd}|||fS)NreroFT)rore)rrCrerjr) rLrGrHrersmethodpossibletargetrtrrrr`s(     zEnumMeta._find_new_)N)r+r(r, classmethodrIrerrrrrrrrrpropertyrr\rrr staticmethodrBr`rArr)r4rrps&     5 -c@s~eZdZddZddZeddZddZd d Zd d Z d dZ ddZ ddZ e ddZe ddZedddZdS)rc Csjt||kr|Sy||jkr&|j|SWn6tk r^x |jjD]}|j|krD|SqDWYnX|j|S)N)rrir#rgvaluesr[r8)r)r.rrrrres   z Enum.__new__c Cs8x2t|D]"}y|dStk r*Yq Xq W|SdS)Nr )rr#)rrrr last_valuerrrr7s  zEnum._generate_next_value_cCstd||jfdS)Nz%r is not a valid %s)r;r+)r)r.rrrr8"szEnum._missing_cCsd|jj|j|jfS)Nz <%s.%s: %r>)r4r+rmr[)r$rrrr\&sz Enum.__repr__cCsd|jj|jfS)Nz%s.%s)r4r+rm)r$rrrr]*sz Enum.__str__cs&fddjjD}dddg|S)Ncs2g|]*}|jD]}|ddkr|jkr|qqS)rr)rQrg)rJr)rY)r$rr /s z Enum.__dir__..r4rPr()r4rN)r$added_behaviorr)r$rr-s z Enum.__dir__cCs0|jtkrt}t|}n |j}|j}|j||S)N)rhrjrpr[r^)r$ format_specr)valrrrr^6s   zEnum.__format__cCs t|jS)N)hashrm)r$rrr__hash__Esz Enum.__hash__cCs|j|jffS)N)r4r[)r$r%rrrr'HszEnum.__reduce_ex__cCs|jS)N)rm)r$rrrrRsz Enum.namecCs|jS)N)r[)r$rrrr.Wsz Enum.valueNc sttj|}rtn|fddjD}y|jdddWn$tk rp|jdddYnX||||d}t|_|j|j |||<|S)Ncs g|]}|r||fqSrr)rJr)filtersourcerrrqsz!Enum._convert..cSs|d|dfS)Nr rr)trrrvszEnum._convert..)r@cSs|dS)Nrr)rrrrrys)r) varsrmoduleskeyssortr#_reduce_ex_by_namer'updater)r)rrrrmodule_globalsmembersr)rrr_convert\s     z Enum._convert)N)r+r(r,rer7rr8r\r]rr^rr'rrr.rrrrrrs    ) metaclassc@s eZdZdS)r N)r+r(r,rrrrr scCs|jS)N)r)r$r%rrrrsrc@sleZdZddZeddZeddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdS)r c Csd|s|dk r|SdSxBt|D]6}yt|}PWqtk rRtd|dYqXqWd|dS)Nr zInvalid Flag value: %rr)r _high_bit Exceptionr#)rrrrrhigh_bitrrrr7s zFlag._generate_next_value_cCs.|}|dkr|}|j|}|dkr*|}|S)Nr)r6)r)r.original_valuepossible_memberrrrr8s zFlag._missing_cCsb|jj|d}|dkr^t||\}}|r:td||jftj|}d|_||_|jj ||}|S)Nz%r is not a valid %s) rir _decomposer;r+rjrermr[ setdefault)r)r. pseudo_memberr extra_flagsrrrr6s zFlag._create_pseudo_member_cCs"t||jstS|j|j@|jkS)N)r=r4NotImplementedr[)r$otherrrrrs zFlag.__contains__cCsV|j}|jdk r$d|j|j|jfSt||j\}}d|jdjdd|D|jfS)Nz <%s.%s: %r>|cSsg|]}t|jp|jqSr)rprmr[)rJrYrrrrsz!Flag.__repr__..)r4rmr+r[rrd)r$r)r uncoveredrrrr\s z Flag.__repr__cCs|j}|jdk r d|j|jfSt||j\}}t|dkr^|djdkr^d|j|djfSd|jdjdd|DfSdS)Nz%s.%sr rz%s.%rrcSsg|]}t|jp|jqSr)rprmr[)rJrYrrrrsz Flag.__str__..)r4rmr+rr[rrd)r$r)rrrrrr]s z Flag.__str__cCs t|jS)N)boolr[)r$rrrrsz Flag.__bool__cCs"t||jstS|j|j|jBS)N)r=r4rr[)r$rrrr__or__s z Flag.__or__cCs"t||jstS|j|j|j@S)N)r=r4rr[)r$rrrr__and__s z Flag.__and__cCs"t||jstS|j|j|jAS)N)r=r4rr[)r$rrrr__xor__s z Flag.__xor__csDtjj\}fddjD}tt|jd}j|S)Ncs&g|]}|kr|jj@ r|qSr)r[)rJrY)rr$rrrsz#Flag.__invert__..r)rr4r[r_or_)r$rinverted_membersinvertedr)rr$r __invert__szFlag.__invert__N)r+r(r,r7rr8r6rr\r]rrrrrrrrrr s   c@sPeZdZeddZeddZddZddZd d ZeZ eZ eZ d d Z d S)r cCs*t|tstd||jf|j|}|S)Nz%r is not a valid %s)r=intr;r+r6)r)r. new_memberrrrr8s  zIntFlag._missing_cCs|jj|d}|dkr|g}t||\}}xL|rvt|}d|}||jkr\||kr\|j||| krld}q,||N}q,Wx6t|D]*}tj||}d|_||_ |jj ||}qW|S)Nrr) rirrrr>rrrermr[r)r)r.rneed_to_createrrbit flag_valuerrrr6s&     zIntFlag._create_pseudo_member_cCs0t||jtfstS|j|j|j|jB}|S)N)r=r4rrr[)r$rresultrrrrszIntFlag.__or__cCs,t||jtfstS|j|j|j|j@S)N)r=r4rrr[)r$rrrrr#szIntFlag.__and__cCs,t||jtfstS|j|j|j|jAS)N)r=r4rrr[)r$rrrrr(szIntFlag.__xor__cCs|j|j}|S)N)r4r[)r$rrrrr1szIntFlag.__invert__N) r+r(r,rr8r6rrr__ror____rand____rxor__rrrrrr s  cCs |jdS)Nr ) bit_length)r.rrrr6srcCsbg}x0|jjD]"\}}||jkr|j||jfqW|r^djdd|D}td||f|S)Nz, cSsg|]\}}d||fqS)z%s -> %sr)rJaliasrrrrrBszunique..z duplicate values found in %r: %s)rrRrr>rdr;) enumeration duplicatesrr alias_detailsrrrr :s  cCs|}|dk}|r*ddt|jjD}nddt|jjD}g}x4|D],\}}|rL||@|krL|j|||M}qLW| r||jkr|j|j||jddddt|d kr|dj|kr|jd||fS) NrcSs"g|]\}}|jdk r||fqS)N)r)rJrTrYrrrrRsz_decompose..cSs*g|]"\}}|jdk st|r||fqS)N)r _power_of_two)rJrTrYrrrrYscSs|jS)N)r[)rYrrrrdsz_decompose..T)r@reverser )rrirRr>rrr.ra)flagr. not_coverednegativeflags_to_checkrrrrrrrGs$  rcCs|dkr dS|dt|kS)Nr Fr)r)r.rrrrjsr)#rtypesrr functoolsroperatorrr _collectionsr ImportError collections__all__rrr"r*rjr-r dictr/rrrrr rr r rr rrrrrrs@  3mA #