a
    [g                     @   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 rdk rn n|sd}
t
|
t|	}	|	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.

    Args:
        eq (typing.Callable | None):
            Callable used to evaluate equality of two objects.

        lt (typing.Callable | None):
            Callable used to evaluate whether one object is less than another
            object.

        le (typing.Callable | None):
            Callable used to evaluate whether one object is less than or equal
            to another object.

        gt (typing.Callable | None):
            Callable used to evaluate whether one object is greater than
            another object.

        ge (typing.Callable | None):
            Callable used to evaluate whether one object is greater than or
            equal to another object.

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

        class_name (str | None): 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 W/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/attr/_cmp.py<lambda>]       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_msgr   r   r   	cmp_using   sD    0

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   u   s    z_make_init.<locals>.__init__r   )r   r   r   r   r!   p   s    r!   c                    s0    fdd}d|  d|_ dt|   d|_|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>.method__z	Return a z b.  Computed by attrs.)__name___operation_names__doc__)namer4   r5   r   r3   r   r"   ~   s
    
r"   c                    s   t  fddjD S )z8
    Check whether `other` is comparable to `self`.
    c                 3   s   | ]}| V  qd S r   r   ).0r4   r1   r/   r   r   	<genexpr>   r   z$_is_comparable_to.<locals>.<genexpr>)allr   r/   r1   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?   r   r   r   r'      s    r'   )NNNNNTr   )
r)   r#   _maker   r8   r.   r!   r"   r   r'   r   r   r   r   <module>   s          
c