o
    i!                     @   s.  d Z ddlZddl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	d
ZddlmZmZ ddl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j'dkrvddlm(Z( ndZ(e&d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dZ.dd Z/deege0e,e$f f dede0e,ef ge-e, f fddZ1dd Z2de+e d e0e,e3f dee,ge,f defd!d"Z4d#ede0e5e,d$f e&f fd%d&Z6d'd( Z7d)e5e,d$f de5e,d$f fd*d+Z8	d2d,e5e,d$f dB dee5e5e,d$f ef  fd-d.Z9d/e,de,fd0d1Z:dS )3z?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	converter	validatoraccepts_keysconsume_multipleenv_vartype_name_transformreturnc                    s>  t td g }t| }t| tr%t| tr%|fdd| jD  |S t	|rB fddt
| D }|D ]	}|r?|| q6|S |tu rT|dd t
| D  |S |tv r}t
| }t|dksr|tu r{t|dkr{|d tu r{| |d	  |S |tu r| t|  |S td
urt| tr| | j |S )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   s    | ]} |V  qd S N .0xr*   r,   ]/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/argument/utils.py	<genexpr>_       z(get_choices_from_hint.<locals>.<genexpr>c                    s   g | ]} |qS r,   r,   )r.   inner)get_choicesr,   r0   
<listcomp>a   s    z)get_choices_from_hint.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S r+   )strr-   r,   r,   r0   r1   f   r2         r   N)r   get_choices_from_hintr   
isinstancetyper   r   extend__members__r   r   r   r   lentupleEllipsisr	   r   r    	__value__)r'   r(   choices_origininner_choicesr/   argsr,   )r4   r(   r0   r9   J   s6   
	,r9   c                 C   s   dd }||  ||S )Nc                 S   s   |  ddS )N_-)replace)sr,   r,   r0   	normalizes   s   zstartswith.<locals>.normalize)
startswith)stringprefixrJ   r,   r,   r0   rK   r   s   rK   get_field_infor   c                    s*   dddt ttf dtt f fdd}|S )Nargumentr   datar)   c                    s(   t | | j} fdd| D S )Nc                    s"   g | ]\}}|j r| vr|qS r,   )requiredr.   kvprovided_keysr,   r0   r5      s   " z7missing_keys_factory.<locals>.inner.<locals>.<listcomp>)sethintitems)rO   rP   
field_inforN   rU   r0   r3   |   s   
z#missing_keys_factory.<locals>.inner)dictr6   r
   list)rN   r3   r,   r[   r0   missing_keys_factoryy   s   &r^   c              	   C   s8   t | dd  D ]}z|jW   S  ty   Y qw d S )Nr7   )r   discriminatorAttributeError)
annotationmetar,   r,   r0   get_annotated_discriminator   s   rc   	enum_typerP   c                 C   s   t | dd | 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                 s   s    | ]	\}}|r|V  qd S r+   r,   rR   r,   r,   r0   r1      s    z&enum_flag_from_dict.<locals>.<genexpr>)r   rY   )rd   rP   r(   r,   r,   r0   enum_flag_from_dict   s   re   f.c              
   C   s  ddl m} tt | j} W d    n1 sw   Y  i }t| dd  }rYt|d d D ]'}z||}|jD ]}t|j	d|t
|jd< q9W q/ ttfyV   Y q/w |S z|| }|jD ]}t|j	d|t
|jd< qaW |S  ttfy   Y |S w )Nr   )parse_from_object__mro__)help.)docstring_parserrg   r   r`   funcgetattrreversedparamsr   descriptionr?   arg_namesplit	TypeError)rf   rg   resultmro
base_classparseddparamr,   r,   r0   extract_docstring_help   s4   



rz   c                 C   s6   |  dr| d d d} | r| dsd|  } | S )N*ri   rk   rG   --)endswithrstriprK   )elemr,   r,   r0   resolve_parameter_name_helper   s
   
r   argssc                  G   s   t dd | D } t| dkrdS t| dkr"t dd | d D S g }| d D ]#}t|}| d D ]}|ds;|sA|| q2||d |  q2q(tt |g| d	d
 R  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                 s   s    | ]}|r|V  qd S r+   r,   r-   r,   r,   r0   r1      r2   z)resolve_parameter_name.<locals>.<genexpr>r   r,   r7   c                 s   s$    | ]}|d kr
d nt |V  qdS )r{   N)r   r-   r,   r,   r0   r1      s   " rG   rk   r8   N)r?   r>   r   rK   appendresolve_parameter_name)r   outa1a2r,   r,   r0   r      s   r   parent_keysc                 c   sl    |d u rd}t | tr/|  D ]\}}||f }t |tr't||E d H  q||fV  qd S d| fV  d S )Nr,   )r:   r\   rY   walk_leaves)dr   keyvaluecurrent_keysr,   r,   r0   r      s   


r   keysc                  G   s   dd |  S )Nr|   rk   )join)r   r,   r,   r0   to_cli_option_name  s   r   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   r]   r9   rK   r\   r^   rc   boolre   r?   rz   r   r   r   r   r,   r,   r,   r0   <module>   s    $ 
		
$(
	

"(""
