o
    )Ti/                     @   sl  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ ddlmZ dd	lmZmZmZ dd
lmZ eddZededdZededZG dd de jZ G dd de j!Z"G dd de j!Z#dd Z$dd Z%dd Z&dd Z'dedeej( d e)fd!d"Z*d)dedeej( d e)fd#d$Z+d%d& Z,d)d'd(Z-dS )*    N)
namedtuple)deepcopy)is_dataclass)import_module)Any
ForwardRefOptionalUnionget_type_hints   )typing_extensions_import)mapping_origin_typessequence_origin_typestuple_set_origin_types)get_typehint_originvar_mapz
name valueNoneType)namevaluer	   c                   @   s   e Zd Zdejdeejejf fddZdejdeejej	f fddZ
dejdeddfd	d
ZdedejfddZdejdedejfddZdS )BackportTypeHintsnodereturnc                 C   s   |j d u r
| tS |S N)r   new_name_loadnone_mapselfr    r   W/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_postponed_annotations.pyvisit_Constant   s   

z BackportTypeHints.visit_Constantc                 C   sl   |}t |jtjr4g }| |j| | |j| tj| t	tj
tj|t dt dt d}|S )N)eltsctx)r   r!   )r   slicer!   )
isinstanceopastBitOrappend_union_eltsleftright	Subscriptr   	union_mapIndexTupleLoad)r   r   out_noder    r   r   r   visit_BinOp   s   zBackportTypeHints.visit_BinOpr    Nc                 C   sN   t |tjrt |jtjr| |j| | |j| d S || 	| d S r   )
r#   r%   BinOpr$   r&   r'   r(   r)   appendvisit)r   r   r    r   r   r   r'   +   s   z#BackportTypeHints.append_union_eltsvarc                 C   s4   d| j j d|j }|j| j|< tj|t dS )N_idr!   )	__class____name__r   r   	exec_varsr%   Namer.   )r   r4   r   r   r   r   r   2   s   zBackportTypeHints.new_name_load	input_astr:   c                 C   s`   t d}| D ]\}}t|dddkr t||r t||||< q|| _| t|}t|S )Ntyping
__module__ zcollections.abc)	
__import__itemsgetattrhasattrr:   r3   r   r%   fix_missing_locations)r   r<   r:   r=   keyr   backport_astr   r   r   backport7   s   

zBackportTypeHints.backport)r9   r>   __qualname__r%   Constantr	   r;   r   r1   r*   r0   ASTlistr'   r   r   dictrG   r   r   r   r   r      s      r   c                   @   s4   e Zd ZdejddfddZdejdefddZdS )NamesVisitorr   r   Nc                 C   s   | j |j d S r   )names_foundr2   r7   r   r   r   r   
visit_NameC   s   zNamesVisitor.visit_Namec                 C   s.   ddl m} g | _| | || j| _| jS )Nr   )unique)_utilrP   rN   r3   )r   r   rP   r   r   r   findF   s
   
zNamesVisitor.find)	r9   r>   rH   r%   r;   rO   rJ   rK   rR   r   r   r   r   rM   B   s    rM   c                       s   e Zd ZU g Zee ed< dejddfddZ	dej
ddfddZdejddfd	d
Zdejddf fddZ	ddedededeej ddf
ddZ  ZS )TypeCheckingVisitortype_checking_namesr   r   Nc                 C   sZ   |j D ]'}|jdkr*ttjtj|jpdt ddt d}| j	|  d S qd S )Nr=   r6   TYPE_CHECKING)r   attrr!   )
namesr   r%   dump	Attributer;   asnamer.   rT   r2   r   r   aliasr   r   r   r   visit_ImportR   s   

z TypeCheckingVisitor.visit_Importc                 C   sX   |j dkr(|jD ]!}|jdkr'ttj|jpdt d}| j	|  d S qd S d S )Nr=   rU   r6   )
modulerW   r   r%   rX   r;   rZ   r.   rT   r2   r[   r   r   r   visit_ImportFrom_   s   


z$TypeCheckingVisitor.visit_ImportFromc              
      s   t  jtjtjfrt fdd| jD s4t  jtjrxt  jjtj	tj
frzt fdd| jD r|td} j|_ztt|ddd| j| j W d S  tyw } z| jrl| jjd| j d	|d
 W Y d }~d S W Y d }~d S d }~ww d S d S d S )Nc                 3   s     | ]}t  j|kV  qd S r   )r%   rX   test).0nr   r   r   	<genexpr>j   s    z/TypeCheckingVisitor.visit_If.<locals>.<genexpr>c                 3   s,    | ]} j jD ]
}t||kV  qqd S r   )r`   valuesr%   rX   )ra   rb   vrc   r   r   rd   n   s   * r?   <ast>execfilenamemodez,Failed to execute 'TYPE_CHECKING' block in ''exc_info)r#   r`   r%   r;   rY   anyrT   BoolOpr$   AndOrparsebodyrh   compilealiases	Exceptionloggerdebugr^   )r   r   ast_execexr   rc   r   visit_Ifg   s*   
 (zTypeCheckingVisitor.visit_Ifc                    s&   t |tjtjfrt | d S d S r   )r#   r%   IfModulesupergeneric_visitr   r8   r   r   r   x   s   z!TypeCheckingVisitor.generic_visitmodule_sourcer^   rv   rx   c                 C   s*   || _ || _|| _t|}| | d S r   )r^   rv   rx   r%   rs   r3   )r   r   r^   rv   rx   module_treer   r   r   update_aliases|   s
   
