
    hZ                       S r SSKJr  SSKrSSKrSSKrSSKr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  SSKrSSKrSSKJr  SSKJr  SS	KJrJrJr  SS
KJ r   SSK!J"r"J#r#J$r$  \" S5      r% " S S\RL                  5      r'\RP                  " SS9 " S S5      5       r)\RP                   " S S5      5       r*      SS jr+      SS jr,Sr-SS jr.      SS jr/      SS jr0      SS jr1      SS jr2      SS jr3g)zlRules for taking high-level field definitions and lowering them into inputs for
argparse's `add_argument()`.    )annotationsN)cached_property)	AnyCallableIterableOptionalSequenceTupleTypeVarUnioncast)
get_origin   )	_argparse)_fields
_singleton_strings)_markers)ConstructorRegistryPrimitiveTypeInfoUnsupportedTypeAnnotationError_Tc                  r   ^  \ rS rSrSr      S                 SU 4S jjjrS	S jrS rSrU =r	$ )
BooleanOptionalAction'   z9Adapted from https://github.com/python/cpython/pull/27672c	                  > / n	[        5       U l        U H  n
U	R                  U
5        U
R                  S5      (       d  M,  SU
;  a  S[        R
                  " 5       -   U
SS  -   n
O2U
R                  S5      u  pnUS-   [        R
                  " 5       -   U-   n
U R                  R                  U
5        U	R                  U
5        M     [        TU ]%  U	USUUUUUUS9	  g )N--.z--no   z.nor   )	option_stringsdestnargsdefaulttypechoicesrequiredhelpmetavar)
set_no_stringsappend
startswithr   get_delimeter
rpartitionaddsuper__init__)selfr    r!   r#   r$   r%   r&   r'   r(   _option_stringsoption_stringleft_right	__class__s                 I/home/james-whalen/.local/lib/python3.13/site-packages/tyro/_arguments.pyr1   BooleanOptionalAction.__init__*   s     5+M""=1''--m+!7!7!99M!"<MM "
 &3%=%=c%BNDU$(5L83I3I3K$Ke$SM  $$]3&&}5 ,  	* 	 
	
    c                r    X@R                   ;   a(  Uc   e[        X R                  X@R                  ;  5        g g N)r    setattrr!   r*   )r2   parser	namespacevaluesr4   s        r9   __call__BooleanOptionalAction.__call__S   s6    /// ,,,Iyy-?O?O*OP 0r;   c                8    SR                  U R                  5      $ )Nz | )joinr    r2   s    r9   format_usage"BooleanOptionalAction.format_usageZ   s    zz$--..r;   )r*   )NNNFNN)r    zSequence[str]r!   strr#   z_T | str | Noner$   z.Callable[[str], _T] | argparse.FileType | Noner%   zIterable[_T] | Noner&   boolr'   z
str | Noner(   zstr | tuple[str, ...] | NonereturnNoner=   )
__name__
__module____qualname____firstlineno____doc__r1   rB   rG   __static_attributes____classcell__)r8   s   @r9   r   r   '   s    C $(?C'+04'
%'
 '
 !	'

 ='
 %'
 '
 '
 .'
 
'
 '
RQ/ /r;   r   T)frozenc                  |    \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   SS	 jr    SS
 jr\SS j5       r	SS jr
