o
    öXœiÓ'  ã                   @   sb   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
 dd„ Zdd	„ ZG d
d„ dƒZdd„ ZdS )zw
A one-layer Whisper encoder model test case, with inputs: audio_features.
This is an onnxscript version of the model.
é    N)Úscript)Úopset18)ÚFLOATc                    sZ   t ƒ dtd dtd f‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡fdd„ƒ}| ¡ }|S )NÚaudio_features)é   éP   é¸  Úreturn)r   éÜ  é€  c           ;   
      sŒ  t j| ddd}t j| ˆˆ dddgddgdgd}t  |d¡}t  |¡}t  |d¡}t  d|¡}t  ||¡}t j|ˆˆdddgdd	gdgd}t  |d¡}	t  |	¡}
t  |
d¡}t  d|¡}t  ||¡}t j|g d
¢d}t  |ˆ¡}t j|ˆˆdddd}t jˆddgd}t  	||¡}t  |ˆ¡}t  |d¡}t j
|dgdgdgdd}t j||dd}t j|g d¢d}t jˆddgd}t  	||¡}t j
|dgdgdgdd}t j||dd}t jˆddgd}t  	||¡}t  |ˆ¡}t j
|dgdgdgdd}t j||dd} t j| g d¢d}!t j|g d¢d}"t  	||"¡}#t j|#dd}$t  	|$|!¡}%t j|%g d¢d}&t j
|dgdgdd}'t j|&|'dd}(t jˆddgd})t  	|(|)¡}*t  |*ˆ¡}+t  ||+¡},t j|,ˆˆdddd}-t jˆddgd}.t  	|-|.¡}/t  |/ˆ¡}0t  |0d¡}1t  |1¡}2t  |2d¡}3t  d|3¡}4t  |0|4¡}5t jˆ
ddgd}6t  	|5|6¡}7t  |7ˆ	¡}8t  |,|8¡}9t j|9ˆˆdddd}:|:S )Nr   r   )ÚendÚstartÚNOTSET)ÚgroupÚpadsÚauto_padÚstridesÚ	dilationsgµüÀUž ö?g      ð?g      à?é   )r   r   r   )Úpermg   €µøä>éÿÿÿÿ)Ú
stash_typeÚepsilonÚaxisg      À?r
   é   é@   )r   )Ú	allowzero)r   r   r   é   )r   r   r   r   r   )r   ÚShapeÚConvÚDivÚErfÚAddÚMulÚ	TransposeÚLayerNormalizationÚMatMulÚConcatÚReshapeÚSoftmax);r   Úval_0Úconv1dÚval_2Úval_3Úval_5Úval_7ÚgeluÚconv1d_1Úval_9Úval_10Úval_12Úval_14Úgelu_1ÚpermuteÚadd_20Ú
layer_normÚval_17Úval_18ÚlinearÚmul_18Úval_25ÚviewÚ	transposeÚval_27Úlinear_1Úval_31Úview_1Úval_33Úval_34Úlinear_2Úval_37Úview_2Útranspose_2Útranspose_3ÚmatmulÚsoftmaxÚmatmul_1Útranspose_4Úval_42Ú_unsafe_viewÚval_44Úval_45Úlinear_3Úadd_141Úlayer_norm_1Úval_48Úval_49Úlinear_4Úval_51Úval_52Úval_54Úval_56Úgelu_2Úval_57Úval_58Úlinear_5Úadd_170Úlayer_norm_2©Úencoder_encoder_conv1_biasÚencoder_encoder_conv1_weightÚencoder_encoder_conv2_biasÚencoder_encoder_conv2_weightÚ&encoder_encoder_embed_positions_weightÚencoder_encoder_layer_norm_biasÚ!encoder_encoder_layer_norm_weightÚ!encoder_encoder_layers_0_fc1_biasÚ#encoder_encoder_layers_0_fc1_weightÚ!encoder_encoder_layers_0_fc2_biasÚ#encoder_encoder_layers_0_fc2_weightÚ.encoder_encoder_layers_0_final_layer_norm_biasÚ0encoder_encoder_layers_0_final_layer_norm_weightÚ0encoder_encoder_layers_0_self_attn_k_proj_weightÚ2encoder_encoder_layers_0_self_attn_layer_norm_biasÚ4encoder_encoder_layers_0_self_attn_layer_norm_weightÚ0encoder_encoder_layers_0_self_attn_out_proj_biasÚ2encoder_encoder_layers_0_self_attn_out_proj_weightÚ.encoder_encoder_layers_0_self_attn_q_proj_biasÚ0encoder_encoder_layers_0_self_attn_q_proj_weightÚ.encoder_encoder_layers_0_self_attn_v_proj_biasÚ0encoder_encoder_layers_0_self_attn_v_proj_weight© ú_/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/rewriter/models/_whisper_encoder.pyÚ
main_graph)   sÔ   ø

ø

úÿÿÿÿú
úzmake_model.<locals>.main_graph)r   r   Úto_model_proto)ri   rf   re   rh   rg   rt   rs   rx   rw   rr   rz   ry   rv   ru   rq   rp   rm   rl   ro   rn   rk   rj   r}   Úmodelr{   rd   r|   Ú
make_model   s   ÿ:þnr€   c                  C   s  t j d¡ t j dd¡ t j¡} t j ddd¡ t j¡}t j d¡ t j¡}t j ddd¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t j dd¡ t j¡}t j d¡ t j¡}t j dd¡ t j¡}	t j dd¡ t j¡}
t j d¡ t j¡}t j dd¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t j dd¡ t j¡}t j d¡ t j¡}t j dd¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t j d¡ t j¡}t| |||||||||	|
|||||||||||ƒ}|S )Né
   r
   r   r   r   i   )ÚnpÚrandomÚseedÚrandÚastypeÚfloat32r€   )ri   rf   re   rh   rg   rt   rs   rx   rw   rr   rz   ry   rv   ru   rq   rp   rm   rl   ro   rn   rk   rj   r   r{   r{   r|   Úmake_model_with_random_weightsœ   st   ÿÿÿÿÿêrˆ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_WhisperEncoderTestc                 C   s(   t | dƒstƒ }tj |¡}|| _| jS )NÚ_onnx_model)Úhasattrrˆ   ÚirÚserdeÚdeserialize_modelrŠ   )ÚselfÚmodel_protor   r{   r{   r|   Úget_onnx_modelÚ   s
   
z"_WhisperEncoderTest.get_onnx_modelc                 C   s>   t | dƒstj d¡ dtj ddd¡ tj¡i}|| _| jS )NÚ_ort_inputsr   r   r   r   r   )r‹   r‚   rƒ   r„   r…   r†   r‡   r’   )r   Úinputsr{   r{   r|   Úget_ort_inputsá   s   
ÿz"_WhisperEncoderTest.get_ort_inputsN)Ú__name__Ú
__module__Ú__qualname__r‘   r”   r{   r{   r{   r|   r‰   Ù   s    r‰   c                   C   s   t ƒ S )N)r‰   r{   r{   r{   r|   Úwhisper_encoder_testë   s   r˜   )Ú__doc__Únumpyr‚   Úonnx_irrŒ   Ú
onnxscriptr   Úonnxscript.onnx_opsetr   Úonnxscript.onnx_typesr   r€   rˆ   r‰   r˜   r{   r{   r{   r|   Ú<module>   s    =