o
    ir                  	   @   sh  d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ ejdkr6d dlmZ nd dlmZ d dlmZmZmZmZmZmZmZmZmZ erfd dlmZ d d	lmZ d d
l m!Z! de
d fddZ"e# Z$G dd deZ%G dd deZ&G dd deZ'de(fddZ)eG dd dZ*de+e* de+e de,e+e* e+e f fddZ-dS )    N)CallableIterable)TYPE_CHECKINGAnyLiteralOptionalUnioncast)field)      )Self)	UNSETSentinel
SortHelperfrozenhelp_formatter_converteris_iterableresolve_callablessort_key_converterto_tuple_converter)ArgumentCollection)HelpFormatter)	Parametervaluer   c                 C   s   |d u rd S |j rtdd S )Nz,Group default_parameter cannot have a group.)group
ValueError)instance	attributer    r   T/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/group.py%_group_default_parameter_must_be_none'   s
   r!   c                   @      e Zd ZdS )"DEFAULT_COMMANDS_GROUP_SORT_MARKERN__name__
__module____qualname__r   r   r   r    r#   4       r#   c                   @   r"   )#DEFAULT_ARGUMENTS_GROUP_SORT_MARKERNr$   r   r   r   r    r)   8   r(   r)   c                   @   r"   )$DEFAULT_PARAMETERS_GROUP_SORT_MARKERNr$   r   r   r   r    r*   <   r(   r*   valc                 C   s   | r| S t  S N)object)r+   r   r   r    _group_name_converter@   s   r.   c                   @   sh  e Zd ZU eddedZeed< 	 dZeed< edddd	Z	e
dB ed
< eddeddZeed< eddd ddZdedgef B eedgef  B ed< ededdZed ed< ededdZeded df ed< edefddZedd Zedd Zed,defd!d"Zed-defd$d%Zed.defd'd(Z e		d/dddddd)defd*d+Z!dS )0Group name)defaultalias	converter_namehelpNshowT)r2   r3   kw_only_showsort_key)r2   r3   r4   r8   	_sort_keyc                 C   s   t ttdf t| S )N.)r	   tupler   r   )xr   r   r    <lambda>`   s    zGroup.<lambda>)r2   r4   r8   r   	validator)r2   r?   r8   r   default_parameter)r2   plainr   help_formatterreturnc                 C   s   t | jtu r	dS | jS )Nr0   )typer5   r-   selfr   r   r    r1   n   s   z
Group.namec                 C   s   | j d u r
t| jS | j S r,   )r9   boolr1   rE   r   r   r    r7   r   s   z
Group.showc                 C   s   | j tu rd S | j S r,   )r;   r   rE   r   r   r    r:   v   s   zGroup.sort_key	Argumentsc                 C      | |t dS N)r:   )r)   clsr1   r   r   r    create_default_argumentsz      zGroup.create_default_arguments
Parametersc                 C   rI   rJ   )r*   rK   r   r   r    create_default_parameters~   rN   zGroup.create_default_parametersCommandsc                 C   rI   rJ   )r#   rK   r   r   r    create_default_commands   rN   zGroup.create_default_commandsr7   r:   r?   r@   rB   c          	   	   C   s`   t t}t|rt |}|du rt|f}nt|r!t||f}n||f}| |||||||dS )ay  Create a group with a globally incrementing :attr:`~Group.sort_key`.

        Used to create a group that will be displayed **after** a previously instantiated :meth:`Group.create_ordered` group on the help-page.

        Parameters
        ----------
        name: str
            Group name used for the help-page and for group-referenced-by-string.
            This is a title, so the first character should be capitalized.
            If a name is not specified, it will not be shown on the help-page.
        help: str
            Additional documentation shown on the help-page.
            This will be displayed inside the group's panel, above the parameters/commands.
        show: bool | None
            Show this group on the help-page.
            Defaults to :obj:`None`, which will only show the group if a ``name`` is provided.
        sort_key: Any
            If provided, **prepended** to the globally incremented counter value (i.e. has priority during sorting).

        validator: None | Callable[[ArgumentCollection], Any] | Iterable[Callable[[ArgumentCollection], Any]]
            Group validator to collectively apply.
        default_parameter: cyclopts.Parameter | None
            Default parameter for elements within the group.
        help_formatter: cyclopts.help.protocols.HelpFormatter | None
            Custom help formatter for this group's help display.
        NrS   )next_sort_key_counterinspectisgeneratorr   r   r<   )	rL   r1   r6   r7   r:   r?   r@   rB   countr   r   r    create_ordered   s"   &

zGroup.create_ordered)rH   )rO   )rQ   )r0   r0   )"r%   r&   r'   r
   r.   r5   str__annotations__r6   r9   rG   r   r;   r   r?   r   r   r!   r@   r   r   rB   r   r   propertyr1   r7   r:   classmethodr   rM   rP   rR   rY   r   r   r   r    r/   D   s`   
 
.


r/   groups
attributesrC   c                 C   sj   t | t |ks
J | s| |fS tdd t| |ddD }tdd |D ddi\}}t|t|fS )a  Sort groups for the help-page.

    Note, much logic is similar to here and ``HelpPanel.sort``, so any changes here should probably be reflected over there as well.

    Parameters
    ----------
    groups: list[Group]
        List of groups to sort by their ``sort_key``.
    attributes: list[Any]
        A list of equal length to ``groups``.
        Remains consistent with ``groups`` via argsort.
    c                 S   s*   g | ]\}}t t|j||j||fqS r   )r   r   r;   r1   ).0r   r   r   r   r    
<listcomp>   s    zsort_groups.<locals>.<listcomp>F)strictc                 S   s   g | ]}|j qS r   )r   )r`   r=   r   r   r    ra      s    rb   )lenr   sortziplist)r^   r_   sorted_entries
out_groupsout_attributesr   r   r    sort_groups   s   rj   ).rV   	itertoolssyscollections.abcr   r   typingr   r   r   r   r   r	   attrsr
   version_infor   typing_extensionscyclopts.utilsr   r   r   r   r   r   r   r   r   cyclopts.argumentr   cyclopts.help.protocolsr   cyclopts.parameterr   r!   rX   rU   r#   r)   r*   rZ   r.   r/   rf   r<   rj   r   r   r   r    <module>   s.     	
,	2{