
    e                     ^    d dl Z d dlZddlmZ dddddd	Z	 	 	 	 	 	 	 dd
Zd Zd Zd Zd Z	y)    N   )_make_nez==<z<=>z>=)eqltlegtgec                    dgt               g t        dd}d}| d}t        d|       d<   t               d<   ||d	z  }t        d
|      d<   ||d	z  }t        d|      d<   ||d	z  }t        d|      d<   ||d	z  }t        d|      d<   t	        j
                  |t        fi fd      }	|r|	j                  j                  t               d|cxk  rdk  r(n |	S |sd}
t        |
      t        j                  |	      }	|	S )a  
    Create a class that can be passed into `attrs.field`'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   FTr   __eq____ne__r   r   __lt__r	   __le__r
   __gt__r   __ge__c                 &    | j                        S N)update)nsbodys    +/usr/lib/python3/dist-packages/attr/_cmp.py<lambda>zcmp_using.<locals>.<lambda>S   s    biio        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   require_same_type
class_namenum_order_functionshas_eq_functiontype_msgr   s              @r   	cmp_usingr1      sF   L YL.	D O	~'b1X!X	~q 'b1X	~q 'b1X	~q 'b1X	~q 'b1XOOVIr#=E
 ""#34 	"" L  YCS/!((/Lr   c                      d } | S )z!
    Create __init__ method.
    c                     || _         y)z1
        Initialize object with *value*.
        N)r   )selfr   s     r   r   z_make_init.<locals>.__init__k   s     
r    )r   s    r   r!   r!   f   s    
 Or   c                 L    fd}d|  d|_         dt        |     d|_        |S )z!
    Create operator method.
    c                     | j                  |      st        S  | j                  |j                        }|t        u rt        S |S r   )r   NotImplementedr   )r4   otherresultfuncs      r   methodz_make_operator.<locals>.methody   s>    %%e,!!djj%++.^#!!r   __z	Return a z b.  Computed by attrs.)__name___operation_names__doc__)namer;   r<   s    ` r   r"   r"   t   s;    
 4&mFO
$T*++BC N Mr   c                 D     t         fd j                  D              S )z8
    Check whether `other` is comparable to `self`.
    c              3   0   K   | ]  } |        y wr   r5   ).0r;   r9   r4   s     r   	<genexpr>z$_is_comparable_to.<locals>.<genexpr>   s     @TtD% @s   )allr   r4   r9   s   ``r   r   r      s     @T-?-?@@@r   c                 Z    |j                   j                  | j                   j                  u S )zR
    Return True if *self* and *other* are of the same type, False otherwise.
    )r   	__class__rG   s     r   r'   r'      s#     ;;  DJJ$8$888r   )NNNNNT
Comparable)
r)   r#   _maker   r?   r1   r!   r"   r   r'   r5   r   r   <module>rL      sV       cSM  Vr.A9r   