gC ddlmZddlddlmZddlmZddlmZddl Z gdZ e Z ddlZ e ed Z ddlZeed red ddlmZmZmZdxZxZxZ Z!eefZ er* ddlm"Zm#Zeeefz Z ddlm$Z ee fz Z ddlm%Z!ee!fz ZdxZ&xZ'xZ(xZ)Z*ddZ+dZ,dZ-dZ.ddZ dZ/ ddl0m1Z1e1Z2Gdde2Z4e4Z5e1e4Z1e4Z6Gdde7Z8e8de3fiZ9dZ:dZ;d Z,d!Ze+e?Gd%d&eZ@dxZxZ%xZxZ$xZ#xZ"xZAZBGd'd(e3Ze8d)e3fiZCGd*d+eZDdd,lEmZe4e_4eDe_D[Gd-d.eZFGd/d0ZGGd1d2eHZIe8d3e7fiZJGd4d5e7ZKer Gd6d5eKeZKeKZeLeKjd7e3fd8e?9ZNeNeOd:ZPeNd;ZQeNd<ZReNeOd=ZSeNeTd>ZUeNeOd?ZVeNeOd@ZWeNeOdAZXeNdBZYeNdCZZe[reNdDZ\eNdEZ]eNdFZ^eNdGZ_eNdHZ`eNdIZaeNdJZbeNdKZceNdLZdeNdMZeeNe4dNZfeNe4dOZgeNe4dPZhexse3ZieKd7eifeNjZ[NdQZkekZldRZmdSZne!ree!fZonefZoeKdTeodUdViZ%GdWdXepe%ZGdYdZeqe%Z$Gd[d\e$ZrGd]d^e$Zse[rGd_d`eZte jd`GdadbeZvGdcddeZwGdedfeZxGdgdheZyGdidjeZzer Gdkd eZ{GdldmeZ|ddnZ}doZ~ddpZdqZ ddrlmZe+ee?ereefZnefZeLeKjduedve?9Zeedw<eedx<edyZUeeOdzZeed{<eeOd|ZeeOd}ZVeeOd~ZeeOdZedZedZedZedZYedZZer edZnedZedZedZedZedZeed<eed<eed<eKdueejZ#[Gddepe%e#Z"dZdZdZdZddZer ddlmZdZdZdZdZGdde3Zy#e$rdZe j!d YwxYw#e$reZYwxYw#e$rd ZYwxYw#e$rdxZxZxZxZxZxZ xZ Z!YwxYw#e$rYwxYw#e$rYwxYw#e$rYwxYw#e$re3Z2dZ1YwxYw#e$rGdsdte$ZYwxYw))print_function)*) NamedConstant) NamedTuple) defaultdictN). bit_count is_single_bitbinpropertybitsAddValue MagicValue MultiValueNoAliasUniqueenumauto AddValueEnumMultiValueEnum NoAliasEnum UniqueEnumAutoNumberEnum OrderedEnumuniqueno_arg extend_enum enum_propertyEnumTypeEnumMetaEnumDictEnumIntEnumStrEnumFlagIntFlag LowerStrEnum UpperStrEnumReprEnum SqliteEnumsqlite3 FlagBoundarySTRICTCONFORMEJECTKEEPadd_stdlib_integrationremove_stdlib_integrationexport cls2module_reduce_ex_by_nameshow_flag_valuesr*c|D]}|syy)NTF)iterableelements :/opt/hc_python/lib/python3.12/site-packages/aenum/_enum.pyanyr<'sG r8versionz wrong version)r r"r#)r&r%)r$)r)cl |fd}|St|tr:|jjD]\}}t |ts||<|St|t st r;t|t r+|jj}|D] \}}||< |St|d)z export([collection,] namespace) -> Export members to target namespace. If collection is not given, act as a decorator. ct|SN)r3) collection namespaces r;export_decoratorz export..export_decoratorVs*i0 0r=z is not a supported collection) issubclassr__dict__items isinstancer" stdlib_enums __members__ TypeError)rBrCrDncdatams ` r;r3r3Ns   1 J .''--/DAq!]+ ! 0  J %*ZQ]:^%%++-DAqIaL jJLLr=c.d}|r||dz z}|dz }|r|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) rrr8numcounts r;r r es/B E  sQw    Lr=c(|dk(ry||dz z}|dk(S)z> True if only one bit set in value (should be an int) rFrr8values r;r r s& z UQYE A:r=c#<K|r||dzz}|||z}|ryyw)zZ Return each bit value one at a time. >>> list(_iter_bits_lsb(6)) [2, 4] rNr8)rVbits r;_iter_bits_lsbrYs. vz"    scd|jz}|dk\r t||zjddd}nt||dz |zz }|dd}|dd}|sd}|t||kr|d|z|z| d}|d |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' r10rN ) bit_length _bltin_binreplacelen)rVmax_bitsceilingssigndigitss r;r r sE%%''G z uw ' / /S! < v1 77 8 Ra5D qrUF  v; !2h)F2XIJ?FF ##r=c*tt|SrA)listrYrUs r;r6r6s u% &&r=)DynamicClassAttributecJeZdZdZd dZdZdZdZdZd dZ d Z d Z d Z y)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||_||_||_|xs |j|_|du|_t t |dd|_y)N__isabstractmethod__F)fgetfsetfdel__doc__ overwrite_docboolgetattrro)selfrprqrrdocs r;__init__zproperty.__init__sJ   *dll  D[$(7Mu)U$V!r=c|jr |jnd}t|||j|j|xs |j}|jdu|_|SrA)rtrstyperqrr)rwrpfdocresults r;getterzproperty.gettersR#11t||tdD$))TYY8L M#||t3 r=c|jrtjnd}t||j||j|j}|jdu|_|SrA)rtrprsr{rr)rwrqr|r}s r;setterzproperty.settersM#11t||tdDIItTYY E#||t3 r=c|jrtjnd}t||j|j||j}|jdu|_|SrA)rtrprsr{rq)rwrrr|r}s r;deleterzproperty.deletersM#11t||tdDIItyy$ E#||t3 r=cH|jjj|j}|jxs|j xs |j }g}|r|jd|z|r|jd|jzddj|zS)Nz%rz function=%sz property(%s), ) ownerclass _member_map_getnamerprqrrappend__name__join)rwmemberfuncstringss r;__repr__zproperty.__repr__s--11$))<yy2DII2  NN4&= )  NN=4==8 9 ' 222r=c| |j|jS|j|j |S|j td|jd| |j |jS#t$rt|d|jwxYw#t$rt|d|jwxYw)Nz has no attribute zcannot read attribute z on z member has no attribute )rrKeyErrorAttributeErrorrprqrF)rwinstancers r;__get__zproperty.__get__s   !..tyy99 yy$yy**99((@D :V"'00;; $4> J $",CMtyy Y"""sA;"B";$B"$Cc|jL|j&td|jd|jd||j |j<y|j||S)Nzcannot set attribute on )rqrprrclsnamerF)rwrrVs r;__set__zproperty.__set__sZ 99 yy$$CG99dll[05!!$)),99Xu- -r=cd|j|js |jr&td|jd|j d|j|j vr|j |j=ytd|jd|j d|j|S)Nzcannot delete attribute rrz no attribute z> member)rrrprqrrrrF)rwrs r; __delete__zproperty.__delete__s 99 yyDII$FJiiQUQ]Q]^h///%%dii0$BF))T\\Z99X& &r=cB||_|j|_||_yrA)rrrr)rwrrs r; __set_name__zproperty.__set_name__+s !** $r=)NNNNrA) r __module__ __qualname__rsryr~rrrrrrrr8r=r;r r s5W   3"0 . '%r=r ceZdZdZy) SentinelTypec d|jzS)Nz<%s>rclss r;rzSentinelType.__repr__9s $$r=N)rrrrr8r=r;rr8s%r=rSentinelc0|dkry|dt|zk(S)NrFr[) _high_bitrUs r; _power_of_twor=s! qy A5)) ))r=c |dvr t|Sd}|dkrd}|}t|dz t|dzz}|r(ddj|Dcgc] }d|dk( c}z}|Scc}w) N)rrFrTrr\10)strr r)rRnegativer}ds r;r r Bs{ f}3xH Qwd #q&\CAJ &Frwwf=fQV f=>> M >s A% c.d}|r||dz z}|dz }|r|S)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. rrr8rQs r;r r Os.< E  sQw    Mr=c(d}|r |dz }|dz}|r |S)Nrrr8)rRlengths r;bit_lenrss( F !     Mr=c&|dk7xr ||dz zdk(S)z< True if only one bit set in num (should be an int) rrr8)rRs r;r r zs  1H 03#'?q00r=ct|tr|jt}t |d|}t |\}}}}|duxr|duS)z6check if new generate method supports *args and **kwdsim_funcN)rH staticmethodrr{rv getargspec)methodargsvarargskeywordsdefaultss r;_check_auto_argsrsP&,'% VY /F(26(:%D'8X $  784#77r=c`|s|St|dtts-tfd|ddDs t dt |St|dd tfd|ddDrt |dSt d #t$rt |d cYSwxYw) zC sorts things by value if all same type; otherwise by name rc38K|]}t|uywrAr{.0v sort_types r; zenumsort..s>:aDGy(:srNz$cannot sort items of different typesc3>K|]}t|duyw)rNrrs r;rzenumsort..sAjD1J)+jsc |dSNrr8is r;zenumsort..sAaDr=keyztry name sort insteadc |dSNrr8rs r;rzenumsort..s!r=)r{rEtupleallrKsorted)thingsrs @r;enumsortrs  VAYI i '>6!":>>BC Cf~1&  6AfQRjAAf.99 788 6&n5 5 6s#$B BB-,B-cleZdZeddZeddZeddZeddZed d Zd Z y ) EnumConstantsaddvaluez;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 valuesnoaliasz2duplicate valued members are distinct, not aliasedrz(duplicate valued members are not allowedc|jSrA_name_rws r;rzEnumConstants.__repr__s {{r=N) rrrconstantrrrrrrr8r=r;rrsH $abH,(abJ,(MNJy"VWG h J KFr=rcNeZdZdZdZedZedZdZdZ dZ dZ y ) rz+ Helper class to track args, kwds. c|||_t|j|_t ||_d|_yrA)_argsdictrG_kwdshash_hashr)rwrkwdss r;ryz enum.__init__s- $**,' $Z  r=c|jSrA)rrs r;rz enum.argss zzr=c6|jjSrA)rcopyrs r;rz enum.kwdsszz  r=c|jSrA)rrs r;__hash__z enum.__hash__s zzr=ct||jstS|j|jk(xr|j|jk(SrArH __class__NotImplementedrrrwothers r;__eq__z enum.__eq__s;%0! !yyEJJ&B499 +BBr=ct||jstS|j|jk7xs|j|jk7SrArrs r;__ne__z enum.__ne__s;%0! !yyEJJ&A$))uzz*AAr=c g}dj|jDcgc]}|c}}|r|j|djtt |j j Dcgc] \}}|d|c}}}|r|j||jjddj|dScc}wcc}}w)Nr=()) rrrrrkrrGrr)rwfinalarkrrs r;rz enum.__repr__syy : 1!, :;  LL yy$tyyGXBY9Z[9ZAq!,9Z[\  LL >>22DIIe4DEE ;\s C:C N) rrrrsrybltin_propertyrrrrrrr8r=r;rrsK !!C B Fr=rno_valueceZdZdZeZeZgZdZdZ dZ dZ dZ dZ dZd Zd Zd Zd Zd ZerdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'e(d!Z)e)jTd"Z)d%d$Z+y#)&rzP Instances are replaced with an appropriate value in Enum class suites. c|j}|jdd|_|jjt||ff|SrAr _operationsr_and_rwrnew_autos r;__and__z auto.__and__C>>##//2##UT5M$:;r=c|j}|jdd|_|jjt||ff|SrArrs r;__rand__z auto.__rand__C>>##//2##UUDM$:;r=c|j}|jdd|_|jjt|ff|SrA)rrr_inv_rwrs r; __invert__zauto.__invert__sA>>##//2##UTG$45r=c|j}|jdd|_|jjt||ff|SrArrr_or_rs r;__or__z auto.__or__ sC>>##//2##TD%=$9:r=c|j}|jdd|_|jjt||ff|SrArrs r;__ror__z auto.__ror__sC>>##//2##TE4=$9:r=c|j}|jdd|_|jjt||ff|SrArrr_xor_rs r;__xor__z auto.__xor__rr=c|j}|jdd|_|jjt||ff|SrArrs r;__rxor__z auto.__rxor__r r=c|j}|jdd|_|jjt|ff|SrA)rrr_abs_rs r;__abs__z auto.__abs__$A>>##//2##UTH$56r=c|j}|jdd|_|jjt||ff|SrArrr_add_rs r;__add__z auto.__add__*rr=c|j}|jdd|_|jjt||ff|SrAr!rs r;__radd__z auto.__radd__0r r=c|j}|jdd|_|jjt|ff|SrA)rrr_neg_rs r;__neg__z auto.__neg__6rr=c|j}|jdd|_|jjt|ff|SrA)rrr_pos_rs r;__pos__z auto.__pos__<rr=c|j}|jdd|_|jjt||ff|SrArrr_div_rs r;__div__z auto.__div__CsC~~'H#'#3#3A#6H  ' 'u (> ?Or=c|j}|jdd|_|jjt||ff|SrAr-rs r;__rdiv__z auto.__rdiv__Ir r=c|j}|jdd|_|jjt||ff|SrArrr _floordiv_rs r; __floordiv__zauto.__floordiv__OsC>>##//2##Z$$?@r=c|j}|jdd|_|jjt||ff|SrAr3rs r; __rfloordiv__zauto.__rfloordiv__UsC>>##//2##Z%$?@r=c|j}|jdd|_|jjt||ff|SrArrr _truediv_rs r; __truediv__zauto.__truediv__[sC>>##//2##Yu $>?r=c|j}|jdd|_|jjt||ff|SrAr9rs r; __rtruediv__zauto.__rtruediv__asC>>##//2##Y $>?r=c|j}|jdd|_|jjt||ff|SrArrr_lshift_rs r; __lshift__zauto.__lshift__gC>>##//2##Xe}$=>r=c|j}|jdd|_|jjt||ff|SrAr?rs r; __rlshift__zauto.__rlshift__mC>>##//2##Xt}$=>r=c|j}|jdd|_|jjt||ff|SrArrr_rshift_rs r; __rshift__zauto.__rshift__srBr=c|j}|jdd|_|jjt||ff|SrArGrs r; __rrshift__zauto.__rrshift__yrEr=c|j}|jdd|_|jjt||ff|SrArrr_mod_rs r;__mod__z auto.__mod__rr=c|j}|jdd|_|jjt||ff|SrArMrs r;__rmod__z auto.__rmod__r r=c|j}|jdd|_|jjt||ff|SrArrr_mul_rs r;__mul__z auto.__mul__rr=c|j}|jdd|_|jjt||ff|SrArSrs r;__rmul__z auto.__rmul__r r=c|j}|jdd|_|jjt||ff|SrArrr_pow_rs r;__pow__z auto.__pow__rr=c|j}|jdd|_|jjt||ff|SrArYrs r;__rpow__z auto.__rpow__r r=c|j}|jdd|_|jjt||ff|SrArrr_sub_rs r;__sub__z auto.__sub__rr=c|j}|jdd|_|jjt||ff|SrAr_rs r;__rsub__z auto.__rsub__r r=cp|jryd|jd|jd|jdS)Nz auto(...)zauto(z, *z, **r)r_valuerrrs r;rz auto.__repr__s.    -1KKTZZP Pr=c|jtur|jr td|jtur|js |jS|jtur |jS|j S)Nzauto() object out of sync)re _auto_nullrrK_resolvers r;rVz auto.valuesb ;;j (T-=-=78 8 [[J &t/?/?;;  [[ *;; ==? "r=cL|jr|j|}||_yrA)rrhrerwrVs r;rVz auto.values   MM%(E r=Nc`|j}|jD]|\}}g}|D]k}t||rL|jtur| tccS|j |?|j |j[|j |m||}~g|jdd|_|SrA)rrrHrVrgrre)rw base_valueropparamsvaluesparamrVs r;rhz auto._resolves..C".. F#E!%- ;;*4)1'1 1 & j 9"MM%++6 e,$F /#%D  Q DKLr=rA),rrrrsrg enum_memberrerrr rrrrrrr#r%r(r+PY2r/r1r5r7r;r=rArDrIrKrOrQrUrWr[r]rarcrrrVrrhr8r=r;rrsK FK                                Q ## \\ r=r)_commonc&eZdZdZdZdZdZdZdZy) _EnumArgSpec)rz all args except *args and **kwds)rzthe name of the *args variable)r[zthe name of the **kwds variable)r^zany default values)z0number of required values (no default available)ct|}|\}}}}|r|dt| }n|dd}tjt|||||fSr)rrdr__new__ru)r _new_funcargspecrrrrreqss r;rxz_EnumArgSpec.__new__sVY',3)gx 3x=.)D8D}}\D'8Xt+TUUr=N) rrrrrrrrequiredrxr8r=r;rurus! 0D1G3H&HDHVr=ruceZdZdZdZdZy) _proto_memberzW intermediate step for enum members between class execution and final creation c||_yrArUrjs r;ryz_proto_member.__init__s  r=c t|||ji}d}d}d}d}ttrrtdtr}dttr+jt urj }j}nttr3j}jfj z}jn_ttrj }j}n6ttrjf}nttsf}n}|f|ddzi}}~|jsd|jvr|jr+|d}|dd}d|jvr|dd}n|}|dd}|dn|jr\|jrP|t|j dzd}|js"|dt|jj }|dn3|jr|dd}|dd}|dn|jr|dn|}n|}|j tur|f}|j"s|j%|} n|j$|g|i|} t'| ds2|j t(ur| _n |j |i|| _| j*|| _|| _| j6|i|t|j8| _t<jt?|t<rZ|xj@zc_ tCr|xjDzc_"d|j@jGzdz |_$|jJr|j8jM|ntOtP} |jR} |jTr| | jVjM|| r{g}| j]D]=\}}d j_|}|jM|d |d ||jd ?ta|jbd dj_|t|jtr| |j_2d}d}d}|jfddD]\}|jhjk|}|!t|tltnfr|}|}d}n tq|r|}|xsd}|xs|}Yd}|}^|rtm}| |_9|ju|||dvrltw|dd|_<tw|dd|_=tw|dd|_>tw|dd|_?tw|dd|_@tw|dd|_A||_B||_Ct|||n t||| | |j|<f|z}|jr |vr||fz }|| _F|D]o|jr:|jRvstfd|jXDrtad |jJr t/d| |jR<qy#t,$r} t/d} | | _| d} ~ wwxYw#t.$r]|jXD]D\} }|jV}| | j*k(s"|jTr| |jM||} ntZY wxYw#tZ$rrt<t?|t<s|j8jM|n z []z: duplicate names found: z; rdescattr)rrrprrqrrrrc3.K|] \}}|k(ywrAr8)rrrOrVs r;rz-_proto_member.__set_name__..sR4Q&1a1:4Qsz has already been usedzcannot use dict to store value)HdelattrrVrHrrrgrrrMember _multivalue__creating_init_ _auto_init_ _new_args_rd _auto_args_ _member_type_ _use_args_ _new_member_hasattrobjectr ExceptionrK __cause__r __objclass__ry_member_names_ _sort_order_r%rE _flag_mask_r _singles_mask_ra _all_bits_ _noalias_rrrk_value2member_map__unique_r_value2member_seq_rrGr ValueErrorrrq__mro__rFrr rl is_descriptorrrrvrp_getrq_setrr_del _attr_type _cls_typesetattrr_values_r<)rw enum_class member_namerr init_args extra_mv_argsrmv_argrqexcte nonuniqueunhashable_valuecanonical_memberrmessagealiases bad_aliasesfound_descriptordescriptor_type class_typebaserredirectrorVs @r;rz_proto_member.__set_name__s  K(    eU #*U1Xt2LJ!HE eT "u{{j'@::D::D t $::DKK?UZZ/DKKE t $::D::D v &KKE9DE5)9DD  !I 12.EDD  " "g1K1K&K&&a $QR j888 $QRI $IAayQ))j.C.C!%c**D*D&E%Ea%G%H II%11#$DS)>)>)C)C%DE GE++ $QRI!9D GE** GE!%II  # #u ,8D$$$11*=K1*11*LtLtLK{I.''61&+ #*B**B*BD*QD*QK' ##( #-   i040#&z'@'@#A    :t <  " "e + "U#))U2)$%:+A+A*M*M*O$PST$TJ !     % % , ,[ 9#D)I B'","?"?"FK!**!+"2"23::;G8%.__%6MD'"%((7"3KNNt[*UYJZJ`J`#ab&7!'00%**W2EG djj$ '%0DJJ " &&qr*D==$$[1DdX/D$EF'+$!%J&,O"4('+$&5&?O!+!3tJ&,O!%J+ zH)HO  ! !*k :/1 '(8&$ G '(8)T J '(8&$ G '(8)T J '(8&$ G '(8, M "1H !+H  J X 6 J [ 9/:  ,]*  " "vV'; vj F% E&&Z:::RJ4Q4QRR u!GHH J''#$DEE7B --e4e!"#TUB#&BLH:! '>H>[>[:(*:/44+{/B/BB)22 )$ 6 6{ C*:K! ?\'" ' B )*d;--44[A(&z48)%0--44[A Bp J--5+2F1II-- Js[Y9Y>0&]% Y;"Y66Y;>6[$5+[$ ['#[$$[''A7]"!]"%!^  ^ N)rrrrsryrr8r=r;r~r~saJr=r~cBeZdZdZfdZfdZfdZdZdZxZ 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. cdtt| ||_||_||_||_d|_g|_t|_ ||_ t|vx|_ }t|v|_t |v|_|jr|jrt%d|z|j"r|jrt%d|z||_||_d|_d|_t|v|_g|_g|_|jr gd|_d|_d|_g|_d|_y)Nz2%r: AddValue and MagicValue are mutually exclusivez4%r: MultiValue and MagicValue are mutually exclusiver8F)r r classmethodT)superr!ry _cls_name_constructor_init_constructor_start_constructor_boundary_generate_next_value _member_namesset_member_names_set _settingsr _addvaluer _magicvaluer _multivaluerK_start_addvalue_value _new_args _auto_args_locked_init_ignore_ignore_init_done _allow_init _last_values _auto_called) rwcls_namesettingsstartconstructor_initconstructor_startconstructor_boundaryrrs r;ryzEnumDict.__init__s& h&(!!1"3%9"$(!!$!$,$88%1%1 >>d..PS[[\ \    0 0RU]]^ ^ $!1     FDL!&!r=c||jk(r|j|vrtS|js(||vs$||jvst |s t |rt t|#|S|jrR|j||jt|j|jdd}|j|||St!d)Nz"Magic is not set -- why am I here?)rrrr is_sunder is_dunderrr! __getitem__rrrrdrr __setitem__r)rwrrVrs r;rzEnumDict.__getitem__s $.. T^^4%?K $;$,,&S>S>44S9 9   --c4;;DDVDV@WY]YjYjklYmnE   S% (L@A Ar=c >d}t|j|rnst|j|rn[t|r?|dvrt |jd|d|j s|dvrt |jd|d|dk(r|j rtd |jzt|tr|j}n t|}||_ t||jz}|r0t |jd d jd |Dd|_nV|d k(r%|j rDtd|jz|dk(r-|j"rtd|jz||_n|dk(rt|tt&fs|f}t|ts t|}|xj(|zc_t*|vr t,|vrtd|jzt.|vr t*|vrtd|jzt0j3gd}|j(D])}||vrt|jd|d|dd||<+|d|_|d|_|d|_|j8 |_|j8r|j s gd|_ |j6r6|j<r*d|j<vr|j<j?ddt'|j(}nb|dk(r|j@rtd|jz|}t|tr |jCd d!j}|j6r*d|j<vr|j<j?dd|j8rtd"|jz||_|}n|d#k(r|jDr td$|}|bt|tFr |jH}n5t|tJrtd&|jz|}tG|}tM||_'tQ|d'|ntS|r|d(k(r)d)}|j smt |jd|d|d*k(r-t|tFr |jH}tU||_+n |d+k(rt|tJs tK|}tY|ryd|_np||jvrt|jd,|||jvrn8tY|sd-|_||vr t|jd.|d/||t[|t\ur,||_/|j6r td0|jz|j6r |j4s|ja||}n|j4rdt[|t&ur|f}t|dtbr|je||df|d1d%z}|j6rl|ja||}nXt|tbr|je||}n4t[|t&urtgd2|Drqg} |D]^} t| tbr;d-}|je|| } | jh} |jjjm| | jm| `t'| }nt|tbs|jVxr|jVjn} tq|j<xs| } t|t&r tq|} nd1} tq|j<d1kDxs| }| | kr|ja||}n |j<rt|tbr |jr}nt|t&s|f}n|}tq|j<tq|k7r+t|jd3|d4|j<d5|d6|jtjm||jjw|nd|_d-|_t|stS|st|j|stY|s|sd}nt|tbr&|jjjm|jhnt[|t&ur]|rvt|dtbr)|jjjm|djhn:|jjjm|dn|jjjm|txtz|||y%)7zChanges 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: _sunder_ names, such as z", are reserved for future Enum use)create_pseudo_member_rrrz : cannot set z after init phaserz%%r: ignore can only be specified oncez,: _ignore_ cannot specify already set names rc32K|]}t|ywrA)repr)rrs r;rz'EnumDict.__setitem__..Cs%?w!d1gwrz4%r: boundary specified in constructor and class bodyrz1%r: start specified in constructor and class bodyr-%r: NoAlias and Unique are mutually exclusivez*cannot specify both MultiValue and NoAliasrrrrr: unknown qualifier z (from rrrr)r rrrVrrz3%r: init specified in constructor and in class bodyrr`z0%r: _init_ and MagicValue are mutually exclusiverz4_generate_next_value_ must be defined before membersNzB%r: _generate_next_value must be a staticmethod, not a classmethodr __order__rrx__init_subclass__z: attempt to reuse name: F: z already defined as z(%r: enum() and AddValue are incompatiblerc3<K|]}t|tywrA)rHr)rrs r;rz'EnumDict.__setitem__..s-Q5ajD.A5.z/: number of fields provided do not match init [z != r)?is_internal_classris_private_namerrrrrKrH basestringsplitrkrrrrrrrrrrrrrfromkeysrrrrrinsertrrcrr__func__rrrrrrurrr{rr_gnvr _convert_autor<rVrrr|rdrraddrr!r)rwrrV auto_storealreadyallowed_settingsargrgnv auto_valuedrnew_args target_len source_len multi_args test_valuers r;rzEnumDict.__setitem__s- T^^U 3  T^^S 1  s^!>>3"0%%#6+!Y\!]^^ "))#$Kdnn$\]]eZ0!KKME KE$ e*t'='==$ NN II%?w%??&*.& $--#$Z]a]k]k$kll !**#$WZ^ZhZh$hii#  $!%#u6"IE!%-JE%'e#%#$SVZVdVd$dee5(W-=#$PSWSaSa$abb#'==1n#o >>C"22'PTP^P^`cej(kll,0$S)*$4L#A !1*!=#3L#A #'#3#33 ##D,B,B#NDL>>djjWDJJ5NJJ%%a1dnn-))#$Y\`\j\j$jkkfj1#^^C4::>gTZZ&?JJ%%a1###$VY]YgYg$ghh# //$$#$Z[[$!%6#nn#E;7'(loso}o}(}~~# ,U 3&6u&=DO4c: s^k!''$T^^]`%abb !e\2!NNE!-e!4++!%5'.EU## D** *t~~sST T DLL u%$D d{$..RUW[\_W` abbE{d"  >>#$NQUQ_Q_$_``(8(8 #u-!!E{e+"IEeAh-!//U1X>AE!"IME>> IIc51EE4(**36e%#-Q5-Q*Q! A!!T*%*  ..sA6GG))003&&q) k*t, "&!KDNN4K4K !7x8 eU+!$UJ!"J _q0|j||jt |j |jdd}t|trt |dk(r|d}|SNrr)rrHrrrrdrr)rwrrVs r;rz EnumDict._gnvs ??eU+ -D--c4;;DDVDV@WY]YjYjklYmvpuvE--c4;;DDVDV@WY]YjYjklYmnE eU #E a!HE r=) rrrrsryrrrr __classcell__rs@r;r!r!s% !"FB$O6b0 r=r!rceZdZdZeddZdZdfd ZdZe ddddddfdZ d Z d Z d Z ed Zd ZdZdZdZeZdZdZdZddZddZedZedZedZedZedZedZ xZ!S)rzMetaclass for EnumNc |j||t|dk(rd}nd}|du} |du} |du} t|ts|f}t |}d} d} |j ||\}|\t |dd} t | d| } ||j|z}|xs|jdd}|j} ||j}nd}t|vr.|r,d|vr(t|tr|jddnd |z}t|vrt|vrt!d |zt"|vrt|vrt!d |zt$j'gd }|D]}||vst!|d |t)|||| | | }|_dtduxr|dk(xstduxrt-d|D|_tbt-d|DrPt0t2fzvr@t|vrd}t5||d<fd}||d<n t7|j8|_n|snt=|drt7|j8|_| r | |d<d|_|^t|t@r |jCddjE}||_#n&t=|drt7|j8|_| t5| |d<|S#t $rYwxYw)Nr%TFrrrrVrzvalue rz1%r: MultiValue and NoAlias are mutually exclusiverr)rrrrrr)rflagc3<K|]}t|tywrA)rEr%rbs r;rz'EnumType.__prepare__..As(LeAt).Cs#=u!AIuscd|zf|zS)Nr[r8)rrrSrorrs r;rz3EnumType.__prepare__.._generate_next_value_LsJ>D00r=c:j||}||_|SrA)rxr)r flag_value type_valueobj member_types r;rxz%EnumType.__prepare__..__new__Os!%--c:>C",CKJr=rx__new_member__rr`r)$_check_for_existing_members_r%rHrr _get_mixins_rv_get_settings_r_order_function_rrrkrrrrKrrrr! _member_typer< _base_type baseintegerrrrur&rr_inherited_gnvrrcrr)metaclsrbasesinitrrboundaryr initial_flagrrrgenerateorder first_enumr r  enum_dictrrxr%s @r; __prepare__zEnumType.__prepare__s",,S%8 |3Ds ts|d }2d?|vrd@|d?< d}4tju||||}5|4|4tzt|kr|!D]!}5j~|j|5|#5j~j D])\}}1||!vr t|1dAs|1j|5|+tt|5dBrt|5|5tt|vr{.7sFg1 4 44gsrszAn enumeration.rrzOReprEnum subclasses must be mixed with a data type (i.e. int, str, float, etc.) __format____str__)rrErDr?)rrrrr rr__cmp__)__le____lt____gt____ge__rrrr&r%z%member order does not match _order_:  )Zr{r!poprvrrGrrrrr8rrrrH OrderedDictrrkrrcrcallablerrr _defined_len_rdrK_fields_rrrrlocalsrrrrrrrrrrrrr setdefaultrr( _find_new_r~_find_data_repr_ nonmemberrVrr<make_class_unpicklablerx RuntimeErrorrpyverPY3_6rFrrr"rrr)rDrErrr%rEPY2_6intrrrr*rrrrrr rrr)>r/rr0clsdictr1rrr2rrrrrrrrrrrrrrxrr enum_members original_dict calced_orderrrVr name_valuerOr member_names invalid_names creating_initr auto_args auto_initrrrrignorerrr6save_new new_uses_argsr$ unpicklablemethodsrrer class_method obj_method enum_methodor%rs> @r;rxzEnumType.__new__ls = (;;x.DKK 40E{{<4Hkk)W[[d-KLG{{:t4H%,[[1I4%P ",3KK8WY],^ )$+KK0G$N ! K6I%kk*;TBO$[[)94@N \48J#KK>M%,[[1I4%P "#*;;/Et#L kk)T2Ggy':Ggz7;G)0!)8v1%aLIaLOCQR'(S"00 IIfoo6 O II &C 1tAw &CD W) !'' (;<$817|0QR0Q10Q R& x~#$(GDM"!.q!1GAJ" &++-1L(!"GAJ.#9;X%y/>,, L)C ,<<  -(,- -++i. gz *ooc#.446G}}$$ $$&&   I GM m # a(8G(CUV V8+ 8+ X%8# :r*11*=$C KKT ">w{{<>{{23  T , >%Dw}}'  /3G+ ,")"6"6sE"B Z+2+=+=,(= #/w"7 - !DDME)%0GDM! &3!"",",& $ %' !"--#. (*$%(*$% ( " !%  ( !* &*"#")":":3"F;:|T:  "# $% ! !  $ !ID##y) #  ) ' )&(7FgFF*73"&K G #!2GI  #CgsE7CJ ?I 5=$##D)66z4H%'00668 c<'3/$$Z6 9 GJ8K$Lj*?A  H$5f$27*(3(>(> %(2(=(= %'$,,V^^+)11F%+ "%/%7%7 "JDw":t4L dD9J!*dD9K%* *D?*{ D+6 + K   :t < w&JgdD.AB$/GDM 5=*c* IwsI/FG *c*FJV0DE   $4j6I6I)6TU J 4==+C D '<0!** .:7.C ++1*'+JK+Ja166+JK #Jz4,H J - J . J 0 1 J - J -  *Z">#-.:a :.&Z9XZ!))Z9X2YY+5+J+J (")!(AJ$;$;;}ZXY]MbMb?c!(''--/DAq!X&:aggt+D$QWW]]30 %$!8!88j555!z?X?X:X $ *333%44g?} ! `*'D S$ N #++"C  #`L/9Xs`7;o. o43o:8o?2p8p p;q4q '/q  3q pp p8p33p8cy)z6 classes/types should always be True. Tr8rs r;__bool__zEnumType.__bool__sr=rc Z||j||S|j|||||||S)aEither 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. )modulequalnamer{rr2)rx_create_)rrVnamesrsrtr{rr2s r;__call__zEnumType.__call__s: =;;sE* *||E5(QU]bmu|vvr=ct||ry ||jvS#t$r+||jDcgc]\}}| ncc}}wc}}vcYSwxYw)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. T)rHrrKr)rrVrrOs r; __contains__zEnumType.__contains__s_ eS ! BC222 2 B#*@*@A*@31QQ*@AA A Bs A A  AAcB||jvrt|jd|dt||}t |t rt|jd|t |t rt|jd|tj||y)Nz: cannot delete Enum member rz: cannot delete constant z: cannot delete property ) rrrget_attr_from_chainrHrr r{ __delattr__)rr found_attrs r;r|zEnumType.__delattr__ s 3## # ;><<N )d3 j( + 7:||TJ  H - 7:||TJ  d#r=cDt|jgdz}|jtjur|j d|j tj ur|j dttdr|j ddD]@}t||tt|tt|fvs0|j |B|jtur t|Sttt|j|zS)N) rryrsr__iter____len__rJrrrxrr)ryrDrrE)rrrrrxrrr"rrvr%rrdir)r interestingrs r;__dir__zEnumType.__dir__s#,,0   6>> 1 OOI &  (>(> > OO/ 0 6> * OON +GFsF#GD&,A74QWCX+YY'H    &+& &#c#"3"345 CD Dr=c6|jjS)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. )rrrs r;rJzEnumType.__members__1s$$&&r=cT |j|S#t$rtjd}YnwxYwtLt |tr.OsF3E4  &3Errs`r;rzEnumType.__iter__NsF33E3EFFr=c@fdtjDS)Nc3<K|]}j|ywrArrs r;rz(EnumType.__reversed__..RsP3O4  &3Or)reversedrrs`r; __reversed__zEnumType.__reversed__QsP8C ? SXZbHc 7:||TJ  dE*r=c^ddl}|jdtd|j|i|S)NrzB_convert is deprecated and will be removed, use _convert_ instead.r[) stacklevel)warningswarnDeprecationWarning _convert_)rrrrs r;_convertzEnumType._convertss7 ,-?A  Os}}d+d++r=cttj|}|r t|}n|}|jDcgc]}||s |||f} } | j d||| ||xst }t|_|r t|n|j|j|||<|Scc}w#t $r| j dYrwxYw)z[ Create a new Enum subclass that replaces a collection of global constants c|d|dfSrr8ts r;rz$EnumType._convert_..s!ad|r=rc |dSrr8rs r;rz$EnumType._convert_..sqtr=)rsr2) varsrmoduleskeyssortrKr0r5r? global_enumupdaterJ) rrrsfiltersourcer2 as_globalmodule_globalsrmemberss r;rzEnumType._convert_ysdll623 &\F#F17N#&+C%N - LL3L 4$9ITJ.     ! !#// 2"t O - LL^L , -s B; B;CCCc tr"t|tr |jd}|j }||f} n||f} |j|| \} } t| dd} t| d| } t|tr |jddj}t|ttfr`|r^t|dtrK|g}} g}t| D]7\}}| ||||dd}|j||j||f9d}d}|D]K}|%t|tri}n|j!|| }t|tr|||}}n|\}}|||<M||j!|| }|j#||| || }|# t%j&d j(d }| t/|n||_|||_|S#t$rt |dwxYw#t*t,f$rYLwxYw) 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 is not representable in ASCIINrrrr`r)r2r[r)rrrHunicodeencodeUnicodeEncodeErrorrKrr(rvrrcrrrk enumeraterr8rxr _getframe f_globalsrrrVrr)r class_namervrsrtr{rr2r/r0_r6r4original_names last_valuesrSrrVitemr\r member_valuers r;ruzEnumType._create_s3 *g.Y!+!2!27!;J-- <GE3KE((U; ::'>E8Y9 eZ (MM#s+113E eeT] +*U1Xz:Z$)2ENK(8 t ue[^D""5) dE]+ 9 DdJ/ G&11*eDG$ +,0%+\ ,0) \#/GK  ?))*e *44Z@ > ": .$*J !  &.J #k*Y#*$WXXYZ#H-  sG"G2G/2HHcty|D]A}|jD]0}t|ts|js!t d|d|Cy)Nrz> cannot extend )r"rrErrKmclsrr0chainrs r;r'z%EnumType._check_for_existing_members_sK < E dD)d.A.A#)41&r=c|rt ttfS|j|||d}|tvr|d}t |ts t d|j ||xst}|jr t d||fS)zReturns the type for creating enum members, and the first inherited enum class. bases: the tuple of bases that was given to __new__ r_zZnew enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`z*cannot extend enumerations via subclassing)r"rr'rIrErK_find_data_type_r)rrr0r6r%s r;r(zEnumType._get_mixins_s 4<  ))*e<2Y  %rJ*d+KL L++J>H&  $ $HI IJ&&r=cV|D]}|jD]}|tftzvrt|tr|j ccSd|j vsCd|j vr1d|j vr#|j djr tccS|j dccSy)Nr__dataclass_fields____dataclass_params__) rrrIrHrr=rFr_dataclass_reprrs r;rTzEnumType._find_data_repr_sE VJ56h/,,,4==03dmmC 6$-- G $ .D E J J..#}}Z88!&$r=ct}|D]}d}|jD]}|tftzvrt |t r0|j tus7|j|j ed|jvsd|jvr?t |t rtt|tr|j|xs||xs|}t|dkDrt|d||r|jSy)Nrxrrz: too many data types: )rrrrIrHrrrrF StdlibFlagrErdrKrL)rrr0 data_typesr candidaters r;rzEnumType._find_data_type_sU EI VJ56h/))7"t'9'9:$--/3IT]]3Z!$1 #/JtZ4P NN9#45 ) 1TI&$ z?Q ZTU U >># #r=ct}|D]F}|jD]5}t|ts|jD]}|j |7H|S)zuReturns the combined _settings_ of all Enum base classes bases: the tuple of bases given to __new__ )rrrEr"rr)r0rrrrgs r;r)zEnumType._get_settings_5sM 5E dD)!__ Q-& r=c~|jdd}|duxr|du}|rdD]]}||fD]P}t||d}|ddjtjtjt jfvsN|}n|]ntj}|"|tjtjfvrd} nd} ||| fS)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__ rxN)r&rxFT)rrvrxrr" StdlibEnum) rr\r%r6rxrgrpossibletargetrhs r;rSzEnumType._find_new_Cs++i.T)AgT.A ?8!,j 9H$Xvt>,J!J!M M-//r=)NNr8N)NNF)NNNrN)"rrrrsrr8ryrxrqrrwryr|rrrJrrrr __nonzero__rrrrrur'r(rTrrr)rSrrs@r;rrsUUn tl  #$tdQU]^imw( B$$E*''(GQ'K/+.,  !XYY 5#,,!OPP||V- s!= A2A2(A2.A21A2c fttkr|rtd|ytt|di|y)Nzunconsumed keyword arguments: r8)rXrYrKrr"r)rrs r;rrs5 u} $IJ J  dC*2T2r=cft|D] } |dz}n|}|r|f|zS|S#t$rY#wxYwr)rrK)rrrSrrr last_value new_values r;rrsU{+  "QI ,  }t##   s $ 00cy)z'deprecated, use _missing_value_ insteadNr8rrVs r;rr r=c$|j|S)zused for failed value access)rrs r;rrs == r=cy)zused for failed item accessNr8)rrs r;rrrr=c|jjxs |jjj}d|jjd|j d||jdS)N|j|jvr|j |K|j|]t|jrt|j |t|S)z< Returns all members and all public methods )rrsrrrc3@K|]}|jvs|ywrAr)rrLrws r;rz__dir__.. s!\)=A$J[J[A[a)=srFrr)rrrrrrvrr;rFrGrHr rprdiscardr)rwrrrr$s` r;rr s  >> ' '6 1Z[K\)=\\KD*b1DAw#~%2>>%%'C \\//1 c7c>c8,xx+t4;L;L/L#-$++D1#C8OOD)2(k""r=c@tjt||SrA)rrD)rw format_specs r;rDrD s >>#d)[ 11r=c,t|jSrA)rrrs r;rr! s  r=c4|j|jffSrA)rrrwprotos r;r?r?% s >>DLL+ ++r=cvtd|jjd|jjd)Nunorderable types: z() <= ()rKrrrs r;rGrG) ) 9P9PRWRaRaRjRjk llr=cvtd|jjd|jjd)Nrz() < rrrs r;rHrH- ) 8O8OQVQ`Q`QiQij kkr=cvtd|jjd|jjd)Nrz() >= rrrs r;rJrJ1 rr=cvtd|jjd|jjd)Nrz() > rrrs r;rIrI5 rr=cBt||jr||uStSrArHrrrs r;rr: s %(u} r=cBt||jr||uStSrArrs r;rr@ s!%(5  r=c|jSrArrs r;rrN s ;;r=c|jSrA)rrs r;rVrVS s <<r=c|jSrA)rrs r;roroX s ==r=c|jSrA)rrs r;pickle_by_global_namerc s 99r=c>t|j|jffSrA)rvrrrs r;pickle_by_enum_namerh s T^^T[[1 11r=cpjdjfdjDS)Nrc3^K|]$}|jr|dt|&yw)rN)rrv)rrdcfrws r;rz"_dataclass_repr..n s01v{{'$* +s*-)rrr)rwr s`@r;rrl s2  # #C 99XXZ r=r)rszIOnly changes the repr(), leaving str() and format() to the mixed-in type.ceZdZdZy)r#z8 Enum where members are also (and must be) ints N)rrrrsr8r=r;r#r# sr=r#c4eZdZdZdZej ZdZy)r$zr Enum where members are also (and must already be) strings default value is member name, lower-cased c |rtd|jz|r@t|dts-t|jd|ddt |ddt|}tj ||}||_|S)Nz#%r: keyword arguments not supportedrz: values must be str [z is a r)rKrrHrr{rxr)rrorrVrs r;rxzStrEnum.__new__ sz AS\\RS S fQi-W]^_W`bfgmnogpbq rssV S%( r=c"|jS)zD Return the lower-cased version of the member name. )lower)rrrSrs r;rzStrEnum._generate_next_value_ szz|r=N)rrrrsrxrrErr8r=r;r$r$ s kkGr=r$ceZdZdZdZy)r'z} Enum where members are also (and must already be) lower-case strings default value is member name, lower-cased c|tj||g|i|}||jk7rtd|z|S)Nz%r is not lower-case)r$r&rrrrVrrr$s r;rxzLowerStrEnum.__new__ B$$S%?$?$? EKKM !3e;< < r=Nrrrrsrxr8r=r;r'r' s  r=r'ceZdZdZdZdZy)r(z} Enum where members are also (and must already be) upper-case strings default value is member name, upper-cased c|tj||g|i|}||jk7rtd|z|S)Nz%r is not upper-case)r$r&upperrrs r;rxzUpperStrEnum.__new__ rr=c"|jSrA)r)rrrSrrrs r;rz"UpperStrEnum._generate_next_value_ szz|r=N)rrrrsrxrr8r=r;r(r( s  r=r(ceZdZdZeZy)AutoEnumza automatically use _generate_next_value_ when values are missing (Python 3 only) N)rrrrsrrr8r=r;rr s  r=rceZdZdZdZy)rz Automatically assign increasing values to members. Py3: numbers match creation order Py2: numbers are assigned alphabetically by member name (unless `_order_` is specified) ct|jdz}|jturtj ||}n>|jt urt j ||}nt j |}||_|Sr)rdrJrr[rxlongrr)rrrrVr$s r;rxzAutoNumberEnum.__new__ skCOO$q(    #++c5)C   $ &,,sE*C..%C  r=Nrr8r=r;rr s  r=rceZdZeZy)rN)rrrrrr8r=r;rr sJr=rceZdZdZeZy)rz1 Multiple values can map to each member. N)rrrrsrrr8r=r;rr sJr=rceZdZdZeZy)rzQ Duplicate value members are distinct, but cannot be looked up by value. N)rrrrsrrr8r=r;rr sJr=rc(eZdZdZdZdZdZdZy)rz7 Add ordering based on values of Enum members. cp|j|jur|j|jk\StSrArrrrs r;rJzOrderedEnum.__ge__ + >>U__ ,<<5==0 0r=cp|j|jur|j|jkDStSrAr"rs r;rIzOrderedEnum.__gt__ + >>U__ ,<<%--/ /r=cp|j|jur|j|jkStSrAr"rs r;rGzOrderedEnum.__le__ r#r=cp|j|jur|j|jkStSrAr"rs r;rHzOrderedEnum.__lt__ r%r=N)rrrrsrJrIrGrHr8r=r;rr s   r=rceZdZdZy)r*c@|tjur |jSyrA)r+PrepareProtocolr)rwprotocols r; __conform__zSqliteEnum.__conform__ s7222yy 3r=N)rrrr,r8r=r;r*r* s !r=ceZdZdZeZy)rz+ Ensure no duplicate values exist. N)rrrrsrrr8r=r;rr sJr=rcttj|}|r t|}n|}tfd|j D}||||}t |_|j|j|||<y)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') c3>K|]\}}|s||fywrAr8)rrrVrs r;rzconvert... s SN[T5fTlD%=Ns )rsN) rrrrrGr5r?rrJ)rrrsrrrrs ` r;convertr0 ss$,,v./N fSFLLNSSG gf -D+D$**+N4r=c ( ||jvs.||jvs |t|ddDcgc]}|d c}vr-t|d|jj |||d}|j ddD]Q}|jj |}|!t |ttfrnt|d|j |j}|j}|j} |j} t|jD cgc]} | jD]} | c} } } |j }t"|j$v}t&|j$v}t(|j$v}|j*xsg}|r|st-d |jz| j.}t|d dxst|d dxs|}|sb|Dcgc]}|j0}}t3|}t|d d}||xr|d dzxsd}t|dd}| |||||f}n|f}|t4j.urd}nd}t3|dk(r|\}n|}d}i}t |t6r|j8}|j:}t |t<s|f}n|}d|vr!d|vr|j?d}n|d|dd}}n|r|d|ddd}}}|r|f}| t<ur|f}|s||}tA|ds*||_!n"||g|i|}tA|ds | ||_!|jB}|r d|vr|}n|f|z}||_"|jF|_$|jJ||f|z|_&t3|j|_'dx}}tA|drr|jP|z}|jR|z}|jTdk7rEtWtY||z} | r+tdtZddj]d| D|rt_||||S|jL}!|jaD]X}"t|"d|"jBg}#|#D]9}$|!D]2}%|$|%k(s |s|rt-|d|"t_||"|||dcccS;Ztbtdkrtff}&n tfthf}&tk||&r{tA|drotm|rt_||||S||jRz|k(r3| j |"| j |}'t_||'|||dSt_||||dSt_||Scc}wcc} } w#t$rt|dwxYw#t$rg}d}d}d}g}YwxYwcc}w)z/ Add a new member to an existing Enum. rr8rz already in use as N already in use in superclass z is not a supported EnumFz*no values specified for MultiValue enum %rrr&rr_rTrVrrrkeepz invalid Flag z -- missing values: rc32K|]}t|ywrA)r)rrs r;rzextend_enum.. s*B6a3q66r)r maskrz is a duplicate of )rr r5is_alias)r r5r6)7rFrrvrKrrrHr rlrrrrrr;rrrrrrrrrxrVrdrrrrrrLrrrrrryrrrrrrkrYrr_finalize_extend_enumrorXrYr%rrEr )( enumerationrrrr descriptorrrrrrrrbase_attributesr _multi_value_ _no_alias_rrmt_new_newrOrrSrrrhrV more_values new_memberrrmissed new_valuesrcanonical_values_canonical_valuer flag_bases canonicals( r;rr4 s' K(( ({///gk;OQS&TU&T!&TUUT;;O;O;S;STXZefjZk;lmnnJ##AB']]&&t,  !*x1F&GHdmm \]] (H"// $33#11 (;;+//*;P*;QQZZqZq*;PQ (;;"k&<&<<  6 66 [333!--3 TE H\H\\]]  " "F ; 5 oN^`d9e oioD (34 1qww 4K  Y5 =9[_q%8>QE{$;TB  $uk:=D9D v~~   4yA~K D%zzzz eU #y+ d?HHW%Eq'484E #'7DHbD{ 9Dx +& z9-!&J +555 z9-!.!5J    E k !D9{*DJ)33JJ )k1J!+"<"<=J $#J{L) ++e3 !--5  ! !V +. {)BCDF *B6*B CE $[*:T_`` (( , 3 3 5  '(8*GWG_G_F` a #4!+I&)3#}",*Vf-g"hh$9FV]ahrzEPT$UU",$5!6 5=Jz)J k: .7; 3UU#,[*:\ghh;222e;@R@V@VW\@]@i 2 6 6u =I0idYcjuAEFF0jz`kvz{{)jA AyV"Q H FGGH    5s= UAUU 2U;AU5VUU25V  V c|xs |j}d}|jddD]Q}|jj|}|!t |t t frnt|d|j|s)t }|j||t||||s|jj|||j|<t|d|jgD]} ||j | <|rB||_||_t)|jr|xj*|jzc_|S#t$r|xj"| |ffz c_Y~wxYw)Nrr2r)rrrFrrHr rlrKrrrrrrrvrrrrrr r) r8r@rr r5r6r9rrrs r;r7r7 sZ  ":??DJ##AB']]&&t,  !*x1F&GHdmm \]] ( :k40 T8, ""))$/%/KT" Zj.@.@-A B B0:K * *1 -C  !% "&  ++ ,  & &**<*< < &  B  * *:.A A * Bs)E!E$#E$c ,g}|jjD]2\}}||jk7s|j||jf4|r:dj |Dcgc] \}}|d|c}}}t d|d||Scc}}w)zS Class decorator that ensures only unique members exist in an enumeration. rz -> zduplicate names found in r)rJrGrrrr)r8 duplicatesrraliasduplicate_namess r;rr sJ#//557 f 6;;    tV[[1 28))AKL ud+Lo/   Ms$B )r,cHeZdZdZeZeZeZeZy)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) rrrrsrr-r.r/r0r8r=r;r,r, s% &vr=r,r%zRGeneric flag enumeration. Derive from this class to define new flag enumerations.rrc|s|r d|f|duf|zSd|f|duSt|} t|}d|dzz}|r|f|zS|S#t$rYnwxYwtd|z)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 rNr[zinvalid Flag value: %r)maxrrrK) rrrSrrrrhigh_bitr}s r;rr/ s  JuD014t; ;u:e4/0 0%   ,H8A:&FyD((    0:=>>sAA AAc#Kt||jzD]}|jj|!yw)zY Extract all members from the value in definition (i.e. increasing value) order. N)rYrrr)rrVvals r;rrK s9 ec&8&889$$((--:s<>rc#|Kt|j|}|jd|D]}|yw)zA Extract all members from the value in definition order. c|jSrArrOs r;rz&_iter_member_by_def_..] q~~r=rN)rkrr)rrVrrs r;rrV s; 3--e45G LL-L. s:<c$|j|S)z; return a member matching the given value, or None )rrs r;rra s  % %e ,,r=c|dx}}t|tst|d|j|j}|j }|j }||z }||z}|j} d|f|dk} | rs| |kre| tur|S| turd| jz| z}nD| turd| jz| z|z}n"t|d|j|dz| z}||z} ||z|z} ||z} | tur| r1|S| turd} n$| tur| rt|d|jt|j| }| }d}| rd}|jj!D]s\}}||vs |j"s|j"|z|j"k(s5|j"| zsE|j%|||j"z}||j"z}u|| z| z }|r8| turn/| turd}n$| tur|St|d|j| |z} || z}|f|ddz}|j'd|j(|g|}t+|dd}|j,t.ur|st.j1|}n!|xs|j,j0|g|}t3|d s||_|rXd j5|Dcgc]}|j6c}|_| r/|xj6d |j9| zz c_nd|_|j:j=||}| ||j:| <|Scc}w) z$ Create a composite member. rrNr[rc|jSrArTrUs r;rz(_create_pseudo_member_.. rVr=rr&rrz|%s)rHr-rrrrrrr/r0rar.r-rkrrrGrrrrrvrrrxrrrrrrR)rrorV error_value flag_mask singles_maskall_bits unknown_bits unnamed_bitsr2 neg_valuer unnamed_value unknown_valuer final_value still_unknownfoundrLpmrx pseudo_memberrOs r;rri s!)#EK e[ )*5s||D I%%L~~Hi'Lyj(L~~Hu eai(I  !5 ""T!I0023i?W$Y1134y@IM 2=s||LqL9,E<'LI% 5MYJ&M5   W  V  *5s||D 3$$\23GKM%%++-EArg%JJJJ, :JJ.r"rzz) #.-/=@ 4W$ ! U""" .93<<H]"M= K_vabz )F LL-L. .S . .w @ @Fc+T2G F"7s+ ==C$5$5$=$=sLVL =) , + "xx7(C7a7(CD    EC,>,>},M$M M # **55k=QM,9y) )Ds%M$c|jttfzvr|St|dkr||jfzS|S)zB Return values to be fed to __new__ to create new member. r[)rr-rrd)rrros r;rr sE  [F:56 Vq**,/// r=c*t||js9tdt|jd|jjd|j dk(s|j dk(ry|j |j z|j k(S)zH Returns True if self has at least the same flags set as other. 'unsupported operand type(s) for 'in': '' and ''rF)rHrrKr{rrrs r;ryry sw eT^^ ,U $$dnn&=&= ?@ @ }}T\\Q. ==4<< '5== 88r=c#TK|j|jD]}|yw)z, Returns flags in definition order. N)rr)rwrs r;rr s& $$T\\2 3s&(c,t|jSrA)r rrs r;rr s T\\ ""r=c|j}|jd|jd|jdSd|jd|jd|jdS)Nrrrrrrrrrwrs r;rr sH ..C {{ \\4<<88!$ dkk4<<HHr=c|j}|j|jd|jdS|jd|jS)Nrrrrprqs r;rErE s; ..C {{<<66,, 44r=c,t|jSrArurrs r;rr DLL!!r=c,t|jSrArtrs r;rqrq rur=ct||jr |j}n1|jturt||jr|}nt S|j|j|zSrArHrrrrrrwr other_values r;rr Y%(mm  6 )j@R@R.S  >>$,,4 55r=ct||jr |j}n1|jturt||jr|}nt S|j|j|zSrArxrys r;rr" r{r=ct||jr |j}n1|jturt||jr|}nt S|j|j|z SrArxrys r;rr, r{r=c|j_|j|j|jz|_t |j|jr||j_|jSrA)r>rrrrHrs r;rr6 sU ..)<)< })LM doot~~ 6)-DOO & ??r=rr rceZdZdZeZdZy)r&zSupport for integer-based Flagscnt|tr|j|}nOt||js9tdt |j d|jj d|j dk(s|j dk(ry|j |j z|j k(S)zP Returns True if self has at least the same flags set as other. rjrkrlrF)rHr[rrKr{rrrs r;ryzIntFlag.__contains__L s eS !NN5)EE4>>2K(($..*A*ACD D ==A !2}}t||+u}}<RS>RdFD1>RSTT""3'At||~ A vq12 ( xx~TsEc|j(|jj}|d|jdS|jS)z2 use enum_name instead of class.enum_name rr)rrrr)rwrs r; global_strr s6 {{>>**#T\\22{{r=ct|tr t|_n t|_t|t r|r t |_tj|jjj|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 )rEr%rrrr)rrErrrrFrrJ)r update_strs r;rr sY #t' ' c8 $   LL ))00A Jr=)WeakSetct|tstd|d |jd||j vry||jvry||ur|j j|y|t|d d vr|j j|y|tur,t|t r|j j|y|t"ur,t|t$r|j j|y|t&ur,t|t(r|j j|y|t*ur,t|t,r|j j|y|jj|y#t$r"t |_t |_Yt$r2ddl }|j\}}}td}t|YwxYw) z9 Override for issubclass(subclass, cls). z(issubclass() arg 1 must be a class (got r_subclass_cache_rNpossible 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-aroundTFrr8)rHr{rKrFrrr_subclass_negative_cache_RecursionErrorsysrraise_from_nonerrv StdlibIntFlagrEr&rr% StdlibIntEnumr#rr")rsubclassrrtbs r;__subclasscheck__r s(D)XXY Y ! LL+ , s++ + 66 6 (?  $ $X . '(Ir2 2  $ $X . - Jx$A  $ $X . J :h#=  $ $X . M !j7&C  $ $X . * Hd!;  $ $X . %%))(3G 6#*9C ,3IC ) ! <<>LCb "VWC C  !sF'G)/6G)(G)c|j} |j|S#t$r1ddl}|j \}}}td}t |YywxYw)Nrr)rrrrrr)rrrrrrs r;__instancecheck__r s_%% !((2 2 ! <<>LCb "VWC C  !s7AAcNtrtt_tt_yyrA)rrStdlibEnumMetarr8r=r;r1r1 s+<(+<(r=c*tr t`t`yy)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)rrrrr8r=r;r2r2 s  ,  ,r=ceZdZdZdZy)r4c X|j|_|j|_g|_|j}|s9|j Dcgc]\}}t |ttfs| }}}|D]/}|||j|<|jj|1ycc}}wrA) rr_parent_module__all__rFrGrHrr"r)rwrr all_objectsrrrs r;ryzcls2module.__init__ s  !nn ll "-"3"3"5^"5$!QA W[G\9]A"5D^D"-d"3DMM$  LL   %_s B&*B&c\|tj|jd|j<yr)rrrrrs r;registerzcls2module.register sGK  3 3T]]CDr=N)rrrryrr8r=r;r4r4 s  &Lr=r4rA)NNNF)F) __future__rrs _constantr_tupler collectionsrrrrr rbr+ ImportErrorremover NameErrorrWr<rIrrr rr"rr#rrr StdlibStrEnumStdlibReprEnumr&r%r$r)rrrrrr3r r rYr6typesrlrrr _RouteClassAttributeToGetattrrr{rrrr rrrglobalsrr/r0rgrrrur~rr!rr _Addendumr8r7rrryrxrrrrrrrrEPY3rrDrr?rGrHrJrIrrrrVro _enum_baseresolverr5rr _repr_basesr[rr'r(rrrrrrrr*rr0rr7rr, _flag_bases flag_dictr-rrrrrryrrrrrrqrrrrrrrrr _weakrefsetrrrr1r2r4r8r=r;rs %$#  ! "   EtY/**aaFJJ J]J]^!=0  E M11  1))  3** 9=< S?T  T TTT87T8;UUUUUU U,+U,/VV