o
    ×•`%  ã                   @   s€   d dl mZmZmZ d dlZddlm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 )é    )Úabsolute_importÚdivisionÚprint_functionNé   )Ú	new_class)Ú_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r=|d
7 }td|ƒˆ d< |durL|d
7 }td|ƒˆ d< |dur[|d
7 }td|ƒˆ d< t|tfi ‡ fdd„ƒ}	|ro|	j t¡ d|  k rydk r‡n |	S |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© ú+/usr/lib/python3/dist-packages/attr/_cmp.pyÚ<lambda>Q   s   
 zcmp_using.<locals>.<lambda>é   zDeq must be define is order to complete ordering from lt, le, gt, ge.)Ú
_make_initr   Ú_make_operatorr   r   Úobjectr   ÚappendÚ_check_same_typeÚ
ValueErrorÚ	functoolsÚtotal_ordering)
r
   r   r   r   r   Úrequire_same_typeÚ
class_nameÚnum_order_functionsÚhas_eq_functionÚtype_r    r   r!   Ú	cmp_using   sD   &ü

÷ÿ
r1   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   j   s   
z_make_init.<locals>.__init__r    )r   r    r    r!   r$   e   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   )r2   ÚotherÚresult©Úfuncr    r!   Úmethodx   s   
z_make_operator.<locals>.methodz__%s__z"Return a %s b.  Computed by attrs.)Ú__name__Ú_operation_namesÚ__doc__)Únamer7   r8   r    r6   r!   r%   s   s   
ÿr%   c                 C   s    | j D ]
}|| |ƒs dS qdS )z8
    Check whether `other` is comparable to `self`.
    FT)r   )r2   r4   r7   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__)r2   r4   r    r    r!   r(   ”   s   r(   )NNNNNTr   )Ú
__future__r   r   r   r*   Ú_compatr   Ú_maker   r:   r1   r$   r%   r   r(   r    r    r    r!   Ú<module>   s"    
ùY
