o
    Eiz                     @   s8  d dl Z d dlmZmZmZ e jdd d						 		dde jd	ed
edee jef dee jef dee j dee j de	dedee j
edf defddZe jdd d	d de jdede jdee j dee j
edf defddZe jdd d		d!de jdede	dedee j
edf defddZdS )"    N)UnionOptionalAnyc                    s    				 	 			 d fdd	S )Nb... [c]Tr   c
              
      sx    | ||t |ts|d ur|n|t |ts!|d ur!|n||d ur*|n||d ur3|n|||f	i |
S N)
isinstancebool)xstatsparamsmeanvarscalebiasepsilonfastvarbackendkwargsct G/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einx/nn/nn.py<lambda>   s   

<lambda>.<locals>.<lambda>r   TTNNr   TNr   r   r   r   r   r   r      s   r   )tracer   Tr	   r
   r   r   r   r   r   r   r   r   r   c
                 K   s  |d u s|d u rt dtjj|tj| fi |
\}}tjj|}tjj|}t	|t
s?|d ur?tjj||j|	dd}t	|t
sS|d urStjj||j|	dd}t	|t
ri|rgtj|| fd|	i|
}nd }t	|t
r|r|d u rtj||	| fd|	i|
}n.|rtj||	| fd|	i|
}||	| }|	|d}ntj|| fd|	i|
}nd }|d urtj||g| |g||	d\} }|d ur|	|| }tj||g| |g||	d\} }|d urtj|| |fd|	i|
} |d urtj|| |fd|	i|
} | ||fS )Nzmean and var cannot be Noneadd)shaper   initmultiplyr   r   r   )
ValueErroreinxreduceparsetracer	get_shapeexprstage3demarkr   r   call_factoryr   r   squaremaximumr   subtract_stage3rsqrtmultiply_stage3r!   r   )r	   r
   r   r   r   r   r   r   r   r   r   expr_in
expr_statsmean_of_squares_inv_stdr   r   r   norm   sF   %"


 

r7   c                       d fdd	S )Nc                    s.    | |||d ur|nd fi |S r   r   )r	   r)   weightr   r   r   r   r   r   _   s
     r   r   r   r   r   r   r   r   _       r)   r9   c                 K   s   t jj|t j| t j|fi |\\}}}t j|| |fd|i|} |d uredd | D }	g }
| D ]}t|t jjj	rN|j
|	v rN|
|  q8t jj|
}
t j||
g| |g||d\} }| S )Nr   c                 S   s"   h | ]}t |tjjjr|jqS r   )r   r$   r)   r*   Axisname).0ar   r   r   	<setcomp>t   s   " zlinear.<locals>.<setcomp>r"   )r$   dotr&   r'   r(   allr   r)   r*   r;   r<   append__deepcopy__List
add_stage3)r	   r)   r9   r   r   r   	_expr_in1expr_in2expr_afterdotweight_axes_names	expr_biasr>   r5   r   r   r   linear^   s$   
rK   c                    r8   )Nc                    s*    | |||d ur|nd fi |S r   r   )r	   r)   	drop_raterngr   r   r   r   r      s
    r   r   r   r   r   r   r   r      r:   rL   rM   c                 K   s   d| }t jj|t j| d fi |\\}}}	t j| ( |jj|||jd}
t j	||t j
jg g|
| dg|	|d\} }W d    n1 sIw   Y  | d|  S )N   )rM   pr   r   r"   )r$   elementwiser&   r'   r(   	depend_onrandom	bernoullir   where_stage3r)   r*   rD   )r	   r)   rL   rM   r   r   	keep_rater2   	expr_maskexpr_out	drop_maskr5   r   r   r   dropout   s    	rY   r   r   )NN)r$   typingr   r   r   jitTensorstrr   floatBackendr7   rK   rY   r   r   r   r   <module>   s    	
A
	