+
    øù3i…>  ã            	       óR  € R t ^ RIHtHt . t^ RIHt ^ RIHt ^ RI	H
t
HtHt ]! 4       t]! ]]! 4       4      t ! R R]4      t ! R R]4      t ! R	 R
]! R]3/ 4      4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR t ! R R]4      t ! R R]4      tR# )zi
Symbolic constant support, including collections and constants with text,
numeric, and bit flag values.
)ÚdivisionÚabsolute_import)Úpartial)Úcount)Úand_Úor_Úxorc                   óN   a € ] tR t^t o RtR tR tR tR tR t	R t
R tR	tV tR
# )Ú	_Constanta›  
@ivar _index: A C{int} allocated from a shared counter in order to keep
    track of the order in which L{_Constant}s are instantiated.

@ivar name: A C{str} giving the name of this constant; only set once the
    constant is initialized by L{_ConstantsContainer}.

@ivar _container: The L{_ConstantsContainer} subclass this constant belongs
    to; C{None} until the constant is initialized by that subclass.
c                ó2   € R V n         \        4       V n        R # ©N)Ú
_containerÚ_constantOrderÚ_index©Úselfs   &Ú7/usr/lib/python3/dist-packages/constantly/_constants.pyÚ__init__Ú_Constant.__init__!   s   € ØˆŒÜ$Ó&ˆŽó    c                óT   € RV P                   P                  : RV P                  : R2# )zY
Return text identifying both which constant this is and which
collection it belongs to.
Ú<Ú=Ú>)r   Ú__name__Únamer   s   &r   Ú__repr__Ú_Constant.__repr__&   s   � ð
 !ŸO™O×4Ô4°d·i´iÐ@Ð@r   c                ó¬   € \        WP                  4      '       d   V P                  VP                  8X  g   \        # V P                  VP                  8  # )a  
Implements C{<}.  Order is defined by instantiation order.

@param other: An object.

@return: C{NotImplemented} if C{other} is not a constant belonging to
    the same container as this constant, C{True} if this constant is
    defined before C{other}, otherwise C{False}.
©Ú
isinstanceÚ	__class__r   ÚNotImplementedr   ©r   Úothers   &&r   Ú__lt__Ú_Constant.__lt__.   ó>   € ô ˜5§.¡.×1Ò1Ø—‘ 5×#3Ñ#3Ô3ä!Ð!Ø�{‰{˜UŸ\™\Ñ)Ð)r   c                óÂ   € \        WP                  4      '       d   V P                  VP                  8X  g   \        # WJ ;'       g    V P                  VP                  8  # )a   
Implements C{<=}.  Order is defined by instantiation order.

@param other: An object.

@return: C{NotImplemented} if C{other} is not a constant belonging to
    the same container as this constant, C{True} if this constant is
    defined before or equal to C{other}, otherwise C{False}.
r   r#   s   &&r   Ú__le__Ú_Constant.__le__@   óH   € ô ˜5§.¡.×1Ò1Ø—‘ 5×#3Ñ#3Ô3ä!Ð!Øˆ}×:Ð: §¡¨e¯l©lÑ :Ð:r   c                ó¬   € \        WP                  4      '       d   V P                  VP                  8X  g   \        # V P                  VP                  8„  # )a  
Implements C{>}.  Order is defined by instantiation order.

@param other: An object.

@return: C{NotImplemented} if C{other} is not a constant belonging to
    the same container as this constant, C{True} if this constant is
    defined after C{other}, otherwise C{False}.
r   r#   s   &&r   Ú__gt__Ú_Constant.__gt__R   r'   r   c                óÂ   € \        WP                  4      '       d   V P                  VP                  8X  g   \        # WJ ;'       g    V P                  VP                  8„  # )a  
Implements C{>=}.  Order is defined by instantiation order.

@param other: An object.

@return: C{NotImplemented} if C{other} is not a constant belonging to
    the same container as this constant, C{True} if this constant is
    defined after or equal to C{other}, otherwise C{False}.
r   r#   s   &&r   Ú__ge__Ú_Constant.__ge__d   r+   r   c                ó   € Wn         W n        R# )a7  
Complete the initialization of this L{_Constant}.

