
    kj$                        d Z ddlZddlmZmZmZmZ ddlZddlm	Z	 ddl
mZmZmZmZmZmZ ddlmZ  ed	d
          Z G d d
ej                  Z G d deee                   Z G d deej                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )a  
This modules contains predicates with an associated description that you can use
as conditions of conditional constraints (see :class:`cloup.constraints.If`).

Predicates should be treated as immutable objects, even though immutability
is not (at the moment) enforced.
    N)AnyDictGenericTypeVar   )ensure_constraints_support)get_param_labelsget_param_namejoin_with_andparam_label_by_nameparam_value_by_nameparam_value_is_set   )	make_reprP	Predicate)boundc                       e Zd ZdZej        dej        defd            Z	dej        defdZ
dej        defdZdej        defdZddZej        dej        defd	            Zdd
ZddZddZdefdZdeeef         fdZdedefdZdS )r   z
    A ``Callable`` that takes a ``click.Context`` and returns a boolean, with an
    associated description. Meant to be used as condition in a conditional
    constraint (see :class:`~cloup.constraints.If`).
    ctxreturnc                     dS )z6Succinct description of the predicate (alias: `desc`).N selfr   s     W/home/agentuser/manim-venv/lib/python3.11/site-packages/cloup/constraints/conditions.pydescriptionzPredicate.description"             c                 2    d|                      |          z  S )zKSuccinct description of the negation of this predicate (alias: `neg_desc`).zNOT(%s)r   r   s     r   negated_descriptionzPredicate.negated_description&   s    4++C0000r   c                 ,    |                      |          S )z$Short alias for :meth:`description`.r    r   s     r   desczPredicate.desc*   s    $$$r   c                 ,    |                      |          S )z,Short alias for :meth:`negated_description`.)r!   r   s     r   neg_desczPredicate.neg_desc.   s    '',,,r   c                     |  S Nr   r   s    r   negatedzPredicate.negated2   s	    ur   c                     dS )z,Evaluate the predicate on the given context.Nr   r   s     r   __call__zPredicate.__call__5   r   r   c                      t          |           S r'   )Notr(   s    r   
__invert__zPredicate.__invert__9   s    4yyr   otherc                 "    t          | |          S r'   )_Orr   r/   s     r   __or__zPredicate.__or__<   s    4r   c                 "    t          | |          S r'   )_Andr2   s     r   __and__zPredicate.__and__?   s    D%   r   c                 d    t          | g|                                                                 R  S r'   )r   _public_fieldsvaluesr(   s    r   __repr__zPredicate.__repr__B   s0    ? 3 3 5 5 < < > >????r   c                 X    d t          |                                           D             S )Nc                 D    i | ]\  }}|                     d           ||S )_)
startswith).0kvs      r   
<dictcomp>z,Predicate._public_fields.<locals>.<dictcomp>F   s/    MMMA1<<;L;LM1MMMr   )varsitemsr(   s    r   r8   zPredicate._public_fieldsE   s(    MMd!1!1!3!3MMMMr   c                     t          || j                  o)|                                 |                                k    S r'   )
isinstance	__class__r8   r2   s     r   __eq__zPredicate.__eq__H   s;    %00 
!!U%9%9%;%;;	
r   N)r   r   )r/   r   r   r   )__name__
__module____qualname____doc__abcabstractmethodclickContextstrr   r!   r#   r%   r)   boolr+   r.   r3   r6   r:   r   r   r8   objectrH   r   r   r   r   r      s         	Eu} E E E E E1u} 1 1 1 1 1% %# % % % %-EM -c - - - -    	;EM ;d ; ; ; ;          ! ! ! !@# @ @ @ @NS#X N N N N
F 
t 
 
 
 
 
 