Srg)ArgumentDefinition^   z=Structure containing everything needed to define an argument.rI   intern_prefixextern_prefixsubcommand_prefixz_fields.FieldDefinitionfieldc                <   [         R                  U R                  R                  ;   d(  [         R                  U R                  R                  ;   aL  U R                  R
                  [        R                  ;   a#  [        SU R                  R                   S35      eg g )NzField z is missing a default value!)
r   Fixedr[   markersSuppressr#   r   MISSING_AND_MISSING_NONPROPr   intern_namerF   s    r9   __post_init__ ArgumentDefinition.__post_init__g   sx    NNdjj000  DJJ$6$66jj  J$J$JJ0//00LM  K 7r;   c                t   [        U R                  R                  5      nUR                  S5        UR	                  5        VVs0 s H  u  p4Uc  M
  X4_M     nnnUR                  S5      nUS:X  a  [
        R                  4nU R                  R                  5       (       a-  [        U5      S:  a  SSK
nUR                  SU S35        US	S nUR                  S
S5      nUS;  a  [        R                  US'   OU[        SSS1;   a  O/ US'   UR                   " U0 UD6nSU;  Ga  U R                  R"                  R%                  S5      =(       dQ    U R                  R"                  R%                  S5      =(       d%    U R                  R"                  R%                  S5      n	U R                  R"                  R%                  S5      =(       dZ    U R                  R"                  R%                  S5      =(       d.    U R                  R"                  R%                  S5      =(       d    U	n
S['        U R                  R(                  5      ;   =(       d+    S['        U R                  R(                  5      ;   =(       a    U
nU(       a-  U	(       a  [*        R,                  O[*        R.                  Ul        gggs  snnf )z#Add a defined argument to a parser.instance_from_strNname_or_flags) r   r   zAliases were specified, but z( is positional. Aliases will be ignored.action>   countr+   r#   
store_truestore_falserj   r%   _dir
_directory_folder_file_path	_filenamePathrI   )dictlowered__dict__popitemsr   dummy_field_namer[   is_positionallenwarningswarngetr   MISSING_NONPROPr   add_argumentra   endswithrI   type_strippedshtab	DIRECTORYFILEcomplete)r2   r?   kwargskvrf   r|   ri   argname_suggests_dirname_suggests_pathcomplete_as_paths               r9   r   ArgumentDefinition.add_argumentp   sD    dll++,

&'#)<<>C>41Q$!$>C

?3E!%668M::##%%#m*<q*@MM.}o=ef *"#.M Hd+,, * : :F9-|]GTT "F9 !!=;F;
 F"
 

&&//7 >::))22<@>::))229=  

&&//8 %::))227;%::))22;?% %	  #djj6677 SS!9!9::Q?Q	   2Cu  + #? Ds   	J4J4c                    [        5       n[        X5        [        X5        [        X5        [	        X5        [        X5        [        X5        [        X5        U$ )zGLowered argument definition, generated by applying a sequence of rules.)LoweredArgumentDefinition_rule_handle_boolean_flags_rule_apply_primitive_specs_rule_counters_rule_generate_helptext_rule_set_name_or_flag_and_dest!_rule_positional_special_handling_rule_apply_argconf)r2   ru   s     r9   ru   ArgumentDefinition.lowered   sI    
 ,-"41#D2t%.'6)$8D*r;   c                    [         R                  U R                  R                  ;   =(       dH    [         R                  U R                  R                  ;   =(       a    U R
                  R                  5       $ )zYReturns if the argument is suppressed. Suppressed arguments won't be
added to the parser.)r   r_   r[   r^   SuppressFixedru   is_fixedrF   s    r9   is_suppressed ArgumentDefinition.is_suppressed   sP       DJJ$6$66 
""djj&8&88TT\\=R=R=T	
r;    N)rK   rL   )r?   z7Union[argparse.ArgumentParser, argparse._ArgumentGroup]rK   rL   )rK   r   rK   rJ   )rM   rN   rO   rP   rQ   __annotations__rb   r   r   ru   r   rR   r   r;   r9   rV   rV   ^   sT    G""=TM=T	=T~  
r;   rV   c                      \ rS rSr% SrSrS\S'   SS jrSrS\S	'   Sr	S
\S'   Sr
S\S'   SrS\S'   SrS
\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   Srg)r      z:Contains fields meant to be passed directly into argparse.NzOptional[Callable]re   c                    U R                   SL $ )zIf the instantiator is set to `None`, even after all argument
transformations, it means that we don't have a valid instantiator for an
argument. We then mark the argument as 'fixed', with a value always equal to the
field default.N)re   rF   s    r9   r   "LoweredArgumentDefinition.is_fixed   s    
 %%--r;   r   zTuple[str, ...]rf   zOptional[Any]r#   zOptional[str]r!   zOptional[bool]r&   ri   zOptional[Union[int, str]]r"   zOptional[Tuple[str, ...]]r%   r(   r'   r   )rM   rN   rO   rP   rQ   re   r   r   rf   r#   r!   r&   ri   r"   r%   r(   r'   rR   r   r;   r9   r   r      sx    D -1)0. &(M?'!G]!D-#Hn# FM '+E$+)-G&- "G]!D-r;   r   c                f   U R                   R                  [        La  g U R                   R                  [        R
                  ;   do  U R                   R                  5       (       dP  [        R                  U R                   R                  ;   d(  [        R                  U R                   R                  ;   a  g [        R                  U R                   R                  ;   a%  U R                   R                  (       a  SOSUl        O[        Ul        S Ul        U R                   R                  Ul        g )Nrl   rk   c                    U $ r=   r   xs    r9   <lambda>,_rule_handle_boolean_flags.<locals>.<lambda>   s    !r;   )r[   r   rJ   r#   r   r`   rz   r   FlagConversionOffr^   r]   FlagCreatePairsOffri   r   re   r   ru   s     r9   r   r      s     yyd* 			ZCCC99""$$%%):)::>>SYY... 	 ""cii&7&77 +.))*;*; / +Gii''GO
r;   c           	     4  ^ ^ [         R                  T R                  R                  ;   a+  SUl        SUl        SUl        [        R                  Ul	        gUR                  b  g[        R                  " [        R                  " [        [        T R                  R                  5      T R                  R                  5      5      m[!        T["        5      (       a  TnT R                  R                  [        R$                  ;   at  [&        R(                  " T R*                  T R                  R,                  /5      nUS:w  a6  [#        SU ST R                  R                   SUR.                  S    S	35      eUeSUl        SUl        [        R                  Ul	        gT R                  R                  [        R$                  ;   a7  [         R0                  T R                  R                  ;  a  SUl	        S
Ul        OT R                  R                  [        R2                  LaS  T R                  R                  [        R$                  ;  a+  TR5                  T R                  R                  5      Ul	        OT R                  R                  Ul	        TR6                  S:X  a  SU U4S jjnXAl        SUl	        TR8                  Ul        [!        TR:                  [<        5      (       d  TR:                  OSUl        TR
                  Ul        TR6                  Ul        SUl        gTR                  Ul        TR8                  Ul        [!        TR:                  [<        5      (       d  TR:                  OSUl        TR
                  Ul        TR6                  Ul        g)a  The bulkiest bit: recursively analyze the type annotation and use it to determine
how to instantiate it given some string from the commandline.

Important: as far as argparse is concerned, all inputs are strings.

Conversions from strings to our desired types happen in the instantiator; this is a
bit more flexible, and lets us handle more complex types like enums and multi-type
tuples.Nz{fixed}Frg   z1Unsupported type annotation for field with name `z`, which is resolved to `z`. r   zU To suppress this error, assign the field either a default value or a different type.Tr+   c                  > [        TR                  R                  5      nUc  TR                  R                  nTR                  R                  [        R
                  ;  a  TR                  R                  OSnUc  U[        L a  0 O/ nO1[        U[        5      (       a  UR                  5       nO[        U5      nU  Vs/ s H  nTR                  U5      PM     nnU H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U[        [        [        R                  R                  4;   a  U$ U" U5      $ s  snf )zHandle UseAppendAction effects.N)r   r[   r   r#   r   r`   rt   
isinstancecopylistre   updater+   r	   collectionsabc)r   container_typeoutarg_listpartspartr   specs         r9   append_instantiator8_rule_apply_primitive_specs.<locals>.append_instantiatorK  s    (		(?(?@N% "%!8!8
 99$$J,R,RR 		!! 
 {*d2bC&&hhj 3i GHHa(T++H5aEHc4((JJt$JJt$	  $+//2J2J!KK
%c** Is    E*)r   zlist[list[str]]rK   r   ) r   r]   r[   r^   re   r(   r&   r   MISSINGr#   r   get_primitive_specr   maker   r$   r   r   r`   r   make_field_namerY   extern_nameargs_OPTIONAL_GROUPEXCLUDE_FROM_CALLstr_from_instance_actionr%   r"   tupleri   )r   ru   error
field_namer   r   s   `    @r9   r   r     s    ~~***$(!# $,,  ,11syy~~&II	
D $67799
 F FF!11""CII$9$9:J R4G
|Slmpmvmvm{m{l||zz!}o &kk   (GO$G(00GO 			ZCCC$$CII,=,==		!=!==IIZ%K%KK 001B1BC))++||x$	+ $	+L %8!,,*4TZZ*G*G

S,, $($:$:!,,*4TZZ*G*G

S,,r;   c                    [         R                  R                  [        R                  " U 5      5      n [
        (       d  U $ SU SU  SU S3$ )N[]z[/)richmarkupescaper   strip_ansi_sequencesUSE_RICH)r   tags     r9   _rich_tag_if_enabledr     sE    888;<AH17AcU!A3bQ"77r;   c                (   [         R                  U R                  R                  ;   aj  U R                  R                  [
        L aL  U R                  R                  5       (       d,  SUl        SUl        SUl	        SUl
        SUl        S Ul        gggg)z1Handle counters, like -vvv for level-3 verbosity.Nrj   r   Fc                    U $ r=   r   r   s    r9   r    _rule_counters.<locals>.<lambda>  s    ar;   )r   UseCounterActionr[   r^   r   intrz   r(   r"   ri   r#   r&   re   r   s     r9   r   r     s     	!!SYY%6%66II##s*		''))   	! 	 * + 	7r;   c           	        / nU R                   R                  nUc^  [        R                  U R                   R                  ;   a6  [
        R                  " U R                  U R                   R                  /5      nUb  UR                  [        US5      5        UR                  (       Gd  UR                  nUR                  5       (       d  UR                  S:X  a/  U[        R                   ;   d  Ub   eU R                   R                  nU R                   R"                  R$                  b]  U R                   R&                  [(        R*                  La  [-        U5      O)[(        R.                  " U R                   R                  5      nOf[1        U5      [2        [4        [6        4;   a=  Uc   eSR9                  [;        [<        R>                  [;        [,        U5      5      5      nO[-        U5      nU R                   R"                  R@                  nUb  [C        U5      (       a  U" U5      OUnGOMURD                  c  S[-        U5       S3nGO/UR                  S:X  a  SnGOUR                  S:X  a4  U[        R                   ;   d  [G        [I        [2        U5      5      S	:X  a  SnOUR                  S:X  a)  [G        [I        [2        U5      5      S	:  a  Uc   eS
U S3nOU R                   R                  [        RJ                  L a  SnOt[        RL                  U R                   R                  ;   a  U[        R                   ;   a  SnO5[        RL                  U R                   R                  ;   a  SU S3nOSU S3nUR                  [        US5      5        OUR                  [        SS5      5        SR9                  U Vs/ s H  n[G        U5      S	:  d  M  UPM     sn5      RO                  SS5      Ul(        gs  snf )z@Generate helptext from docstring, argument name, default values.Nhelptextr+    z(fixed to: )rj   z(repeatable)r   z(repeatable, appends to: z(unset by default)z
(optional)z(default if used: z
(default: helptext_defaultz
(required)helptext_required%z%%))r[   r   r   
Positionalr^   r   r   rY   ra   r+   r   r&   r#   r   ri   r   r`   argconfconstructor_factoryr   jsonloadsrI   dumpsr$   r   r   r)   rE   mapshlexquotehelp_behavior_hintcallablere   r{   r   r   r   replacer'   )	r   ru   
help_partsprimary_helpr#   default_labelr   behavior_hintps	            r9   r   r     s8    J99%%L 3 3syy7H7H H//		 5 56
 .|ZHI //8!;jDDDWWii''G 9900< 99**$**< GZZ		 1 12 
 ']udC00 &&&HHSc#w6G%HIMLM !YY..AA) .// #=1' 
 &&. *#g,q9M^^w&*M^^x'z===4w'(A-*M^^x'CUG0D,E,I&&&7aHMYY*">">>0M$$		(9(99:AAA )M%%):)::0qAM(q9M.}>PQR.|=PQR 88
A
1c!fqjQ
ABJJ3PTUGLAs    O:O:c                \   U R                   R                  nUR                  S:X  a  SU-   nU R                   R                  R                  SL d(  [
        R                  U R                   R                  ;   a  [        R                  " U/5      nO[
        R                  U R                   R                  ;   am  U R                  S:w  a]  [        R                  " U R                  U/5      nU R                  S-   nUR                  U5      (       d   U5       eU[        U5      S  nO"[        R                  " U R                  U/5      nU R                   R                  5       (       d  SU-   nU4Ul        [        R                  " U R"                  U R                   R$                  /5      Ul        g )Nrl   no_Frg   r   r   )r[   r   ri   r   prefix_namer   OmitArgPrefixesr^   r   r   OmitSubcommandPrefixesrZ   rY   r,   r{   rz   rf   rX   ra   r!   )r   ru   r   name_or_flagstrip_prefixs        r9   r   r     s]    ))''K~~&k) 			%%.##syy'8'88
  //>''399+<+<<!!R'  //1B1BK0PQ,,s2&&|44BlB4#C$5$78  //1B1BK0PQ 99""$$l*)OG++S->->		@U@U,VWGLr;   c                   U R                   R                  5       (       d  g UR                  nUR                  (       a  UR                  nO Ub  SU-   S-   nUR                  S:X  a  SnOSn[
        R                  " U R                  U R                   R                  /5      4Ul	        S Ul
        S Ul        X!l        X1l        g )Nr   r   r   ?r   )r[   rz   r(   r&   r"   r   r   rX   ra   rf   r!   )r   ru   r(   r"   s       r9   r   r   /  s     99""$$ooGGmc)G==A E E 	  #"3"3SYY5J5J!KLG GLGOM
r;   c                8   U R                   R                  R                  b%  U R                   R                  R                  Ul        U R                   R                  R                  b3  U R                   R                  R                  UR                  -   Ul        g g r=   )r[   r   r(   aliasesrf   r   s     r9   r   r   N  so     yy  ,))++33
yy  , #		 1 1 9 9G<Q<Q Q -r;   )r   rV   ru   r   rK   rL   )r   rI   r   rI   rK   rI   )4rQ   
__future__r   collections.abcr   dataclassesr   r   	functoolsr   typingr   r   r   r   r	   r
   r   r   r   rich.markupr   r   typing_extensionsr   rg   r   argparser   r   r   confr   constructorsr   r   r   r   Actionr   	dataclassrV   r   r   r   r   r   r   r   r   r   r   r   r;   r9   <module>r
     s    #     %
 
 
   ( # + +   T]4/HOO 4/n d#d
 d
 $d
N   @	& 
:{	{&{ 
{D 8
	& 
*`V	`V&`V 
`VF%X	%X&%X 
%XP	& 
>R	R&R 
Rr;   