grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B âvø×°dúã@s&ddlZddlmZmZyddlmZWn ek rHddlmZYnXdddddd d gZd d „Z d d„Z dd„Z dd„Z e ƒZGdd „d ƒZGdd„deƒZdZGdd„deƒZGdd„ded�ZGdd„deeƒZdd„ZGdd„deƒZGdd„deeƒZdd„Zd d „Zd!d"„Zd#d$„ZdS)%éN)ÚMappingProxyTypeÚDynamicClassAttribute)Ú OrderedDictÚEnumMetaÚEnumÚIntEnumÚFlagÚIntFlagÚautoÚuniquecCst|dƒpt|dƒpt|dƒS)z5Returns True if obj is a descriptor, False otherwise.Ú__get__Ú__set__Ú __delete__)Úhasattr)Úobj©rú)/opt/alt/python37/lib64/python3.7/enum.pyÚ_is_descriptors  rcCsLt|ƒdkoJ|dd…|dd…ko.dknoJ|ddkoJ|ddkS)z3Returns True if a __dunder__ name, False otherwise.éNééþÿÿÿÚ__Ú_éýÿÿÿ)Úlen)ÚnamerrrÚ _is_dunders ( rcCsLt|ƒdkoJ|d|dko&dknoJ|dd…dkoJ|dd…dkS)z1Returns True if a _sunder_ name, False otherwise.rréÿÿÿÿrér)r)rrrrÚ _is_sunder"s  rcCsdd„}||_d|_dS)z"Make the given class un-picklable.cSstd|ƒ‚dS)Nz%r cannot be pickled)Ú TypeError)ÚselfÚprotorrrÚ_break_on_call_reduce,sz6_make_class_unpicklable.._break_on_call_reducez N)Ú __reduce_ex__Ú __module__)Úclsr#rrrÚ_make_class_unpicklable*sr'c@seZdZdZeZdS)r zP Instances are replaced with an appropriate value in Enum class suites. N)Ú__name__r%Ú __qualname__Ú__doc__Ú _auto_nullÚvaluerrrrr 2scs,eZdZdZ‡fdd„Z‡fdd„Z‡ZS)Ú _EnumDictz§Track enum member order and ensure member names are not reused. EnumMeta will use the names found in self._member_names as the enumeration member names. cs&tƒ ¡g|_g|_g|_d|_dS)NF)ÚsuperÚ__init__Ú _member_namesÚ _last_valuesÚ_ignoreÚ _auto_called)r!)Ú __class__rrr/@s  z_EnumDict.__init__csdt|ƒr”|dkrtdƒ‚|dkr<|jr.tdƒ‚t|d|ƒnV|dkr’t|tƒr`| dd¡ ¡}nt |ƒ}||_ t |ƒt |j ƒ@}|r’td |fƒ‚n¾t |ƒrª|d kr¨d }n¨||j krÂtd |ƒ‚n�||j krÎn„t|ƒ�sR||krôtd |||fƒ‚t|tƒ�r:d|_|jtk�r4| |dt|j ƒ|jdd…¡|_|j}|j  |¡|j |¡tƒ ||¡dS)zåChanges anything not dundered or not 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. )Ú_order_Ú_create_pseudo_member_Ú_generate_next_value_Ú _missing_Ú_ignore_z(_names_ are reserved for future Enum user7z4_generate_next_value_ must be defined before membersÚ_generate_next_valuer9ú,ú z-_ignore_ cannot specify already set names: %rÚ __order__r5zAttempted to reuse key: %rz%r already defined as: %rTrN)rÚ ValueErrorr3r ÚsetattrÚ isinstanceÚstrÚreplaceÚsplitÚlistr2Úsetr0rrr r,r+r:rr1Úappendr.Ú __setitem__)r!Úkeyr,Úalready)r4rrrGGsD       "  z_EnumDict.__setitem__)r(r%r)r*r/rGÚ __classcell__rr)r4rr-9s r-csÚeZdZdZedd„ƒZ‡fdd„Zdd„Zd)dddd d œd d „Zd d„Z ‡fdd„Z dd„Z dd„Z dd„Z dd„Zdd„Zedd„ƒZdd„Zdd „Z‡fd!d"„Zdddd d œd#d$„Zed%d&„ƒZed'd(„ƒZ‡ZS)*rzMetaclass for EnumcCs0tƒ}| |¡\}}|dk r,t|ddƒ|d<|S)Nr7)r-Ú _get_mixins_Úgetattr)Úmetaclsr&ÚbasesÚ enum_dictÚ member_typeÚ first_enumrrrÚ __prepare__‚s zEnumMeta.__prepare__c s"ˆ dg¡ d¡ˆd}x|D]}ˆ |d¡q W| |¡\‰}| ˆˆ|¡\}}} ‡fdd„ˆjDƒ} xˆjD] } ˆ| =qrWˆ dd¡} t| ƒddh@} | r´td d  | ¡¡ƒ‚d ˆkrÄd ˆd <t ƒ  |||ˆ¡}g|_ t ƒ|_ˆ|_d d „| ¡Dƒ}i|_d ˆk�r:ˆtk �r:d}t‡fdd„|Dƒƒ�s:t|ƒ�x6ˆjD�]*}| |}t|tƒ�sf|f}n|}ˆtk�rz|f}| �sœ||ƒ}t|dƒ�sÒ||_n6||f|žŽ}t|dƒ�sÒˆtk�rÈ||_n ˆ|Ž|_|j}||_||_|j|Žx8|j ¡D]\} }|j|jk�rú|}P�qúW|j  |¡||k�r>t|||ƒ||j|<y||j|<Wntk �rlYnX�qDWxPdD]H} t|| ƒ}tˆ| dƒ}t|| dƒ}|dk �rz||k�rzt|| |ƒ�qzWt dk �rä|�rÜ||_!t j |_ | dk �rt| t"ƒ�r |  #dd¡ $¡} | |j k�rtdƒ‚|S)Nr9csi|]}ˆ||“qSrr)Ú.0Úk)Ú classdictrrú �sz$EnumMeta.__new__..r5ÚmroÚzInvalid enum member name: {0}r;r*zAn enumeration.cSs.h|]&}|j ¡D]\}}t|tƒr|’qqSr)Ú__dict__Úitemsr@r)rSÚcrTÚvrrrú ¶sz#EnumMeta.__new__..r$)Ú__getnewargs_ex__Ú__getnewargs__r$Ú __reduce__c3s|]}|ˆjkVqdS)N)rY)rSÚm)rPrrú Ësz#EnumMeta.__new__..Ú_value_)Ú__repr__Ú__str__Ú __format__r$r<z#member order does not match _order_)%Ú setdefaultrFÚpoprKÚ _find_new_r0rEr>ÚformatÚjoinr.Ú__new__Ú_member_names_rÚ _member_map_Ú _member_type_rWÚ_value2member_map_ÚobjectÚanyr'r@ÚtuplerrcÚ_name_Ú __objclass__r/rZr?r rLrÚ__new_member__rArBrC)rMr&rNrUÚignorerHrQrlÚsave_newÚuse_argsÚ enum_membersrr5Ú invalid_namesÚ enum_classÚdynamic_attributesÚmethodsÚ member_namer,ÚargsÚ enum_memberÚcanonical_memberÚ class_methodÚ obj_methodÚ enum_method)r4)rUrPrrlŒs˜                           zEnumMeta.__new__cCsdS)z6 classes/types should always be True. Tr)r!rrrÚ__bool__szEnumMeta.__bool__Nr)ÚmoduleÚqualnameÚtypeÚstartcCs*|dkr| ||¡S|j||||||d�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: `value` will be the name of the new class. `names` should be either a string of white-space/comma delimited names (values will start at `start`), or an iterator/mapping of name, value pairs. `module` should be set to the module this class is being created in; if it is not set, an attempt to find that module will be made, but if it fails the class will not be picklable. `qualname` should be set to the actual location this class can be found at in its module; by default it is set to the global scope. If this is not correct, unpickling will fail in some circumstances. `type`, if set, will be mixed in as the first base class. N)r‡rˆr‰rŠ)rlÚ_create_)r&r,Únamesr‡rˆr‰rŠrrrÚ__call__!s zEnumMeta.__call__cCs6t|tƒs ddl}| dtd¡t||ƒo4|j|jkS)NrzHusing non-Enums in containment checks will raise TypeError in Python 3.8r)r@rÚwarningsÚwarnÚDeprecationWarningrtrn)r&ÚmemberrŽrrrÚ __contains__?s  zEnumMeta.__contains__cs(||jkrtd|jƒ‚tƒ |¡dS)Nz%s: cannot delete Enum member.)rnÚAttributeErrorr(r.Ú __delattr__)r&Úattr)r4rrr”Hs  zEnumMeta.__delattr__cCsddddg|jS)Nr4r*Ú __members__r%)rm)r!rrrÚ__dir__Ps zEnumMeta.__dir__cCs>t|ƒrt|ƒ‚y |j|Stk r8t|ƒd‚YnXdS)a5Return the enum member matching `name` We use __getattr__ instead of descriptors or inserting into the enum class' __dict__ in order to support `name` and `value` being both properties for enum members (which live in the class' __dict__) and enum members themselves. N)rr“rnÚKeyError)r&rrrrÚ __getattr__Ts  zEnumMeta.__getattr__cCs |j|S)N)rn)r&rrrrÚ __getitem__dszEnumMeta.__getitem__cs‡fdd„ˆjDƒS)Nc3s|]}ˆj|VqdS)N)rn)rSr)r&rrrbhsz$EnumMeta.__iter__..)rm)r&r)r&rÚ__iter__gszEnumMeta.__iter__cCs t|jƒS)N)rrm)r&rrrÚ__len__jszEnumMeta.__len__cCs t|jƒS)z·Returns a mapping of member name->value. This mapping lists all enum members, including aliases. Note that this is a read-only view of the internal mapping. )rrn)r&rrrr–mszEnumMeta.__members__cCs d|jS)Nz )r()r&rrrrdwszEnumMeta.__repr__cs‡fdd„tˆjƒDƒS)Nc3s|]}ˆj|VqdS)N)rn)rSr)r&rrrb{sz(EnumMeta.__reversed__..)Úreversedrm)r&r)r&rÚ __reversed__zszEnumMeta.__reversed__cs0|j di¡}||krtdƒ‚tƒ ||¡dS)zùBlock attempts to reassign Enum members. 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. rnzCannot reassign members.N)rYÚgetr“r.Ú __setattr__)r&rr,Ú member_map)r4rrr }szEnumMeta.__setattr__c Cs„|j}|dkr|fn||f}| |¡\} } | ||¡} t|tƒrP| dd¡ ¡}t|ttfƒrÄ|rÄt|dtƒrÄ|g} }g} xDt | ƒD]8\}}|   |||| dd…¡}|   |¡|  ||f¡qˆWx6|D].}t|tƒrè|||}}n|\}}|| |<qÊW|  |||| ¡}|dk�rVyt  d¡jd}Wn*tttfk �rT}zWdd}~XYnX|dk�rjt|ƒn||_|dk �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 incremented by 1 from `start`. * An iterable of member names. Values are incremented by 1 from `start`. * An iterable of (member name, value) pairs. * A mapping of member name -> value pairs. Nr;r<rrr()r4rKrRr@rArBrCrsrDÚ enumerater7rFrlÚsysÚ _getframeÚ f_globalsr“r>r˜r'r%r))r&Ú class_namerŒr‡rˆr‰rŠrMrNrrQrUÚoriginal_namesÚ last_valuesÚcountrr,ÚitemrÚ member_valuer|Úexcrrrr‹Šs<             zEnumMeta._create_cCsP|s ttfSdd„}|d}t|tƒs.tdƒ‚||ƒp8t}|jrHtdƒ‚||fS)zžReturns the type for creating enum members, and the first inherited enum class. bases: the tuple of bases that was given to __new__ cSsHxB|D]:}x4|jD]*}|tkr"qqd|jkrt|tƒr8q|SqWqWdS)Nrl)Ú__mro__rqrYÚ issubclassr)rNÚchainÚbaserrrÚ_find_data_typeÊs    z.EnumMeta._get_mixins_.._find_data_typerzZnew enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`zCannot extend enumerations)rqrr®r rm)rNr±rQrPrrrrK¿s   zEnumMeta._get_mixins_c Cs’| dd¡}|dk }|dkrtxVdD]H}x8||fD],}t||dƒ}|ddjtjtjhkr0|}Pq0W|dk r"Pq"Wtj}|tjkr„d}nd}|||fS)a Returns the __new__ to be used for creating the enum members. classdict: 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__ rlN)rvrlFT)rŸrLrlrqr) rUrPrQrlrxÚmethodÚpossibleÚtargetryrrrrißs(     zEnumMeta._find_new_)N)r(r%r)r*Ú classmethodrRrlr†r�r’r”r—r™ršr›rœÚpropertyr–rdržr r‹Ú staticmethodrKrirJrr)r4rr€s(    5 c@s‚eZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z edd„ƒZedd„ƒZeddd„ƒZdS)rzRGeneric enumeration. Derive from this class to define new enumerations. c Cst|ƒ|kr|Sy |j|Stk r.Yn6tk rbx |j ¡D]}|j|krH|SqHWYnXyd}| |¡}Wn*tk r }z |}d}Wdd}~XYnXt ||ƒr°|St d||j fƒ}|dkrØ|dkrØ|‚n|dkròtd|j |fƒ}||_ |‚dS)Nz%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member) r‰rpr˜r rnÚvaluesrcr8Ú Exceptionr@r>r(Ú __context__)r&r,r‘r¬ÚresultÚeÚve_excrrrrls6    z Enum.__new__c Cs8x2t|ƒD]"}y|dStk r*Yq Xq W|SdS)Nr)r�r )rrŠr©r¨Ú last_valuerrrr7;s  zEnum._generate_next_value_cCstd||jfƒ‚dS)Nz%r is not a valid %s)r>r()r&r,rrrr8DszEnum._missing_cCsd|jj|j|jfS)Nz <%s.%s: %r>)r4r(rtrc)r!rrrrdHsz Enum.__repr__cCsd|jj|jfS)Nz%s.%s)r4r(rt)r!rrrreLsz Enum.__str__cs&‡fdd„ˆj ¡Dƒ}dddg|S)Ncs2g|]*}|jD]}|ddkr|ˆjkr|‘qqS)rr)rYrn)rSr&ra)r!rrú Qs z Enum.__dir__..r4r*r%)r4rW)r!Úadded_behaviorr)r!rr—Os z Enum.__dir__cCs0|jtkrt}t|ƒ}n |j}|j}| ||¡S)N)rorqrArcrf)r!Ú format_specr&ÚvalrrrrfXs   zEnum.__format__cCs t|jƒS)N)Úhashrt)r!rrrÚ__hash__gsz Enum.__hash__cCs|j|jffS)N)r4rc)r!r"rrrr$jszEnum.__reduce_ex__cCs|jS)zThe name of the Enum member.)rt)r!rrrrtsz Enum.namecCs|jS)zThe value of the Enum member.)rc)r!rrrr,ysz Enum.valueNcsžttj|ƒ}ˆrtˆƒ‰n|‰‡‡fdd„ˆ ¡Dƒ}y|jdd„d�Wn$tk rp|jdd„d�YnX||||d�}t|_| |j ¡|||<|S)z[ Create a new Enum subclass that replaces a collection of global constants cs g|]}ˆ|ƒr|ˆ|f‘qSrr)rSr)ÚfilterÚsourcerrr¿“sz!Enum._convert..cSs|d|dfS)Nrrr)ÚtrrrÚ˜ózEnum._convert..)rHcSs|dS)Nrr)rÇrrrrÈ›rÉ)r‡) Úvarsr£ÚmodulesÚkeysÚsortr Ú_reduce_ex_by_namer$Úupdater–)r&rr‡rÅrÆÚmodule_globalsÚmembersr)rÅrÆrÚ_convert~s     z Enum._convert)N)r(r%r)r*rlr7rµr8rdrer—rfrÄr$rrr,rÒrrrrr s(    )Ú metaclassc@seZdZdZdS)rz.Enum where members are also (and must be) intsN)r(r%r)r*rrrrr£scCs|jS)N)r)r!r"rrrrΧsrÎc@speZdZdZdd„Zedd„ƒZedd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)rzSupport for flagsc Csd|s|dk r|SdSxBt|ƒD]6}yt|ƒ}PWqtk rRtd|ƒd‚YqXqWd|dS)zð Generate the next value when not given. name: the name of the member start: the initial start value or None count: the number of existing members last_value: the last value assigned or None NrzInvalid Flag value: %rr)r�Ú _high_bitr¹r )rrŠr©r¨r¾Úhigh_bitrrrr7­s zFlag._generate_next_value_cCs.|}|dkr|}| |¡}|dkr*|}|S)Nr)r6)r&r,Úoriginal_valueÚpossible_memberrrrr8Às zFlag._missing_cCsb|j |d¡}|dkr^t||ƒ\}}|r:td||jfƒ‚t |¡}d|_||_|j  ||¡}|S)zL Create a composite member iff value contains only members. Nz%r is not a valid %s) rprŸÚ _decomposer>r(rqrlrtrcrg)r&r,Ú pseudo_memberrÚ extra_flagsrrrr6Ês zFlag._create_pseudo_member_cCs8t||jƒs&ddl}| dtd¡dS|j|j@|jkS)NrzHusing non-Flags in containment checks will raise TypeError in Python 3.8rF)r@r4rŽr�r�rc)r!ÚotherrŽrrrr’Þs zFlag.__contains__cCsV|j}|jdk r$d|j|j|jfSt||jƒ\}}d|jd dd„|Dƒ¡|jfS)Nz <%s.%s: %r>ú|cSsg|]}t|jp|jƒ‘qSr)rArtrc)rSrarrrr¿ïsz!Flag.__repr__..)r4rtr(rcrØrk)r!r&rÑÚ uncoveredrrrrdès z Flag.__repr__cCs€|j}|jdk r d|j|jfSt||jƒ\}}t|ƒdkr^|djdkr^d|j|djfSd|jd dd„|Dƒ¡fSdS)Nz%s.%srrz%s.%rrÜcSsg|]}t|jp|jƒ‘qSr)rArtrc)rSrarrrr¿ýsz Flag.__str__..)r4rtr(rØrcrrk)r!r&rÑrÝrrrreós z Flag.__str__cCs t|jƒS)N)Úboolrc)r!rrrr†sz Flag.__bool__cCs"t||jƒstS| |j|jB¡S)N)r@r4ÚNotImplementedrc)r!rÛrrrÚ__or__s z Flag.__or__cCs"t||jƒstS| |j|j@¡S)N)r@r4rßrc)r!rÛrrrÚ__and__s z Flag.__and__cCs"t||jƒstS| |j|jA¡S)N)r@r4rßrc)r!rÛrrrÚ__xor__ s z Flag.__xor__cCsRt|j|jƒ\}}| d¡}x*|jD] }||kr$|j|j@s$||B}q$W| |¡S)Nr)rØr4rc)r!rÑrÝÚinvertedrarrrÚ __invert__s    zFlag.__invert__N)r(r%r)r*r7rµr8r6r’rdrer†ràrárârärrrrrªs    c@sTeZdZdZedd„ƒZedd„ƒZdd„Zdd „Zd d „Z eZ eZ e Z d d „Z dS)r zSupport for integer-based FlagscCs*t|tƒstd||jfƒ‚| |¡}|S)Nz%r is not a valid %s)r@Úintr>r(r6)r&r,Ú new_memberrrrr8s  zIntFlag._missing_cCs´|j |d¡}|dkr°|g}t||ƒ\}}xL|rvt|ƒ}d|}||jkr\||kr\| |¡|| krld}q,||N}q,Wx6t|ƒD]*}t ||¡}d|_||_ |j  ||¡}q‚W|S)Nrr) rprŸrØrÔrFr�rårlrtrcrg)r&r,rÙÚneed_to_createrrÚÚbitÚ flag_valuerrrr6%s&     zIntFlag._create_pseudo_member_cCs0t||jtfƒstS| |j| |¡jB¡}|S)N)r@r4rårßrc)r!rÛr»rrrràCszIntFlag.__or__cCs,t||jtfƒstS| |j| |¡j@¡S)N)r@r4rårßrc)r!rÛrrrráIszIntFlag.__and__cCs,t||jtfƒstS| |j| |¡jA¡S)N)r@r4rårßrc)r!rÛrrrrâNszIntFlag.__xor__cCs| |j¡}|S)N)r4rc)r!r»rrrräWszIntFlag.__invert__N)r(r%r)r*rµr8r6ràrárâÚ__ror__Ú__rand__Ú__rxor__rärrrrr s  cCs | ¡dS)z@returns index of highest bit, or -1 if value is zero or negativer)Ú bit_length)r,rrrrÔ\srÔcCsbg}x0|j ¡D]"\}}||jkr| ||jf¡qW|r^d dd„|Dƒ¡}td||fƒ‚|S)z?Class decorator for enumerations ensuring unique member values.z, cSsg|]\}}d||f‘qS)z%s -> %sr)rSÚaliasrrrrr¿hszunique..z duplicate values found in %r: %s)r–rZrrFrkr>)Ú enumerationÚ duplicatesrr‘Ú alias_detailsrrrr `s  cCsØ|}|dk}|r*dd„t|j ¡ƒDƒ}ndd„t|j ¡ƒDƒ}g}x4|D],\}}|rL||@|krL| |¡||M}qLW|sš||jkrš| |j|¡|jdd„dd�t|ƒd krÐ|dj|krÐ| d¡||fS) z#Extract all members from the value.rcSs"g|]\}}|jdk r||f‘qS)N)r)rSr\rarrrr¿xsz_decompose..cSs*g|]"\}}|jdk st|ƒr||f‘qS)N)rÚ _power_of_two)rSr\rarrrr¿scSs|jS)N)rc)rarrrrÈŠrÉz_decompose..T)rHÚreverser)rDrprZrFrÍrr,rh)Úflagr,Ú not_coveredÚnegativeÚflags_to_checkrÑr‘r«rrrrØms$  rØcCs|dkr dS|dt|ƒkS)NrFr)rÔ)r,rrrrò�srò)r£ÚtypesrrÚ _collectionsrÚ ImportErrorÚ collectionsÚ__all__rrrr'rqr+r Údictr-rr‰rrårrÎrr rÔr rØròrrrrÚs<DqA #