r   c                       e Zd ZdZdefdZdej        defdZ	dej        defdZ
dej        defdZdefd	Zdefd
ZdS )r-   zLogical NOT of a predicate.	predicatec                     || _         d S r'   rU   )r   rU   s     r   __init__zNot.__init__Q   s    "r   r   r   c                 6    | j                             |          S r'   )rU   r!   r   s     r   r   zNot.descriptionT   s    ~11#666r   c                 6    | j                             |          S r'   )rU   r   r   s     r   r!   zNot.negated_descriptionW   s    ~))#...r   c                 .    |                      |           S r'   rW   r   s     r   r+   zNot.__call__Z   s    >>#&&&&r   c                     | j         S r'   rW   r(   s    r   r.   zNot.__invert__]   s
    ~r   c                     d| j         z  S )NzNot(%r)rW   r(   s    r   r:   zNot.__repr__`   s    4>))r   N)rI   rJ   rK   rL   r   rX   rO   rP   rQ   r   r!   rR   r+   r.   r:   r   r   r   r-   r-   N   s        %%#! # # # #7u} 7 7 7 7 7/u} / / / / /'EM 'd ' ' ' 'A    *# * * * * * *r   r-   c                   P    e Zd ZU dZeed<   defdZdej	        defdZ
defdZd	S )
	_Operatorz(Operator between two or more predicates.DESC_SEP
predicatesc                 X    t          |          dk     rt          d          || _        d S )Nr   zprovide at least 2 predicates)len
ValueErrorra   )r   ra   s     r   rX   z_Operator.__init__h   s-    z??Q<===$r   r   r   c                 Z    | j                             fd| j        D                       S )Nc              3      K   | ]F}t          |t                    rd |                              z  n|                              V  GdS z(%s)N)rF   r_   r   r?   pr   s     r   	<genexpr>z(_Operator.description.<locals>.<genexpr>n   sm       "
 "
  ,6a+C+C $FQ]]3''''s##"
 "
 "
 "
 "
 "
r   )r`   joinra   r   s    `r   r   z_Operator.descriptionm   sG    }!! "
 "
 "
 "
 _"
 "
 "
 
 
 	
r   c                 &    t          | g| j        R  S r'   )r   ra   r(   s    r   r:   z_Operator.__repr__t   s    00000r   N)rI   rJ   rK   rL   rQ   __annotations__r   rX   rO   rP   r   r:   r   r   r   r_   r_   d   s         22MMM%I % % % %

u} 
 
 
 
 
1# 1 1 1 1 1 1r   r_   )	metaclassc                   Z    e Zd ZdZdZdej        defdZdej        de	fdZ
dddefd	Zd
S )r5   z&Logical AND of two or more predicates. and r   r   c                 P    d                     fd| j        D                       S )N or c              3      K   | ]F}t          |t                    rd |                              z  n|                              V  GdS rg   rF   r_   r%   rh   s     r   rj   z+_And.negated_description.<locals>.<genexpr>}   se       
 
 )31i(@(@UFQZZ__$$ajjQToo
 
 
 
 
 
r   rk   ra   r   s    `r   r!   z_And.negated_description|   sA    {{ 
 
 
 
_
 
 
 
 
 	
r   c                 D    t          fd| j        D                       S )Nc              3   .   K   | ]} |          V  d S r'   r   rh   s     r   rj   z _And.__call__.<locals>.<genexpr>   +      33a11S66333333r   )allra   r   s    `r   r+   z_And.__call__   (    33334?333333r   r/   r   c                     t          |t                    rt          g | j        |j        R  S t          g | j        |R  S r'   )rF   r5   ra   r2   s     r   r6   z_And.__and__   sM    eT"" 	=<<5+;<<<<,T_,e,,,,r   N)rI   rJ   rK   rL   r`   rO   rP   rQ   r!   rR   r+   r   r6   r   r   r   r5   r5   x   s        00H
u} 
 
 
 
 
4EM 4d 4 4 4 4-[ -Y - - - - - -r   r5   c                   Z    e Zd ZdZdZdej        defdZdej        de	fdZ
dddefd	Zd
S )r1   z%Logical OR of two or more predicates.rr   r   r   c                 P    d                     fd| j        D                       S )Nrp   c              3      K   | ]F}t          |t                    rd |                              z  n|                              V  GdS rg   rt   rh   s     r   rj   z*_Or.negated_description.<locals>.<genexpr>   se       
 
 )31i(@(@UFQZZ__$$ajjQToo
 
 
 
 
 
r   ru   r   s    `r   r!   z_Or.negated_description   sA    || 
 
 
 