@param container: The L{_ConstantsContainer} subclass this constant is
    part of.

@param name: The name of this constant in its container.

@param value: The value of this constant; not used, as named constants
    have no value apart from their identity.
N)r   r   )r   Ú	containerr   Úvalues   &&&&r   Ú_realizeÚ_Constant._realizev   s   € ð $ŒØŽ	r   )r   r   r   N)r   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r%   r)   r-   r0   r5   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r
   r
      s3   ø‡ € ñ	ò'ò
Aò*ò$;ò$*ò$;÷$ð r   r
   c                   ó6   a a€ ] tR t^‡t oRtV 3R ltRtVtV ;t# )Ú_ConstantsContainerTypezU
L{_ConstantsContainerType} is a metaclass for creating constants container
classes.
c                óÞ  <€ \         \        V `  WW#4      p\        VRR4      pVf   V# . pVP	                  4        Fj  w  r\        WtP                  4      '       g   K"  VP                  e   \        RV: RVP                  : 24      hVP                  VP                  W34       Kl  	  / p\        V4       F-  w  ršpVP                  W§4      pVP                  WJV4       WxV
&   K/  	  W„n        V# )a+  
Create a new constants container class.

If C{attributes} includes a value of C{None} for the C{"_constantType"}
key, the new class will not be initialized as a constants container and
it will behave as a normal class.

@param name: The name of the container class.
@type name: L{str}

@param bases: A tuple of the base classes for the new container class.
@type bases: L{tuple} of L{_ConstantsContainerType} instances

@param attributes: The attributes of the new container class, including
    any constants it is to contain.
@type attributes: L{dict}
Ú_constantTypeNzCannot use z! as the value of an attribute on )Úsuperr@   Ú__new__ÚgetattrÚitemsr    rB   r   Ú
ValueErrorr   Úappendr   ÚsortedÚ_constantFactoryr5   Ú_enumerants)r   r   ÚbasesÚ
attributesÚclsÚconstantTypeÚ	constantsÚ
descriptorÚ
enumerantsÚindexÚ	enumerantr4   r!   s   &&&&        €r   rD   Ú_ConstantsContainerType.__new__Œ   sõ   ø€ ô$ Ô+¨TÑ:Ø˜ó+ˆô
 ˜s O°TÓ:ˆØÒØˆJàˆ	Ø",×"2Ñ"2Ö"4ÑˆTÜ˜*×&7Ñ&7×8Ô8Ø×(Ñ(Ò4Ý$ã&¨¯«ð6ó7ð 7ð × Ñ  *×"3Ñ"3°TÐ!FÖGñ #5ð ˆ
Ü.4°YÖ.?Ñ*ˆU˜zØ×(Ñ(¨Ó?ˆEØ×Ñ °Ô6Ø$.�yÓ!ñ /@ð %Œàˆ
r   © )	r   r7   r8   r9   r:   rD   r;   r<   Ú__classcell__)r!   r>   s   @@r   r@   r@   ‡   s   ù‡ € ñ÷/õ /r   r@   c                   ó^   a € ] tR t^Æt o RtRtR t]R 4       t]R 4       t	]R 4       t
RtV tR# )Ú_ConstantsContainera±  
L{_ConstantsContainer} is a class with attributes used as symbolic
constants.  It is up to subclasses to specify what kind of constants are
allowed.

@cvar _constantType: Specified by a L{_ConstantsContainer} subclass to
    specify the type of constants allowed by that subclass.

@cvar _enumerants: A C{dict} mapping the names of constants (eg
    L{NamedConstant} instances) found in the class definition to those
    instances.
Nc                ó4   € \        V P                  : R24      h)z{
Classes representing constants containers are not intended to be
instantiated.

The class object itself is used directly.
z may not be instantiated.)Ú	TypeErrorr   )rN   s   &r   rD   Ú_ConstantsContainer.__new__Ö   s   € ô ¸¿¼ÐGÓHÐHr   c                ó   € \         # )aX  
Construct the value for a new constant to add to this container.

@param name: The name of the constant to create.

@param descriptor: An instance of a L{_Constant} subclass (eg
    L{NamedConstant}) which is assigned to C{name}.

@return: L{NamedConstant} instances have no value apart from identity,
    so return a meaningless dummy value.
)Ú_unspecified)rN   r   rQ   s   &&&r   rJ   Ú$_ConstantsContainer._constantFactoryà   s
   € ô Ðr   c                óN   € WP                   9   d   \        W4      # \        V4      h)aY  
Retrieve a constant by its name or raise a C{ValueError} if there is no
constant associated with that name.

@param name: A C{str} giving the name of one of the constants defined
    by C{cls}.

@raise ValueError: If C{name} is not the name of one of the constants
    defined by C{cls}.

@return: The L{NamedConstant} associated with C{name}.
)rK   rE   rG   )rN   r   s   &&r   ÚlookupByNameÚ _ConstantsContainer.lookupByNameð   s$   € ð —?‘?Ô"Ü˜3Ó%Ð%Ü˜ÓÐr   c                ód   € V P                   P                  4       p\        \        VR R7      4      # )zÓ
Iteration over a L{Names} subclass results in all of the constants it
contains.

@return: an iterator the elements of which are the L{NamedConstant}
    instances defined in the body of this L{Names} subclass.
c                 ó   € V P                   # r   )r   )rQ   s   &r   Ú<lambda>Ú3_ConstantsContainer.iterconstants.<locals>.<lambda>  s
   € °Z×5FÒ5Fr   )Úkey)rK   ÚvaluesÚiterrI   )rN   rP   s   & r   ÚiterconstantsÚ!_ConstantsContainer.iterconstants  s0   € ð —O‘O×*Ñ*Ó,ˆ	äÜ�9Ñ"FÔGóIð 	Ir   rV   )r   r7   r8   r9   r:   rB   rD   ÚclassmethodrJ   ra   rj   r;   r<   r=   s   @r   rY   rY   Æ   sU   ø‡ € ñð €MòIð ñó ðð ñó ðð$ ñIó öIr   rY   Ú c                   ó   € ] tR tRtRtRtR# )ÚNamedConstanti  a  
L{NamedConstant} defines an attribute to be a named constant within a
collection defined by a L{Names} subclass.

L{NamedConstant} is only for use in the definition of L{Names}
subclasses.  Do not instantiate L{NamedConstant} elsewhere and do not
subclass it.
rV   N)r   r7   r8   r9   r:   r;   rV   r   r   ro   ro     s   † õr   ro   c                   ó   € ] tR tRtRt]tRtR# )ÚNamesi  zY
A L{Names} subclass contains constants which differ only in their names and
identities.
rV   N)r   r7   r8   r9   r:   ro   rB   r;   rV   r   r   rq   rq     s   † ñð "„Mr   rq   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚValueConstanti(  a  
L{ValueConstant} defines an attribute to be a named constant within a
collection defined by a L{Values} subclass.

L{ValueConstant} is only for use in the definition of L{Values} subclasses.
Do not instantiate L{ValueConstant} elsewhere and do not subclass it.
c                ó<   € \         P                  V 4       Wn        R # r   ©r
   r   r4   ©r   r4   s   &&r   r   ÚValueConstant.__init__0  ó   € Ü×Ñ˜4Ô ØŽ
r   )r4   N)r   r7   r8   r9   r:   r   r;   r<   r=   s   @r   rs   rs   (  s   ø‡ € ñ÷ð r   rs   c                   ó8   a € ] tR tRt o Rt]t]R 4       tRt	V t
R# )ÚValuesi6  zU
A L{Values} subclass contains constants which are associated with arbitrary
values.
c                óp   € V P                  4        F  pVP                  V8X  g   K  Vu # 	  \        V4      h)aL  
Retrieve a constant by its value or raise a C{ValueError} if there is
no constant associated with that value.

@param value: The value of one of the constants defined by C{cls}.

@raise ValueError: If C{value} is not the value of one of the constants
    defined by C{cls}.

@return: The L{ValueConstant} associated with C{value}.
)rj   r4   rG   )rN   r4   Úconstants   && r   ÚlookupByValueÚValues.lookupByValue=  s5   € ð ×)Ñ)Ö+ˆHØ�~‰~ Ö&Ø’ñ ,ô ˜ÓÐr   rV   N)r   r7   r8   r9   r:   rs   rB   rl   r}   r;   r<   r=   s   @r   rz   rz   6  s#   ø‡ € ñð "€Màñ ó ö r   rz   c                óÆ   € V ! VP                   VP                   4      pV ! VP                  VP                  4      p\        4       pVP                  VP                  WC4       V# )ak  
Implement a binary operator for a L{FlagConstant} instance.

@param op: A two-argument callable implementing the binary operation.  For
    example, C{operator.or_}.

@param left: The left-hand L{FlagConstant} instance.
@param right: The right-hand L{FlagConstant} instance.

@return: A new L{FlagConstant} instance representing the result of the
    operation.
)r4   ÚnamesÚFlagConstantr5   r   )ÚopÚleftÚrightr4   r€   Úresults   &&&   r   Ú_flagOpr†   Q  sJ   € ñ ˆt�z‰z˜5Ÿ;™;Ó'€EÙˆt�z‰z˜5Ÿ;™;Ó'€EÜ‹^€FØ
‡O�O�D—O‘O UÔ2Ø€Mr   c                   ód   a € ] tR tRt o Rt]3R ltR tR tR t	R t
R tR	 tR
 tR t]tRtV tR# )r�   if  a   
L{FlagConstant} defines an attribute to be a flag constant within a
collection defined by a L{Flags} subclass.

L{FlagConstant} is only for use in the definition of L{Flags} subclasses.
Do not instantiate L{FlagConstant} elsewhere and do not subclass it.
c                ó<   € \         P                  V 4       Wn        R # r   ru   rv   s   &&r   r   ÚFlagConstant.__init__n  rx   r   c                ó  € \        V\        4      '       d   Tp\        V.4      pM=\        V4      ^8X  d   Vw  pM(RRP	                  \        V4      4      ,           R,           p\        P                  WWC4       W0n        W n	        R# )aê  
Complete the initialization of this L{FlagConstant}.

This implementation differs from other C{_realize} implementations in
that a L{FlagConstant} may have several names which apply to it, due to
flags being combined with various operators.

@param container: The L{Flags} subclass this constant is part of.

@param names: When a single-flag value is being initialized, a C{str}
    giving the name of that flag.  This is the case which happens when
    a L{Flags} subclass is being initialized and L{FlagConstant}
    instances from its body are being realized.  Otherwise, a C{set} of
    C{str} giving names of all the flags set on this L{FlagConstant}
    instance.  This is the case when two flags are combined using C{|},
    for example.
Ú{Ú,Ú}N)
r    ÚstrÚsetÚlenÚjoinrI   r
   r5   r4   r€   )r   r3   r€   r4   r   s   &&&& r   r5   ÚFlagConstant._realizes  si   € ô$ �eœS×!Ò!ØˆDÜ˜˜“L‰EÜ�‹Z˜1Œ_Ø‰G‰Tà˜Ÿ™¤&¨£-Ó0Õ0°3Õ6ˆDÜ×Ñ˜4¨DÔ8ØŒ
ØŽ
r   c                ó"   € \        \        W4      # )z‚
Define C{|} on two L{FlagConstant} instances to create a new
L{FlagConstant} instance with all flags set in either instance set.
)r†   r   r#   s   &&r   Ú__or__ÚFlagConstant.__or__‘  s   € ô
 ”s˜DÓ(Ð(r   c                ó"   € \        \        W4      # )z‚
Define C{&} on two L{FlagConstant} instances to create a new
L{FlagConstant} instance with only flags set in both instances set.
)r†   r   r#   s   &&r   Ú__and__ÚFlagConstant.__and__™  s   € ô
 ”t˜TÓ)Ð)r   c                ó"   € \        \        W4      # )zˆ
Define C{^} on two L{FlagConstant} instances to create a new
L{FlagConstant} instance with only flags set on exactly one instance
set.
)r†   r   r#   s   &&r   Ú__xor__ÚFlagConstant.__xor__¡  s   € ô ”s˜DÓ(Ð(r   c                óþ   € \        4       pVP                  V P                  \        4       ^ 4       V P                  P	                  4        F/  pVP
                  V P
                  ,          ^ 8X  g   K'  W,          pK1  	  V# )z�
Define C{~} on a L{FlagConstant} instance to create a new
L{FlagConstant} instance with all flags not set on this instance set.
)r�   r5   r   r�   rj   r4   )r   r…   Úflags   &  r   Ú
__invert__ÚFlagConstant.__invert__ª  s[   € ô
 “ˆØ�‰˜Ÿ™¬«°Ô2Ø—O‘O×1Ñ1Ö3ˆDØ�z‰z˜DŸJ™JÕ&¨!Ö+Ø•’ñ 4ð ˆr   c                ó0   a € V 3R lS P                    4       # )z9
@return: An iterator of flags set on this instance set.
c              3   óZ   <"  € T F   pSP                   P                  V4      x € K"  	  R # 5ir   )r   ra   )Ú.0r   r   s   & €r   Ú	<genexpr>Ú(FlagConstant.__iter__.<locals>.<genexpr>»  s#   øé € ÐJ¹z°t�—‘×,Ñ,¨T×2Ð2»zùs   ƒ(+)r€   r   s   fr   Ú__iter__ÚFlagConstant.__iter__·  s   ø€ ô K¸t¿zºzÓJÐJr   c                ó$   € \        W,          4      # )z‘
@param flag: The flag to test for membership in this instance
    set.

@return: C{True} if C{flag} is in this instance set, else
    C{False}.
)Úbool)r   r�   s   &&r   Ú__contains__ÚFlagConstant.__contains__¾  s   € ô �D•KÓ Ð r   c                ó,   € \        V P                  4      # )z<
@return: C{False} if this flag's value is 0, else C{True}.
)r¨   r4   r   s   &r   Ú__nonzero__ÚFlagConstant.__nonzero__Ê  s   € ô �D—J‘JÓÐr   )r€   r4   N)r   r7   r8   r9   r:   r^   r   r5   r”   r—   rš   rž   r¥   r©   r¬   Ú__bool__r;   r<   r=   s   @r   r�   r�   f  sD   ø‡ € ñð *ô ò
ò<)ò*ò)ò
òKò	!ò ð
 †Hr   r�   c                   ó<   a € ] tR tRt o Rt]t^t]R 4       t	Rt
V tR# )ÚFlagsiÓ  z¥
A L{Flags} subclass contains constants which can be combined using the
common bitwise operators (C{|}, C{&}, etc) similar to a I{bitvector} from a
language like C.
c                ó°   € VP                   \        J d(   V P                  pV ;P                  ^,          un        V# VP                   pV^,          V n        V# )aÂ  
For L{FlagConstant} instances with no explicitly defined value, assign
the next power of two as its value.

@param name: The name of the constant to create.

@param descriptor: An instance of a L{FlagConstant} which is assigned
    to C{name}.

@return: Either the value passed to the C{descriptor} constructor, or
    the next power of 2 value which will be assigned to C{descriptor},
    relative to the value of the last defined L{FlagConstant}.
)r4   r^   Ú_value)rN   r   rQ   r4   s   &&& r   rJ   ÚFlags._constantFactoryÝ  sM   € ð ×Ñœ|Ó+Ø—J‘JˆEØ�JŠJ˜1Õ�Jð ˆð ×$Ñ$ˆEØ !�ˆCŒJØˆr   rV   N)r   r7   r8   r9   r:   r�   rB   r²   rl   rJ   r;   r<   r=   s   @r   r°   r°   Ó  s(   ø‡ € ñð
 !€Mà€Fàñó ör   r°   N)r:   Ú
__future__r   r   Ú__all__Ú	functoolsr   Ú	itertoolsr   Úoperatorr   r   r   Úobjectr^   Únextr   r
   Útyper@   rY   ro   rq   rs   rz   r†   r�   r°   rV   r   r   Ú<module>r¼      sÀ   ðñ
÷
 1à
€å Ý ß #Ñ #á‹x€Ù˜™u›wÓ'€ôm�ô môb4˜dô 4ô~IIÑ1°"°v°iÀÓDô IIôZ�Iô ô"Ðô "ô
�Iô 
ô Ð ô  ò6ô*i�9ô iôZˆFö r   