
    k7i                        S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJr  SSKJrJrJrJr  SSKJrJr  SSKJrJrJrJr  SS	KJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  SS
K'J(r(J)r)J*r*J+r+J,r,J-r-  SSK.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  SSK6J7r7J8r8  SSK9J:r:  SSK;J<r<J=r=J>r>  SSK?J@r@JArAJBrBJCrCJDrD  \(       a  SSKEJFrF  \" SS9 " S S5      5       rGg)z)Argument class and related functionality.    N)CallableSequence)suppress)partialreduce)TYPE_CHECKINGAnyget_args
get_origin)definefield)ITERABLE_TYPESconvertinstantiate_from_dicttoken_count)contains_hintis_attrsis_dataclassis_enum_flagis_namedtupleis_nonetypeis_pydanticis_typeddictis_unionresolveresolve_annotatedresolve_optional)CoercionErrorCycloptsErrorMissingArgumentErrorMixedArgumentErrorRepeatArgumentErrorValidationError)	FieldInfo_attrs_field_infos_generic_class_field_infos_pydantic_field_infos_typed_dict_field_infosget_field_infossignature_parameters)ITERATIVE_BOOL_IMPLICIT_VALUE	Parameter)Token)UNSETgrouper
is_builtin   )enum_flag_from_dictget_annotated_discriminatorget_choices_from_hintmissing_keys_factory
startswithArgumentCollectionT)kw_onlyc                      \ rS rSr% Sr\" \S9r\\   \	S'    \" \
S9r\
\	S'    \" \S9r\\	S'    \" \\S9r\\	S'    \" S	S
9r\S	-  \	S'    \" SS
9r\\S4   \	S'    \" S\S9r\\	S'    \" SSSS9r\\	S'   \" S	SSS9r\\	S'   \" \SSS9r\\\
4   \	S'   \" SSS9rS\	S'    \" SSSS9r\\	S'   \" SSSS9r\\	S'   \" S	SSS9r \!S	-  \	S'   \" S	SSS9r"\!S	-  \	S'   \" S	SSS9r#\S	-  \	S'   S  r$S!\\\
4   4S" jr%\&S# 5       r'\'RP                  S$ 5       r'\&S% 5       r)\)RP                  S\4S& j5       r)\&S'\4S( j5       r*\&S'\\!\/\4   -  4S) j5       r+\&S'\4S* j5       r,S+\4S, jr-SQS\.\\-     S	-  S'\4S- jjr/ SRS\.\\-     \-  \-  S	-  S\\S4   S'\4S. jjr0S	S/S0.S1\\-  S2\!\/\4   S	-  S3\S'\\\S4   \4   4S4 jjr1S	S/S0.S1\S2\!\/\4   S	-  S3\S'\\\S4   \4   4S5 jjr2S\S'\\\S4   \4   4S6 jr3S7\4S8 jr4\&S'\4S9 j5       r5\&SSS: j5       r6S; r7SQS<\!S	-  4S= jjr8SQS<\!S	-  4S> jjr9S? r:SQS<\!S	-  4S@ jjr;STS\\S4   4SA jjr<\&SB 5       r=\&S'\4SC j5       r>\&S'\\S4   4SD j5       r?SQS\S3\S	-  S'\\   4SE jjr@\&S'\4SF j5       rA\&S'\4SG j5       rBS'\4SH jrCS'\4SI jrDS'\4SJ jrESUSK\S'\\S4   S	-  4SL jjrFS'\4SM jrGSN rHSO rISPrJg	)VArgumentC   zEncapsulates functionality and additional contextual information for parsing a parameter.