_
 
 
 
 
 	
r   c                 D    t          fd| j        D                       S )Nc              3   .   K   | ]} |          V  d S r'   r   rh   s     r   rj   z_Or.__call__.<locals>.<genexpr>   rx   r   )anyra   r   s    `r   r+   z_Or.__call__   rz   r   r/   r   c                     t          |t                    rt          g | j        |j        R  S t          g | j        |R  S r'   )rF   r1   ra   r2   s     r   r3   z
_Or.__or__   sM    eS!! 	<;;%*:;;;;+DO+U++++r   N)rI   rJ   rK   rL   r`   rO   rP   rQ   r!   rR   r+   r   r3   r   r   r   r1   r1      s        //H
u} 
 
 
 
 
4EM 4d 4 4 4 4,K ,I , , , , , ,r   r1   c                        e Zd ZdZdefdZdej        defdZdej        defdZ	dej        de
fdZd	edef fd
Zd	edef fdZ xZS )IsSetzTrue if the parameter is set.
param_namec                     || _         d S r'   )r   )r   r   s     r   rX   zIsSet.__init__   s    $r   r   r   c                 2    dt          || j                  z  S )Nz	%s is setr   r   r   s     r   r   zIsSet.description   s    0doFFFFr   c                 2    dt          || j                  z  S )Nz%s is not setr   r   s     r   r!   zIsSet.negated_description   s    !4S$/!J!JJJr   c                     t          |j                  }|                    | j                  }t	          || j                  }t          ||          S r'   )r   commandget_param_by_namer   r   r   )r   r   r   paramvalues        r   r+   zIsSet.__call__   sG    ,S[99))$/::#C99!%///r   r/   c                     t          |t                    rt          | j        |j                  S t	                                          |          S r'   )rF   r   AllSetr   superr6   r   r/   rG   s     r   r6   zIsSet.__and__   s@    eU## 	=$/5+;<<<wwu%%%r   c                     t          |t                    rt          | j        |j                  S t	                                          |          S r'   )rF   r   AnySetr   r   r3   r   s     r   r3   zIsSet.__or__   s@    eU## 	=$/5+;<<<ww~~e$$$r   )rI   rJ   rK   rL   rQ   rX   rO   rP   r   r!   rR   r+   r   r6   r3   __classcell__rG   s   @r   r   r      s       ''%3 % % % %Gu} G G G G GKu} K K K K K0EM 0d 0 0 0 0&Y &9 & & & & & &
%I %) % % % % % % % % % %r   r   c                        e Zd ZdZdefdZdej        defdZdej        defdZ	dej        de
fdZd	edef fd
Z xZS )r   zHTrue if all listed parameters are set.

    .. versionadded:: 0.8.0
    param_namesc                 6    |st          d          || _        d S Nz(you must provide at least one param namerd   r   r   r   s     r   rX   zAllSet.__init__   (     	IGHHH&r   r   r   c                     t          || j                  }t          |          dk    r|d          dS t          |          dk    rdnd}t          |           d| dS )	Nr   r    is not setr   bothry   z	 are not  setr	   r   rc   r   r   r   labelspronouns       r   r!   zAllSet.negated_description   sp    !#t'788v;;!Qi,,,,KK1,,&&%''??'????r   c                     t          || j                  }t          |          dk    r|d          dS t          |          dk    rdnd}t          |           d| dS )	Nr   r    is setr   r   ry   z are r   r   r   s       r   r   zAllSet.description   sp    !#t'788v;;!Qi((((KK1,,&&%'';;g;;;;r   c                     t          j                  }|                    | j                  }t	          fd|D                       S )Nc              3   h   K   | ],}t          |j        t          |                             V  -d S r'   r   paramsr
   r?   r   r   s     r   rj   z"AllSet.__call__.<locals>.<genexpr>   P       ( ( &eSZu8M8M-NOO ( ( ( ( ( (r   )r   r   get_params_by_namer   ry   r   r   r   r   s    `  r   r+   zAllSet.__call__   `    ,S[99++D,<== ( ( ( ( &( ( ( ( ( 	(r   r/   c                     t          |t                    rt          g | j        |j        R  S t                                          |          S r'   )rF   r   r   r   r6   r   s     r   r6   zAllSet.__and__   sK    eV$$ 	A@4+@e.?@@@@wwu%%%r   )rI   rJ   rK   rL   rQ   rX   rO   rP   r!   r   rR   r+   r   r6   r   r   s   @r   r   r      s         
'S ' ' ' '
@u} @ @ @ @ @<u} < < < < <(EM (d ( ( ( (&Y &9 & & & & & & & & & &r   r   c                        e Zd ZdZdefdZdej        defdZdej        defdZ	dej        de
fdZd	edef fd
Z xZS )r   zNTrue if any of the listed parameters is set.

    .. versionadded:: 0.8.0
    r   c                 6    |st          d          || _        d S r   r   r   s     r   rX   zAnySet.__init__   r   r   r   r   c                     t          || j                  }t          |          dk    r|d          dS t          |          dk    r
 dj        | S dt	          |           dS )Nr   r   r   r   zneither {} nor {} is setznone of r   r	   r   rc   formatr   r   r   r   s      r   r!   zAnySet.negated_description   ss    !#t'788v;;!Qi,,,,v;;!4-4f==8-//8888r   c                     t          || j                  }t          |          dk    r|d          dS t          |          dk    r
 dj        | S dt	          |           dS )Nr   r   r   r   zeither {} or {} is setzany of r   r   s      r   r   zAnySet.description   ss    !#t'788v;;!Qi((((v;;!2+2F;;7v..7777r   c                     t          j                  }|                    | j                  }t	          fd|D                       S )Nc              3   h   K   | ],}t          |j        t          |                             V  -d S r'   r   r   s     r   rj   z"AnySet.__call__.<locals>.<genexpr>   r   r   )r   r   r   r   r   r   s    `  r   r+   zAnySet.__call__   r   r   r/   c                     t          |t                    rt          g | j        |j        R  S t                                          |          S r'   )rF   r   r   r   r3   r   s     r   r3   zAnySet.__or__  sK    eV$$ 	A@4+@e.?@@@@ww~~e$$$r   )rI   rJ   rK   rL   rQ   rX   rO   rP   r!   r   rR   r+   r   r3   r   r   s   @r   r   r      s         
