U
    nuf?                     @   st  d dl mZmZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
Z
d dlZd dlZG dd deZdd	 Zd
d ZeedddZeedddZeedddZG dd dejZG dd dZeejejg jg jejd eej e j!ej"ej#ej$e
eedZ%dd d& D Z'e(dd e%) D Z*e(dd e') D Z+dd  Z,d!d" Z-d#d$ Z.d%d& Z/d'd( Z0d)d* Z1dS )+    )OrderedDictdeque)datetimedatetime)Decimal)FractionNc                   @   s   e Zd Zdd ZeZdS )
CannotEvalc                 C   s   | j jS N)	__class____name__self r   3/tmp/pip-unpacked-wheel-26fb9ud8/pure_eval/utils.py__repr__   s    zCannotEval.__repr__N)r   
__module____qualname__r   __str__r   r   r   r   r	   
   s   r	   c                    s   t  fdd|D S )Nc                 3   s   | ]} |kV  qd S r
   r   ).0argxr   r   	<genexpr>   s   zis_any.<locals>.<genexpr>)any)r   argsr   r   r   is_any   s    r   c                 G   s   t t| f| r| S td S r
   )r   typer	   )r   typesr   r   r   of_type   s    r   check_dict_valuesdeepc                C   s   t | ||dr| S td S )Nr    )is_standard_typesr	   r   r!   r"   r   r   r   of_standard_types   s    r%   c                C   s.   zt | ||d W S  tk
r(   Y dS X d S )Nr   F)_is_standard_types_deepRecursionErrorr$   r   r   r   r#   &   s    r#   c           	      C   s  t | }t|tttttttt	t
ttt d tr2dS t|tttttttt	r|tfkr\d}nt| }t|tsrt|s~d|fS |r|ttfkrdd |  D }n|tkr| j| j| jg}n| }|D ]@}|dkrd|f  S t|||\}}|sd|f  S ||7 }qd|fS dS )	N)Tr   r   Tc                 s   s   | ]}|D ]
}|V  q
qd S r
   r   )r   pairvr   r   r   r   K   s       z*_is_standard_types_deep.<locals>.<genexpr>i F)Fr   )r   r   strintboolfloatbytescomplexr   r   r   r   r   objecttuple	frozensetlistsetdictr   r   slicelen
isinstanceAssertionErroritemsstartstopstepr&   )	r   r!   r"   typlengthr:   itemZis_standardZitem_lengthr   r   r   r&   -   sV    
  
r&   c                   @   s   e Zd ZdS )_EN)r   r   r   r   r   r   r   rA   ^   s   rA   c                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
_Cc                 C   s   d S r
   r   r   r   r   r   fooc       z_C.fooc                 C   s   d S r
   r   r   r   r   r   bare   rD   z_C.barc                 C   s   d S r
   r   )clsr   r   r   cmg   s    z_C.cmc                   C   s   d S r
   r   r   r   r   r   smj   s    z_C.smN)	r   r   r   rC   rE   classmethodrG   staticmethodrH   r   r   r   r   rB   b   s   
rB   fromkeys)r7   append__add__insert__mul__rK   r   r   rC   rE   rG   rH   astr	   rA   c                 C   s   i | ]}|t t|qS r   )getattrtyping)r   namer   r   r   
<dictcomp>   s    rT   z$List Dict Tuple Set Callable Mappingc                 C   s   h | ]}t |qS r   r   r   fr   r   r   	<setcomp>   s   rX   c                 C   s   h | ]}t |qS r   rU   rV   r   r   r   rX      s   c                 C   s   t | t |ko| |kS r
   rU   )abr   r   r   eq_checking_types   s    r[   c                 C   s,   t | tjr| jS t | tjr$| jS d S d S r
   )r8   rP   Nameid	Attributeattr)noder   r   r   ast_name   s
    ra   c                 C   sf   t | }t|ft r| jS | tjkr*dS | tjkr8dS t|ft r^t| dd p\t| dd S d S d S )NOptionalUnionr   _name)	r   r   safe_name_typesr   rR   rb   rc   typing_annotation_typesrQ   )valuer>   r   r   r   	safe_name   s    

rh   c                 C   s&   t | }t|tk	rdS tt||S )NF)rh   r   r*   r[   ra   )rg   r`   Z
value_namer   r   r   has_ast_name   s    ri   c                    sN   t  tjr. fdd jD }t f |S t  trFttt S  S d S )Nc                    s.   i | ]&}|d krt  |r|tt |qS )ctx)hasattrcopy_ast_without_contextrQ   )r   fieldr   r   r   rT      s
   
 z,copy_ast_without_context.<locals>.<dictcomp>)r8   rP   AST_fieldsr   r3   maprl   )r   kwargsr   r   r   rl      s    

rl   c                 C   s(   z
t | W S  tk
r"   i  Y S X dS )z)
    Handles invalid non-dict inputs
    N)r5   	Exceptionr   r   r   r   ensure_dict   s    
rs   )2collectionsr   r   r   r   r   decimalr   Z	fractionsr   rP   enumrR   rr   r	   r   r   r,   r%   r#   r&   EnumrA   rB   r7   r3   rL   rM   rN   rO   r5   __dict__r   rC   rE   rG   rH   Zsafe_name_samplessplitZtyping_annotation_samplesr1   valuesre   rf   r[   ra   rh   ri   rl   rs   r   r   r   r   <module>   sZ   1	