o
    eqi                  
   @   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TupleSequence   )Tensor	ReductionEinopsError_prepare_transformation_recipe_apply_recipe_array_api)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yn } z(d||}t | tsV|d| j7 }n|d7 }|d|7 }t|d	| d }~ww )
Nr   z(Einops can't be applied to an empty list)Z
axes_namesndim)reciper   Zreduction_typer   z2 Error while processing {}-reduction pattern "{}".z
 Input tensor shape: {}. z
 Input is list. zAdditional info: {}.z
 {})
isinstancelistlen	TypeError__array_namespace__stacktupleitemsr	   r   r
   r   formatshape)	r   r   r   r   xpZhashable_axes_lengthsr   emessage r!   W/home/app/PaddleOCR-VL/.venv_paddleocr/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   )numpyZfrom_dlpack)r   npr!   r!   r"   asnumpy*   s   
r,   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)Zaxis)	r   r   	enumerater   r   r   appendreshapeconcat)r-   r   n_axes_beforen_axes_aftermin_axesr   Zreshaped_tensorspacked_shapesir   r   Zaxis_after_packed_axesr!   r!   r"   r.   3   s$   2r.   r7   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   td| dd  d| 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 )r/   )r   ).0Zp_shaper!   r!   r"   
<listcomp>R   s     zunpack.<locals>.<listcomp>c                 s   s    | ]}|d kV  qdS )r/   Nr!   )r;   xr!   r!   r"   	<genexpr>T   s    zunpack.<locals>.<genexpr>z) received more than one -1 in z and can't infer dimensionsr   r/   c                    sN   g | ]#\}} g t| |d   dR  g | R qS )r   .)r2   slice)r;   r8   Zelement_shapeZ	shape_endZshape_startZslice_fillerZsplit_positionsr   r   r!   r"   r<   o   s    &zError during unpack(..., "z!"): could not split axis of size z into requested )r   r   r   r   r   sumr0   indexranger?   	ExceptionRuntimeError)r   r7   r   r4   r5   r6   Zinput_shapeZunpacked_axisZlengths_of_composed_axesZn_unknown_composed_axesr8   r=   Zunknown_composed_axisjr!   r@   r"   r9   G   sH   

 r9   N)typingr   r   r   Zeinopsr   r   r   r	   r
   Zpackingr   r   strintr#   r%   r)   r,   ZShaper.   r9   r!   r!   r!   r"   <module>   s    &&