§
    Ètºf…>  ã            	       ó   — d Z ddlmZmZ g ZddlmZ ddlmZ ddl	m
Z
mZmZ  e¦   «         Z ee e¦   «         ¦  «        Z G d„ de¦  «        Z G d„ d	e¦  «        Z G d
„ d edefi ¦  «        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zi
Symbolic constant support, including collections and constants with text,
numeric, and bit flag values.
é    )ÚdivisionÚabsolute_import)Úpartial)Úcount)Úand_Úor_Úxorc                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
Ú	_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                 ó:   — d | _         t          ¦   «         | _        d S ©N)Ú
_containerÚ_constantOrderÚ_index©Úselfs    úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/constantly/_constants.pyÚ__init__z_Constant.__init__!   s   € ØˆŒÝ$Ñ&Ô&ˆŒˆˆó    c                 ó2   — d| j         j        ›d| j        ›d�S )zq
        Return text identifying both which constant this is and which
        collection it belongs to.
        ú<ú=ú>)r   Ú__name__Únamer   s    r   Ú__repr__z_Constant.__repr__&   s"   € € ð
 !œOÔ4Ð4Ð4°d´i°i°iÐ@Ð@r   c                 óz   — t          || j        ¦  «        r| j        |j        k    st          S | j        |j        k     S )aC  
        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__z_Constant.__lt__.   ó=   € õ ˜5 $¤.Ñ1Ô1ð	"à” 5Ô#3Ò3Ð3å!Ð!ØŒ{˜Uœ\Ò)Ð)r   c                 ó‚   — t          || j        ¦  «        r| j        |j        k    st          S | |u p| j        |j        k     S )aP  
        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__z_Constant.__le__@   óF   € õ ˜5 $¤.Ñ1Ô1ð	"à” 5Ô#3Ò3Ð3å!Ð!Ø�uˆ}Ð: ¤¨e¬lÒ :Ð:r   c                 óz   — t          || j        ¦  «        r| j        |j        k    st          S | j        |j        k    S )aB  
        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__z_Constant.__gt__R   r%   r   c                 ó‚   — t          || j        ¦  «        r| j        |j        k    st          S | |u p| j        |j        k    S )aO  
        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__z_Constant.__ge__d   r(   r   c                 ó"   — || _         || _        dS )ao  
        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   Ú_realizez_Constant._realizev   s   € ð $ˆŒØˆŒ	ˆ	ˆ	r   N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r'   r*   r,   r0   © r   r   r   r      sŠ   € € € € € ð	ð 	ð'ð 'ð 'ð
Að Að Að*ð *ð *ð$;ð ;ð ;ð$*ð *ð *ð$;ð ;ð ;ð$ð ð ð ð r   r   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_ConstantsContainerTypeza
    L{_ConstantsContainerType} is a metaclass for creating constants container
    classes.
    c                 ó  •— t          t          | ¦  «                             | |||¦  «        }t          |dd¦  «        }|€|S g }|                     ¦   «         D ]X\  }}t          ||j        ¦  «        r>|j        �t          d|›d|j	        ›�¦  «        ‚| 
                    |j        ||f¦  «         ŒYi }t          |¦  «        D ]8\  }	}
}|                     |
|¦  «        }|                     ||
|¦  «         |||
<   Œ9||_        |S )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 )Úsuperr6   Ú__new__ÚgetattrÚitemsr   r8   r   Ú
ValueErrorr   Úappendr   ÚsortedÚ_constantFactoryr0   Ú_enumerants)r   r   ÚbasesÚ
attributesÚclsÚconstantTypeÚ	constantsÚ
descriptorÚ
enumerantsÚindexÚ	enumerantr/   r    s               €r   r:   z_ConstantsContainerType.__new__Œ   sD  ø€ õ$ Õ+¨TÑ2Ô2×:Ò:Ø�$˜˜zñ+ô +ˆõ
 ˜s O°TÑ:Ô:ˆØÐØˆJàˆ	Ø",×"2Ò"2Ñ"4Ô"4ð 	Hð 	HÑˆT�:Ý˜* cÔ&7Ñ8Ô8ð HØÔ(Ð4Ý$˜*à&˜J˜J¨¬¨ð6ñ7ô 7ð 7ð × Ò  *Ô"3°T¸:Ð!FÑGÔGÐGøàˆ
