
    k7ir              	          S SK r S SKrS SKrS SKJrJr  S SKJrJrJ	r	J
r
JrJr  S SKJr  \R                  S:  a  S SKJr  OS SKJr  S SKJrJrJrJrJrJrJrJrJr  \(       a  S SKJr  S S	KJr  S S
K J!r!  S\
S   4S jr"\RF                  " 5       r$ " S S\5      r% " S S\5      r& " S S\5      r'S\(4S jr)\ " S S5      5       r*S\+\*   S\+\   S\,\+\*   \+\   4   4S jr-g)    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                 D    Uc  g UR                   (       a  [        S5      eg )Nz,Group default_parameter cannot have a group.)group
ValueError)instance	attributer   s      H/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/group.py%_group_default_parameter_must_be_noner"   '   s"    }{{GHH     c                       \ rS rSrSrg)"DEFAULT_COMMANDS_GROUP_SORT_MARKER4    N__name__
__module____qualname____firstlineno____static_attributes__r'   r#   r!   r%   r%   4       r#   r%   c                       \ rS rSrSrg)#DEFAULT_ARGUMENTS_GROUP_SORT_MARKER8   r'   Nr(   r'   r#   r!   r0   r0   8   r.   r#   r0   c                       \ rS rSrSrg)$DEFAULT_PARAMETERS_GROUP_SORT_MARKER<   r'   Nr(   r'   r#   r!   r3   r3   <   r.   r#   r3   valc                 (    U (       a  U $ [        5       $ N)object)r5   s    r!   _group_name_converterr9   @   s    3#68#r#   c                      \ rS rSr% \" SS\S9r\\S'    Sr	\\S'   \" SSS	S
9r
\S-  \S'   \" SS\S	S9r\\S'   \" SS S	S9rS\S/\4   -  \\S/\4      -  \S'   \" S\S	S9r\S   \S'   \" S\S	S9r\S\S   S4   \S'   \S\4S j5       r\S 5       r\S 5       r\S#S\4S jj5       r\S$S\4S jj5       r \S%S\4S jj5       r!\  S&SSSSSS .S\4S! jjj5       r"S"r#g)'GroupD    name)defaultalias	converter_namehelpNshowT)r?   r@   kw_only_showsort_key)r?   r@   rA   rE   	_sort_keyc                 F    [        [        [        S4   [        U 5      5      $ )N.)r
   tupler   r   )xs    r!   <lambda>Group.<lambda>`   s    Dx}!57I!7LMr#   )r?   rA   rE   r   	validator)r?   rN   rE   r   default_parameter)r?   plainr   help_formatterreturnc                 V    [        U R                  5      [        L a  S$ U R                  $ )Nr=   )typerB   r8   selfs    r!   r>   
Group.namen   s!    $**%/r?TZZ?r#   c                 ^    U R                   c  [        U R                  5      $ U R                   $ r7   )rF   boolr>   rU   s    r!   rD   
Group.showr   s"    "&**"4tDIID$**Dr#   c                 D    U R                   [        L a  S $ U R                   $ r7   )rH   r   rU   s    r!   rG   Group.sort_keyv   s    ~~.tBDNNBr#   c                     U " U[         S9$ N)rG   )r0   clsr>   s     r!   create_default_argumentsGroup.create_default_argumentsz   s    4"EFFr#   c                     U " U[         S9$ r^   )r3   r_   s     r!   create_default_parametersGroup.create_default_parameters~   s    4"FGGr#   c                     U " U[         S9$ r^   )r%   r_   s     r!   create_default_commandsGroup.create_default_commands   s    4"DEEr#   rD   rG   rN   rO   rQ   c          
          [        [        5      n[        R                  " U5      (       a  [        U5      nUc	  [        U4nO![        U5      (       a  [        U5      U4nOXH4nU " UUUUUUUS9$ )a  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.
ri   )next_sort_key_counterinspectisgeneratorr   r   rJ   )	r`   r>   rC   rD   rG   rN   rO   rQ   counts	            r!   create_orderedGroup.create_ordered   s|    L &'x((H~Hu~H""h/H (H/)
 	
r#   r'   )	Arguments)
Parameters)Commands)r=   r=   )$r)   r*   r+   r,   r   r9   rB   str__annotations__rC   rF   rY   r   rH   r   rN   r   r   r"   rO   r   r   rQ   r	   r   propertyr>   rD   rG   classmethodr   ra   rd   rg   rp   r-   r'   r#   r!   r;   r;   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#   r;   groups
attributesrR   c                    [        U 5      [        U5      :X  d   eU (       d  X4$ [        R                  " [        XSS9 VVs/ s H1  u  p#[        [	        UR
                  U5      UR                  X#45      PM3     snn5      n[        U Vs/ s H  oUR                  PM     snSS06u  pg[        U5      [        U5      4$ s  snnf s  snf )ar  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)strictr|   )	lenr   sortzipr   rH   r>   r   list)ry   rz   r   r    sorted_entriesrK   
out_groupsout_attributess           r!   sort_groupsr      s     v;#j/)))!!__ %(5$I	
$I  (%@%**uN`a$I	
N "%&G1ww&G!VPU!VJ
T.111	

 'Hs   8B?
C).rm   	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"   ro   rl   r%   r0   r3   ru   r9   r;   r   rJ   r   r'   r#   r!   <module>r      s      
 .  w&
 
 
 45,Ih{F[ I OO% 	 		( 		8 	$s $ x
 x
 x
v2U 2c 2uT%[RVWZR[E[?\ 2r#   