
    lKj<                        d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZ erddlmZ  ed	e

      ZddlmZ ddlmZmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ejP                  dk\  rddlm)Z) ndZ) e'dddddd      Z*i e"e"fe"e"e!fe!e"e fe e"e$fe$e"e#fe#e!e"fe!e!e!fe!e!e fde!e$fe$e!e#fde e"fe e e!fde e fe e e$fde e#fe#e$e"fe!e$e!fe!e$e fde$e$fe$e$e#fde#e"fe e#e!fde#e fe e#e$fde#e#fe#iZ+de,dee-ge-f   de.e-   fdZ/d Z0deege1e-e%f   f   dede1e-ef   ge.e-   f   fdZ2de,e   de1e-e3f   dee-ge-f   defdZ4de-de3fdZ5de-ee-   z  dz  de3fd Z6d!dd"e7e-   ddfd#Z8d!dd$e'de3fd%Z9d!dd"e7e-   de:e-d&f   dz  fd'Z;d(ede1e:e-d&f   e'f   fd)Z<d* Z=d+e:e-d&f   de:e-d&f   fd,Z>	 d1d-e:e-d&f   dz  dee:e:e-d&f   ef      fd.Z?d/e-de-fd0Z@y)2z?Shared helper functions and constants for the argument package.    N)CallableIterableIterator)suppress)EnumFlag)partial)TYPE_CHECKING	AnnotatedAnyLiteralTypeVarget_args
get_origin)ArgumentF)bound)convert_enum_flag)ITERABLE_TYPES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env_vartype_name_transformreturnc                 :   t        t              }g }t        |       }t        | t              r6t        | t              r&|j                  fd| j                  D               |S t        |      r;t        |       D cg c]
  } ||       }}|D ]  }|s|j                  |        |S |t        u r#|j                  d t        |       D               |S |t        v rVt        |       }t        |      dk(  s!|t        u r3t        |      dk(  r%|d   t        u r|j                   ||d                |S |t         u r"|j                   |t#        |                    |S t$        1t        | t$              r!|j                   || j&                               |S c c}w )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   .   K   | ]  } |        y wN ).0xr*   s     h/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/cyclopts/argument/utils.py	<genexpr>z(get_choices_from_hint.<locals>.<genexpr>`   s     D2CQ~a(2Cs   c              3   2   K   | ]  }t        |        y wr.   )strr0   r1   s     r2   r3   z(get_choices_from_hint.<locals>.<genexpr>g   s     7!s1v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   r9   r9   K   sr   " /OKGG%#8#ED%2C2CDD  N 
'	9A%IU+IAq!  N 
G	7x77 N 
N	"t9>g.3t9>d1gQYFYNN;tAw/0
 N	 
