o
    i8                     @   s  d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z# erxd dl$m%Z% d dl&m'Z' d dlm(Z( eddde)de)fddZ*dd Z+e!ddG dd dZ,eG dd dZ-dd  Z.d!d"d#e/e0e0f fd$d%Z1d!d"d#e/e0e0f fd&d'Z2d(d)d*ee) fd+d,Z3d-ee) d#e)fd.d/Z4d(d)de)d#eeB fd0d1Z5d2d3d!d"de)d#e-fd4d5Z6d6ede)d#e0e, fd7d8Z7dS )9    N)IterableSequence)Enum)	lru_cache)Path)TYPE_CHECKINGAnyLiteral)
convertersdefineevolvefield)resolve_annotated)_get_root_module_name)Group)
InlineText)SILENT
SilentRich)
SortHelperfrozenis_class_and_subclassresolve_callables)RenderableType)ArgumentCollection)App   )maxsizedocformatc                 C   sn   ddl }t| }|dd}|d dd}t|dkr |}n|d |d  }||}|jr5|js5J |S )zUAddon to :func:`docstring_parser.parse` that supports multi-line `short_description`.r   Nz

   
 )	docstring_parserinspectcleandocsplitreplacelenparselong_descriptionshort_description)r   r   r"   cleaned_doc%short_description_and_maybe_remaindershortres r/   X/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/help/help.pydocstring_parse   s   

r1   c                  C   s   ddl m}  |  S )Nr   Text)	rich.textr3   r2   r/   r/   r0   _text_factory6   s   r5   T)kw_onlyc                   @   s   e Zd ZU dZdZeedf ed< 	 dZeedf ed< 	 dZ	e
ed< 	 dZeed	< 	 dZe
ed
< 	 dZe
dB ed< 	 dZeedf dB ed< 	 dZeedf dB ed< 	 dZedB ed< 	 dd ZdS )	HelpEntryz$Container for help table entry data.r/   .namesshortsNdescriptionFrequiredsort_keytypechoicesenv_vardefaultc                 K      t | fi |S Nr   selfkwargsr/   r/   r0   copy^      zHelpEntry.copy)__name__
__module____qualname____doc__r8   tuplestr__annotations__r9   r:   r   r;   boolr<   r=   r>   r?   r@   rG   r/   r/   r/   r0   r7   <   s*   
 r7   c                   @   sx   e Zd ZU dZed ed< 	 ded< 	 edeje	ddZ
eed	< 	 eedZee ed
< 	 dd Zdd Zdd ZdS )	HelpPanelz*Data container for help panel information.)command	parameterr   r   titleN)factory)r@   	converterr:   entriesc                 K   rA   rB   rC   rD   r/   r/   r0   rG   x   rH   zHelpPanel.copyc                 C   sJ   t  g }}| jD ]}|j|jf}||vr|| || q	|| _d S rB   )setrW   r8   r9   addappend)rE   seenoutitemhashabler/   r/   r0   _remove_duplicates{   s   



zHelpPanel._remove_duplicatesc                 C   sB   | j sdS | jdkrtdd | j D }dd |D | _ dS t)zSort entries in-place.NrR   c                 S   sD   g | ]}t |j|jr|jd  dnd|jr|jd  ndf|qS )r   -F )r   r<   r8   
startswith).0entryr/   r/   r0   
<listcomp>   s    	z#HelpPanel._sort.<locals>.<listcomp>c                 S   s   g | ]}|j qS r/   )valuerc   xr/   r/   r0   re      s    )rW   r   r   sortNotImplementedError)rE   sorted_sort_helperr/   r/   r0   _sort   s   
	zHelpPanel._sort)rI   rJ   rK   rL   r	   rO   r   r
   default_if_noner5   r:   r   listrW   r7   rG   r_   rl   r/   r/   r/   r0   rQ   b   s    
 
	rQ   c                 C   s   |  d o
