U e5dø”ã@sôddlZddlmZmZddddddd gZd d „Zd d „Zdd„Zdd„Ze ƒZ Gdd„dƒZ Gdd„de ƒZ dZGdd„deƒZGdd„ded�ZGdd„deeƒZdd„ZGdd„deƒZGdd„deeƒZdd„Zdd „Zd d!„Zd"d#„ZdS)$éN)ÚMappingProxyTypeÚDynamicClassAttributeÚEnumMetaÚEnumÚIntEnumÚFlagÚIntFlagÚautoÚuniquecCst|dƒpt|dƒpt|dƒS)z? Returns True if obj is a descriptor, False otherwise. Ú__get__Ú__set__Ú __delete__)Úhasattr)Úobj©rú/usr/lib64/python3.8/enum.pyÚ_is_descriptor s  ÿýrcCsLt|ƒdkoJ|dd…|dd…ko.dknoJ|ddkoJ|ddkS)z= Returns True if a __dunder__ name, False otherwise. éNééþÿÿÿÚ__Ú_éýÿÿÿ©Úlen©ÚnamerrrÚ _is_dunders &ÿ þ ürcCsLt|ƒdkoJ|d|dko&dknoJ|dd…dkoJ|dd…dkS)z; Returns True if a _sunder_ name, False otherwise. rréÿÿÿÿrérrrrrrÚ _is_sunder!s ÿþür cCsdd„}||_d|_dS)z, Make the given class un-picklable. cSstd|ƒ‚dS)Nz%r cannot be pickled)Ú TypeError©ÚselfÚprotorrrÚ_break_on_call_reduce0sz6_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 6scs,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__rrr1Ds  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:|jtk�r4| |dt|j ƒ|jdd…¡|_d|_|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 user;z4_generate_next_value_ must be defined before membersÚ_generate_next_valuer=ú,ú z-_ignore_ cannot specify already set names: %rÚ __order__r9zAttempted to reuse key: %rz%r already defined as: %rrNT)r Ú ValueErrorr5r!ÚsetattrÚ isinstanceÚstrÚreplaceÚsplitÚlistr4Úsetr2rrr r.r-r>rr3Úappendr0Ú __setitem__)r#Úkeyr.Úalreadyr7rrrKKsT  ÿÿ      ü  z_EnumDict.__setitem__)r*r'r+r,r1rKÚ __classcell__rrr7rr/=s 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$„Zd0d%d&„Zd'd(„Zed)d*„ƒZed+d,„ƒZed-d.„ƒZ‡ZS)1rz Metaclass for Enum cCs>| ||¡tƒ}| ||¡\}}|dk r:t|ddƒ|d<|S)Nr;)Ú_check_for_existing_membersr/Ú _get_mixins_Úgetattr)Úmetaclsr(ÚbasesÚ enum_dictÚ member_typeÚ first_enumrrrÚ __prepare__�s ÿzEnumMeta.__prepare__c sˆ dg¡ d¡ˆd}|D]}ˆ |d¡q| ||¡\‰}| ˆˆ|¡\}}} ‡fdd„ˆjDƒ} ˆjD] } ˆ| =qnˆ dd¡} t| ƒddh@} | r®td d  | ¡¡ƒ‚d ˆkr¾d ˆd <t ƒ  |||ˆ¡}g|_ i|_ ˆ|_d d „| ¡Dƒ}i|_d ˆk�r2ˆtk �r2d}t‡fdd„|Dƒƒ�s2t|ƒˆjD�]*}| |}t|tƒ�sZ|f}n|}ˆtk�rn|f}| �s�||ƒ}t|dƒ�sÆ||_n6||f|žŽ}t|dƒ�sƈtk�r¼||_n ˆ|Ž|_|j}||_||_|j|Ž|j  ¡D]"\} }|j|jk�rì|}�q�qì|j  |¡||k�r2t|||ƒ||j |<z||j|<Wntk �r`YnX�q8dD]V} | ˆk�r|�qjt|| ƒ}tˆ| dƒ}t|| dƒ}|dk �rj||k�rjt|| |ƒ�qjtdk �rà|�rØ||_ tj |_ | dk �rt| t!ƒ�r|  "dd¡ #¡} | |j k�rtdƒ‚|S)Nr=csi|]}|ˆ|“qSrr)Ú.0Úk)Ú classdictrrÚ ¯sz$EnumMeta.__new__..r9ÚmroÚzInvalid enum member name: {0}r?r,zAn enumeration.cSs.h|]&}|j ¡D]\}}t|tƒr|’qqSr)Ú__dict__ÚitemsrDr)rXÚcrYÚvrrrÚ Ès   þz#EnumMeta.__new__..r&)Ú__getnewargs_ex__Ú__getnewargs__r&Ú __reduce__c3s|]}|ˆjkVqdS©N)r^©rXÚm)rUrrÚ ßsz#EnumMeta.__new__..Ú_value_)Ú__repr__Ú__str__Ú __format__r&r@z#member order does not match _order_)$Ú setdefaultrJÚpoprPÚ _find_new_r2rIrBÚformatÚjoinr0Ú__new__Ú_member_names_Ú _member_map_Ú _member_type_r\Ú_value2member_map_ÚobjectÚanyr)rDÚtuplerrjÚ_name_Ú __objclass__r1r_rCr!rQrÚ__new_member__rErFrG)rRr(rSrZÚignorerLrVrsÚsave_newÚuse_argsÚ enum_membersrr9Ú invalid_namesÚ enum_classÚdynamic_attributesÚmethodsÚ member_namer.ÚargsÚ enum_memberÚcanonical_memberÚ class_methodÚ obj_methodÚ enum_methodr7)rZrUrrs�s¨ÿ   ÿÿ                        zEnumMeta.__new__cCsdS)z6 classes/types should always be True. Trr6rrrÚ__bool__3szEnumMeta.__bool__Nr©ÚmoduleÚqualnameÚtypeÚstartcCs*|dkr| ||¡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: `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. NrŽ)rsÚ_create_)r(r.Únamesr�r�r‘r’rrrÚ__call__9s úzEnumMeta.__call__cCs:t|tƒs$tdt|ƒj|jjfƒ‚t||ƒo8|j|jkS)Nú3unsupported operand type(s) for 'in': '%s' and '%s')rDrr!r‘r+r8r{ru)r(ÚmemberrrrÚ __contains__^s ÿÿzEnumMeta.__contains__cs(||jkrtd|jƒ‚tƒ |¡dS)Nz%s: cannot delete Enum member.)ruÚAttributeErrorr*r0Ú __delattr__)r(Úattrr7rrršes zEnumMeta.__delattr__cCsddddg|jS)Nr8r,Ú __members__r'©rtr6rrrÚ__dir__ls ÿÿzEnumMeta.__dir__cCs@t|ƒrt|ƒ‚z |j|WStk r:t|ƒd‚YnXdS)a= Return 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™ruÚKeyError©r(rrrrÚ __getattr__rs  zEnumMeta.__getattr__cCs |j|Srf©rur rrrÚ __getitem__‚szEnumMeta.__getitem__cs‡fdd„ˆjDƒS)z6 Returns members in definition order. c3s|]}ˆj|VqdSrfr¢©rXr©r(rrri‰sz$EnumMeta.__iter__..r�r¥rr¥rÚ__iter__…szEnumMeta.__iter__cCs t|jƒSrf)rrtr¥rrrÚ__len__‹szEnumMeta.__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. )rrur¥rrrrœŽszEnumMeta.__members__cCs d|jS)Nz )r*r¥rrrrk˜szEnumMeta.__repr__cs‡fdd„tˆjƒDƒS)z> Returns members in reverse definition order. c3s|]}ˆj|VqdSrfr¢r¤r¥rrriŸsz(EnumMeta.__reversed__..)Úreversedrtr¥rr¥rÚ __reversed__›szEnumMeta.__reversed__cs0|j di¡}||krtdƒ‚tƒ ||¡dS)a 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. ruzCannot reassign members.N)r^Úgetr™r0Ú __setattr__)r(rr.Ú member_mapr7rrr«¡szEnumMeta.__setattr__c Cs~|j}|dkr|fn||f}| ||¡\} } | ||¡} t|tƒrR| dd¡ ¡}t|ttfƒrÂ|rÂt|dtƒrÂ|g} }g} t | ƒD]8\}}|   |||| dd…¡}|   |¡|  ||f¡qˆ|D].}t|tƒrä|||}}n|\}}|| |<qÆ|  |||| ¡}|dk�rPzt  d¡jd}Wn*tttfk �rN}zW5d}~XYnX|dk�rdt|ƒn||_|dk �rz||_|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*)r8rPrWrDrErFrGrzrHÚ enumerater;rJrsÚsysÚ _getframeÚ f_globalsr™rBrŸr)r'r+)r(Ú class_namer”r�r�r‘r’rRrSrrVrZÚoriginal_namesÚ last_valuesÚcountrr.Úitemr†Ú member_valuerƒÚexcrrrr“®s<            zEnumMeta._create_csœttj|ƒ}|rt|ƒ}n|}‡fdd„| ¡Dƒ}z|jdd„d�Wn$tk rn|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)rXrr.©ÚfilterrrÚ ôsþz&EnumMeta._convert_..cSs|d|dfS)Nrrr©ÚtrrrÚúóz$EnumMeta._convert_..)rLcSs|dS©Nrrr»rrrr½ýr¾)r�) Úvarsr®Úmodulesr_Úsortr!Ú_reduce_ex_by_namer&Úupdaterœ)r(rr�r¹ÚsourceÚmodule_globalsÚmembersrr¸rÚ _convert_ãs   þ zEnumMeta._convert_cOs$ddl}|jdtdd�|j||ŽS)NrzI_convert is deprecated and will be removed in 3.9, use _convert_ instead.r)Ú stacklevel)ÚwarningsÚwarnÚDeprecationWarningrÈ)r(r‡ÚkwargsrÊrrrÚ_converts ÿzEnumMeta._convertcCs<|D]2}|jD]&}t|tƒr|jrtd||jfƒ‚qqdS)Nz %s: cannot extend enumeration %r)Ú__mro__Ú issubclassrrtr!r*)r±rSÚchainÚbaserrrrO s ÿÿz$EnumMeta._check_for_existing_memberscsT|s ttfS‡fdd„}|d}t|tƒs2tdƒ‚||ƒp._find_data_typerzZnew enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`zCannot extend enumerations)rxrrÐr!rt)r±rSrÖrVrUrrÕrrPs   zEnumMeta._get_mixins_c CsŽ| dd¡}|dk }|dkrpdD]H}||fD].}t||dƒ}|ddjtjtjhkr,|}q\q,|dk r qpq tj}|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__ rsN)r}rsFT)rªrQrsrxr) rZrUrVrsrÚmethodÚpossibleÚtargetr€rrrrpCs*   ü zEnumMeta._find_new_)N)N)r*r'r+r,Ú classmethodrWrsr�r•r˜ršržr¡r£r¦r§Úpropertyrœrkr©r«r“rÈrÎÚ staticmethodrOrPrprNrrr7rr‹s8 %   5 !  .c@steZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z edd„ƒZedd„ƒZdS)rzV Generic enumeration. Derive from this class to define new enumerations. c Cst|ƒ|kr|Sz |j|WStk r0Yn:tk rh|j ¡D]}|j|krH|YSqHYnXzd}| |¡}Wn*tk r¦}z |}d}W5d}~XYnXzdt ||ƒr¼|W¢TSt d||j fƒ}|dkrä|dkrä|‚n|dk�rtd|j |fƒ}||_ |‚W5d}d}XdS)Nú%r is not a valid %szDerror in %s._missing_: returned %r instead of None or a valid member) r‘rwrŸr!ruÚvaluesrjr<Ú ExceptionrDrBr*Ú __context__)r(r.r—r·ÚresultÚeÚve_excrrrrsws@     ÿÿz Enum.__new__c Cs6t|ƒD](}z|dWStk r.YqXq|S)úð 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 rN)r¨r!)rr’r´r³Ú last_valuerrrr;¤s zEnum._generate_next_value_cCsdSrfr)r(r.rrrr<µszEnum._missing_cCsd|jj|j|jfS)Nú <%s.%s: %r>)r8r*r{rjr6rrrrk¹s ÿz Enum.__repr__cCsd|jj|jfS)Nú%s.%s)r8r*r{r6rrrrl½sz Enum.__str__cs6‡fdd„ˆj ¡Dƒdd„ˆjDƒ}dddg|S)z< Returns all members and all public methods cs2g|]*}|jD]}|ddkr|ˆjkr|‘qqS©rr)r^ru)rXr(rhr6rrrºÄs  ýz Enum.__dir__..cSsg|]}|ddkr|‘qSrèrrgrrrrºÉs r8r,r')r8r\r^)r#Úadded_behaviorrr6rržÀs  þûz Enum.__dir__cCsJt|ƒjtjtjfk}|jtks$|r2t}t|ƒ}n |j}|j}| ||¡S)z\ Returns format using actual value type unless __str__ has been overridden. ) r‘rlrrrvrxrErjrm)r#Ú format_specÚstr_overriddenr(ÚvalrrrrmÌs  zEnum.__format__cCs t|jƒSrf)Úhashr{r6rrrÚ__hash__ßsz Enum.__hash__cCs|j|jffSrf©r8rjr"rrrr&âszEnum.__reduce_ex__cCs|jS)zThe name of the Enum member.)r{r6rrrrìsz Enum.namecCs|jS)zThe value of the Enum member.©rjr6rrrr.ñsz Enum.valueN)r*r'r+r,rsr;rÚr<rkrlržrmrîr&rrr.rrrrrqs-    )Ú metaclassc@seZdZdZdS)rz.Enum where members are also (and must be) intsN)r*r'r+r,rrrrr÷scCs|jSrfrr"rrrrÃûsrÃc@speZdZdZdd„Zedd„ƒZedd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)rz Support for flags c Csd|s|dk r|SdSt|ƒD]:}zt|ƒ}WqXWqtk rTtd|ƒd‚YqXqd|dS)räNrzInvalid Flag value: %rr)r¨Ú _high_bitrßr!)rr’r´r³råÚhigh_bitrrrr;s   zFlag._generate_next_value_cCs.|}|dkr|}| |¡}|dkr*|}|S)úV Returns member (possibly creating it) if one can be found for value. r)r:)r(r.Úoriginal_valueÚpossible_memberrrrr<s zFlag._missing_cCsb|j |d¡}|dkr^t||ƒ\}}|r:td||jfƒ‚t |¡}d|_||_|j  ||¡}|S)úL Create a composite member iff value contains only members. NrÝ) rwrªÚ _decomposerBr*rxrsr{rjrn)r(r.Ú pseudo_memberrÚ extra_flagsrrrr:#s zFlag._create_pseudo_member_cCs8t||jƒs&tdt|ƒj|jjfƒ‚|j|j@|jkS)zP Returns True if self has at least the same flags set as other. r–)rDr8r!r‘r+rj©r#Úotherrrrr˜7s ÿÿzFlag.__contains__cCsV|j}|jdk r$d|j|j|jfSt||jƒ\}}d|jd dd„|Dƒ¡|jfS)Nræú|cSsg|]}t|jp|jƒ‘qSr©rEr{rjrgrrrrºHsz!Flag.__repr__..)r8r{r*rjrørr©r#r(rÇÚ uncoveredrrrrkAs ýz Flag.__repr__cCs€|j}|jdk r d|j|jfSt||jƒ\}}t|ƒdkr^|djdkr^d|j|djfSd|jd dd„|Dƒ¡fSdS)Nrçrrz%s.%rrýcSsg|]}t|jp|jƒ‘qSrrþrgrrrrºVsz Flag.__str__..)r8r{r*rørjrrrrÿrrrrlLs þz Flag.__str__cCs t|jƒSrf)Úboolrjr6rrrr�Ysz Flag.__bool__cCs"t||jƒstS| |j|jB¡Srf©rDr8ÚNotImplementedrjrûrrrÚ__or__\s z Flag.__or__cCs"t||jƒstS| |j|j@¡SrfrrûrrrÚ__and__as z Flag.__and__cCs"t||jƒstS| |j|jA¡SrfrrûrrrÚ__xor__fs z Flag.__xor__cCsNt|j|jƒ\}}| d¡}|jD] }||kr"|j|j@s"||B}q"| |¡Sr¿)rør8rj)r#rÇrÚinvertedrhrrrÚ __invert__ks    zFlag.__invert__N)r*r'r+r,r;rÚr<r:r˜rkrlr�rrrrrrrrrþs     c@sTeZdZdZedd„ƒZedd„ƒZdd„Zdd „Zd d „Z eZ eZ e Z d d „Z dS)rz) Support for integer-based Flags cCs*t|tƒstd||jfƒ‚| |¡}|S)rôrÝ)rDÚintrBr*r:)r(r.Ú new_memberrrrr<ys  zIntFlag._missing_cCs¬|j |d¡}|dkr¨|g}t||ƒ\}}|rtt|ƒ}d|}||jkrZ||krZ| |¡|| krjd}q*||N}q*t|ƒD]*}t ||¡}d|_||_ |j  ||¡}q||S)r÷Nrr) rwrªrøròrJr¨r rsr{rjrn)r(r.rùÚneed_to_createrrúÚbitÚ flag_valuerrrr:ƒs( ÿ     zIntFlag._create_pseudo_member_cCs0t||jtfƒstS| |j| |¡jB¡}|Srf©rDr8r rrj)r#rürárrrr¤szIntFlag.__or__cCs,t||jtfƒstS| |j| |¡j@¡SrfrrûrrrrªszIntFlag.__and__cCs,t||jtfƒstS| |j| |¡jA¡Srfrrûrrrr¯szIntFlag.__xor__cCs| |j¡}|Srfrï)r#rárrrr¸szIntFlag.__invert__N)r*r'r+r,rÚr<r:rrrÚ__ror__Ú__rand__Ú__rxor__rrrrrrts  cCs | ¡dS)zJ returns index of highest bit, or -1 if value is zero or negative r)Ú bit_length©r.rrrrò½sròcCs^g}|j ¡D]"\}}||jkr| ||jf¡q|rZd dd„|Dƒ¡}td||fƒ‚|S)zI Class decorator for enumerations ensuring unique member values. z, cSsg|]\}}d||f‘qS)z%s -> %sr)rXÚaliasrrrrrºÍszunique..z duplicate values found in %r: %s)rœr_rrJrrrB)Ú enumerationÚ duplicatesrr—Ú alias_detailsrrrr Ãs  ÿÿcCsÔ|}|dk}|r*dd„t|j ¡ƒDƒ}ndd„t|j ¡ƒDƒ}g}|D],\}}|rJ||@|krJ| |¡||M}qJ|s–||jkr–| |j|¡|jdd„dd�t|ƒd krÌ|dj|krÌ| d¡||fS) z- Extract all members from the value. rcSs"g|]\}}|jdk r||f‘qSrfr©rXrarhrrrrºÞs þz_decompose..cSs*g|]"\}}|jdk st|ƒr||f‘qSrf)rÚ _power_of_tworrrrrºås þcSs|jSrfrð)rhrrrr½ñr¾z_decompose..T)rLÚreverser)rHrwr_rJrÂrr.ro)Úflagr.Ú not_coveredÚnegativeÚflags_to_checkrÇr—r¶rrrrøÒs( þ þ    røcCs|dkr dS|dt|ƒkS)NrFr)ròrrrrr÷sr)r®ÚtypesrrÚ__all__rrr r)rxr-r Údictr/rr‘rr rrÃrrròr rørrrrrÚs>ý    LivI%