
    KiC                     $   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rd dl$m%Z% d dl&m'Z' d dlm(Z(  ed      de)dz  de)fd       Z*d Z+ e!d       G d d             Z,e G d d             Z-d Z.ddd e/e0e0f   fd!Z1ddd e/e0e0f   fd"Z2d#d$d%ee)   fd&Z3d'ee)   d e)fd(Z4d#d$de)d eez  fd)Z5d*d+ddde)d e-fd,Z6d-ede)d e0e,   fd.Z7y)/    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                 :   ddl }| s|j                  d      S t        j                  |       }|j	                  dd      }|d   j                  dd      }t        |      dk(  r|}n|dz   |d   z   }|j                  |      }|j                  r|j                  sJ |S )zUAddon to :func:`docstring_parser.parse` that supports multi-line `short_description`.r   N z

   
 )	docstring_parserparseinspectcleandocsplitreplacelenlong_descriptionshort_description)r   r   r%   cleaned_doc%short_description_and_maybe_remaindershortress          ^/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/cyclopts/help/help.pydocstring_parser3      s     %%b))""3'K,7,=,=fa,H)
 2!4<<T3GE
01Q6fn'LQ'OO

 
 
-C ##s'<'<<<J    c                      ddl m}   |        S )Nr   Text)	rich.textr7   r6   s    r2   _text_factoryr9   9   s    6Mr4   T)kw_onlyc                   |   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f   ed<   	 dZ
eedf   ed<   	 edeedf   fd	       Zedeedf   fd
       Zedeedf   fd       ZdZeed<   	 dZeed<   	 dZeed<   	 dZedz  ed<   	 dZeedf   dz  ed<   	 dZeedf   dz  ed<   	 dZedz  ed<   	 d Zy)	HelpEntryz$Container for help table entry data. .positive_namespositive_shortsnegative_namesnegative_shortsreturnc                 4    | j                   | j                  z   S )zHAll long option names (positive + negative). For backward compatibility.)r>   r@   selfs    r2   nameszHelpEntry.namesO   s     ""T%8%888r4   c                 4    | j                   | j                  z   S )zIAll short option names (positive + negative). For backward compatibility.)r?   rA   rD   s    r2   shortszHelpEntry.shortsT   s     ##d&:&:::r4   c                 h    | j                   | j                  z   | j                  z   | j                  z   S )z_All options in display order: positive longs, positive shorts, negative longs, negative shorts.)r>   r?   r@   rA   rD   s    r2   all_optionszHelpEntry.all_optionsY   s2     ""T%9%99D<O<OORVRfRfffr4   NdescriptionFrequiredsort_keytypechoicesenv_vardefaultc                     t        | fi |S Nr   rE   kwargss     r2   copyzHelpEntry.copyv       d%f%%r4   )__name__
