
    k7i
"                     v   S 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  SSKJrJrJrJrJrJrJr  \(       a  SSKJr  \" S	\	S
9rSSKJrJr  SSK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&  \RN                  S:  a  SSKJ(r(  OSr(\&" SSSSSSSS9r)0 \!\!4\!_\!\ 4\ _\!\4\_\!\#4\#_\!\"4\"_\ \!4\ _\ \ 4\ _\ \4S_\ \#4\#_\ \"4S_\\!4\_\\ 4S_\\4\_\\#4S_\\"4\"_\#\!4\ _\#\ 4\ _\#\4S\#\#4\#\#\"4S\"\!4\\"\ 4S\"\4\\"\#4S\"\"4\"0Er*S\+S\\,/\,4   S\-\,   4S jr.S r/S\\/\0\,\$4   4   S\S\0\,\4   /\-\,   4   4S jr1S r2S\+\   S\0\,\34   S\\,/\,4   S\4S jr4S\S\0\5\,S4   \&4   4S  jr6S! r7S"\5\,S4   S\5\,S4   4S# jr8 S(S$\5\,S4   S-  S\\5\5\,S4   \4      4S% jjr9S&\,S\,4S' jr:g))z?Shared helper functions and constants for the argument package.    N)CallableIterator)suppress)EnumFlag)partial)TYPE_CHECKING	AnnotatedAnyLiteralTypeVarget_args
get_origin)ArgumentF)bound)ITERABLE_TYPESconvert_enum_flag)is_class_and_subclassis_unionresolve_annotated)KEYWORD_ONLYPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDVAR_KEYWORDVAR_POSITIONAL	FieldInfo)	Parameter)      )TypeAliasType)namealias	converter	validatoraccepts_keysconsume_multipleenv_vartype_name_transformreturnc                   ^ [        [        TS9n/ n[        U 5      n[        U [        5      (       a<  [        U [        5      (       a'  UR                  U4S jU R                   5       5        U$ [        U5      (       aE  [        U 5       Vs/ s H
  oR" U5      PM     nnU H  nU(       d  M  UR                  U5        M     U$ U[        L a#  UR                  S [        U 5       5       5        U$ U[        ;   aZ  [        U 5      n[        U5      S:X  d$  U[        L a5  [        U5      S:X  a&  US   [        L a  UR                  U" US   5      5        U$ U[         L a"  UR                  U" [#        U 5      5      5        U$ [$        b6  [        U [$        5      (       a!  UR                  U" U R&                  5      5        U$ s  snf )a  Extract completion choices from a type hint.

Recursively extracts choices from Literal types, Enum types, and Union types.

Parameters
----------
type_ : type
    Type annotation to extract choices from.
name_transform : Callable[[str], str]
    Function to transform choice names (e.g., for case conversion).

Returns
-------
list[str]
    List of choice strings extracted from the type hint.
)r*   c              3   4   >#    U  H  nT" U5      v   M     g 7fN ).0xr*   s     Q/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/argument/utils.py	<genexpr>(get_choices_from_hint.<locals>.<genexpr>`   s     D2CQ~a((2Cs   c              3   8   #    U  H  n[        U5      v   M     g 7fr.   )strr0   r1   s     r2   r3   r4   g   s     7!s1vvs         r   )r   get_choices_from_hintr   
isinstancetyper   r   extend__members__r   r   r   r   lentupleEllipsisr
   r   r!   	__value__)	r)   r*   get_choiceschoices_origininnerinner_choicesr1   argss	    `       r2   r:   r:   K   s   " /OKGG%#8#E#ED%2C2CDD  N 
'		9A%IU+IAqq!  N 
G	7x77 N 
N	"t9>g.3t9>d1gQYFYNN;tAw/0
 N	 
I	{#4U#;<= N 
	"z%'G'G{5??34N Js   F=c                 B    S nU" U 5      R                  U" U5      5      $ )Nc                 &    U R                  SS5      $ )N_-)replace)ss    r2   	normalizestartswith.<locals>.normalizet   s    yyc""    )
startswith)stringprefixrO   s      r2   rR   rR   s   s$    # V''	&(9::rQ   get_field_infor   c                 \   ^  SSS[         [        [        4   S[        [           4U 4S jjnU$ )Nargumentr   datar+   c                    > [        U5      nT" U R                  5      nUR                  5        VVs/ s H!  u  pEUR                  (       d  M  XB;  d  M  UPM#     snn$ s  snnf r.   )sethintitemsrequired)rW   rX   provided_keys
field_infokvrU   s         r2   rF   #missing_keys_factory.<locals>.inner}   sL    D	#HMM2
(..0\0daQZZADZ0\\\s   AAA)dictr6   r   list)rU   rF   s   ` r2   missing_keys_factoryre   z   s4    ]
 ]$sCx. ]T#Y ]
 LrQ   c                 j    [        U 5      SS   H  n UR                  s  $    g ! [         a     M"  f = f)Nr8   )r   discriminatorAttributeError)
annotationmetas     r2   get_annotated_discriminatorrk      sB    $QR(	%%% )
   		s   $
22	enum_typerX   c                 F    [        U S UR                  5        5       U5      $ )a	  Convert a dictionary of boolean flags to a Flag enum value.

Parameters
----------
enum_type : type[F]
    The Flag enum type to convert to.
data : dict[str, bool]
    Dictionary mapping flag names to boolean values.

Returns
-------
F
    The combined flag value.
c              3   <   #    U  H  u  pU(       d  M  Uv   M     g 7fr.   r/   )r0   r`   ra   s      r2   r3   &enum_flag_from_dict.<locals>.<genexpr>   s     (I|tqq|s   	)r   r\   )rl   rX   r*   s      r2   enum_flag_from_dictrp      s    & Y(Itzz|(I>ZZrQ   f.c           	         SSK Jn  [        [        5         U R                  n S S S 5        0 n[        U SS 5      =n(       ak  [        US S 5       HW  n U" U5      nUR                   H;  n[        UR                  S9U[        UR                  R                  S5      5      '   M=     MY     U$  U" U 5      nUR                   H;  n[        UR                  S9U[        UR                  R                  S5      5      '   M=     U$ ! , (       d  f       N= f! [        [        4 a     M  f = f! [        [        4 a     U$ f = f)Nr   )parse_from_object__mro__)help.)docstring_parserrs   r   rh   funcgetattrreversedparamsr   descriptionr@   arg_namesplit	TypeError)rq   rs   resultmro
base_classparseddparams          r2   extract_docstring_helpr      s(   2	.	!FF 
" F aD))s) #3s8,J*:6$mmF@IvOaOa@bF5!6!6s!;<= , -$ M	&q)F --<E6K]K]<^uV__223789 ( ME 
"	!* ~.  >* 	M		s1   DAD-AD* 
DD'&D'*D>=D>c                     U R                  S5      (       a  U S S R                  S5      n U (       a  U R                  S5      (       d  SU -   n U $ )N*ru   rw   rL   --)endswithrstriprR   )elems    r2   resolve_parameter_name_helperr      sF    }}SCRy$DOOC((d{KrQ   argssc                     [        S U  5       5      n [        U 5      S:X  a  g[        U 5      S:X  a  [        S U S    5       5      $ / nU S    Ha  n[        U5      nU S    HJ  nUR                  S5      (       d  U(       d  UR	                  U5        M3  UR	                  US-   U-   5        ML     Mc     [        [        U5      /U SS	 Q76 $ )
zResolve parameter names by combining and formatting multiple tuples of strings.

Parameters
----------
*argss
    Each tuple represents a group of parameter name components.

Returns
-------
tuple[str, ...]
    A tuple of resolved parameter names.
c              3   6   #    U  H  o(       d  M  Uv   M     g 7fr.   r/   r7   s     r2   r3   )resolve_parameter_name.<locals>.<genexpr>   s     (Ua!!Us   
	r   r/   r8   c              3   F   #    U  H  oS :X  a  S O
[        U5      v   M     g7f)r   N)r   r7   s     r2   r3   r      s!     ]T\qHS*G*JJT\s   !rL   rw   r9   N)r@   r?   r   rR   appendresolve_parameter_name)r   outa1a2s       r2   r   r      s     (U((E
5zQ	Uq]TYZ[T\]]]
CAh*2.(B}}S!!

2

28b=)	   "%*9uQRy99rQ   parent_keysc              #      #    Uc  Sn[        U [        5      (       aN  U R                  5        H9  u  p#X4-   n[        U[        5      (       a  [        X45       S h  vN   M4  XC4v   M;     g SU 4v   g  N7f)Nr/   )r;   rc   r\   walk_leaves)dr   keyvaluecurrent_keyss        r2   r   r      so      !T'')JC&/L%&&&u;;;")) $ !e	 <s   AA4A2A4keysc                  *    SSR                  U 5      -   $ )Nr   rw   )join)r   s    r2   to_cli_option_namer     s    #((4.  rQ   r.   );__doc__syscollections.abcr   r   
contextlibr   enumr   r   	functoolsr   typingr	   r
   r   r   r   r   r   cyclopts.argument._argumentr   r   cyclopts._convertr   r   cyclopts.annotationsr   r   r   cyclopts.field_infor   r   r   r   r   r   cyclopts.parameterr   version_infor!   PARAMETER_SUBKEY_BLOCKERKIND_PARENT_CHILD_REASSIGNMENTr<   r6   rd   r:   rR   rc   re   rk   boolrp   r@   r   r   r   r   r   r/   rQ   r2   <module>r      si   E 
 .    X X X4Ct ? 
  )w$M$	
 "124I"O,o" L)<" N+^	"
 K(+" +,o" o&" l#T" n%~" k"D" ()<" ?#T" < ," >"D" ;"  *+_!"" _%#"$ \"D^$n[!4'(,/"D,.!4+3" :% %xs
7K %PTUXPY %P;cUDi$889z4S>*DI56[Aw[
sDy/[ cUCZ([ 	[,%h %4c3h0J+K %P:5c? :uS#X :D +/sCx4' eE#s(OS()*$!c !c !rQ   