o
    toi                     @  sH   d dl mZ d dlZd dlmZ 				ddddZG dd deZdS )    )annotationsN)OpRuninput
np.ndarray	cos_cache	sin_cacheposition_idsnp.ndarray | Nonereturnc                 C  s  | j }t| j dkrt| d} | j d }| j d }	t| j dkr>| j d }
|dks,J t|
| }||	||g}t| |} t| j dksGJ | j d }|d u sT|dkrV|}| d d d d d d d |f }| d d d d d d |d f }t|d }|d ur|| }|| }|j d |krtd|j d  d	| d
|j d |krtd|j d  d	| d
tj|dd}tj|dd}|r|d d d d d d dd df }|d d d d d d dd df }n
tj|ddd\}}|| ||  }|| ||  }|r!tj|dd}tj|dd}tj	||fdd}t||j }n	tj	||fdd}tj	||fdd}t|dkrBt||}|S t|d}|S )N   )r            r   r   r   r   zLast dimension of cos cache (z)) does not match rotary_embedding_dim/2 (z).zLast dimension of sin cache ()axis)
shapelennp	transposeintreshape
ValueErrorexpand_dimssplitconcatenate)r   r   r   r   interleavedrotary_embedding_dim	num_headsoriginal_input_shape
batch_sizesequence_lengthhidden_size	head_size	new_shapex_rotatex_not_rotaterotary_embedding_dim_halfx1x2realimagx_rotate_concatoutput r-   Z/home/ubuntu/.local/lib/python3.10/site-packages/onnx/reference/ops/op_rotary_embedding.pyrotary_embedding   sr   	



  "$r/   c                   @  s    e Zd Z				ddd	d
ZdS )RotaryEmbeddingNr   r   r   r   r   r	   r
   c              	   C  s   t |||||||dfS )N)r   r   r   r   )r/   )selfr   r   r   r   r   r   r   r-   r-   r.   _runc   s   zRotaryEmbedding._runNNNN
r   r   r   r   r   r   r   r	   r
   r   )__name__
__module____qualname__r2   r-   r-   r-   r.   r0   b   s    r0   r3   r4   )
__future__r   numpyr   onnx.reference.op_runr   r/   r0   r-   r-   r-   r.   <module>   s   W