o
    i                     @   sX   d dl m  mZ d dlm  m  mZ d dlmZ d dlZ	G dd dZ
dd ZdS )    N)defaultdictc                   @   s   e Zd Zdd Zdd ZdS )Mapc                 C   s   t dd | _d S )Nc                   S   s   dS )Nr    r   r   r   Z/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/tracer/compiler/python/usage.py<lambda>	   s    zMap.__init__.<locals>.<lambda>)r   id_to_usagenumselfr   r   r   __init__   s   zMap.__init__c                    s   t | jv r jt | S t|ttB r t fdd|D S t|tr:t fddt| t|  D S t	d| d)Nc                 3       | ]} | V  qd S Nr   .0kr   r   r   	<genexpr>       z"Map.__getitem__.<locals>.<genexpr>c                 3   r   r   r   r   r   r   r   r      r   zKey z not found in usage map.)
idr   
isinstancetuplelistmaxdictkeysvaluesKeyError)r	   keyr   r   r   __getitem__   s   
*zMap.__getitem__N)__name__
__module____qualname__r
   r   r   r   r   r   r      s    r   c                    s(   t  t  fdd  |  S )Nc                    s(  t | ttB tB tjB tjB tB s| d u rd S t| v rd S 	t|  j
t|   d7  < t | tjrY| jd urU| jjD ]} | q@t| jjD ]} | qNd S d S t | ttB rk| D ]} | qbd S t | trt|  t|   D ]} | q|d S t | tjr | j d S d S )N   )r   strintfloatnpintegerfloatingboolr   addr   tracerTracerorigininputspytreeflattenoutputr   r   r   r   r   Graph)xinputr/   _recursedonemapr   r   r4      s2   *





zget_usages.<locals>._recurse)r   set)objectr   r3   r   
get_usages   s
   r9   )einx._src.tracer_srcr)   einx._src.util.pytreeutilr-   collectionsr   numpyr$   r   r9   r   r   r   r   <module>   s    