I	{#4U#;<= N 
	"z%'G{5??34N Js   >Fc                 B    d } ||       j                   ||            S )Nc                 &    | j                  dd      S )N_-)replace)ss    r2   	normalizezstartswith.<locals>.normalizet   s    yyc""    
startswith)stringprefixrN   s      r2   rQ   rQ   s   s$    # V''	&(9::rO   get_field_infor   c                 X     dddt         t        t        f   dt        t           f fd}|S )Nargumentr   datar+   c                     t        |      } | j                        }|j                         D cg c]  \  }}|j                  s||vs| c}}S c c}}w r.   )sethintitemsrequired)rV   rW   provided_keys
field_infokvrT   s         r2   rE   z#missing_keys_factory.<locals>.inner}   sN    D	#HMM2
(..0\0daQZZA]DZ0\\\s   AAA)dictr5   r   list)rT   rE   s   ` r2   missing_keys_factoryrc   z   s4    ]
 ]$sCx. ]T#Y ]
 LrO   	enum_typerW   c                 F    t        | d |j                         D        |      S )a5  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   ,   K   | ]  \  }}|s	|  y wr.   r/   )r0   r_   r`   s      r2   r3   z&enum_flag_from_dict.<locals>.<genexpr>   s     (I|tq!q|s   
)r   r[   )rd   rW   r*   s      r2   enum_flag_from_dictrg      s    & Y(Itzz|(I>ZZrO   flagc                 F    t        |       dk(  xr | d   dk(  xr | d   dk7  S )zWReturn :obj:`True` for a single-letter flag like ``-e`` (not ``--env`` or ``-`` alone).r8   r   rK   r7   )r>   )rh   s    r2   is_short_flagrj      s*    t9>?d1gn?aC?rO   namesc                 T    t        | t              r| f} t        d | xs dD              S )a}  Return :obj:`True` if the parameter surfaces at the root CLI namespace.

    A root-namespace parameter has an **undotted** long flag (e.g. ``--env``). This
    covers genuine top-level command parameters as well as fields promoted to the root
    via ``Parameter(name="*")`` or PEP 692 unpacking (``--name``), while excluding dotted
    nested fields such as ``--user.name``.
    c              3   J   K   | ]  }|j                  d       xr d|v  yw)--.NrP   )r0   ns     r2   r3   z%_is_root_namespace.<locals>.<genexpr>   s&     J[qq||D!2cl2[s   !#r/   )r:   r5   any)rk   s    r2   _is_root_namespacerr      s,     %JU[b[JJJrO   rV   used_short_aliasesc                     | j                   }g |j                  xs d|j                  xs dD ]  }t        |      s|j	                  |       ! y)a  Phase 1a: reserve every explicitly-provided short flag into ``used_short_aliases``.

    Runs for *every* argument as the tree is built (independent of eligibility), so that
    auto-generation (phase 2, deferred until the whole tree is known) avoids user-supplied
    shorts regardless of parameter ordering. At this point no auto short has been appended
    yet, so any single-letter flag present is necessarily user-provided.
    r/   N)	parameterr#   r$   rj   add)rV   rs   cparamrh   s       r2   reserve_explicit_shortsrx      sK     F=6;;$"=);=""4( >rO   immediate_parameterc                     | j                   }|j                  syd|j                  v sd|j                  v s|j                  ryt	        |j
                        sy| j                  r| j                  syy)u)  Phase 1b: pure predicate for whether this argument should receive an auto-generated short flag.

    Auto shorts apply to opted-in (``short_alias``), **input-binding** parameters only
    (scalars, dicts, enum flags) — never to promoted containers whose fields become child
    options. They apply only to **root-namespace** parameters (an undotted long flag). A
    field that stays namespaced (e.g. ``--user.name``) never gets one — ``short_alias`` on
    such a field is inert; flatten it to the root namespace via ``name="*"`` to expose it.
    Fr#   r$   T)ru   short_alias_provided_argsr$   rr   r#   _accepts_keywords_enum_flag_type)rV   ry   rw   s      r2   is_short_alias_eligibler      sp     F $333wBUBdBd7dhnhtht fkk* !!(*B*BrO   .c                    | j                   }| j                  }d}|j                  }t        |      r ||t	                    }n|r|j
                  t        t        fvry| j                  t        u r|j                  du ry|j                  |j                  d         }|r8|d   j                         }d| d|j                          fD ]
  }|vs|} n |syt        |t               r|f}	n	 t#        |      }	|	D ],  }
t        |
t               rt'        |
      rt)        d|
d       t#        fd|	D              }	|	syj+                  |	       |	S # t$        $ r t%        d|d      dw xY w)	a  Phase 2: generate the auto short flag(s) for an argument deemed eligible by phase 1.

    Deferred until every parameter's explicit short has been reserved, so an earlier
    parameter's auto short can never shadow a later parameter's explicit ``alias``.

    Returns the generated short name(s) to append to the argument's name as standalone
    flags (so they surface globally, e.g. ``-e``, never dotted like ``-u.name``), or
    :obj:`None`. Mutates ``used_short_aliases`` to reserve claimed letters.
    NTr   rK   zSParameter.short_alias callable must return a str, an iterable of str, or None; got ro   zTParameter.short_alias callable must return single-letter short flags like '-e'; got c              3   ,   K   | ]  }|vs|  y wr.   r/   )r0   rM   rs   s     r2   r3   z'generate_short_alias.<locals>.<genexpr>   s     Df1C(C1fs   	)ru   r^   r{   callable	frozensetkindr   r   rZ   booldefaultr*   rk   lowerupperr:   r5   r?   	TypeErrorrj   