|  dS )Nz--r`   )rb   )sr/   r/   r0   	_is_short   s   rp   argument_collectionr   returnc                 C   sf   g g }}| D ]'}|j sq|jj|jjfv r|| q|jjr.|jr)|| q|| q||fS )a  Categorize keyword arguments by requirement status for usage string formatting.

    Parameters
    ----------
    argument_collection : ArgumentCollection
        Collection of arguments to categorize.

    Returns
    -------
    tuple[list, list]
        (required_keyword, optional_keyword) where:
        - required_keyword: Required keyword-only parameters
        - optional_keyword: Optional keyword-only parameters and VAR_KEYWORD
    )show
field_infokindVAR_KEYWORDrZ   is_keyword_onlyr;   rq   r;   optionalargumentr/   r/   r0   _categorize_keyword_arguments   s   

r{   c                 C   sv   g g }}| D ]/}|j sq|jj|jjkr$|jr|| q|| q|jjr6|jr1|| q|| q||fS )a  Categorize positional arguments by requirement status for usage string formatting.

    Parameters
    ----------
    argument_collection : ArgumentCollection
        Collection of arguments to categorize.

    Returns
    -------
    tuple[list, list]
        (required_positional, optional_positional) where:
        - required_positional: Required positional and VAR_POSITIONAL parameters
        - optional_positional: Optional positional and VAR_POSITIONAL parameters
    )rs   rt   ru   VAR_POSITIONALr;   rZ   is_positionalrx   r/   r/   r0    _categorize_positional_arguments   s   

r~   appr   command_chainc                    s  ddl m} ddlm} g }|d |s- jr- js-ttj	d j
}|dkr*t }|}n j
d }|| || |D ]} |  q>t fdd jD rV|d  jrΈ jd	d
}t|\}	}
t|\}}|	D ]}|j
}||j }|| d|  qm|
r|d |D ](}|jj|jjkr|j
d }|| d q|j
d }|| q|rtdd |D }|r|d n|d |d|d ddS )Nr   r2   )get_hint_namezUsage:z__main__.pyc                 3   s    | ]} | j V  qd S rB   rs   rg   r   r/   r0   	<genexpr>   s    zformat_usage.<locals>.<genexpr>COMMANDF)parse_docstringr!   z	[OPTIONS]r`   z...c                 s   s     | ]}|j j|j jkV  qd S rB   )rt   ru   r|   )rc   argr/   r/   r0   r     s    
z	[ARGS...]z[ARGS]r    bold)style)r4   r3   cyclopts.annotationsr   rZ   default_command_namer   sysargvnamer   extendany_registered_commandsassemble_argument_collectionr{   r~   hintupperrt   ru   r|   lstripjoin)r   r   r3   r   usager   app_namerR   rq   required_keyword_paramsoptional_keyword_paramsrequired_positional_argsoptional_positional_argsrz   
param_name	type_namearg_namehas_var_positionalr/   r   r0   format_usage   sP   







r   stringsc                 C   sV   | sdS | d g}| dd D ]}|d  dr|| q|d|  qd|S )zJJoins strings with a space, unless the previous string ended in a newline.ra   r   r   Nr    r!   )endswithrZ   r   )r   resultro   r/   r/   r0   _smart_join$  s   

r   c                 C   sl   | j }|stS t||}g }|jr||jd  |jr,|jr$|d ||jd  tjt||ddS )Nr    Tr   force_empty_end)	helpr   r1   r*   rZ   r)   r   from_formatr   )r   r   raw_doc_stringparsed
componentsr/   r/   r0   
format_doc3  s   

r   groupr   c                    s  ddl m} d| j| jrtj| j|ddn| d}tdi |} fdd}g g }}|jdd	D ]}	|	jj	s:J g  t
|	j}
t }g }|
D ]}|	j	|}||vr^|| || qH|}
|	jd urz|
d d
 }||
d krz|g|
}
g g }}|
D ]}t|r|| q|| qtj|	jj|d}|	 }d }|	jjr|	jjrt|	jj}d }|	jrt|	jtr|	j	|	jjj}nt|	jj}t|	jr|	|	jj}tt||t||	j t!|	jj"|||d}|	jj#r|| q2|| q2|j$%| |j$%| |S )Nr   r2   rS   Tr   )r   rT   r:   c                    s0    rd|  } |r  | |f d S   |  d S )Nr!   )rZ   )textr   help_componentsr/   r0   help_appendW  s
   z0create_parameter_help_panel.<locals>.help_appendr   r`   r   )r8   r:   r9   r;   r=   r>   r?   r@   r/   )&r4   r3   r   r   r   r   rQ   	filter_byrS   name_transformrn   r8   rX   rY   rZ   indexr   r   rp   get_choicesshow_env_varr?   rM   show_defaultr   r   r   rt   r@   rN   callabler7   r;   r   
annotationr}   rW   r   )r   rq   r   r3   rF   
help_panelr   entries_positional
entries_kwrz   optionsseen_transformedunique_optionsoptiontransformedr   short_optionslong_optionshelp_descriptionr>   r?   r@   rd   r/   r   r0   create_parameter_help_panelF  sx   








r   apps_with_namesc           
      C   s   g }| D ]G}|j }|j}|jsqg g }}|D ]}t|r"||n|| qtt|t|tjt	|j
|j|dt|j|d}	|	|vrK||	 q|S )a,  Format command entries for help display.

    Parameters
    ----------
    apps_with_names : Iterable[RegisteredCommand]
        Iterable of RegisteredCommand tuples.
    format : str
        Help text format.

    Returns
    -------
    list[HelpEntry]
        List of formatted help entries.
    r   )r8   r9   r:   r<   )r8   r   rs   rp   rZ   r7   rM   r   r   r1   r   r*   r   r<   )
r   r   rW   registered_commandr8   r   short_names
long_namesr   rd   r/   r/   r0   format_command_entries  s(   


r   )8r#   r   collections.abcr   r   enumr   	functoolsr   pathlibr   typingr   r   r	   attrsr
   r   r   r   r   r   cyclopts.corer   cyclopts.groupr   cyclopts.help.inline_textr   cyclopts.help.silentr   r   cyclopts.utilsr   r   r   r   rich.consoler   cyclopts.argumentr   r   rN   r1   r5   r7   rQ   rp   rM   rn   r{   r~   r   r   r   r   r   r/   r/   r/   r0   <module>   sZ    %9 #
A
e