__module____qualname____doc__r>   tuplestr__annotations__r?   r@   rA   propertyrF   rH   rJ   rK   r	   rL   boolrM   rN   rO   rP   rQ   rW   r=   r4   r2   r<   r<   ?   sK   .&(NE#s(O(F')OU38_)9&(NE#s(O(L')OU38_)@9uS#X 9 9 ;c3h ; ; gU38_ g g K
 Hd5Hc2D#*+&*GU38_t#*/&*GU38_t#*AGS4ZU&r4   r<   c                       e Zd ZU dZed   ed<   	 ded<   	  ed ej                  e	            Z
eed	<   	  ee      Zee   ed
<   	 d Zd Zd Zy)	HelpPanelz*Data container for help panel information.)command	parameterr   r   titleN)factory)rQ   	converterrK   entriesc                     t        | fi |S rS   rT   rU   s     r2   rW   zHelpPanel.copy   rX   r4   c                     t               g }}| j                  D ]A  }|j                  |j                  f}||vs |j	                  |       |j                  |       C || _        y rS   )setri   rF   rH   addappend)rE   seenoutitemhashables        r2   _remove_duplicateszHelpPanel._remove_duplicates   s[    E2cLL 	!D

DKK0Ht#"

4 		!
 r4   c                    | j                   sy| j                  dk(  rt        j                  | j                   D cg c]`  }t        |j                  |j
                  r|j
                  d   j                  d      nd|j
                  r|j
                  d   ndf|      b c}      }|D cg c]  }|j                   c}| _         yt        c c}w c c}w )zSort entries in-place.Nrd   r   -Fr!   )	ri   r   r   sortrM   rF   
startswithvalueNotImplementedError)rE   entrysorted_sort_helperxs       r2   _sortzHelpPanel._sort   s    ||;;)#!+ "&
  >CkkEKKN55c:u.3kkEKKNr 
" .@@AGG@DL%%
 As   A%C*C)rY   rZ   r[   r\   r
   r_   r   r   default_if_noner9   rK   r	   listri   r<   rW   rs   r}   r=   r4   r2   rc   rc   z   sm    4*++@,*,,]CK 
  %T2GT)_2B&&r4   rc   c                 L    | j                  d       xr | j                  d      S )N--ru   rw   )ss    r2   	_is_shortr      s"    ||D!!7all3&77r4   argument_collectionr   rB   c                 D   g g }}| D ]  }|j                   s|j                  j                  |j                  j                  fv r|j	                  |       O|j                  j
                  sf|j                  r|j	                  |       |j	                  |        ||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_KEYWORDrn   is_keyword_onlyrL   r   rL   optionalarguments       r2   _categorize_keyword_argumentsr      s     RhH' 
*}}##(;(;(G(G'IIOOH%  00  ))
* Xr4   c                    g g }}| D ]  }|j                   s|j                  j                  |j                  j                  k(  r0|j                  r|j                  |       [|j                  |       m|j                  j                  s|j                  r|j                  |       |j                  |        ||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
    )r   r   r   VAR_POSITIONALrL   rn   is_positionalr   s       r2    _categorize_positional_argumentsr      s     RhH' *}}##x':':'I'II  ))  ..  ))* Xr4   appr   command_chainc                     ddl m} ddlm} g }|sP j                  rD j
                  s8t        t        j                  d         j                  }|dk(  r
t               }|}n j                  d   }|j                  |       |j                  |       |D ]  } |    	 h  j                   j                  t         fd D              r|j                  d        j                  ro j!                  d      }t#        |      \  }	}
t%        |      \  }}|	D ]D  }|j                  } ||j&                        j)                         }|j                  | d	|        F |
r|j                  d
       |D ]  }|j*                  j,                  |j*                  j.                  k(  r>|j                  j1                  d      j)                         }|j                  | d       n|j                  j1                  d      j)                         }|j                  |        |r7t        d |D              }|r|j                  d       n|j                  d        |d	j3                  |      dz   d      S )Nr   r6   )get_hint_namez__main__.pyc              3   d   K   | ]'  }|vxr j                  |d       j                   ) yw)T)recurse_metaN)	_get_itemr   ).0r|   r   help_version_flagss     r2   	<genexpr>zformat_usage.<locals>.<genexpr>  s3     
aXY1&&S3===+N+S+SS
as   -0COMMANDF)parse_docstringr$   z	[OPTIONS]ru   z...c              3   v   K   | ]1  }|j                   j                  |j                   j                  k(   3 y wrS   )r   r   r   )r   args     r2   r   zformat_usage.<locals>.<genexpr>2  s.      %IL##s~~'D'DD%s   79z	[ARGS...]z[ARGS]r#   bold)style)r8   r7   cyclopts.annotationsr   default_command_namer   sysargvnamer   rn   extend
help_flagsversion_flagsanyassemble_argument_collectionr   r   hintupperr   r   r   lstripjoin)r   r   r7   r   usager   app_namerd   r   required_keyword_paramsoptional_keyword_paramsrequired_positional_argsoptional_positional_argsr   
param_name	type_namearg_namehas_var_positionalr   s   `                 @r2   format_usager      s8    2E S00CHHQK %%= (*D88A;	LL	LL  'l ?3>>>C,=,=>

a]`
aaY
!>>u>U;XYl;m8!8=]^q=r: ":/ 	6H!J%hmm4::<ILLJ<q45	6
 #LL%0 	'H""''8+>+>+M+MM#==//4::<z-.#==//4::<X&	' $!$ %Ph% " "[)X&$&f55r4   stringsc                     | sy| d   g}| dd D ]<  }|d   j                  d      r|j                  |       )|j                  d|z          > dj                  |      S )zJJoins strings with a space, unless the previous string ended in a newline.r!   r   r"   Nr#   r$   )endswithrn   r   )r   resultr   s      r2   _smart_joinr   =  sf    aj\FQR[ #":t$MM!MM#'"	# 776?r4   c                 j   | j                   }|st        S t        ||      }g }|j                  r|j	                  |j                  dz          |j
                  r;|j                  r|j	                  d       |j	                  |j
                  dz          t        j                  t        |      |d      S )Nr#   Tr   force_empty_end)	helpr   r3   r-   rn   r,   r   from_formatr   )r   r   raw_doc_stringparsed
componentss        r2   
format_docr   L  s    XXN^V4FJ&22T9:##d#&11D89!!+j"9&Z^__r4   groupr   c                 	   ddl m} d| j                  | j                  r"t	        j
                  | j                  |d      n |       d}t        di |}fd}g g }}|j                  d      D ]7  }	|	j                  j                  sJ g t        |	j                        }
t               }|
D cg c]  }||vs|j                  |      r| }
}|	j                  Bt        d	 |
D        |
d         }|j!                  d
      j#                         }||
d   k7  r|g|
}
t        |	j$                        }|
D cg c]  }||vst'        |      r| }}|
D cg c]  }||vst'        |      s| }}|
D cg c]  }||v st'        |      r| }}|
D cg c]  }||v st'        |      s| }}t	        j
                  |	j                  j                  |      }|	j)                         }d }|	j                  j*                  r5|	j                  j,                  rt/        |	j                  j,                        }d }|	j0                  r|	j2                  j4                  }t7        |	j8                  t:              r'|	j                  j                  |j                        }nDt=        |t        t.        t        t>        f      rg }|D ]  }t=        |t:              r5|jA                  |	j                  j                  |j                               Ht=        |tB              r|jA                  d| d       n|jA                  tC        |              t=        |t.              r2tE        |      dk(  rd|d   z   dz   }nkddjG                  |      z   dz   }nSt=        |t              rddjG                  |      z   dz   }n+ddjG                  |      z   dz   }n|dk(  rd}ntC        |      }tI        |	j0                        r|	j1                  |      }tK        t/        |      t/        |      t/        |      t/        |      ||	jL                  tO        |	j2                  jP                        |||
      }|	j2                  jR                  r|jA                  |       '|jA                  |       : |jT                  jW                  |       |jT                  jW                  |       |S c c}w c c}w c c}w c c}w c c}w )Nr   r6   re   Tr   )r   rf   rK   c                 b    rd| z   } |rj                  | |f       y j                  |        y )Nr$   )rn   )textr   help_componentss     r2   help_appendz0create_parameter_help_panel.<locals>.help_appendp  s2    :D""D%=1""4(r4   )r   c              3   D   K   | ]  }|j                  d       s|  yw)r   Nr   )r   os     r2   r   z.create_parameter_help_panel.<locals>.<genexpr>  s      Jqq||D7I Js     ru   r   'r"   (z,)z, )[]{}r!   z"")
r>   r?   r@   rA   rK   rL   rN   rO   rP   rQ   r=   ),r8   r7   r   r   r   r   rc   	filter_byre   name_transformr   rF   rl   rm   indexnextr   r   	negativesr   get_choicesshow_env_varrP   r]   show_defaultr   rQ   r   r   r   
isinstance	frozensetrn   r^   r+   r   callabler<   rL   r   
annotationr   ri   r   )r   r   r   r7   rV   
help_panelr   entries_positional
entries_kwr   optionsro   r|   label_sourcer   r   r   r>   r?   r@   rA   help_descriptionrO   rP   rQ   default_valformatted_itemsrq   rz   r   s                                @r2   create_parameter_help_panelr   _  sx   
  :: "--ejjY]^VF $V$J) &(
'11t1< Z%!!0000x~~&
 %K$txx{1KK >>% JG JGTUJWL#**3/557H71:%#.g. **+	%,X0B9UV<!XX&-U)1C	RS1UU%,TYyQR|!TT&-QiIaL1QQ%11(2D2D2I2IRXY &&( **x/A/A/I/IH..667G   "--55K$X]]D9",,;;K<L<LMK$sI)FG"$' :D!$-'..x/A/A/P/PQUQZQZ/[\#D#.'..4&{;'..s4y9: k51?+q0"%(:":T"A"%		/(B"BS"HT2!DIIo$>>DG!DIIo$>>DG"k*--."//<  0!/2 0!/2(&&"8#6#6#A#AB
 ,,%%e,e$uZ%x 01j)k L YUTQsZ   2	S$<S$S$;	S)S)S)	S.%S.1S.;	S3S3S3	S8%S81S8apps_with_namesc                    g }| D ]  }|j                   }|j                  s|j                  }g g }}|D ]/  }t        |      r|j	                  |      n|j	                  |       1 t        |j                  |      }	t        t        |      t        |      t        j                  t        |j                  |      j                  |      |	      }
|
|vs|j	                  |
        |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   )r>   r?   rK   rM   )r   r   rF   r   rn   r   rM   r<   r]   r   r   r3   r   r-   )r   r   ri   registered_commandr   rF   short_names
long_namesr   rM   rz   s              r2   format_command_entriesr     s     G- " $$xx"(("$bZ 	UD(1$Kt$Z=N=Nt=T	U %S\\37 ,!+."..sxx/P/b/bkqr	
 NN5!'"( Nr4   )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   r^   r3   r9   r<   rc   r   r]   r   r   r   r   r   r   r   r   r=   r4   r2   <module>r     s    
 .     4 3 2 /   0 3 W W+4! 2t S  6 7& 7& 7&t 6& 6& 6&r87K PUVZ\`V`Pa @ :N  SXY]_cYcSd  F?6	?6C=?6D# 3 `E `3 `:
+B `&yy-y y 	yx$H $c $d9o $r4   