Ý.4°YÑ.?Ô.?ð 	/ð 	/Ñ*ˆU�I˜zØ×(Ò(¨°JÑ?Ô?ˆEØ×Ò  Y°Ñ6Ô6Ð6Ø$.ˆJ�yÑ!Ð!ð
 %ˆŒàˆ
r   )r   r1   r2   r3   r:   Ú__classcell__)r    s   @r   r6   r6   ‡   sB   ø€ € € € € ðð ð/ð /ð /ð /ð /ð /ð /ð /ð /r   r6   c                   ó^   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dS )Ú_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                 ó0   — t          | j        ›d�¦  «        ‚)z›
        Classes representing constants containers are not intended to be
        instantiated.

        The class object itself is used directly.
        z may not be instantiated.)Ú	TypeErrorr   )rD   s    r   r:   z_ConstantsContainer.__new__Ö   s   € õ ¸¼¸¸ÐGÑHÔHÐHr   c                 ó   — t           S )a�  
        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)rD   r   rG   s      r   r@   z$_ConstantsContainer._constantFactoryà   s
   € õ Ðr   c                 óR   — || j         v rt          | |¦  «        S t          |¦  «        ‚)a™  
        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}.
        )rA   r;   r=   )rD   r   s     r   ÚlookupByNamez _ConstantsContainer.lookupByNameð   s/   € ð �3”?Ð"Ð"Ý˜3 Ñ%Ô%Ð%Ý˜ÑÔÐr   c                 ór   — | j                              ¦   «         }t          t          |d„ ¬¦  «        ¦  «        S )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                 ó   — | j         S r   )r   )rG   s    r   ú<lambda>z3_ConstantsContainer.iterconstants.<locals>.<lambda>  s	   € °ZÔ5F€ r   )Úkey)rA   ÚvaluesÚiterr?   )rD   rF   s     r   Úiterconstantsz!_ConstantsContainer.iterconstants  s@   € ð ”O×*Ò*Ñ,Ô,ˆ	åÝ�9Ð"FÐ"FÐGÑGÔGñIô Ið 	Ir   )
r   r1   r2   r3   r8   r:   Úclassmethodr@   rS   rZ   r4   r   r   rM   rM   Æ   s�   € € € € € ðð ð €MðIð Ið Ið ðð ñ „[ðð ðð ñ „[ðð$ ðIð Iñ „[ðIð Ið Ir   rM   Ú c                   ó   — e Zd ZdZdS )ÚNamedConstanta  
    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.
    N)r   r1   r2   r3   r4   r   r   r^   r^     s   € € € € € ðð ð ð r   r^   c                   ó   — e Zd ZdZeZdS )ÚNamesze
    A L{Names} subclass contains constants which differ only in their names and
    identities.
    N)r   r1   r2   r3   r^   r8   r4   r   r   r`   r`     s   € € € € € ðð ð "€M€M€Mr   r`   c                   ó   — e Zd ZdZd„ ZdS )ÚValueConstanta  
    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                 óH   — t                                | ¦  «         || _        d S r   ©r   r   r/   ©r   r/   s     r   r   zValueConstant.__init__0  ó!   € Ý×Ò˜4Ñ Ô Ð ØˆŒ
ˆ
ˆ
r   N)r   r1   r2   r3   r   r4   r   r   rb   rb   (  s-   € € € € € ðð ðð ð ð ð r   rb   c                   ó,   — e Zd ZdZeZed„ ¦   «         ZdS )ÚValuesza
    A L{Values} subclass contains constants which are associated with arbitrary
    values.
    c                 ól   — |                       ¦   «         D ]}|j        |k    r|c S Œt          |¦  «        ‚)a„  
        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}.
        )rZ   r/   r=   )rD   r/   Úconstants      r   ÚlookupByValuezValues.lookupByValue=  sH   € ð ×)Ò)Ñ+Ô+ð 	 ð 	 ˆHØŒ~ Ò&Ð&Ø���ð 'å˜ÑÔÐr   N)r   r1   r2   r3   rb   r8   r[   rk   r4   r   r   rh   rh   6  s>   € € € € € ðð ð "€Màð ð  ñ „[ð ð  ð  r   rh   c                 ó²   —  | |j         |j         ¦  «        } | |j        |j        ¦  «        }t          ¦   «         }|                     |j        ||¦  «         |S )a‹  
    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.
    )r/   ÚnamesÚFlagConstantr0   r   )ÚopÚleftÚrightr/   rm   Úresults         r   Ú_flagOprs   Q  sT   € ð ˆBˆtŒz˜5œ;Ñ'Ô'€EØˆBˆtŒz˜5œ;Ñ'Ô'€EÝ‰^Œ^€FØ
‡O‚O�D”O U¨EÑ2Ô2Ð2Ø€Mr   c                   óP   — e Zd ZdZefd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ ZeZdS )rn   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                 óH   — t                                | ¦  «         || _        d S r   rd   re   s     r   r   zFlagConstant.__init__n  rf   r   c                 ó,  — t          |t          ¦  «        r|}t          |g¦  «        }n@t          |¦  «        dk    r|\  }n(dd                     t          |¦  «        ¦  «        z   dz   }t                               | |||¦  «         || _        || _	        dS )aR  
        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Újoinr?   r   r0   r/   rm   )r   r.   rm   r/   r   s        r   r0   zFlagConstant._realizes  s�   € õ$ �e�SÑ!Ô!ð 	7ØˆDÝ˜˜‘L”LˆEˆEÝ�‰ZŒZ˜1Š_ˆ_Ø‰GˆTˆTà˜Ÿš¥&¨¡-¤-Ñ0Ô0Ñ0°3Ñ6ˆDÝ×Ò˜4 ¨D°%Ñ8Ô8Ð8ØˆŒ