ValueErrorupdate)rV   rs   rw   r^   shortr{   transformedletter	candidateshortsrM   s    `         r2   generate_short_aliasr      s    F$$JE$$K J	2D(EF	.0QQ ==D Z%7%74%? ++J,<,<Q,?@ ^))+F !&la/?,@A	$66%E B
 %	5\F !S!q)9fghfkklm   DfDDFf%M%  	efkennop	s   1E E1fc           	      j   ddl m} t        t              5  | j                  } d d d        i }t        | dd       x}rjt        |d d       D ]W  }	  ||      }|j                  D ]=  }t        |j                        |t        |j                  j                  d            <   ? Y |S 	  ||       }|j                  D ]=  }t        |j                        |t        |j                  j                  d            <   ? 	 |S # 1 sw Y   xY w# t        t        f$ r Y w xY w# t        t        f$ r Y |S w xY w)Nr   )parse_from_object__mro__)helpro   )docstring_parserr   r   AttributeErrorfuncgetattrreversedparamsr   descriptionr?   arg_namesplitr   )r   r   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   C>AD
'AD >D
DDD21D2c                     | j                  d      r| d d j                  d      } | r| j                  d      sd| z   } | S )N*r   ro   rK   rn   )endswithrstriprQ   )elems    r2   resolve_parameter_name_helperr   O  s@    }}SCRy$DOOC(d{KrO   argssc                  t   t        d | D              } t        |       dk(  ryt        |       dk(  rt        d | d   D              S g }| d   D ]S  }t        |      }| d   D ]>  }|j                  d      s|s|j	                  |       (|j	                  |dz   |z          @ U t        t        |      g| dd	  S )
a  Resolve 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   &   K   | ]	  }|s|  y wr.   r/   r6   s     r2   r3   z)resolve_parameter_name.<locals>.<genexpr>d  s     (Ua!Us   r   r/   r7   c              3   @   K   | ]  }|d k(  rd n
t        |        yw)r   N)r   r6   s     r2   r3   z)resolve_parameter_name.<locals>.<genexpr>i  s$     ]T\qAHS*G*JJT\s   rK   ro   r8   N)r?   r>   r   rQ   appendresolve_parameter_name)r   outa1a2s       r2   r   r   W  s     (U((E
5zQ	Uq]TYZ[T\]]]
CAh*2.(B}}S!

2

28b=)	   "%*9uQRy99rO   parent_keysc              #      K   |d}t        | t              rJ| j                         D ]6  \  }}||fz   }t        |t              rt        ||      E d {    1||f 8 y d| f y 7 w)Nr/   )r:   ra   r[   walk_leaves)dr   keyvaluecurrent_keyss        r2   r   r   w  sr      !T'')JC&#/L%&&ul;;;"E)) $ !e	 <s   AA*A(A*keysc                  *    ddj                  |       z   S )Nrn   ro   )join)r   s    r2   to_cli_option_namer     s    #((4.  rO   r.   )A__doc__syscollections.abcr   r   r   
contextlibr   enumr   r   	functoolsr	   typingr
   r   r   r   r   r   r   cyclopts.argument._argumentr   r   cyclopts._convertr   cyclopts.annotationsr   r   r   r   cyclopts.field_infor   r   r   r   r   r   cyclopts.parameterr   version_infor"   PARAMETER_SUBKEY_BLOCKERKIND_PARENT_CHILD_REASSIGNMENTr;   r5   rb   r9   rQ   ra   rc   r   rg   rj   rr   rY   rx   r   r?   r   r   r   r   r   r   r/   rO   r2   <module>r      s
   E 
 8 8    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([ 	[,@ @ @

KcHSM1D8 
KT 
K)j )c#h )SW )'j 'y 'UY 'T??C? 38_t?D%h %4c3h0J+K %P:5c? :uS#X :D +/sCx4' eE#s(OS()*$!c !c !rO   