z"TypeCheckingVisitor.update_aliasesr   )r9   r>   rH   rT   rK   str__annotations__r%   Importr]   
ImportFromr_   r}   r|   rJ   r   rL   r   loggingLoggerr   __classcell__r   r   r   r   rS   O   s$   
 rS   c              
   C   s  t d}| |jd _i }i }d}t | D ]&}|| }t|tr&|d }t|tr0|||< qt|t j	r9d}q|||< q|ryg }|
 D ]\}\}	}t|t j	r[|t | qFt|tsd|||< qF||j |_d|vrytd}
|
ry|
|d< tjdk rt }|||}ztt|dd	d
|| W |d S  ty } zd }|
 D ]\}}t|d| dkr|} ||q||d }~ww )Nz___arg_type___ = 0r   Fr   T	TypeAlias)   
   rg   rh   ri   zname '' is not defined___arg_type___)r%   rs   rt   r   rM   rR   r#   tuplerw   rJ   rA   r2   rD   r   sysversion_infor   rG   rh   ru   	NameErrorr   )arg_astrv   type_astr:   bad_aliasesadd_astsr   r   rt   r5   
type_alias
backporterr{   ex_fromalias_exceptionr   r   r   get_arg_type   sX   






r   c                    s    fdd| S )Nc              
      s   t | rrzGg }| jD ]*}t|tr+|jdd^}}| v r# | }ntd| d|}|| q
|t| jkrIt	| }|t
| } W | S W | S  tyq } zrfjd|  |d W Y d }~| S W Y d }~| S d }~ww | S )N.r   zName 'r   z"Failed to resolve forward refs in rm   )has_subtypes__args__r#   r   __forward_arg__splitr   r2   rK   r   r   rw   ry   )typehintsubtypesargforward_argr5   typehint_originr{   rv   rx   resolve_subtypes_forward_refsr   r   r      s4   



z;resolve_forward_refs.<locals>.resolve_subtypes_forward_refsr   )arg_typerv   rx   r   r   r   resolve_forward_refs   s   r   c                 C   s>   t | }|tu rt| drdS |tkp|tv p|tv p|tv S )Nr   T)r   typerC   r	   r   r   r   )r   r   r   r   r   r      s   r   c                 C   s0   t | rtdd t| dg D S t| ttfS )Nc                 s   s    | ]}t |V  qd S r   type_requires_evalra   ar   r   r   rd      s    z%type_requires_eval.<locals>.<genexpr>r   )r   ro   rB   r#   r   r   )r   r   r   r   r      s   r   objrx   r   c              
   C   s  t | di  }t| rt| d }t|r|t|| tt| j	
 D ]\}}||vr4|||< q(z%| j	tjv rEttj| j	 nd}d|v rXt || j	|| W |S W |S  ty } z|rv|jd| j	 |d W Y d }~|S W Y d }~|S d }~ww )N__globals__r   r?   rU   z5Failed to update aliases for TYPE_CHECKING blocks in rm   )rB   copyr   inspectgetmroupdateget_global_varsvarsr   r>   rA   r   modules	getsourcerS   r   rw   ry   )r   rx   global_varsnext_mrorE   r   r   r{   r   r   r   r      s0   " 
r   c                 C   s  t | |}zt| |}W n ty  } z|}W Y d }~nd }~ww t|tr3tdd | D r3|S z.tt	
| }t|}t|tjrNt|jdksPJ |jd }t|tjtjfs`J W n5 ty } z)t|tr|rz|jd|  |d t|t| dt| ||W  Y d }~S d }~ww t }	|	| d }
t|tr|}
i }dd	 |jj|jj D }|D ]6\}}|r||vst|| rzt||	}t||	|||< W q ty } z
|||< W Y d }~qd }~ww qtd
d | D r|
ptt| |S )Nc                 s   s    | ]}t | V  qd S r   r   ra   tr   r   r   rd          zget_types.<locals>.<genexpr>r   r   z$Failed to parse the source code for rm   z + c                 S   s   g | ]}|j |jfqS r   )r   
annotationr   r   r   r   
<listcomp>  s    zget_types.<locals>.<listcomp>c                 s   s    | ]}t |tV  qd S r   )r#   rw   r   r   r   r   rd     r   )r   r
   rw   r#   rL   allre   textwrapdedentr   r   r%   rs   r~   lenrt   FunctionDefClassDefry   r   repr__builtins__r   r   args
kwonlyargsr   r   r   nextiter)r   rx   r   typesex1sourcetreer   ex2rv   r{   arg_astsr   r   r   ex3r   r   r   	get_types   sV   
 


 


r   c              
   C   s   | rt dd | D sd S zt|r|jdkrt||}nt||}W n ty@ } z|jd| |d W Y d }~d S d }~ww | D ]#}|j|v rf||j }t|trc|jd|j d| |d qC||_qCd S )Nc                 s   s    | ]}t |jV  qd S r   )r   r   )ra   pr   r   r   rd      r   z1evaluate_postponed_annotations.<locals>.<genexpr>__init__Unable to evaluate types for rm   zUnable to evaluate type of z from )	ro   r   r9   r   rw   ry   r   r#   r   )params	componentparentrx   r   r{   param
param_typer   r   r   evaluate_postponed_annotations  s*   



r   c              
   C   sv   t | j}t|r9t| |}z
t| |d }W |S  ty8 } z|r-|jd|  |d W Y d }~d S d }~ww |S )Nr   r   rm   )r   	signaturereturn_annotationr   r   r
   rw   ry   )r   rx   return_typer   r{   r   r   r   get_return_type3  s   
r   r   ).r%   r   r   r   r   collectionsr   r   r   dataclassesr   	importlibr   r=   r   r   r   r	   r
   
_optionalsr   
_typehintsr   r   r   rQ   r   r   r   r   r+   NodeTransformerr   NodeVisitorrM   rS   r   r   r   r   r   rL   r   r   r   r   r   r   r   r   <module>   s6    
-7+-