An argument is defined as anything that would have its own entry in the help page.
)factorytokens
field_info	parameter)default	converterhintN)rA   index .keysvalue)aliasrA   _valueF)rA   initrepr_accepts_keywords_default)r=   rJ   rK   _lookup)rJ   rK   r8   children_marked_converted_mark_converted_override_missing_keys_checker_internal_converter_enum_flag_typec                 v   SSK Jn  U" 5       U l        [        U R                  5      n[        U5      (       a  [        U5      OU4nU R                  R                  (       a`  [        U5      nU[        L d3  U[        L dC  [        U[        5      (       a  [        U[        5      (       d  [        SU R                   S35      eU R                  R                   (       d  g U R                  R"                  SL a  g U GH*  n[%        U5      nX%1n['        U5      n[(        U;   a[  SU l        [,        [,        p[        U5      n
[/        [0        5         U
S   nU
S   n	S S S 5        U[,        La  [3        S5      eXl        GO[7        U5      (       a.  [9        [:        5      U l        SU l        U R?                  U5        GO[A        U5      (       a.  [9        [B        5      U l        SU l        U R?                  U5        GOa[E        U5      (       aJ  [9        [B        5      U l        SU l        [G        US	5      (       d  [        S
5      eU R?                  U5        GO[I        U5      (       a-  [9        [J        5      U l        SU l        U R?                  U5        O[M        U5      (       a-  [9        [N        5      U l        SU l        U R?                  U5        O[Q        U5      (       a  X l)        SU l        U R?                  U5        O^[U        U5      (       d4  U(       a-  [9        [B        5      U l        SU l        U R?                  U5        OU R                  R"                  c  GM_  U R                  R"                  c  GMy  SU l        [9        [B        5      U l        [W        [Y        URZ                  5      R]                  5       5       Hf  u  pUS:X  a  UR^                  S:X  a  M  UR`                  URb                  L a  URd                  U l        MI  U R?                  UR^                  U05        Mh     GM-     g ! , (       d  f       GN= f)Nr   r7   z5Parameter(count=True) requires an int type hint, got zA. Use 'Annotated[int, Parameter(count=True)]' for counting flags.FTr1   z1Dictionary type annotations must have "str" keys.__annotations__zGCyclopts cannot handle collections.namedtuple without type annotations.self)3cyclopts.argument._collectionr8   rO   r   rC   r   r
   r@   countr   boolint
isinstancetype
issubclass
ValueErrorparseaccepts_keysr   r)   dictrL   strr   
IndexError	TypeErrorrM   r   r5   r(   rR   _update_lookupr   r&   r   hasattrr   r%   r   r'   r   rT   r0   	enumerater*   __init__valuesnamekindVAR_KEYWORD
annotation)rW   r8   rC   hintsresolved_hintoriginhint_originfield_infoskey_typeval_typeargsir?   s                U/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/argument/_argument.py__attrs_post_init__Argument.__attrs_post_init__   sO   D*,tyy!"*4..tg>>,T2M$$M4)H)HZXegjMkMk KDII; WV W 
 ~~##>>&&%/D%F.K)$/K{")-&%(#(~j)#AwH#AwH * 3&#$WXX (d##-ABY-Z*)-&##K0d##-AB\-]*)-&##K0t$$-AB\-]*)-&t%677$%noo##K0$-ABT-U*)-&##K0T""-ABW-X*)-&##K0d##'+$)-&##K0%%+-AB\-]*)-&##K0,,4~~**2%)D")=>X)YD&!*+?+N+U+U+W!X6joo7??j&<&<<$.$9$9DM''*(EF "Yk  *)s   P))
P8	rs   c                    SSK Jn  [        U R                  R                  5      nUR                  5        H  u  pEU R                  R                  U5      =n(       ah  Xe:X  a  M.  U(       aT  X5R                  ;   aE  X6R                  ;   a6  X&R                  UR                  4   Ul        [        R                  Ul        M  [        eXPR                  U'   M     g )Nr   )Literal)typingr|   r3   r?   rn   itemsrN   getnamesr$   emptyrA   NotImplementedError)rW   rs   r|   discriminatorkeyr?   existing_field_infos          rx   rf   Argument._update_lookup   s    "3DOO4N4NO*002OC&*ll&6&6s&;;";&4"}8H8H'H]^w^wMw5<=[=[]g]r]r=r5s'22;//'/--$.S!  3    c                     U R                   $ )zConverted value from last :meth:`convert` call.

This value may be stale if fields have changed since last :meth:`convert` call.
:class:`.UNSET` if :meth:`convert` has not yet been called with tokens.
)rI   rW   s    rx   rG   Argument.value  s     {{r   c                 N    U R                   (       a  SU l        SU l         Xl        g )NT)_markedrQ   rI   )rW   vals     rx   rG   r     s    <<,0D)r   c                 4    U R                   U R                  -  $ )zdIf ``True``, then this node in the tree has already been converted and ``value`` has been populated.)rP   rQ   r   s    rx   r   Argument._marked  s     %%(E(EEEr   c                     Xl         g N)rP   )rW   rG   s     rx   r   r   $  s    !&r   returnc                     [        U R                  5      (       a  [        U R                  5      OU R                  4n[        S U 5       5      $ )Nc              3   J   #    U  H  n[         U[        U5      4;   v   M     g 7fr   )rb   r   ).0args     rx   	<genexpr>7Argument._accepts_arbitrary_keywords.<locals>.<genexpr>+  s     BTc4CC11Ts   !#)r   rC   r
   any)rW   rv   s     rx   _accepts_arbitrary_keywords$Argument._accepts_arbitrary_keywords(  s7    &.tyy&9&9x		"		|BTBBBr   c                 p   U R                   (       a  gU R                  R                  c/  U R                  R                  SU R                  R
                  4;  $ U R                  R                  U R                  R
                  L d  U R                  R                  (       d  gU R                  R                  $ )z(Show the default value on the help page.FN)requiredr@   show_defaultr?   rA   r   r   s    rx   r   Argument.show_default-  s}     ==^^((0??**49N9N2OOOoo%%)>)>>t~~GbGb>>...r   c                    [        [        U R                  5      =(       dg    [        U R                  5      =(       aK    [	        S [        U R                  5       5       5      =(       d    [        U R                  R                  5      5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )r   r   xs     rx   r   6Argument._use_pydantic_type_adapter.<locals>.<genexpr>@  s     D0C1A0C   )	rZ   r   rC   r   r   r
   r3   r?   rn   r   s    rx   _use_pydantic_type_adapter#Argument._use_pydantic_type_adapter9  s`    		" # D0CDD O24??3M3MN	
 		
r   r   c                      U R                   U   R                  $ ! [         a    U R                  c  e U R                  s $ f = fr   )rN   rn   KeyErrorrM   )rW   r   s     rx   _type_hint_for_keyArgument._type_hint_for_keyF  sB    	!<<$/// 	!}}$== 	!s    $AAc                 8   Uc  U R                   nU(       d  g[        US   [        5      (       a  US   R                  OUS   nUR	                  5       R                  S5      (       d  gU R                  (       aX  U R                  R                  b  U R                  R                  $ [        U R                  R                  [        5      (       a  gg[        U R                  5      n[        U5      nU[         ;   a  [#        U5      nU(       a  US   [        La  gg)zEWhen parsing, should attempt to parse the token(s) as json dict data.Fr   {T)r>   r\   r-   rG   stripr6   rL   r@   	json_dictr   r?   rn   rc   r   rC   r   r   r
   )rW   r>   rG   rC   rq   rv   s         rx   _should_attempt_json_dict"Argument._should_attempt_json_dictN  s    >[[F#-fQi#?#?q	VAY{{}'',,!!~~''3~~///T__77==tyy!D!^#D>DQs*r   c                 n   Uc  U R                   nU(       d  gU R                  U5      u  p4U(       d  g[        U[        5      (       a  UR                  nOD[        U[
        5      (       a  UnO,[        US   [        5      (       a  US   R                  OUS   nUR                  5       R                  S5      (       d  gU R                  R                  b  U R                  R                  $ [        U R                  R                  5      =(       d    [
        4 H  n[        U[
        5      (       d  M    g   g)zEWhen parsing, should attempt to parse the token(s) as json list data.Fr   [T)r>   r   r\   r-   rG   rc   r   r6   r@   	json_listr
   r?   rn   r   )rW   r>   rF   _consume_allrG   r   s          rx   _should_attempt_json_list"Argument._should_attempt_json_listh  s     >[[F))$/fe$$LLE$$E'1&)U'C'CF1IOOPQE{{}'',,>>##/>>+++DOO667AC6ACS#&& B r   .	transform	delimitertermr   r   c                    U R                   R                  (       d  [        e[        U[        5      (       a  U R                  U5      $ U R                  XUS9$ )aF  Match a name search-term, or a positional integer index.

Raises
------
ValueError
    If no match is found.

Returns
-------
tuple[str, ...]
    Leftover keys after matching to this argument.
    Used if this argument accepts_arbitrary_keywords.
Any
    Implicit value.
    :obj:`~.UNSET` if no implicit value is applicable.
r   )r@   r`   r_   r\   r[   _match_index_match_name)rW   r   r   r   s       rx   matchArgument.match  sU    . ~~## $$$ d#	
 !!$y!Q	
r   c                   U R                   R                  U R                   R                  L a/  [        UR	                  S5      R                  U5      5      [        4$ Un[        nU R                  R                  (       d   eU R                  R                   H  nU(       a  U" U5      n[        X5      (       d  M$  U[        U5      S nU R                  [        L d  U R                  [        ;   a  SO[        nU(       a  US   U:X  a  USS n  GO&M{  SU4s  $    [        U R                   R                  5      n[!        U5      (       a  [#        U5      nOU4nU H  n[        U5      nSn	U R                  R%                  U5       H  nU(       a  U" U5      n[        X5      (       d  M$  U[        U5      S nU[        ;   a  SnO:['        U5      (       d  Uc  SnO$[)        U5      n[+        U5      =(       d    U" 5       nU(       a  US   U:X  a	  USS nSn	  OM  SU4s  s  $    U	(       d  M    O   [,        eU R.                  (       d  [,        e[        UR                  U5      5      U4$ )a  Check how well this argument matches a token keyword identifier.

Parameters
----------
term: str
    Something like "--foo"
transform: Callable
    Function that converts the cyclopts Parameter name(s) into
    something that should be compared against ``term``.

Raises
------
ValueError
    If no match found.

Returns
-------
tuple[str, ...]
    Leftover keys after matching to this argument.
    Used if this argument accepts_arbitrary_keywords.
Any
    Implicit value.
-NTr   r1   rE   F)r?   rl   rm   tuplelstripsplitr.   r@   rk   r6   lenrC   rZ   r+   r   rn   r   r
   get_negativesr   r   r   r_   r   )
rW   r   r   r   trailingimplicit_valuerk   rC   ro   double_breaks
             rx   r   Argument._match_name  s!   < ??4??#>#>>S)//	:;UBB~~""""NN''D $%%D	,)-d):diiKh>hns{i/#+AB< 0 ~-- ( %T__%?%?@D~~ (.$ NN88>D (!$--#'D	#4#@@-2N(..$,-1N#3D#9D.8.>.F$.F-IN#'{i7+3AB</3 %  8
 $&~#55% ?&  </ 2 ! //X^^I./??r   c                     U R                   c  [        eU R                  R                  U R                  R                  L a  XR                   :  a  [        e S[
        4$ XR                   :w  a  [        eS[
        4$ NrE   )rD   r_   r?   rl   VAR_POSITIONALr.   )rW   rD   s     rx   r   Argument._match_index  sk    ::__!!T__%C%CCzz!   " 5y jj 5yr   tokenc                   ^ U R                   R                  (       d  [        e[        U4S jU R                   5       5      (       aH  U R                  TR                  5      u  p#U(       d$  U R                   R                  (       d	  [        TS9eU R                  (       a@  [        TR                  5      [        S U R                   5       5      -  (       a	  [        U S9eU R                  R                  T5        g)zSafely add a :class:`Token`.c              3   T   >#    U  H  oR                   TR                   :H  v   M     g 7fr   )address)r   r   r   s     rx   r   "Argument.append.<locals>.<genexpr>  s     ?;ayyEMM);s   %()r   c              3   8   #    U  H  oR                   v   M     g 7fr   )rF   r   s     rx   r   r     s     %Bkffkr   argumentN)r@   r`   r_   r   r>   r   rF   rY   r"   rZ   r!   append)rW   r   r   r   s    `  rx   r   Argument.append  s    ~~##?4;;???!--ejj9NAt~~';';)66;;EJJ#%Bdkk%B"BB($775!r   c                 r    [        U R                  5      =(       d    [        S U R                   5       5      $ )z@This argument, or a child argument, has at least 1 parsed token.c              3   8   #    U  H  oR                   v   M     g 7fr   )
has_tokensr   s     rx   r   &Argument.has_tokens.<locals>.<genexpr>  s     'Lmmr   )rZ   r>   r   rO   r   s    rx   r   Argument.has_tokens  s'     DKK LC'Ldmm'L$LLr   c                     SSK Jn  U" 5       nU R                   H/  nUR                  U5        UR	                  UR
                  5        M1     U$ )Nr   r7   )rX   r8   rO   r   extendchildren_recursive)rW   r8   outchilds       rx   r   Argument.children_recursive  s@    D "]]EJJuJJu//0 # 
r   c                    U R                   (       aI  SS KnU R                  5       n UR                  U R                  R
                  5      R                  U5      $ [        $ ! UR                   a  nU R                  U5         S nAg S nAff = f)Nr   )
r   pydantic_jsonTypeAdapterr?   rn   validate_pythonr#   !_handle_pydantic_validation_errorr.   )rW   r   unstructured_dataes       rx   _convert_pydanticArgument._convert_pydantic   st    ?? $

:++DOO,F,FGWWXijj L ++ :66q99:s   3A! !B1BBrB   c           
        ^ ^^^ SSK Jn  T R                  R                  (       ak  [	        T R                  R                  [
        5      (       a+  [        T R                  T R                  R                  5      mO<T R                  R                  mO%Tc"  [        [        T R                  R                  S9mTc   eUU 4S jmT R                  R                  (       d  [        nU$ T R                  R                  (       a  [        S T R                   5       5      nU$ T R                   (       Gd  / n0 nU 4S jn[#        U" T R                  5      5      nU GH  n[%        T R                  5      n	UR&                  [        LaL  [	        UR&                  [)        U	5      =(       d    U	5      (       a  [+        U5      S:X  d   eUR&                  s  $ UR,                  (       aY  Un
UR,                  S S  H  nU
R/                  U0 5      n
M     U
R/                  UR,                  S   / 5      R1                  U5        OUR1                  U5        U(       d  M  U(       d  GM  [3        T S	9e   U(       a  T R4                  (       ax  T R4                  R6                  T R4                  R8                  L aK  [;        T R                  5      S   mT R=                  5       u  p[?        UU4S
 j[A        XL5       5       5      nU$ T" T R                  [?        U5      5      n U$ U(       a  T R4                  (       a  T R4                  R6                  T R4                  RB                  L aU  T R,                  (       dD  URE                  5        VVs0 s H%  u  pUT" [;        T R                  5      S   U5      _M'     nnnU$ T" T R                  U5      n U$ T RF                  (       a	  [I        T S	9e[        $ 0 n[        nT RJ                  (       a  T RK                  S5      nT RJ                  (       ab  T R                  (       aQ  T" T RJ                  T R                  5      nU[	        U["        5      (       a  [M        [N        RP                  U5      OU-  nT RS                  5       (       a  T R                  (       a  T R                  RU                  S5      n [V        RX                  " URZ                  5      nU" T R`                  Rc                  S5      U0URd                  T Rf                  SSS9  T R                  (       a  M  T Rh                  (       a  T Rk                  5       $ T R                  (       ab  T RJ                  (       dQ  T R                   Vs/ s H  oR,                  (       a  M  UPM     nnU(       a  T" T R                  [?        U5      5      $ T R                    H  n[+        UR,                  5      [+        T R,                  5      S-   :X  d   eURl                  (       a!  URo                  TS9UUR,                  S   '   Mf  URF                  (       d  My  UnUR,                   H	  n UU   nM     SUl9        M     T Ru                  U5        T RJ                  (       a=  U[w        T RJ                  UT R                  R                  5      -  nU(       d  [        nU$ U(       a  [y        T R                  U5      nU$ T RF                  (       a	  [I        T S	9e[        nU$ s  snnf ! [V        R\                   a  n[_        UT R                  S9UeS nAff = fs  snf ! [p         a    [I        US	9S ef = f)Nr   )update_argument_collection)name_transformc                   > [        U[        5      (       a	   T" X5      $  [        R                  " T5      (       a  T" U5      $ T" X5      $ ! [        [        [        4 a1  n[        UR                  (       a  UR                  S   OS TU S9UeS nAff = f! [        [        [        4 aG  n[        U5      S:X  a  US   OS n[        UR                  (       a  UR                  S   OS TXS9UeS nAff = f)Nr   )msgr   target_typer1   )r   r   r   r   )
r\   rb   AssertionErrorr_   re   r   rv   inspectismethodr   )rC   r>   r   r   rB   rW   s       rx   safe_converter)Argument._convert.<locals>.safe_converter:  s    &$''s$T22''	22(00  )66 '
I> s'AFF1ITTXfjkqrrs '
I> ),V)9F1ItE')*AFF1ITDVZs5   A "B B B!,BBC1*AC,,C1c              3   b   #    U  H%  oR                   [        Ld  M  UR                   v   M'     g 7fr   )r   r.   )r   r   s     rx   r   $Argument._convert.<locals>.<genexpr>R  s%     iuG[G[chGh*e**s   //c              3   p  >#    U  H  nTR                  U5      (       a   [        R                  " UR                  5      n[        U[        5      (       d  [        UTR                  S9eU(       d  UR                  S/ S9v   M~  U Hp  nUc  UR                  SUS9v   M  [        U[        5      (       a'  UR                  [        R                  " U5      S9v   MV  UR                  [        U5      S9v   Mr     M  Uv   M     g ! [        R                   a  n[        UTR                  S9UeS nAff = f7f)Nr   r    )rG   r   )rG   )r   jsonloadsrG   JSONDecodeErrorr   rC   r\   listevolverb   dumpsrc   )r>   r   parsed_jsonr   elementrW   s        rx   expand_tokens(Argument._convert.<locals>.expand_tokensW  s    #E55e<<[*.**U[[*AK  *+t<<"/e"SS*"',,R,"KK+6#*?*/,,RPW,*X$X%/%>%>*/,,TZZ=P,*Q$Q*/,,S\,*J$J ,7 $+ $  $33 ["/e"SYZZ[s)   D6 D CD6D3D..D33D6r1   r   c              3   6   >#    U  H  nT" TU5      v   M     g 7fr   rE   )r   rj   rC   r   s     rx   r   r     s     sKrtV < <Krs   r   r   rE   F)	root_keysallow_unknownrB   T)=rX   r   r@   rB   r\   rc   getattrrC   r   r   r   r`   r.   rY   sumr>   rO   r  r   r   r   r   rF   
setdefaultr   r!   r?   rl   r   r
   r   r   r/   rm   r~   r   r    rT   r   operatoror_r   popr  r  rG   r  r   rk   r   sourcer   r   r   r   convert_and_validate	Exceptionr   _run_missing_keys_checkerr2   r   )rW   rB   r   r   
positionalkeywordr	  expanded_tokensr   rp   lookupr   tokens_per_elementr   rG   dataconverted_flagsr  r   positional_tokensr   objkrC   r   s   ``                     @@rx   _convertArgument._convert,  s   L>>##$..22C88#DIIt~~/G/GH	 NN44	8U8UVI$$$	* ~~##C~ 
} ^^!!iiiCz 
y &(JG$0 #=#=>O( 0 ;''u4((*]*C*T}: : /1444 ///::$F$zz#2!'!2!23!;  /%%ejjnb9@@G%%e,:'',d;;# )& ??t';';t?]?]']#DII.q1D,0,<,<,>)&s7S]KrssCP 
M )E*4EFCL 
K ??t';';t?Z?Z'Zcgclcl`g`m`m`op`oR\RU3x		/B1/Eu MM`oCpF 
C )G<CB 
A *D99DC##**1-##"01E1Et{{"S
?\`@a@avhllO<gvv--//kk KKOOA.EW&*jj&= /))#.<//"$&+ kkk ..--//{{4#7#78<$Vu::U!$V$)$))U;L5MNN5::3tyy>A+=>>>##+0+E+EPY+E+ZDB(^^^C"ZZQ"%a&C (
 %)EM ' **40##*4+?+?t~~GdGdeeC 
 +DIIt< 
 *D99
G q.  // W+%TYYOUVVW %W  ) Q"6"FDPQs6    ,\ \ ]]]]+]  ]]"c                 H   U R                   (       d!   U R                  US9U l        U R                  $ U R                  $ ! [         a7  nUR                  c  Xl        UR
                  c  U R                  Ul        e SnAf[         a  nUR                  c  Xl        e SnAff = f)zConverts :attr:`tokens` into :attr:`value`.

Parameters
----------
converter: Callable | None
    Converter function to use. Overrides ``self.parameter.converter``

Returns
-------
Any
    The converted data. Same as :attr:`value`.
r  N)r   r$  rG   r   r   r   rC   r   )rW   rB   r   s      rx   r   Argument.convert  s     ||!]]Y]?
 zztzz ! ::%!%J==($(IIAM  ::%!%Js!   ? 
B!	2A;;B!BB!c                 &  ^ ^ [        T R                  R                  [        5      (       d   eS[        R
                  ;   a8  SSKm[        S TR                  R                  S5       5       5      nUS:  a  SmOSmUU 4S jn T R                  (       d  T R                  (       a  T R                  R                  T R                  R                  L a  [        T R                  5      S   nT R                  R                   H"  nUR                  5        H  nU" XF5        M     M$     U" [         ["        T R                  R$                  4   U5        gT R                  (       a  T R                  R                  T R                  R&                  L am  [        T R                  5      S   nT R                  R                   H  nU H  nU" XF5        M     M     U" [        T R                  R$                  S	4   U5        gT R                  R                   H  nU" T R                  U5        M     U" T R                  R$                  U5        g! [(        [*        [,        4 a0  n[/        UR0                  (       a  UR0                  S   OS
T S9UeSnAff = f)zValidates provided value.

Parameters
----------
value:
    Value to validate.

Returns
-------
Any
    The converted data. Same as :attr:`value`.
r   r   Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )r[   r   s     rx   r   $Argument.validate.<locals>.<genexpr>   s     $U5TSVV5Tr   r   )   c                    > T(       d  g TR                   (       a  g  TR                  U 5      R                  U5        g ! TR                   a  nTR	                  U5         S nAg S nAfTR
                   a     g f = fr   )r   r   r   r#   r   PydanticUserError)rC   r   r   r   rW   s      rx   validate_pydantic,Argument.validate.<locals>.validate_pydantic  sk    ..$$T*::3?++ :66q99-- s    > A:A$$A:9A:r1   .r   exception_messager   )r\   r@   	validatorr   sysmodulesr   __version__r   rF   r?   rl   rm   r
   rC   rj   rb   rc   rn   r   r   r_   re   r#   rv   )	rW   rG   pydantic_versionr.  rC   r2  r   r   r   s	   `       @rx   validateArgument.validate  s    $..22E::::$$$UX5I5I5O5OPS5T$UU$&H		g99T__5I5IT__MhMh5h		*1-!%!9!9I$||~!$,  . ": "$sDOO,F,F'F"GOT__%9%9T__=[=[%[		*1-!%!9!9I$!$,  % ": "%(B(BC(G"H%P!%!9!9Idii/ ":!$//"<"<eD
I6 	g!AFF1IRZ^_eff	gs'   CI B*I =AI J +JJc                     U R                  US9nU[        La  U R                  U5        U$ U R                  R                  [
        R                  La%  U R                  U R                  R                  5        U$ )zConverts and validates :attr:`tokens` into :attr:`value`.

Parameters
----------
converter: Callable | None
    Converter function to use. Overrides ``self.parameter.converter``

Returns
-------
Any
    The converted data. Same as :attr:`value`.
r  )r   r.   r7  r?   rA   r$   r   )rW   rB   r   s      rx   r  Argument.convert_and_validate'  sb     llYl/eMM# 
 __$$IOO;MM$//112
r   c                 j   U R                   R                  (       a  gU R                   R                  b  U R                   R                  S:X  a  g[        U5      S:  a  U R                  nO0[        U5      S:X  a  U R                  US   5      nOU R                  n[        U5      u  p4U R                   R                  U4$ [        U5      S:  a  U R                  nOI[        U5      S:X  a  U R                  US   5      nO%U R                  nU R                  (       a  U(       d  g[        U5      u  pVXV4$ )a  The number of string tokens this argument consumes.

Parameters
----------
keys: tuple[str, ...]
    The **python** keys into this argument.
    If provided, returns the number of string tokens that specific
    data type within the argument consumes.

Returns
-------
int
    Number of string tokens to create 1 element.
consume_all: bool
    :obj:`True` if this data type is iterable.
r   Fr  )r1   Tr1   r   )	r@   rY   n_tokensr   rM   r   rC   r   rT   )rW   rF   rC   r   consume_all_from_typer  r   s          rx   r   Argument.token_count;  s    " >>
 >>"".~~&&", t9q===DY!^2247;D99D ,7t+<(~~..0EEEt9q===DY!^**473D99D##D*5d*;'!..r   c                 r    U R                   R                  [        U R                  R                  5      5      $ )z5Negative flags from :meth:`.Parameter.get_negatives`.)r@   r   r   r?   rn   r   s    rx   	negativesArgument.negativeso  s)     ~~++,=doo>X>X,YZZr   c                      U R                   S   $ )z2The **first** provided name this argument goes by.r   )r   r   s    rx   rk   Argument.namet  s     zz!}r   c                     SSK n[        U R                  R                  [        5      (       d   e[	        UR                  U R                  R                  U R                  5      5      $ )z8Names the argument goes by (both positive and negative).r   N)	itertoolsr\   r@   rk   r   chainrA  )rW   rF  s     rx   r   Argument.namesy  sH     	$..--u5555Y__T^^%8%8$..IJJr   c                 J    U R                   R                  U R                  XS9$ )z:Split a given value with :meth:`.Parameter.env_var_split`.)r   )r@   env_var_splitrC   )rW   rG   r   s      rx   rJ  Argument.env_var_split  s     ~~++DIIu+RRr   c                 ^    U R                   (       + =(       a    U R                  R                  $ )zjShow this argument on the help page.

If an argument has child arguments, don't show it on the help-page.
)rO   r@   showr   s    rx   rM  Argument.show  s      == 8T^^%8%88r   c                     U R                   R                  c  U R                  R                  $ U R                   R                  $ )z<Whether or not this argument requires a user-provided value.)r@   r   r?   r   s    rx   r   Argument.required  s4     >>""*??+++>>***r   c                 .    U R                   R                  $ r   )r?   is_positional_onlyr   s    rx   rR  Argument.is_positional_only  s    111r   c                 \    U R                   R                  U R                   R                  :H  $ r   )r?   rl   r   r   s    rx   is_var_positionalArgument.is_var_positional  s!    ##t'E'EEEr   c                 (    U R                  5       S:H  $ )a?  Check if this argument is a flag (consumes no CLI tokens).

Flags are arguments that don't consume command-line tokens after the option name.
They typically have implicit values (e.g., `--verbose` for bool, `--no-items` for list).

Returns
-------
bool
    True if the argument consumes zero tokens from the command line.

Examples
--------
>>> from cyclopts import Parameter
>>> bool_arg = Argument(hint=bool, parameter=Parameter(name="--verbose"))
>>> bool_arg.is_flag()
True
>>> str_arg = Argument(hint=str, parameter=Parameter(name="--name"))
>>> str_arg.is_flag()
False
r<  )r   r   s    rx   is_flagArgument.is_flag  s    * !Z//r   forcec                     U(       d  U R                   R                  (       d  g[        U R                  U R                   R                  5      nU(       a  [        U5      $ S$ )a  Extract completion choices from type hint.

Extracts choices from Literal types, Enum types, and Union types containing them.
Respects the Parameter.show_choices setting unless force=True.

Parameters
----------
force : bool
    If True, return choices even when show_choices=False.
    Used by shell completion to always provide choices.

Returns
-------
tuple[str, ...] | None
    Tuple of choice strings if choices exist and should be shown, None otherwise.

Examples
--------
>>> argument = Argument(hint=Literal["dev", "staging", "prod"], parameter=Parameter(show_choices=True))
>>> argument.get_choices()
('dev', 'staging', 'prod')
>>> argument = Argument(hint=Literal["dev", "staging", "prod"], parameter=Parameter(show_choices=False))
>>> argument.get_choices()  # Returns None for help text
>>> argument.get_choices(force=True)  # Returns choices for completion
('dev', 'staging', 'prod')
N)r@   show_choicesr4   rC   r   r   )rW   rZ  choicess      rx   get_choicesArgument.get_choices  sA    6 T^^88'		4>>3P3PQ!(uW~2d2r   c                    0 nU R                   (       aw  U R                   Hg  nUnUR                  SS  H  nUR                  U0 5      nM     UR                  [
        L a  UR                  OUR                  X2R                  S   '   Mi     U R                   GH  nSUl        UR                  (       d  M  UR                  [        U R                  5      S nUR                   (       a"  UR                  5       nU(       a	  XqUS   '   Mq  Ms  [        UR                  5      =(       d    UR                  [        ;   a  UR                   H  nUR                  [
        La0  UR                  US   / 5      R                  UR                  5        MF  UR                  n[!        U["        5      (       aC  UR%                  5       (       a.  UR%                  5       S   S;   a   [&        R(                  " U5      nUR                  US   / 5      R-                  U5        M     GM  UR                  S   nUR                  [
        L a  UR                  OUR                  XS   '   GM     U$ ! [&        R*                   a     Nf = f)zConvert argument to be json-like for pydantic.

All values will be str/list/dict. JSON-serialized strings (from sources
like config files or environment variables) are deserialized back to their
original dict/list structure.
Nr  Tr   )r   r   )rL   r>   rF   r  r   r.   rG   rO   r   r   r   r   r   rC   r   r   r\   rc   r   r  r  r  r   )	rW   r   r   noder   r   rF   resultrG   s	            rx   r   Argument._json  s    !! ::cr?C??33D +6;6J6Je6Su{{Y^YmYmZZ^$	 %
 ]]E EM##::c$))n./D&&#)QL UZZ(6EJJ>I"\\E++58tBx4;;E<P<PQ %%eS11ekkmmVWHX\fHf%(,

5(9 tBx4;;EB * Q.3.B.Be.Ku{{QVQeQeG1 #2 
 $(#7#7 % $%s   I!!I87I8c                    U R                   (       a  U R                  (       d  U(       d  g U R                  X5      =n(       d  g US   nU R                  U4-   nU R                  R	                  US9nU(       a  [        US   S9eU R                  R                  S   S-   SR                  U5      -   n[        SU S35      e)Nr   keys_prefixr   z->zRequired field "z]" is not accessible by Cyclopts; possibly due to conflicting POSITIONAL/KEYWORD requirements.)
rR   r   rF   rO   	filter_byr    r?   r   joinr_   )rW   r  missing_keysmissing_keyrF   missing_argumentsmissing_descriptions          rx   r  "Argument._run_missing_keys_checker  s    ))$-- $ : :4 FFF"1oyyK>) MM333E&0A!0DEE"&//"7"7":T"ADIIdO"S"#6"7  8U  V r   c                    SS K nUR                  5       S   nUS   S:X  a6  U R                  R                  U R                  US   -   S9S   n[        US9Ue[        XR                  5      (       a  [        [        U5      U S9UeUe)Nr   r]   missinglocre  r   r0  )	r   errorsr   rg  rF   r    r\   r#   rc   )rW   excr   errormissing_arguments        rx   r   *Argument._handle_pydantic_validation_error  s    

Q=I%#66@@TYYY^_dYeMe@fghi&0@AsJ5566!CHtLRUUIr   )
rL   rM   rT   rQ   r   rP   rR   rI   rO   rG   r   r   )r   r8   )rE   )F)K__name__
__module____qualname____firstlineno____doc__r   r  r>   r-   rV   r$   r?   r,   r@   rc   r   rC   r	   rD   r[   rF   r   r.   rI   rL   rZ   rM   rb   rN   rO   rP   rQ   rR   r   rS   rT   ry   rf   propertyrG   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$  r   r7  r  r   rA  rk   r   rJ  rM  r   rR  rU  rX  r^  r   r  r   __static_attributes__rE   r   rx   r;   r;   C   s^   
  -FDK-
 ")4J	4 !3Iy3 cW5D#5 d+E3:+
 ""-D%S/-%N gu5FC5 $EEJtJ$U?Hc?$)$U$OGT#y.!O%*E%BH"B $EEJtJ%*5u5%QdQ-24eRW-X8d?X+0EPU+VDV"'5u"MOS4ZMUGn/$sI~*> /"   \\  F F ^^'T ' ' CT C C 	/dXseSj%99 	/ 	/ 

D 

 

!c !0E0L X\ 6 bdus{+e3c9D@OTUXZ]U]	< 26
Ci
 SE3J'$.	

 
 
uS#X#	$
F 26U@U@ SE3J'$.	U@
 U@ 
uS#X#	$U@n# %c3h0D*E "E " MD M M  
c(T/ cJD :7grho (2/c3h 2/h [ [ c   KuS#X K KS3 S3: Sc S 9d 9 9 +$ + +2D 2F4 F0 0.3 3%S/D2H 3@'t 'R 
r   r;   )Hrz  r   r  r  r3  collections.abcr   r   
contextlibr   	functoolsr   r   r}   r   r	   r
   r   attrsr   r   cyclopts._convertr   r   r   r   cyclopts.annotationsr   r   r   r   r   r   r   r   r   r   r   r   cyclopts.exceptionsr   r   r    r!   r"   r#   cyclopts.field_infor$   r%   r&   r'   r(   r)   r*   cyclopts.parameterr+   r,   cyclopts.tokenr-   cyclopts.utilsr.   r/   r0   utilsr2   r3   r4   r5   r6   rX   r8   r;   rE   r   rx   <module>r     s    /    
 .  % ; ;         H   5 5  @ Q Q Qr   