o
    gi0
                     @   s@   d dl Zd dlm  mZ d dlmZ G dd dZdd ZdS )    N)pytreec                   @   s$   e Zd Zdd Zdd Zdd ZdS )	Optimizerc                 C   s   i | _ d| _|| _d S )NF)id_to_newobjchangedoptimizations)selfr    r   b/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/einx/_src/tracer/optimizer/optimizer.py__init__   s   
zOptimizer.__init__c                 C   s   || j t|< d S N)r   id)r   oldobjnewobjr   r   r	   _set   s   zOptimizer._setc           
         s   t | jv r jt | S  jD ]}|| j\}}|r,t j|| d _|  S qt|t	t
B tB tjB tjB tjB sC|d u rE|S t|tjrsg }|jD ]}|d }t j|| || qP |j}t|||jS t|tjr|jd u r|d S |j j}	t|	t|jksJ t|	jt|jjksJ t|	jt|jjksJ t j|jj|	j  jt | S t|trχ fdd|D S t|trt fdd|D S t|tr fdd| D S t|t rt  |j! |j" |j#S t$dt| )	NTc                    s   g | ]}  |qS r   	_optimize.0ir   r   r	   
<listcomp>6   s    z'Optimizer._optimize.<locals>.<listcomp>c                 3   s    | ]}  |V  qd S r   r   r   r   r   r	   	<genexpr>8   s    z&Optimizer._optimize.<locals>.<genexpr>c                    s"   i | ]\}}  |  |qS r   r   )r   kvr   r   r	   
<dictcomp>:   s   " z'Optimizer._optimize.<locals>.<dictcomp>zUnsupported type: )%r   r   r   r   r   mapr   r   
isinstancestrintfloatnpintegerfloatingndarraytracerGraphinputs_tracer_typeappendoutputnameTracerorigin_tracer_transformtypelenlisttupledictitemsslicestartstopstepNotImplementedError)
r   xpatternr   r   
new_inputs	old_input	new_input
new_output
new_originr   r   r	   r      sJ   
,






$zOptimizer._optimizeN)__name__
__module____qualname__r
   r   r   r   r   r   r	   r      s    r   c                 C   s2   t |dkr	 t|}|| } |js	 | S q| S )Nr   )r/   r   r   r   )r9   r   	optimizerr   r   r	   optimizeA   s   
rD   )	numpyr    einx._src.tracer_srcr$   einx._src.utilr   r   rD   r   r   r   r	   <module>   s
    ;