
    f3ir              	          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\  rd 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rd dlmZ d d	lmZ d d
l m!Z! de
d   fdZ" ejF                         Z$ G d de      Z% G d de      Z& G d de      Z'de(fdZ)e G d d             Z*de+e*   de+e   de,e+e*   e+e   f   fdZ-y)    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                 8    |y |j                   rt        d      y )Nz,Group default_parameter cannot have a group.)group
ValueError)instance	attributer   s      X/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/cyclopts/group.py%_group_default_parameter_must_be_noner"   '   s"    }{{GHH     c                       e Zd Zy)"DEFAULT_COMMANDS_GROUP_SORT_MARKERN__name__
__module____qualname__ r#   r!   r%   r%   4       r#   r%   c                       e Zd Zy)#DEFAULT_ARGUMENTS_GROUP_SORT_MARKERNr&   r*   r#   r!   r-   r-   8   r+   r#   r-   c                       e Zd Zy)$DEFAULT_PARAMETERS_GROUP_SORT_MARKERNr&   r*   r#   r!   r/   r/   <   r+   r#   r/   valc                     | r| S t               S N)object)r0   s    r!   _group_name_converterr4   @   s    3#68#r#   c                      e Zd ZU  edde      Zeed<   	 dZeed<    eddd	      Z	e
dz  ed
<    edded      Zeed<    edd d      Zdedgef   z  eedgef      z  ed<    eded      Zed   ed<    eded      Zeded   df   ed<   edefd       Zed        Zed        Zed!defd       Zed"defd       Zed#defd       Z e	 	 d$dddddddefd        Z!y)%Group name)defaultalias	converter_namehelpNshowT)r9   r:   kw_only_showsort_key)r9   r:   r;   r?   	_sort_keyc                 F    t        t        t        df   t        |             S )N.)r
   tupler   r   )xs    r!   <lambda>zGroup.<lambda>`   s    Dx}!57I!7LM r#   )r9   r;   r?   r   	validator)r9   rG   r?   r   default_parameter)r9   plainr   help_formatterreturnc                 T    t        | j                        t        u rdS | j                  S )Nr7   )typer<   r3   selfs    r!   r8   z
Group.namen   s!    $**%/r?TZZ?r#   c                 \    | j                   t        | j                        S | j                   S r2   )r@   boolr8   rN   s    r!   r>   z
Group.showr   s"    "&**"4tDIID$**Dr#   c                 B    | j                   t        u rd S | j                   S r2   )rB   r   rN   s    r!   rA   zGroup.sort_keyv   s    ~~.tBDNNBr#   c                      | |t               S N)rA   )r-   clsr8   s     r!   create_default_argumentszGroup.create_default_argumentsz   s    4"EFFr#   c                      | |t               S rT   )r/   rU   s     r!   create_default_parameterszGroup.create_default_parameters~   s    4"FGGr#   c                      | |t               S rT   )r%   rU   s     r!   create_default_commandszGroup.create_default_commands   s    4"DEEr#   r>   rA   rG   rH   rJ   c          	          t        t              }t        j                  |      rt        |      }|	t        |f}nt        |      rt        |      |f}n||f} | |||||||      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.
        r\   )next_sort_key_counterinspectisgeneratorr   r   rD   )	rV   r8   r=   r>   rA   rG   rH   rJ   counts	            r!   create_orderedzGroup.create_ordered   sx    L &'x(H~Hu~H"h/H %(H/)
 	
r#   )	Arguments)
Parameters)Commands)r7   r7   )"r'   r(   r)   r   r4   r<   str__annotations__r=   r@   rQ   r   rB   r   rG   r   r   r"   rH   r   r   rJ   r	   r   propertyr8   r>   rA   classmethodr   rW   rY   r[   rc   r*   r#   r!   r6   r6   D   s   r;PQE3Q D#N t64HE4$;H$	Is  qvMqIth 45s:;;hxQePfhkPkGl>mm  0570x,  QV 8$QNE$(: ;_LM  @c @ @ E E C C G4 G G HT H H F F F  6

 6
 
6
 6
r#   r6   groups
attributesrK   c                    t        |       t        |      k(  sJ | s| |fS t        j                  t        | |d      D cg c]2  \  }}t        t	        |j
                  |      |j                  ||f      4 c}}      }t        |D cg c]  }|j                   c}ddi\  }}t        |      t        |      fS c c}}w c c}w )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.
    F)strictrn   )	lenr   sortzipr   rB   r8   r   list)rk   rl   r   r    sorted_entriesrE   
out_groupsout_attributess           r!   sort_groupsrv      s     v;#j/)))z!!__ %(
5$I	
 y (%@%**uV_N`a	
N "%&G1qww&G!VPU!VJ
T.111	

 'Hs    7B;
C).r`   	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"   rb   r_   r%   r-   r/   rg   r4   r6   rr   rD   rv   r*   r#   r!   <module>r      s      
 .  w&
 
 
 45,Ih{F[ I $IOO% 	 		( 		8 	$s $ x
 x
 x
v2U 2c 2uT%[RVWZR[E[?\ 2r#   