
    k7iG                        S SK rS SKrS SKrS SK Jr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  S SKrS SKJrJr  \R(                  S:  a  S SK	Jr  OS SKJ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"  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-  \." \\/   \\/   \R`                  R                  \/   \1\/   \\/   \2\/S4   \\/S4   15      r3\" S5      r4\." \/S\/\Q\3Q5      r5S r6S\2\7S4   4S jr8\," S5      \* " S S5      5       5       r9\9Rt                   V s0 s H-  n U Rv                  (       d  M  U Rx                  U Rz                  _M/     sn r>\9" 5       r?S\4S jr@SS\4S\/S\2\4\1\9   4   4S jjrA\ " S S5      5       rBgs  sn f )    N)CallableIterableSequence)deepcopy)AnyListTupleTypeVarcastget_args
get_origin)definefield)      )Self)ITERABLE_TYPES)NoneTypeis_annotatedis_nonetypeis_unionresolveresolve_annotatedresolve_optional)get_field_infossignature_parameters)Group)default_name_transformfrozenoptional_to_tuple_converterrecord_initto_tuple_converter.Tc                 |    U H6  nUc  M  UR                  S5      (       d  M   [        UR                   S35      e   g )N-z value must NOT start with "-".)
startswith
ValueErroralias)instance	attributevaluesvalues       L/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/parameter.py_not_hyphen_validatorr.   ?   s:    !1!1#!6!6	00OPQQ     defaultc                 6   ^  S[         [        S4   4U 4S jjnU$ )Nreturn.c                 $   > U c  T$ [        U 5      $ N)r"   )r,   r0   s    r-   	converter&_negative_converter.<locals>.converterF   s    =N%e,,r/   )tuplestrr0   r5   s   ` r-   _negative_converterr:   E   s    -E#s(O - r/   _provided_argsc            	          \ rS rSr% Sr\" SS S9rS\-  \\   -  \	S'   \" SSS9r
\S	\4   \-  S-  \	S
'   \" SS SS9rS\\\/\4   -  \\\\/\4      -  \	S'   \" SS SS9rS\-  \\   -  \	S'   \" S\SS9rS\-  \\   -  \	S'   \" S\SSS9rS\-  \-  \\\-     -  \	S'   \" S\R*                  R-                  S5      SS9r\\	S'   \" SSSS9r\S-  \	S'   \" SSS9rS\-  \\/\4   -  \	S'   \" S\R*                  R-                  S5      SS9r\\	S'   \" SSS9r\S-  \	S'   \" S\R*                  R-                  S5      SS9r\\	S'   \" SS SS9rS\-  \\   -  \	S'   \" \R@                  RB                  SS9r!\\	S'   \" S\"" S 5      \#SS!9r$S\-  \\   -  \	S"'   \" S\"" S#5      \#SS!9r%S\-  \\   -  \	S$'   \" S\"" S5      \#SS!9r&S\-  \\   -  \	S%'   \" SSS9r'\S-  \	S&'   \" SSS9r(\\	S''   \" S(SSS)9r)\\/\4   S-  \	S*'   \" SSS9r*\S-  \	S+'   \" S\R*                  R-                  S5      SS9r+\\	S,'   \" SSS9r,\S-  \	S-'   \" SSS9r-\S-  \	S.'   \" S\R*                  R-                  S5      SS9r.\\	S/'   \" SSS9r/\0S-  \	S0'   \" \1SSS19r2\1\S	4   \	S2'   \3S3\4S4 j5       r4\3S5 5       r5S3\1\S	4   4S6 jr6S7 r7\8S@S9 j5       r9\8S3\:4S: j5       r;\8S;\S<S8S3\1\S 4   4S= j5       r<S>\=S3\=4S? jr>Sr?g)A	ParameterO   a  Cyclopts configuration for individual function parameters with :obj:`~typing.Annotated`.

Example usage:

.. code-block:: python

    from cyclopts import app, Parameter
    from typing import Annotated

    app = App()


    @app.default
    def main(foo: Annotated[int, Parameter(name="bar")]):
        print(foo)


    app()

.. code-block:: console

    $ my-script 100
    100

    $ my-script --bar 100
    100
Nc                 F    [        [        [        S4   [        U 5      5      $ N.r   r7   r8   r"   xs    r-   <lambda>Parameter.<lambda>t       DsCx2DQ2GHr/   r9   nameT)r0   kw_only.r5    c                 l    [        [        [        [        [        /[        4   S4   [	        U 5      5      $ r@   )r   r7   r   r   r"   rB   s    r-   rD   rE      s)    Dxc
C'@#'E!FHZ[\H]^r/   )r0   r5   rH   	validatorc                 F    [        [        [        S4   [        U 5      5      $ r@   rA   rB   s    r-   rD   rE      rF   r/   r(   negativeF)r0   r5   rH   hashgroupparseshow)r0   r(   rH   _showshow_defaultshow_choiceshelpshow_env_varc                 F    [        [        [        S4   [        U 5      5      $ r@   rA   rB   s    r-   rD   rE      rF   r/   env_varenv_var_split)zno-)r0   r5   rK   rH   negative_bool)zempty-negative_iterablenegative_nonerequiredallow_leading_hyphenname_transform)r(   r0   rH   _name_transformaccepts_keysconsume_multiple	json_dict	json_listcountn_tokens)factoryiniteqr;   r2   c                 L    U R                   b  U R                   $ U R                  $ r4   )rR   rP   selfs    r-   rQ   Parameter.show
  s    !ZZ3tzzCCr/   c                 H    U R                   (       a  U R                   $ [        $ r4   )r`   r   rk   s    r-   r_   Parameter.name_transform  s    '+';';t##WAWWr/   c           	         U R                   (       a  U R                  c  g[        U5      n[        U5      (       a\  [	        U5      n[        US S9n/ nU H3  nU R                  U5       H  nXd;  d  M
  UR                  U5        M     M5     [        U5      $ [        U5      nU[        ;  a  U(       a  U[        ;  a  gOg/ / pU R                  (       aN  U R                   H,  n	U	R                  S5      (       a  UOUR                  U	5        M.     U(       d  [        U5      $ [        U R                  [        5      (       d   eU R                   GH  n
U
R                  S5      (       d  M  U
SS  n
U
R                  S5      nU[        L d
  U[         ;   a  U R"                  nO,[%        U5      (       d  Uc  U R&                  nOU R(                  nSR+                  US S 5      nU(       a  US-  n[        U[        5      (       d   eU R                  c/  U H'  nU(       d  M  UR                  SU U US    35        M)     M  U H  n	UR                  SU U	 35        M     GM     [        U5      $ )	NrI   c                 .    [        U 5      =(       d    U S L $ r4   )r   rB   s    r-   rD   )Parameter.get_negatives.<locals>.<lambda>  s    KN<WaSWi<Wr/   )keyr%   z--   .)re   rM   r   r   r   sortedget_negativesappendr7   r   _NEGATIVE_FLAG_TYPESr&   
isinstancerG   splitboolITERATIVE_BOOL_IMPLICIT_VALUErZ   r   r\   r[   join)rl   type_
union_argssorted_argsoutrC   negoriginuser_negativesrM   rG   name_componentsnegative_prefixesname_prefixnegative_prefixs                  r-   rx   Parameter.get_negatives  s)   ::$--/!%(E??!%J !1XYKC --a0C~

3 1 ! :E",,!55 6  "^== MM ++C00nLLXV * "Sz!$))U++++IID??4((8D"jjoO})F F$($6$6!U##u}$($6$6!$($:$:!((?3B#78Ks"/7777}}$'8O&

R}_4EoVXFYEZ#[\ (9 !/HJJK=
;< !/+ . Szr/   c                    SR                  U R                   Vs/ s HD  nUR                  U R                  ;   d  M  UR                   S[	        XR
                  5      < 3PMF     sn5      n[        U 5      R                   SU S3$ s  snf )zOnly shows non-default values.z, =())r   __attrs_attrs__r(   r;   getattrrG   type__name__)rl   acontents      r-   __repr__Parameter.__repr__O  s    )) ---A77d111 7177)1WT66256-
 t*%%&ay22s
   B)BParameter | Nonec                     0 nU Vs/ s H	  o3c  M  UPM     nn[        U5      S:X  a  US   $ U(       d  [        $ U H+  nUR                   H  n[        U[        U   5      X&'   M     M-     U " S0 UD6$ s  snf )zReturns a new Parameter with combined values of all provided ``parameters``.

Parameters
----------
*parameters : Parameter | None
     Parameters who's attributes override ``self`` attributes.
     Ordered from least-to-highest attribute priority.
   r   rI   )lenEMPTY_PARAMETERr;   r   _parameter_alias_to_name)cls
parameterskwargsrC   filtered	parameterr(   s          r-   combineParameter.combineZ  s     );z!Az; x=AA;""!I"11 '	3KE3R S 2 " }V} <s
   A3A3c           	          U " S0 U R                    Vs0 s H,  oR                  (       d  M  UR                  UR                  _M.     snD6$ s  snf )zCreate a Parameter with all Cyclopts-default values.

This is different than just :class:`Parameter` because the default
values will be recorded and override all upstream parameter values.
rI   )r   rh   r(   r0   )r   r   s     r-   r0   Parameter.defaults  sG      
+.+>+>I+>a&&!qww		!+>I
 	
Is
   AAr   default_parametersc                     U[         R                  R                  L a  U(       a  XR                  " U6 4$ U[        4$ [        U5      u  pXR                  " / UQUQ76 4$ )z1Resolve the immediate Parameter from a type hint.)inspectr=   emptyr   r   get_parameters)r   r   r   r   s       r-   from_annotationParameter.from_annotation~  sa     G%%+++!kk+=>>>o-- .u 5E++G'9GJGGGr/   objc                     [        US5      (       d  [        US9Ul        O4UR                  R                  U:w  a  [	        UR                  5      Ul        UR                  R
                  R                  U 5        U$ )zDecorator interface for annotating a function/class with a :class:`Parameter`.

Most commonly used for directly configuring a class:

.. code-block:: python

    @Parameter(...)
    class Foo: ...
__cyclopts__)r   )hasattrCycloptsConfigr   r   r   r   ry   )rl   r   s     r-   __call__Parameter.__call__  sd     sN++-#6C!!S('(8(89C##**40
r/   )r   r   r2   r=   )@r   
__module____qualname____firstlineno____doc__r   rG   r8   r   __annotations__r5   r   r   rK   r(   r    rM   r"   rO   r   attrs
convertersdefault_if_nonerP   r}   rR   rS   rT   rU   rV   rX   cyclopts_env_varrY   r:   r.   rZ   r[   r\   r]   r^   r`   ra   rb   rc   rd   re   rf   intr7   r;   propertyrQ   r_   rx   r   classmethodr   r   r0   r   r#   r   __static_attributes__rI   r/   r-   r=   r=   O   s   @ (-H(D$*x}
$  272IxS!C'$.  Y^^YIthSz3//(8S#JPSO;T2UU  ).H)E4#:%  ,1-,HdSj8C=(  9>$	9E4%<# 55  ""2248E4  E4$;  8=8L$+# 44 
 ""2248L$  T48D#*8""2248L$  +0H+GTCZ(3-'  $!!//M8  16%h/'	1M4#:-  5:%k2'	5tczHSM1  16%b)'	1M4#:-  "HdTk 
 "'"$ 
 494OXseSj)D0  !&!L$+ 
 #""2259d  #4>Itd{>"4>Itd{>""2259E4  !HcDj  ',E%&PNE#s(OPDd D D X X;eCHo ;z	3  0 
 
 
 	HC 	H>P 	HUZ[^`k[kUl 	H 	HA ! r/   r=   fc                    U R                   =(       d    SR                  S5      (       a  g[        U 5      R                  5        GH  n[	        UR
                  5      nU(       d  [        UR
                  SS5      (       d  M>  [        R                  UR
                  5      u  p4UR                  (       d$  UR                  UR                  La  [        S5      eSUR                  ;   d  M  UR                  UR                  L d  M  UR
                  n[!        U5      n[#        U5      n[%        S UR                  5        5       5      nU(       d  GM  UR&                  (       a  UR&                  S   OSnU(       a  S	U S
3OSn	[        SU	 SU  SU SUR
                  R(                   SUR
                  R(                   SU SUR
                  R(                   SU SU SU SUR
                  R(                   S35      e   g)zValidate if a function abides by Cyclopts's rules.

Raises
------
ValueError
    Function has naming or parameter/signature inconsistencies.
 r   Nr   zJParameter.parse=False must be used with a KEYWORD_ONLY function parameter.*c              3   B   #    U  H  oR                   (       + v   M     g 7fr4   )r]   ).0
field_infos     r-   	<genexpr>#validate_command.<locals>.<genexpr>  s     %kPj**=*=&=&=Pjs   r   "z" z
Parameter zin function z has all optional values, uses Parameter(name="*"), but itself has no default value. Consider either:
    1) If immutable, providing a default value "z: z = z2()"
    2) Otherwise, declaring it optional like "z# | None = None" and instanting the z, object in the function body:
           if z is None:
               z())r   r&   r   r+   r   
annotationr   r=   r   rP   kindKEYWORD_ONLYr'   rG   r0   r   r   r   allnamesr   )
r   r   field_info_is_annotated_cparam	annotatedclass_field_infosall_fields_optional
param_namequoted_param_names
             r-   validate_commandr     s    	
&&z22*1-446
".z/D/D"E&wz7L7Ln^b/c/c --j.C.CD	||
z7N7N Nijj
 6;;""j&6&66 #--I	*I /	 :"%%kPaPhPhPj%k"k""4>4D4DZ--a0"
:Da
|2$6"!  !2 3<s CGGQlRTU_UjUjUsUsTttw  yC  yN  yN  yW  yW  xX XEEOLPRS]ShShSqSqRr  sV  Wa  Vb b%%/L 1&&0\Z5J5J5S5S4TTVX 9 7r/   hintskip_converter_paramsr2   c                    [        U 5      n / n[        U SS5      =n(       a  UR                  UR                  5        / n[	        U 5      (       a+  [        U 5      nUS   n UR                  S USS  5       5        / nU(       Gd7  XB-    GH.  nUR                  (       d  M  UR                  n[        U[        5      (       a  [        X5      n[        US5      (       a'  UR                  UR                  R                  5          O[        US5      (       d  M  [        US5      (       d  M  [        UR                  S5      (       d  M  UR                  R                  R                  UR                  5      n	U	(       d  M  [        U	S5      (       d  GM
  UR                  U	R                  R                  5          O   Xb-   U-   n
X
4$ )	ag  At root level, checks for cyclopts.Parameter annotations.

Includes checking the ``__cyclopts__`` attribute on both the type and any converter functions.

Parameters
----------
hint
    Type hint to extract parameters from.
skip_converter_params
    If True, skip extracting parameters from converter's __cyclopts__.
    Used to prevent infinite recursion in token_count.

Returns
-------
hint
    Annotation hint with :obj:`Annotated` and :obj:`Optional` resolved.
list[Parameter]
    List of parameters discovered, ordered by priority (lowest to highest):
    converter-decoration < type-decoration < annotation.
r   Nr   c              3   T   #    U  H  n[        U[        5      (       d  M  Uv   M      g 7fr4   )r{   r=   )r   rC   s     r-   r   !get_parameters.<locals>.<genexpr>  s     Q9a
1i8P9s   (	(r   __self__r   __dict__)r   r   extendr   r   r   r5   r{   r8   r   r   r   r   getr   )r   r   type_cyclopts_config_paramscyclopts_configannotated_paramsinnerconverter_paramsparamr5   
descriptorr   s              r-   r   r     s   * D!D #%!$===#**?+E+EF DQxQ59QQ  %CE!OO	 i-- ' 8I 9n55$++I,B,B,M,MN Iz22	:66	 2 2J?? "+!3!3!<!<!@!@ASAS!TJ!zgj.&I&I(//
0G0G0R0RS- D4 "?BRRJr/   c                   F    \ rS rSr% SrSr\\S'   \" \	SS9r
\	\   \S'   Srg)	r   i  zV
Intended for storing additional data to a ``__cyclopts__`` attribute via decoration.
Nr   F)rg   rh   r   rI   )r   r   r   r   r   r   r   r   r   listr   r=   r   rI   r/   r-   r   r     s'     CO"'5"AJYAr/   r   )F)Ccollections.abccollectionsr   sysr   r   r   copyr   typingr   r   r	   r
   r   r   r   r   r   r   version_infor   typing_extensionscyclopts._env_varr   cyclopts._convertr   cyclopts.annotationsr   r   r   r   r   r   r   cyclopts.field_infor   r   cyclopts.groupr   cyclopts.utilsr   r   r    r!   r"   	frozensetr}   abcr   r7   r~   r#   rz   r.   r8   r:   r=   r   rh   r(   rG   r   r   r   r   r   )ps   0r-   <module>r      s     
 8 8     w&  ,   F    !*  &T
T
dCidCi
!  CL $h!h!hJg!hi RsCx  I I  I\
 &&&vv AGGQVVO&  +- -`B B4 BE!TR[_J\D] BJ B B Bs   F3F