o
    iO1                     @   s  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ ejdkr0d dlmZ nd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ e j j!Z!e j j"Z"e j j#Z#e j j$Z$e j j%Z%dd	 Z&e
j'G d
d dZ(de)e*e(f fddZ+		d!de)e*e(f fddZ,de)e*e(f fddZ-de)e*e(f fddZ.de)e*e(f fddZ/de)e*e(f fddZ0de)e*e(f fddZ1de)e*e(f fddZ2dede)e*e(f fdd Z3dS )"    N)	AnnotatedAnyClassVarOptionalget_args
get_originget_type_hints)field)      )Self)NotRequiredRequiredis_annotatedis_attrsis_dataclassis_enum_flagis_namedtupleis_pydanticis_pydantic_secretis_typeddictresolveresolve_annotatedresolve_optional)UNSET
is_builtinc                 C   s&   t | s|S t|ft| dd    S )N   )r   r   r   )src_typedst_type r   Y/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/field_info.py_replace_annotated_type-   s   r!   c                
   @   s  e Zd ZU dZdZeedf ed< ej	j
Zejed< edddZeed	< eej	jdd
Zeed< eej	jdd
Zeed< eddd
ZedB ed< 	 ej	jZeed< ej	j
Z
eed< ej	jZeed< ej	jZeed< ej	jZeed< ej	jZeed< ee
eehZeeej  ed< ee
eehZeeej  ed< eedddej	ded	edB defddZ e!dd Z"e!dd Z#e!defd d!Z$e!defd"d#Z%e!defd$d%Z&e!defd&d'Z'd(d) Z(dS )*	FieldInfoz(Extension of :class:`inspect.Parameter`.r   .nameskindTF)kw_onlydefaultrequired)r&   r%   r&   
annotationNhelpemptyPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYKEYWORD_ONLYVAR_POSITIONALVAR_KEYWORD
POSITIONALKEYWORDr(   r'   iparamreturnc                C   sT   |d u r|j |ju o|j|jko|j|jk}| |jf|tu r!|jn||j|j |dS )N)r#   r(   r$   r&   r'   )r&   r*   r$   r/   r.   namer   r(   )clsr3   r(   r'   r   r   r    from_iparamO   s   

zFieldInfo.from_iparamc                 C   sV   | j }|tjju st|tu r%t|| jtjju s| jdu rtnt	| j}t
|}|S )z=Annotation with Optional-removed and cyclopts type-inferring.N)r(   inspect	Parameterr*   r   r   r!   r&   strtyper   )selfhintr   r   r    r=   `   s   &zFieldInfo.hintc                 C   s
   | j d S )zThe **first** provided name.r   )r#   r<   r   r   r    r5   k   s   
zFieldInfo.namec                 C      | j | jv S N)r$   r0   r>   r   r   r    is_positionalp      zFieldInfo.is_positionalc                 C      | j ttfv S r@   )r$   r,   r.   r>   r   r   r    is_positional_onlyt      zFieldInfo.is_positional_onlyc                 C   r?   r@   )r$   r1   r>   r   r   r    
is_keywordx   rB   zFieldInfo.is_keywordc                 C   rC   r@   )r$   r-   r/   r>   r   r   r    is_keyword_only|   rE   zFieldInfo.is_keyword_onlyc                 K   s   t j| fi |S r@   )attrsevolve)r<   kwargsr   r   r    rI      s   zFieldInfo.evolve))__name__
__module____qualname____doc__r#   tupler:   __annotations__r8   r9   r+   r$   _ParameterKindr	   r'   boolr*   r&   r   r(   r)   r   r,   r-   r.   r/   	frozensetr0   r1   classmethodr   r   r7   propertyr=   r5   rA   rD   rF   rG   rI   r   r   r   r    r"   3   sD   
  *


r"   r4   c                 C   sr   i }t | dd D ],\}}tt|}|tu rd}n|tu r"d}n| jr(d}nd}t|ftj||d||< q
|S )NTinclude_extrasFr2   )	r   itemsr   r   r   r   	__total__r"   r-   )	typeddictoutr5   r(   originr'   r   r   r    _typed_dict_field_infos   s   r]   Fc                 C   sX   i }t | j D ] \}}|jdkrq	|s|j|ju rq	|s%|j|ju r%q	|||< q	|S )Nr<   )signature_parameters__init__rX   r5   r$   r.   r/   )finclude_var_positionalinclude_var_keywordr[   r5   
field_infor   r   r    _generic_class_field_infos   s   

rd   c           
   	   C   s  ddl m} i }| j D ]y\}}g }|jr7| jddr"|| ||j |j }||vr6|| n|| |j	p@d }|j
D ]}t|drQ|j	rQ|j	}qD|j
rat|jft|j
  }	n|j}	tt||jrotjjntjj|	|j|u r{tjn|j| |d||< q|S )Nr   )PydanticUndefinedpopulate_by_nameFdescription)r#   r$   r(   r&   r'   r)   )pydantic_corere   model_fieldsrX   aliasmodel_configgetappendlowerrg   metadatahasattrr   r(   rO   r"   r%   r8   r9   r-   r+   r&   r*   is_required)
modelre   r[   python_namepydantic_fieldr#   legacy_formr)   metar(   r   r   r    _pydantic_field_infos   s<   





rw   c              	   C   sP   i }t | }| jD ]}t|ftj||t| j|tj|| jvd||< q	|S )Nr#   r$   r(   r&   r'   )r   _fieldsr"   r+   rl   r:   _field_defaultsr*   )r=   r[   
type_hintsr5   r   r   r    _namedtuple_field_infos   s   

r|   c                 C   s   i }t | j}| jD ]A}|jsq
||j }t|jtjr!d}d }n|jtj	u r-d}t
j}nd}|j}|jr;|jdnd }|j|jf|||d||j< q
|S )NFTr)   )r#   r'   r&   r)   )r^   r_   __attrs_attrs__initrj   
isinstancer&   rH   FactoryNOTHINGr"   r*   ro   rl   rI   r5   )r=   r[   field_infos	attributerc   r'   r&   r)   r   r   r    _attrs_field_infos   s&   


r   c              	   C   s   dd l }i }|| }t| dd}|D ][}|j|jur"| }d}n|j|jur.|j}d}ntj}d}||j	tj}|j
rAtjntj}	d }
|jrU|jdpT|jd}
|
s_t|dr_|j}
t|j	f|	||||
d||j	< q|S )Nr   TrV   Fr)   doc)r#   r$   r'   r(   r&   r)   )dataclassesfieldsr   default_factoryMISSINGr&   r"   r*   rl   r5   r%   r-   r+   ro   rp   r   )r=   r   r[   r   r{   r`   r&   r'   r(   r$   r)   r   r   r    _dataclass_field_infos   s:   
r   c                 C   s.   i }| j D ]}t|ftjtddd||< q|S )zNExtract field infos from a Flag enum, treating each member as a boolean field.Frx   )__members__r"   r-   rR   )	enum_flagr[   member_namer   r   r    _enum_flag_field_infos'  s   

r   c                 C   s   t | ri S t| ri S t| drt| jS t| rt| S t| r&t| S t	| r.t
| S t| r6t| S t| r>t| S t| rFt| S t| S )N__supertype__)r   r   rp   get_field_infosr   r   r   r   rw   r   r|   r   r]   r   r   r   r   rd   )r=   r   r   r    r   8  s&   

r   r`   c                 C   s~   dt jv rddlm} t| |r| jn| }n| }t|dd}i }t| j	
 D ]\}}|||j}tj||d||< q(|S )N	functoolsr   )partialTrV   )r(   )sysmodulesr   r   r   funcr   r8   	signature
parametersrX   rl   r(   r"   r7   )r`   r   r   r{   r[   r5   r3   r(   r   r   r    r^   Y  s   
r^   )FF)4r8   r   typingr   r   r   r   r   r   r   rH   r	   version_infor   typing_extensionscyclopts.annotationsr   r   r   r   r   r   r   r   r   r   r   r   r   cyclopts.utilsr   r   r9   r+   r,   r-   r.   r/   r!   definer"   dictr:   r]   rd   rw   r|   r   r   r   r   r^   r   r   r   r    <module>   s>    $

<P

.*!