a
     ÑOc  ã                   @   sZ   d dl Z d dlZddlmZ dddddd	œZddd„Zdd„ Zdd„ Zdd„ Zdd„ Z	dS )é    Né   )Ú_make_nez==ú<z<=ú>z>=)ÚeqÚltÚleÚgtÚgeTÚ
Comparablec           
         s  dgt ƒ g tdœ‰ d}d}| dur>d}td| ƒˆ d< tƒ ˆ d	< |dur\|d
7 }td|ƒˆ d< |durz|d
7 }td|ƒˆ d< |dur˜|d
7 }td|ƒˆ d< |dur¶|d
7 }td|ƒˆ d< t |tfi ‡ fdd„¡}	|rà|	j t	¡ d|  k rödk �rn n|�st
dƒ‚t |	¡}	|	S )a”  
    Create a class that can be passed into `attr.ib`'s ``eq``, ``order``, and
    ``cmp`` arguments to customize field comparison.

    The resulting class will have a full set of ordering methods if
    at least one of ``{lt, le, gt, ge}`` and ``eq``  are provided.

    :param Optional[callable] eq: `callable` used to evaluate equality
        of two objects.
    :param Optional[callable] lt: `callable` used to evaluate whether
        one object is less than another object.
    :param Optional[callable] le: `callable` used to evaluate whether
        one object is less than or equal to another object.
    :param Optional[callable] gt: `callable` used to evaluate whether
        one object is greater than another object.
    :param Optional[callable] ge: `callable` used to evaluate whether
        one object is greater than or equal to another object.

    :param bool require_same_type: When `True`, equality and ordering methods
        will return `NotImplemented` if objects are not of the same type.

    :param Optional[str] class_name: Name of class. Defaults to 'Comparable'.

    See `comparison` for more details.

    .. versionadded:: 21.1.0
    Úvalue)Ú	__slots__Ú__init__Ú_requirementsÚ_is_comparable_tor   FNTr   Ú__eq__Ú__ne__r   r   Ú__lt__r   Ú__le__r	   Ú__gt__r
   Ú__ge__c                    s
   |   ˆ ¡S ©N)Úupdate)Úns©Úbody© ú@/var/www/html/gsl.tools/lib/python3.9/site-packages/attr/_cmp.pyÚ<lambda>S   ó    zcmp_using.<locals>.<lambda>é   zDeq must be define is order to complete ordering from lt, le, gt, ge.)Ú
_make_initr   Ú_make_operatorr   ÚtypesÚ	new_classÚobjectr   ÚappendÚ_check_same_typeÚ
ValueErrorÚ	functoolsÚtotal_ordering)
r   r   r   r	   r
   Zrequire_same_typeÚ
class_nameZnum_order_functionsZhas_eq_functionÚtype_r   r   r   Ú	cmp_using   sF    &ü
ÿÿ
r-   c                  C   s   dd„ } | S )z!
    Create __init__ method.
    c                 S   s
   || _ dS )z1
        Initialize object with *value*.
        N)r   )Úselfr   r   r   r   r   m   s    z_make_init.<locals>.__init__r   )r   r   r   r   r!   h   s    r!   c                    s,   ‡ fdd„}d| f |_ dt|  f |_|S )z!
    Create operator method.
    c                    s,   |   |¡stS ˆ | j|jƒ}|tu r(tS |S r   )r   ÚNotImplementedr   )r.   ÚotherÚresult©Úfuncr   r   Úmethod{   s    
z_make_operator.<locals>.methodz__%s__z"Return a %s b.  Computed by attrs.)Ú__name__Ú_operation_namesÚ__doc__)Únamer3   r4   r   r2   r   r"   v   s    
ÿr"   c                 C   s    | j D ]}|| |ƒs dS qdS )z8
    Check whether `other` is comparable to `self`.
    FT)r   )r.   r0   r3   r   r   r   r   �   s    

r   c                 C   s   |j j| j ju S )zR
    Return True if *self* and *other* are of the same type, False otherwise.
    )r   Ú	__class__)r.   r0   r   r   r   r'   —   s    r'   )NNNNNTr   )
r)   r#   Ú_maker   r6   r-   r!   r"   r   r'   r   r   r   r   Ú<module>   s          ù
[
