o
    it                  
   @   s   d dl mZmZmZ ddlmZmZmZmZm	Z	 ddl
mZmZ dedededed	ef
d
dZdeded	efddZdeded	efddZdefddZeZdee ded	eeee f fddZdedee ded	ee fddZdS )    )ListSequenceTuple   )EinopsError	ReductionTensor_apply_recipe_array_api_prepare_transformation_recipe)analyze_patternprodtensorpattern	reductionaxes_lengthsreturnc           	   
   K   s   t | trt| dkrtd| d  }|| } n|  }zt| }t||t|| j	d}t
||| ||dW S  tyt } z.d| d| d}t | tsZ|d| j d	7 }n|d
7 }|d| d7 }t|d|  d d }~ww )Nr   z(Einops can't be applied to an empty list)
axes_namesndim)reciper   reduction_typer   z Error while processing z-reduction pattern "z".z
 Input tensor shape: z. z
 Input is list. zAdditional info: .z
 )
isinstancelistlen	TypeError__array_namespace__stacktupleitemsr
   r   r	   r   shape)	r   r   r   r   xphashable_axes_lengthsr   emessage r$   M/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einops/array_api.pyreduce   s2   

r&   c                 K      t | |fddi|S )Nr   repeatr&   r   r   r   r$   r$   r%   r(   #      r(   c                 K   r'   )Nr   	rearranger)   r*   r$   r$   r%   r,   '   r+   r,   c                 C   s   dd l }|| S )Nr   )numpyfrom_dlpack)r   npr$   r$   r%   asnumpy+   s   
r0   tensorsc                 C   s   t |d\}}}| d  }g }g }t| D ]E\}}	|	j}
t|
|k r4td| d|
 d| d| d	t|
| }||
||  |||	g |
d | d|
|d  R  q|j||d	|fS )
Npackr   zpacked tensor #z' (enumeration starts with 0) has shape z, while pattern z assumes at least z axes)axis)	r   r   	enumerater   r   r   appendreshapeconcat)r1   r   n_axes_beforen_axes_aftermin_axesr    reshaped_tensorspacked_shapesir   r   axis_after_packed_axesr$   r$   r%   r2   4   s$   2r2   r=   c              
      s    t|dd\}}}j}t||d | kr$td| d| |}dd |D }tdd	 |D }	|	dkrEtd| d
| ddgt| || g |	dkrmt|d d D ]\}
}|
 | |
d < q]n5|d}t|D ]}
|
 ||
  |
d < qvt|d t|d d d D ]}|d  ||  |< q|d | ||d d   t	d d f| z fddt|D W S  t
y } ztd| dd  d| |d }~ww )Nunpack)opnamer   zunpack(..., z)) received input of wrong dim with shape c                 S   s    g | ]}d |v r
d nt |qS )r3   )r   ).0p_shaper$   r$   r%   
<listcomp>S   s     zunpack.<locals>.<listcomp>c                 s   s    | ]}|d kV  qdS )r3   Nr$   )rB   xr$   r$   r%   	<genexpr>U   s    zunpack.<locals>.<genexpr>z) received more than one -1 in z and can't infer dimensionsr   r3   c                    sN   g | ]#\}} g t| |d   dR  g | R qS )r   .)r7   slice)rB   r>   element_shape	shape_endshape_startslice_fillersplit_positionsr   r    r$   r%   rD   p   s    &zError during unpack(..., "z!"): could not split axis of size z into requested )r   r   r   r   r   sumr5   indexrangerG   	ExceptionRuntimeError)r   r=   r   r9   r:   r;   input_shapeunpacked_axislengths_of_composed_axesn_unknown_composed_axesr>   rE   unknown_composed_axisjr"   r$   rI   r%   r@   H   sN   

 r@   N)typingr   r   r   einopsr   r   r   r	   r
   packingr   r   strintr&   r(   r,   r0   Shaper2   r@   r$   r$   r$   r%   <module>   s    &&