
    kj2                        d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
mZ dededefdZdedefdZd	ee         d
eeef         dee         fdZd	ee         dee         fdZdedefdZdd	ee         dedefdZddee         dedefdZdedefdZd dee         dedefdZdededefdZdedee         dee         fdZde	dedefdZdS )!z@
Useful functions used to implement constraints and predicates.
    )AnyDictIterableListSequence)ArgumentContextOption	Parameterparamvaluereturnc                     |dS t          | t                    r| j        r| j        rt	          |          S | j        dk    s| j        rt          |          dk    S dS )a  Define what it means for a parameter of a specific kind to be "set".

    All cases are obvious besides that of boolean options:
    - (common rule) if the value is ``None``, the parameter is unset;
    - a parameter that takes multiple values is set if at least one argument is provided;
    - a boolean **flag** is set only if True;
    - a boolean option is set if not None, even if it's False.
    NF   r   T)
isinstancer
   is_flagis_bool_flagboolnargsmultiplelen)r   r   s     S/home/agentuser/manim-venv/lib/python3.11/site-packages/cloup/constraints/common.pyparam_value_is_setr   	   sj     }u 
E6	"	" u} 9K E{{			U^	5zzA~4    c                 <    | j         t          d          | j         S )zReturn the name of a parameter casted to ``str``.
    Use this function to avoid typing errors in places where you expect a parameter
    having a name.
    Nz`param.name` is required to be a string in this context.
Hint: `param.name` is None only when `parameter.expose_value` is False, so you are probably using this option incorrectly.)name	TypeErrorr   s    r   get_param_namer      s.    
 zA
 
 	

 :r   paramsvaluesc                      fd| D             S )zFilter ``params``, returning only the parameters that have a value.
    Boolean flags are considered "set" if their value is ``True``.c           	      Z    g | ]'}t          |t          |                             %|(S  )r   r   ).0pr!   s     r   
<listcomp>z1get_params_whose_value_is_set.<locals>.<listcomp>0   sK     A A A!!!VN1,=,=%>??AA A A Ar   r$   )r    r!   s    `r   get_params_whose_value_is_setr(   +   s5    
A A A Av A A A Ar   c                     d | D             S )Nc                      g | ]}|j         	|S r$   )requiredr%   r&   s     r   r'   z'get_required_params.<locals>.<listcomp>5   s    ,,,!,A,,,r   r$   )r    s    r   get_required_paramsr-   4   s    ,,v,,,,r   c                 h    | j         dk    r| j        S t          | j        t                    d         S )Nargument)key)param_type_namehuman_readable_namesortedoptsr   r   s    r   get_param_labelr6   8   s3    
**((%*#&&&r**r   , sepc                 @    |                     d | D                       S )Nc              3   4   K   | ]}t          |          V  d S Nr6   r,   s     r   	<genexpr>z$join_param_labels.<locals>.<genexpr>?   s*      771OA&&777777r   )join)r    r8   s     r   join_param_labelsr?   >   s#    8877777777r   stringsc                     | sdS t          |           dk    r| d         S |                    | d d                   dz   | d         z   S )N r   r   r1   z and )r   r>   )r@   r8   s     r   join_with_andrC   B   sR     r
7||qqz88GCRCL!!G+gbk99r   c                    t          | t                    r| j        S | j        }t	          |          dk    r|d         S d |D             }d |D             }|d         }d                    |dd          |z             }| d| dS )Nr   r   c                 <    g | ]}|                     d           |S z--
startswithr%   opts     r   r'   z format_param.<locals>.<listcomp>T   s)    ===t(<(<====r   c                 <    g | ]}|                     d           |S rF   rG   rI   s     r   r'   z format_param.<locals>.<listcomp>U   s)    BBB#S^^D-A-AB#BBBr   r7   z ())r   r   r3   r5   r   r>   )r   r5   	long_opts
short_optsmain_optaliasess         r   format_paramrQ   J   s    %"" )((:D
4yyA~~Aw >====IBBBBBJ|Hii	!""
233G$$'$$$$r      
param_listindentc                 z    t          t          |           }d|z  d                    fd|D                       S )N rB   c              3   (   K   | ]}|z   d z   V  dS )
Nr$   )r%   lineindentations     r   r=   z$format_param_list.<locals>.<genexpr>^   sA       & & %, & & & & & &r   )maprQ   r>   )rS   rT   linesrZ   s      @r   format_param_listr]   [   sW    j))E,K77 & & & &$& & & & & &r   ctxr   c                 P    t          | j                            |                    S r;   )r6   commandget_param_by_namer^   r   s     r   param_label_by_namerc   b   s     3;88>>???r   param_namesc                 N    | j                             |          }d |D             S )Nc                 ,    g | ]}t          |          S r$   r<   )r%   r   s     r   r'   z$get_param_labels.<locals>.<listcomp>h   s     777uOE""777r   )r`   get_params_by_name)r^   rd   r    s      r   get_param_labelsrh   f   s+    [++K88F777777r   c                 `    	 | j         |         S # t          $ r t          d| d          w xY w)N"z$" is not the name of a CLI parameter)r    KeyErrorrb   s     r   param_value_by_namerl   k   sN    Gz$ G G GE4EEEFFFGs    -N)r7   )rR   )__doc__typingr   r   r   r   r   clickr   r	   r
   r   r   r   strr   r(   r-   r6   r?   rC   rQ   intr]   rc   rh   rl   r$   r   r   <module>rr      s    7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6i      ()     AYA)-c3hA	)_A A A A- 3 -Y - - - -+9 + + + + +8 8hy1 8 8s 8 8 8 8: :8C= :s :c : : : :%	 %c % % % %"& &(9"5 &s &3 & & & &@S @ @ @ @ @ @8# 8HSM 8d3i 8 8 8 8
GW GC GC G G G G G Gr   