ØˆŒ
ˆ
ˆ
r   c                 ó.   — t          t          | |¦  «        S )zš
        Define C{|} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with all flags set in either instance set.
        )rs   r   r"   s     r   Ú__or__zFlagConstant.__or__‘  s   € õ
 •s˜D %Ñ(Ô(Ð(r   c                 ó.   — t          t          | |¦  «        S )zš
        Define C{&} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with only flags set in both instances set.
        )rs   r   r"   s     r   Ú__and__zFlagConstant.__and__™  s   € õ
 •t˜T 5Ñ)Ô)Ð)r   c                 ó.   — t          t          | |¦  «        S )z¨
        Define C{^} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with only flags set on exactly one instance
        set.
        )rs   r	   r"   s     r   Ú__xor__zFlagConstant.__xor__¡  s   € õ •s˜D %Ñ(Ô(Ð(r   c                 óÚ   — t          ¦   «         }|                     | j        t          ¦   «         d¦  «         | j                             ¦   «         D ]}|j        | j        z  dk    r||z  }Œ|S )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   )rn   r0   r   r|   rZ   r/   )r   rr   Úflags      r   Ú
__invert__zFlagConstant.__invert__ª  si   € õ
 ‘”ˆØ�Š˜œ­©¬°Ñ2Ô2Ð2Ø”O×1Ò1Ñ3Ô3ð 	ð 	ˆDØŒz˜DœJÑ&¨!Ò+Ð+Ø˜$‘�øØˆr   c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )zI
        @return: An iterator of flags set on this instance set.
        c              3   óL   •K  — | ]}‰j                              |¦  «        V — Œd S r   )r   rS   )Ú.0r   r   s     €r   ú	<genexpr>z(FlagConstant.__iter__.<locals>.<genexpr>»  s3   øè è € ÐJÐJ°t�”×,Ò,¨TÑ2Ô2ÐJÐJÐJÐJÐJÐJr   )rm   r   s   `r   Ú__iter__zFlagConstant.__iter__·  s"   ø€ ð KÐJÐJÐJ¸t¼zÐJÑJÔJÐJr   c                 ó&   — t          || z  ¦  «        S )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__zFlagConstant.__contains__¾  s   € õ �D˜4‘KÑ Ô Ð r   c                 ó*   — t          | j        ¦  «        S )zL
        @return: C{False} if this flag's value is 0, else C{True}.
        )rŽ   r/   r   s    r   Ú__nonzero__zFlagConstant.__nonzero__Ê  s   € õ �D”JÑÔÐr   N)r   r1   r2   r3   rQ   r   r0   r€   r‚   r„   r‡   rŒ   r�   r‘   Ú__bool__r4   r   r   rn   rn   f  s³   € € € € € ðð ð *ð ð ð ð ð
ð ð ð<)ð )ð )ð*ð *ð *ð)ð )ð )ð
ð 
ð 
ðKð Kð Kð	!ð 	!ð 	!ð ð  ð  ð
 €H€H€Hr   rn   c                   ó0   — e Zd ZdZeZdZed„ ¦   «         ZdS )ÚFlagszµ
    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.
    rw   c                 ót   — |j         t          u r| j        }| xj        dz  c_        n|j         }|dz  | _        |S )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}.
        rw   )r/   rQ   Ú_value)rD   r   rG   r/   s       r   r@   zFlags._constantFactoryÝ  sC   € ð Ô�|Ð+Ð+Ø”JˆEØˆJŒJ˜1ÑˆJŒJˆJàÔ$ˆEØ !™ˆCŒJØˆr   N)	r   r1   r2   r3   rn   r8   r–   r[   r@   r4   r   r   r”   r”   Ó  sC   € € € € € ðð ð
 !€Mà€Fàðð ñ „[ðð ð r   r”   N)r3   Ú
__future__r   r   Ú__all__Ú	functoolsr   Ú	itertoolsr   Úoperatorr   r   r	   ÚobjectrQ   Únextr   r   Útyper6   rM   r^   r`   rb   rh   rs   rn   r”   r4   r   r   ú<module>rŸ      s]  ðð
ð ð
 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à
€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #àˆv‰xŒx€Ø�˜˜u˜u™wœwÑ'Ô'€ðmð mð mð mð m�ñ mô mð mðb4ð 4ð 4ð 4ð 4˜dñ 4ô 4ð 4ð~IIð IIð IIð IIð IIÐ1Ð1°"°v°iÀÑDÔDñ IIô IIð IIðZð ð ð ð �Iñ ô ð ð"ð "ð "ð "ð "Ðñ "ô "ð "ð
ð 
ð 
ð 
ð 
�Iñ 
ô 
ð 
ð ð  ð  ð  ð  Ð ñ  ô  ð  ð6ð ð ð*ið ið ið ið i�9ñ iô ið iðZð ð ð ð ˆFñ ô ð ð ð r   