o
    i\                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dl	Z	d dl
Z
e Zee jdd Zee jddZdd Zd	d
 Zdd Zdd ZdS )    N)defaultdict)partialEINX_WARN_ON_RETRACEEINX_CACHE_SIZEc                 C   s   t | tjrt|  S t | ttB rtdd | D S t | tr-tdd | 	 D S t | t
jr9tt| S t | tjrKt| j| j| j| jfS | S )Nc                 s   s    | ]}t |V  qd S )N_freeze_value).0x r   L/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/util/lru_cache.py	<genexpr>   s    z _freeze_value.<locals>.<genexpr>c                 S      i | ]	\}}|t |qS r   r   r	   kvr   r   r   
<dictcomp>       z!_freeze_value.<locals>.<dictcomp>)
isinstancenpndarrayr   tolistlisttupledict
frozendictitemstypesSimpleNamespacevarsinspect	Parameternamedefault
annotationkind)r
   r   r   r   r      s   
r   c                    s   t   fdd}|S )Nc                     s.   dd | D } dd |  D } | i |S )Nc                 S   s   g | ]}t |qS r   r   )r	   ar   r   r   
<listcomp>#   s    z5_freeze_args.<locals>.func_frozen.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r   $   r   z5_freeze_args.<locals>.func_frozen.<locals>.<dictcomp>)r   )argskwargsfuncr   r   func_frozen!   s   z!_freeze_args.<locals>.func_frozen)	functoolswraps)r+   r,   r   r*   r   _freeze_args    s   r/   c                    s4   t dkrtdd  t fdd}|S S )Nr   c                   S   s   dS )Nr   r   r   r   r   r   <lambda>,   s    z'_with_retrace_warning.<locals>.<lambda>c            	   	      s*  d}t dkr{ttdsdt_t }d}t|D ]\}}|jtkr#|}q||d d  }t	|dkr{d}t
|D ]%}|d|j d|j d	|j d
7 }|jd ur]|d|jd   d
7 }q8 |  d7  < tjr{ | t kr{d}tdt  d|  |rdt_| i |}dt_|S | i |}|S )NFr   warnT    zFile "z", line z, in 
z  z9WARNING (einx): The following call stack has resulted in z retraces of an einx function.
A retrace happens when the function is called with different signatures of input arguments.
Call stack (most recent call last):
)warn_on_retrace_numhasattr_thread_localr1   r    stack	enumeratefilename__file__lenreversedlinenofunctioncode_contextstripprint)	r(   r)   
has_warnedr8   
last_indexiframetraceresultcache_failuresr+   r   r   func_with_warn.   sF   

"

z-_with_retrace_warning.<locals>.func_with_warn)r5   r   r-   r.   )r+   rK   r   rI   r   _with_retrace_warning*   s   +rL   c                 C   sj   t | } tdkrtjtdkrtnd d| } ntdk r/dttv r't| } ntjd d| } t| } | S )Nr   )maxsizecache)rL   max_cache_sizer-   	lru_cacher   rN   r/   r*   r   r   r   rP   b   s   rP   )osr-   	threadingr    collectionsr   numpyr   r   r   r   localr7   intenvirongetr5   rO   r   r/   rL   rP   r   r   r   r   <module>   s     
8