
    h;                       S SK J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  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  SSKJrJr  SS	KJrJrJrJr  SS
K J!r!  SSK"J#r#J$r$  \(       a  SSK%J&r&  \RN                  " SS9 " S S5      5       r( " S S\)5      r*\RN                  " SS9 " S S5      5       r+\RN                  " SS9 " S S5      5       r,\RN                  " SS9 " S S5      5       r-SS jr.g)    )annotationsN)TYPE_CHECKINGAnyCallableDictIterableSequence)castget_args
get_originis_typeddict)is_typing_notrequiredis_typing_required)PrimitiveTypeInfoUnsupportedTypeAnnotationError   )_docstrings	_resolver)EXCLUDE_FROM_CALLMISSINGMISSING_AND_MISSING_NONPROPMISSING_NONPROP)TypeForm)_confstruct_markers   ConstructorRegistryT)frozenc                  $    \ rS rSr% SrS\S'   Srg)UnsupportedStructTypeMessage   z9Reason why a callable cannot be treated as a struct type.strmessage N__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r%       X/home/james-whalen/.local/lib/python3.13/site-packages/tyro/constructors/_struct_spec.pyr!   r!      s
    CLr.   r!   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )InvalidDefaultInstanceError%   zLRaised when a default instance is not applicable to an annoated struct type.c                $   > [         TU ]  U5        g N)super__init__)selfr$   	__class__s     r/   r6   $InvalidDefaultInstanceError.__init__(   s    !r.   r%   )r$   r#   )r'   r(   r)   r*   r+   r6   r-   __classcell__)r8   s   @r/   r1   r1   %   s    V" "r.   r1   c                  l    \ rS rSr% SrS\S'    S\S'    S\S'    S	rS
\S'    S	rS\S'    S	rS\S'   Sr	g	)StructFieldSpec,   z:Behavior specification for a single field in our callable.r#   namer   typer   defaultNz
str | Nonehelptext_call_argnameNoneis_default_overriddenr%   )
r'   r(   r)   r*   r+   r,   rA   rB   rD   r-   r%   r.   r/   r<   r<   ,   sI    D
I?
NSL)Hj!M3"&4&%r.   r<   c                  0    \ rS rSr% SrS\S'    S\S'   Srg)	StructConstructorSpecA   a[  Specification for a struct type, which is broken down into multiple
fields.

Each struct type is instantiated by calling an ``instantiate(**kwargs)``
function with keyword a set of keyword arguments.

