o
    Xi                     @   s  d Z ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ e de
d ded	 d
e
d fddZG dd dZdd Ze de
d ded d
e
d fddZG dd dZdd ZdZed ZejdedejZe dd ZG dd dZdd  ZdS )!z,Small test case models for rotary embedding.    N)script)opset18)FLOATINT64x)         r	   position_ids)r   r	   returnc                 C   s  t jg dd}t |ddg}t |dg}t j|tjjd}t ||}t j|g dd}t j	||d	d
}t 
|}t |}	t |dg}
t |	dg}t | dgdgdgdg}t | dgdgdgdg}t |}t j	||d	d
}t | |
 || }|S N)g      ?g       @g      @g      @)value_floatsr      r   tor   r   r   permaxisr      r	   opConstant	UnsqueezeCastirDataTyper   MatMul	TransposeConcatCosSinSliceNegAddr   r
   inv_freqinv_freq_3dposition_ids_expandedposition_ids_floatfreqsembcossincos_4dsin_4dx1x2minus_x2	rotated_xrotary_embedding r7   g/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/rewriter/models/_rotary_embedding_models.py_test_case_1_script   s"   


r9   c                   @      e Zd Zdd Zdd ZdS )
_TestCase1c                 C   *   t | dst }tj|}|| _| jS N_onnx_model)hasattrr9   to_model_protor   serdedeserialize_modelr>   selfmodel_protomodelr7   r7   r8   get_onnx_model)   
   
z_TestCase1.get_onnx_modelc                 C   sJ   t | ds"tjddddtjtjdtjdddd}|| _	| j	S N_ort_inputsr   r   r	   dtype)r   r
   
r?   numpyrandomrandastypefloat32arangeint64reshaperJ   rD   inputsr7   r7   r8   get_ort_inputs0      
z_TestCase1.get_ort_inputsN__name__
__module____qualname__rG   rX   r7   r7   r7   r8   r;   (       r;   c                   C      t  S N)r;   r7   r7   r7   r8   test_case_1:      ra   r	   c                 C   s  t jg dd}t |ddg}t |ddg}t j|tjjd}t ||}t j|g dd}t j	||d	d
}t 
|}t |}	t |dg}
t |	dg}t | dgdgdgdg}t | dgdgdgdg}t |}t j	||d	d
}t | |
 || }|S r   r   r'   r7   r7   r8   _test_case_2_scriptA   s"   


rc   c                   @   r:   )
_TestCase2c                 C   r<   r=   )r?   rc   r@   r   rA   rB   r>   rC   r7   r7   r8   rG   X   rH   z_TestCase2.get_onnx_modelc                 C   sH   t | ds!tjddddtjtjdtjddd}|| _	| j	S rI   rM   rV   r7   r7   r8   rX   _   s   
z_TestCase2.get_ort_inputsNrZ   r7   r7   r7   r8   rd   W   r^   rd   c                   C   r_   r`   )rd   r7   r7   r7   r8   test_case_2i   rb   re       r   r   c                 C   s>  t jtd}t | d}t j|dd}t ||}t j|g dd}t j||dd}t |}t 	|}	t 
|dgd	gd
gdg}
t 
|d	gdgd
gdg}t |dg}t |	dg}t |
|}t 
|
dgdgd
gdg}t 
|
dgdgd
gdg}t |}t j||dd}t ||}t ||}t j||dd}|S )N)valuer   r   r   r   r   r   r   rf   r   l       )r   r   inv_freqs_valuer   r   r   r    r!   r"   r#   r$   Mulr%   r&   )r
   query	inv_freqsposition_ids_3dposition_ids_3d_floatmatmul	transposecatcos_3dsin_3dto_embed
unembeddedr0   r1   to_embed_times_cos
to_embed_x
to_embed_yminus_to_embed_yto_embed_rotated_90to_embed_rotated_90_times_sinembeddedfinalr7   r7   r8   _partial_rotary_scriptu   s*   


r~   c                   @   r:   )_PartialRotaryTestCasec                 C   sB   t | dstjtd td ftd fd}tj|}|| _| jS )Nr>   )	BatchsizeSequence)r   rf   r   P   )input_typesoutput_types)	r?   r~   r@   r   r   r   rA   rB   r>   rC   r7   r7   r8   rG      s   
z%_PartialRotaryTestCase.get_onnx_modelc                 C   sJ   t | ds"tjddddtjtjdtjdddd}|| _	| j	S )NrJ   r   rf   r	   r   rK   )rk   r
   rM   rV   r7   r7   r8   rX      rY   z%_PartialRotaryTestCase.get_ort_inputsNrZ   r7   r7   r7   r8   r      s    r   c                   C   r_   r`   )r   r7   r7   r7   r8   partial_rotary_test_case   rb   r   )__doc__rN   onnx_irr   
onnxscriptr   onnxscript.onnx_opsetr   r   onnxscript.onnx_typesr   r   r9   r;   ra   rc   rd   re   rotary_embedding_dimhalf_rotary_embedding_dimrO   rP   rQ   rR   ri   r~   r   r   r7   r7   r7   r8   <module>   s*   $$