'S ' ' ' '
9u} 9 9 9 9 98u} 8 8 8 8 8(EM (d ( ( ( (%I %) % % % % % % % % % %r   r   c                   p    e Zd ZdZdedefdZdej        defdZ	dej        defdZ
dej        defd	Zd
S )Equalz-True if the parameter value equals ``value``.r   r   c                 "    || _         || _        d S r'   )r   r   )r   r   r   s      r   rX   zEqual.__init__
  s    $


r   r   r   c                 F    t          || j                  }| d| j         dS )Nz=""r   r   r   r   r   param_labels      r   r   zEqual.description  s,    )#t??......r   c                 F    t          || j                  }| d| j         dS )Nz!="r   r   r   s      r   r!   zEqual.negated_description  s,    )#t??//$*////r   c                 >    t          || j                  | j        k    S r'   )r   r   r   r   s     r   r+   zEqual.__call__  s    "388DJFFr   N)rI   rJ   rK   rL   rQ   r   rX   rO   rP   r   r!   rR   r+   r   r   r   r   r     s        773 s    /u} / / / / /0u} 0 0 0 0 0GEM Gd G G G G G Gr   r   )rL   rM   typingr   r   r   r   rO   _supportr   commonr	   r
   r   r   r   r   _utilr   r   ABCr   r-   ABCMetar_   r5   r1   r   r   r   r   r   r   r   <module>r      ss    


 . . . . . . . . . . . .  0 0 0 0 0 0                     GC{###0
 0
 0
 0
 0
 0
 0
 0
f* * * * *)WQZ * * *,1 1 1 1 1	S[ 1 1 1 1(- - - - -9 - - -&, , , , ,) , , ,&% % % % %I % % %:"& "& "& "& "&Y "& "& "&J$% $% $% $% $%Y $% $% $%NG G G G GI G G G G Gr   