
    h3                     `   % S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
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JrJr  SSKJr  SSKJrJrJr  SSKJ r   \" S	\S
9r!\RD                  " SS9 " S S5      5       r#\RD                  " SS9 " S S5      5       r$\RD                  " SS9 " S S5      5       r%\RL                  " S5      S\S\'S\\%   4S j5       r(\RR                  " SS9S\*S\\'\'4   4S j5       r+\RL                  " S5      S\S\'S\\ RX                  S4   S\\'   4S j5       r-\." \/" S \R`                  " \1" \5      Re                  5       \1" \Rf                  5      Re                  5       5      5      5      r4\\   \5S'   \RL                  " S5      S \S\'4S! j5       r6g)"z=Helpers for parsing docstrings. Used for helptext generation.    N)	CallableDictHashableListOptionalSetTupleTypeTypeVar)
get_originis_typeddict)is_typing_generic   )	_resolver_strings_unsafe_cache)_markersT)boundT)frozenc                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)_Token#   
token_typecontentlogical_lineactual_line N)__name__
__module____qualname____firstlineno__int__annotations__str__static_attributes__r       J/home/james-whalen/.local/lib/python3.13/site-packages/tyro/_docstrings.pyr   r   #   s    OLr'   r   c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)
_FieldData+   indexr   r   prev_field_logical_liner   N)r   r    r!   r"   r#   r$   r&   r   r'   r(   r*   r*   +   s    J  r'   r*   c                       \ rS rSr% \\   \S'   \\\\   4   \S'   \\\\   4   \S'   \\	\
4   \S'   \\R                  " S5      S
S j5       5       rSrg	)_ClassTokenization3   tokenstokens_from_logical_linetokens_from_actual_linefield_data_from_name@   c                    [         R                  " [        R                  " U 5      R	                  S5      5      R
                  n/ nS/ 0nS/ 0n0 nSnSn[        R                  " U5       H  u  ppnU[        R                  :X  a  US-  nUS-  n/ X6'   / XG'   M/  U[        R                  :X  a  US-  n/ XG'   MN  U[        R                  Ld  Mc  [        UU	UUS9nUR                  U5        X6   R                  U5        XG   R                  U5        M     Sn[        USS 5       H  u  pUR                  [        R                  :X  d  M%  SnX=R                      H,  nUU:X  a    O%UR                  [        R                   Ld  M*  Sn  O   U(       d  Mn  X/S-      R"                  S:X  d  M  UR"                  U;  d  M  [%        UUR                  UR&                  US	9X]R"                  '   UR                  nM     [)        UUUUS
9$ )zJParse the source code of a class, and cache some tokenization information.zutf-8r   )r   r   r   r   NTF:)r,   r   r   r-   )r1   r2   r3   r4   )ioBytesIOinspect	getsourceencodereadlinetokenizeNEWLINENLINDENTr   append	enumerater   NAMEr   COMMENTr   r*   r   r/   )clzr>   r1   r2   r3   r4   r   r   toktypetokstartendlinetokenr-   iis_first_tokents                     r(   make_ClassTokenization.make:   s    ::g//4;;GDENN!=>G <=r768.6.?.?.I*G%d (***!q 9;(679'4HKK'q 79'4/&!- +	 e$(6==eD'4;;EB+ /J. ()!&"+.HA8==0!%12D2DEAEz||8+;+;;). F & q5M))S0-AA:D%*%7%7$)$5$50G	;(7 /4.@.@+1 /4 "%=$;!5	
 	
r'   r   N)returnr/   )r   r    r!   r"   r   r   r$   r   r#   r%   r*   staticmethodr   unsafe_cacherQ   r&   r   r'   r(   r/   r/   3   sj    L"3V#455!#tF|"344sJ//#B
 $ B
r'   r/   i   cls
field_namerS   c                    SnU R                   nS nU HJ  n[        U5      (       d  [        U5      b   e [        R	                  U5      nXR                  ;   d  MH  Sn  O   [        R                  " U 5      (       a  U(       d   S5       eU$ ! [
         a       g [         a   nSUR                  S   ;   d   e S nA  g S nAff = f)NFzbuilt-in classr   TzDocstring parsing error -- this usually means that there are multiple dataclasses in the same file with the same name but different scopes.)__mro__r   r   r/   rQ   OSError	TypeErrorargsr4   dataclassesis_dataclass)rV   rW   found_fieldclasses_to_searchtokenization
search_clses          r(   !get_class_tokenization_with_fieldrd      s    
 KL'
 !,,
:0F0NNN	-22:>L* :::K; (> $$ 	
U	
{
 =  	  	#qvvay000	s   B
C	C"B==C)maxsizeobjc                     [         R                  " U 5      R                   Vs0 s H)  nUR                  c  M  UR                  UR                  _M+     sn$ s  snf N)docstring_parserparse_from_objectparamsdescriptionarg_name)rf   docs     r(   parse_docstring_from_objectro      sP     $55c:AAAC?? 	&coo%A  s
   AAmarkers.c                    U [        S5      L a  gU R                   Hm  nUR                  S:X  a  M  [        U5      R	                  US5      nUc  M5  [
        R                  " [
        R                  " U5      5      R                  5       s  $    [        R                  U;   a  g[        X5      nUc  gUR                  U   nUR                  UR                     S   nUR                  [         R"                  :X  a  UR$                  nUR'                  S5      (       d   eUR'                  S5      (       a'  [
        R                  " USS R                  5       5      $ [
        R                  " USS R                  5       5      $ Sn	UR(                   H!  n
U
R$                  S:X  d  M  U
R                  n	  O   U	S:w  d   e/ nUR*                  S-
  nS	nS
nXR,                  ;   Ga.  UR,                  U   n[/        U5      S:X  a  GOUS   R                  U	::  a  O[/        U5      S:X  a  US   R                  [         R"                  L a  Uu  nUR$                  R'                  S5      (       d   eUR$                  R'                  S5      (       a/  UR1                  UR$                  SS R                  5       5        S	nO?UR1                  UR$                  SS R                  5       5        O[/        U5      S:  a  OS
nUS-  nXR,                  ;   a  GM.  [/        U5      S:  a<  U(       a  U(       a.  [
        R                  " SR3                  [5        U5      5      5      $ g)z%Get docstring for a field in a class.Nbuiltinsr7   #z#:   r   classTFr   
)typerY   r    ro   getr   dedentremove_single_line_breaksstripr   HelptextFromCommentsOffrd   r4   r2   r   r   r?   rF   r   
startswithr1   r   r3   lenrC   joinreversed)rV   rW   rp   
cls_search	docstringra   
field_datafinal_token_on_linecommentclassdef_logical_linerM   commentscurrent_actual_linedirectly_above_fieldis_sphinx_doc_commentactual_line_tokenscomment_tokens                    r(   get_field_docstringr      s"    d4j kk
  J./
;??
DQ	 ??229=eg " ''72 5SEL22:>J '??
 %%)9)99*22!!#&&&&d##55gabk6G6G6IJJ55gabk6G6G6IJJ2 $$==G#$)$6$6! % !B&&&H$0014!
!E!E
E)AABUV !"a'
 a --1FF "#q("1%00H4D4DD1] ((33C8888$$//55 5 5ab 9 ? ? AB(,% 5 5ab 9 ? ? AB]Q $) q C !E!E
EF 8}q"7@T11$))HX<N2OPPr'   c                 "    [        U [        5      $ rh   )
isinstancer   )xs    r(   <lambda>r   2  s    *Q)r'   _callable_description_blocklistfc                 F   [         R                  " U 5      u  p[         R                  " U 5      n U [        ;   a  g[	        U [
        R                  5      (       a  U R                  n S[        R                  R                  5       ;   a   SSKnOSnU R                  nUc  [        R                  " U 5      (       ag  [!        U 5      (       dW  [         R"                  " U 5      (       d<  Ub#  U R$                  UR&                  R$                  L d  U R$                  R                  nUc  g[(        R*                  " U5      n[,        R.                  " U 5      (       aB  U R0                  [3        [        R4                  " U 5      5      R7                  SS5      -   nX4:X  a  g[8        R:                  " U5      n/ nUR<                  b  UR?                  UR<                  5        UR@                  b  UR?                  UR@                  5        SRC                  U5      $ ! [         a    Sn GNf = f)zGet description associated with a callable via docstring parsing.

`dataclasses.dataclass` will automatically populate __doc__ based on the
fields of the class if a docstring is not specified; this helper will
ignore these docstrings. pydanticr   Nz -> Nonerv   )"r   resolve_generic_typesunwrap_origin_strip_extrasr   r   	functoolspartialfuncsysmoduleskeysr   ImportError__doc__r;   isclassr   is_namedtuple__init__	BaseModelr   ry   r]   r^   r   r%   	signaturereplaceri   parseshort_descriptionrC   long_descriptionr   )r   _r   r   default_docparsed_docstringpartss          r(   get_callable_descriptionr   ;  s    **1-DA,,Q/A++ !Y&&''FFS[[%%''	
  		IOOAQ''**%!**8J8J8S8S*SJJ&&		*I""jj3w'8'8';#<#D#DZQS#TT#'--i8E))5%778((4%66799UI  	H	s   H H H )7r   rr   collections.abccollectionsr]   r   r;   r9   	itertoolsr   r?   typingr   r   r   r   r   r   r	   r
   r   ri   typing_extensionsr   r   tyro._typing_compatr   r   r   r   r   confr   r   	dataclassr   r*   r/   rU   r%   rd   	lru_cacheobjectro   Markerr   setfilterchainvarsvaluesabcr   r$   r   r   r'   r(   <module>r      s   C      	  
 
 
 
  6 1 0 0 Cx  d#  $ d#! ! $! d#J
 J
 $J
Z D!,	,, !, ",^ T"V S#X  # D!r	rr).x/C)Drc]r "rj 25
)N!!#!((*	
2 X  D!8 8S 8 "8r'   