Unlike :class:`PrimitiveConstructorSpec`, there is only one way to use this class.
It must be returned by a rule in :class:`ConstructorRegistry`.
zCallable[..., Any]instantiateztuple[StructFieldSpec, ...]fieldsr%   Nr&   r%   r.   r/   rF   rF   A   s     $#5''<r.   rF   c                  \    \ rS rSr% SrS\S'    S\S'    S\S'    S	\S
'   \SS j5       rSrg)StructTypeInfoT   z;Information used to generate constructors for struct types.r   r?   ztuple[Any, ...]markersr   r@   z$_resolver.TypeParamAssignmentContext_typevar_contextc                   [         R                  " U [        R                  5      u  p#[         R                  " U [        R
                  5      u  pU[        ;   a  [        U5      S:  a  US   R                  n[         R                  R                  U 5      nUR                  n [         R                  " X5      n [         R                  " X5      n [        [        [         U 5      X1U5      $ )Nr   )r   unwrap_annotatedr   _Markerr   _SubcommandConfigr   lenr@   TypeParamResolverget_assignment_contextorigin_typenarrow_subtypesnarrow_collection_typesrK   r
   r   )fr@   _parent_markersfound_subcommand_configstypevar_contexts         r/   makeStructTypeInfo.makec   s    %66q(:J:JK&/&@&@{,,'
#. 11c:R6SVW6W.q199G $55LLQO''%%a1--a91~
 	
r.   r%   N)rY   zTypeForm | Callabler@   r   returnrK   )	r'   r(   r)   r*   r+   r,   staticmethodr^   r-   r%   r.   r/   rK   rK   T   s:    E
N-LL? ;:$
 $
r.   rK   c                  ^ SSK Jm  SSKJn  SSKJn  SSKJn  SSKJ	n  SSK
Jn  U R                  U5        U R                  U5        U R                  U5        U R                  U5        U R                  U5        U R                  SU4S	 jj5       nU R                  SS
 j5       nU R                  SS j5       nU R                      SS j5       n	U R                  SS j5       n
g)zApply default struct rules to the registry.

This function registers all the struct rules for different types:
- Dataclasses
- TypedDict
- Attrs classes
- Dict
- NamedTuple
- Sequences
- Tuples
- Pydantic models
r   )is_struct_typer   )
attrs_rule)dataclass_rule)ml_collections_rule)msgspec_rule)pydantic_rulec                  > [        U R                  5      (       d  g [        [        U R                  5      n/ nU R                  [        ;  =(       a    U R                  [
        LnU(       a!  [        U R                  [        5      (       d   e[        USS5      n[        U[        5      (       d   eU(       a!  [        U R                  [        5      (       d   e[        R                  " USS9R                  5        GHQ  u  pV[        U5      n[        U5      (       d  [        U5      (       a(  [!        U5      n[#        U5      S:X  d   S5       eUS   n	AOUn	U(       a<  U[        [        U R                  5      ;   a  [        [        U R                  5      U   n
OX[        U5      (       a  USL a  [$        n
O<USL a  [
        n
T" U	[&        5      (       a   O[        U5      (       a  [
        n
O[$        n
U
[
        L a  T" U	[&        5      (       a  [&        n
UR)                  [+        UU	U
[,        R.                  " XU R0                  5      S95        GMT     [3        U R                  [5        U5      S	9$ )
N	__total__Tinclude_extrasr   zFtyping.Required[] and typing.NotRequired[T] require a concrete type T.r   Fr>   r?   r@   rA   rH   rI   )r   r?   r
   r@   r   r   
isinstancedictgetattrboolr   "get_type_hints_resolve_type_paramsitemsr   r   r   r   rS   r   r   appendr<   r   get_field_docstringrM   rF   tuple)infocls
field_listvalid_default_instancetotalr>   typ
typ_originargs	inner_typr@   rc   s              r/   typeddict_rule2apply_default_struct_rules.<locals>.typeddict_rule   s    DII&&4# 
LL ;; 6$55 	 *Zd-K-KKK[$/%&&&&)Zd-K-KKK"EE

%'ID $CJ "*--1Fz1R1R}4yA~ \~ !G		%$$tT\\2J*JtT\\248#J//EUN!%+!)_== 'z22+! ++?1 1 *"#(<<SU	Ud %5CTUUr.   c                   [        U R                  5      (       dj  U R                  [        [        [        R
                  R                  4;  a8  [        U R                  5      [        [        R
                  R                  4;  a  g U R                  [        ;   d  [        U R                  5      S:X  a  g / nU R                  R                  5        H^  u  p#UR                  [        [        U[        R                   5      (       d  [#        U5      OUR$                  [        U5      US US95        M`     ['        [        [)        U5      S9$ )Nr   )r>   r?   r@   rA   rB   rn   )r   r?   r   rp   collectionsabcMappingr   r@   r   rS   rt   ru   r<   ro   enumEnumr#   r>   rF   rw   )rx   rz   kvs       r/   	dict_rule-apply_default_struct_rules.<locals>.dict_rule   s    		""II'' 499%'' <<66#dll:Kq:P
LL&&(DA'1!TYY'?'?QQVVa!"# ) %eJ>OPPr.   c                   [         R                  " U R                  5      (       d  g / n[        U R                  S0 5      n[        U R                  S/ 5      nU Vs0 s H	  oD[        _M     nnUR                  [         R                  " U R                  SS95        UR                  5        H  u  pgUR                  U[        5      nU R                  [        ;  a2  [        U R                  U5      (       a  [        U R                  U5      nOU R                  [        L a  [        nUR                  [        UUU[         R"                  " U R                  X`R$                  5      S95        M     ['        U R                  [)        U5      S9$ s  snf )N_field_defaults_fieldsTrk   rm   rn   )r   is_namedtupler?   rq   r   updaters   rt   getr   r@   r   hasattrr   ru   r<   r   rv   rM   rF   rw   )	rx   rz   field_defaultsfield_namesfield
type_hintsr>   r}   r@   s	            r/   namedtuple_rule3apply_default_struct_rules.<locals>.namedtuple_rule  sF   &&tyy11
 ,=rBdiiB7 /::kUSjk
:88SWX	
 $))+ID$((?G||#>>7dD D "$,,5(!#(<<		4		 ,* %5CTUU3 ;s   F
c           
        [        U R                  5      [        [        [        [
        [        R                  R
                  4;  d  [        U R                  [        5      (       d  g [        [        [        U R                  5      (       a  [        U R                  5      S   O[        5      nSSKJnJnJn  UR$                  " UR&                  " U[        U R(                  5      5      5      n[        XS5      (       a  UR*                  S:w  a  g / n[-        U R                  5       H7  u  pxUR/                  [1        [3        U5      [        [        U5      USS95        M9     [5        [        U R                  5      [	        U5      S9$ )Nr   r   )r   PrimitiveConstructorSpecr   * rm   rn   )r   r?   listsetrw   r	   r   r   ro   r@   r   r
   r   r   	_registryr   r   r   get_primitive_specr^   rM   nargs	enumerateru   r<   r#   rF   )	rx   contained_typer   r   r   contained_primitive_specrz   i	default_is	            r/   variable_length_sequence_ruleAapply_default_struct_rules.<locals>.variable_length_sequence_rule2  s8    dii OO$$)
 
 DLL(33 HTYY,?,?(499%a(S
	
 	
 $7#I#I"">3t||3DE$
  /JJ )..#5
%dll3LAQdN3%	 4 %T\\*53D
 	
r.   c           
        U R                   [        La  [        U R                   5      [        La  g [        U R                   5      n[        U;   a  g [        U5      S:X  aR  U R                  [        ;   a  g [        U R                  [        5      (       d   e[        S U R                   5       5      nU R                  [        ;   d  U R                  [        L a  U R                  4[        U5      -  nOU R                  n/ n[        U5       H-  u  pEX$   nUR                  [        [        U5      UUSS95        M/     SSKJn  SnU Hp  n	UR                   " ["        R$                  " U	R                   ['        U R(                  5      5      5      n
[        U
[*        5      (       d  U
R,                  S:X  d  Mn  S	n  O   U(       a  g [/        [        [        U5      S
9$ )Nr   c              3  8   #    U  H  n[        U5      v   M     g 7fr4   )r?   ).0xs     r/   	<genexpr>Aapply_default_struct_rules.<locals>.tuple_rule.<locals>.<genexpr>}  s      ?,Qa,s   r   rm   r   r   Tr   Frn   )r?   rw   r   r   EllipsisrS   r@   r   ro   r   r   ru   r<   r#   r   r   r   r   r^   r   rM   r   r   rF   )rx   childrendefault_instancerz   r   childr   r   primitive_onlyr   specs              r/   
tuple_rule.apply_default_struct_rules.<locals>.tuple_rulel  s    99E!j&;5&H DII&x x=A||::!$,,6666  ?$,, ?? LL77||00 $X>#||,.
!(+HA(+IQ%	 , 	3 E&99!&&uzz3t||3DED $ >??4::QTCT!&   $uZ?PQQr.   N)rx   rK   r`   zStructConstructorSpec | None)r   rc   _struct_spec_attrsrd   _struct_spec_dataclassre   _struct_spec_ml_collectionsrf   _struct_spec_msgspecrg   _struct_spec_pydanticrh   struct_rule)registryrd   re   rf   rg   rh   r   r   r   r   r   rc   s              @r/   apply_default_struct_rulesr      s     ).6@24 $(,-&'CV CVJ Q Q@ "V "VH 7
7
	%7
 7
r 8R 8Rr.   )r   r   r`   rC   )/
__future__r   collections.abcr   dataclassesr   typingr   r   r   r   r   r	   typing_extensionsr
   r   r   r   tyro._typing_compatr   r   !tyro.constructors._primitive_specr   r   r   r   r   
_singletonr   r   r   r   _typingr   confr   r   r   r   	dataclassr!   	Exceptionr1   r<   rF   rK   r   r%   r.   r/   <module>r      s    "    I I F F I
 &   (. d#  $") " d#& & $&( d#< < $<$ d#3
 3
 $3
lZRr.   