o
    ȷe?                     @   sz  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dedefddZdedefddZdedef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   F/var/www/ideatree/venv/lib/python3.10/site-packages/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    | ]} |u 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| g|R  r| S tr
   )r   typer	   )r   typesr   r   r   of_type   s   r   check_dict_valuesdeepc                C   s   t | ||dr	| S t)N)r    r!   )is_standard_typesr	   r   r    r!   r   r   r   of_standard_types   s   r$   c                C   s(   z	t | ||d W S  ty   Y dS w )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rdS t|tttttttt	r|tfv r-d}nt| }t|ts8J |s>d|fS |rP|ttfv rPdd |  D }n|tu r]| j| j| jg}n| }|D ] }|dkrmd|f  S t|||\}}|s}d|f  S ||7 }qad|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itemsstartstopstepr%   )	r   r    r!   typlengthr8   itemis_standarditem_lengthr   r   r   r%   -   sR   

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      d S r
   r   r   r   r   r   fooc       z_C.fooc                 C   rC   r
   r   r   r   r   r   bare   rE   z_C.barc                 C   rC   r
   r   )clsr   r   r   cmg      z_C.cmc                   C   rC   r
   r   r   r   r   r   smj   rI   z_C.smN)	r   r   r   rD   rF   classmethodrH   staticmethodrJ   r   r   r   r   rB   b   s    
rB   fromkeys)r6   append__add__insert__mul__rM   r   r   rD   rF   rH   rJ   astr	   rA   c                 C   s   i | ]}|t t|qS r   )getattrtyping)r   namer   r   r   
<dictcomp>   s    
rV   z$List Dict Tuple Set Callable Mappingc                 C      h | ]}t |qS r   r   r   fr   r   r   	<setcomp>       r[   c                 C   rW   r   rX   rY   r   r   r   r[      r\   c                 C   s   t | t |u o| |kS r
   rX   )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 r
   )r7   rR   Nameid	Attributeattr)noder   r   r   ast_name   s
   re   c                 C   sf   t | }t|gtR  r| jS | tju rdS | tju rdS t|gtR  r1t| dd p0t| dd S d S )NOptionalUnionr   _name)	r   r   safe_name_typesr   rT   rf   rg   typing_annotation_typesrS   )valuer<   r   r   r   	safe_name   s   

rl   c                 C   s&   t | }t|turdS tt||S )NF)rl   r   r)   r_   re   )rk   rd   
value_namer   r   r   has_ast_name   s   rn   c                    sN   t  tjr fdd jD }t di |S t  tr%ttt S  S )Nc                    s.   i | ]}|d krt  |r|tt |qS )ctx)hasattrcopy_ast_without_contextrS   )r   fieldr   r   r   rV      s    z,copy_ast_without_context.<locals>.<dictcomp>r   )r7   rR   AST_fieldsr   r2   maprq   )r   kwargsr   r   r   rq      s   

rq   c                 C   s"   zt | W S  ty   i  Y S w )z)
    Handles invalid non-dict inputs
    )r4   	Exceptionr   r   r   r   ensure_dict   s
   
rx   )2collectionsr   r   r   r   r   decimalr   	fractionsr   rR   enumrT   rw   r	   r   r   r+   r$   r"   r%   EnumrA   rB   r6   r2   rN   rO   rP   rQ   r4   __dict__r   rD   rF   rH   rJ   safe_name_samplessplittyping_annotation_samplesr0   valuesri   rj   r_   re   rl   rn   rq   rx   r   r   r   r   <module>   s\    1	