o
    Xi^V                     @   s  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	m
Z
 i de	d de	d d	e	d
 de	d de	d
 de	d de	d
 de	d de	d
 de	d de	d de	d de	d
 de	d
 de	d
 de	d
 de	d
 i de	d de	d de	d  d!e
d" d#e
d$e
d" d%e
d" d&e
d'e	d( d)e
d*e	d+e
d,e
d- d.e
d" d/e
d0 d1e	d2e
d" i d3e
d" d4e
d5 d6e	d7 d8e
d9e	d7 d:e
d;e
d<e
d= d>e
d5 d?e
d@ dAed7 dBe	d7 dCe	d7 dDe
d" dEe
d5 dFe	dG dHe
i dIe
dJe
d" dKe
dL dMe
dL dNe	dO dPe
dQe
d" dRe
d" dSe
d" dTe
d" dUe
d" dVe	dO dWe
d5 dXe
dY dZe	dY d[e	dO d\e	i d]edO d^e
d" d_e
d" d`e
d" dae
d" dbe
d" dce	dO dde	dee	dO dfe
dL dge
dhe
d die
dj dke	dl dme	dl dne	dl doe
dL i dpe
dqe
d dre
dj dse	dt due	dt dve	dt dwe	dO dxe
dL dye
dze
d d{e
dj d|e	dO d}e
d~ de	d~ de	d de	d de	d i de	d de	d de	d( de	d de	d( de	d( de
d" de
dL de	d de	d de	d de	d( de	d( de
dL de	d de	d de	d i de	d( de	d( de
dL de	d de	d de
d" de
d" de
d" de
d" de	d de
d" de
d" de
d" de
d" de	d de
d" de
d" i de
d" de
d" de	d de
d" de
d" de
d" de
d" de	d de	d de	d de	d de
d" de
d" de
d" de
d" de	d de
d" i de
d" de
d" de
d" de	d de	d de	d de	d de	d de	d de
d" de
d" de
d" de
d" de	d de
d" de
d" de
d" i de
d" de	d de	d de	d de	d de	d de	d de	d de	d de	d de	de	d de
d" de
d" de
d" de
d" de
d" i de	dO de	d de	d de	d de	d de
d de	d( de	d de	d( de	d( de	d de	d de	d de	de	d de	de	d i de	de	d de	d de	de	d de	d de	d de	d de	d de	d( d e	d( de	d( de	d( de	d( de	d de	d Zdd	 Zd
d ZG dd dZdd ZdS (      N)script)opset18)BOOLFLOATINT64model_embed_tokens_weight)    
  &model_layers_0_self_attn_q_proj_weight)r	   r	   $model_layers_0_self_attn_q_proj_biasr	   &model_layers_0_self_attn_k_proj_weight$model_layers_0_self_attn_k_proj_bias&model_layers_0_self_attn_v_proj_weight$model_layers_0_self_attn_v_proj_bias%model_layers_0_self_attn_dense_weight#model_layers_0_self_attn_dense_biasmodel_layers_0_mlp_fc1_weight) (  r	   model_layers_0_mlp_fc1_biasr   model_layers_0_mlp_fc2_weight)r	   r   model_layers_0_mlp_fc2_bias%model_layers_0_input_layernorm_weight#model_layers_0_input_layernorm_biasmodel_final_layernorm_weightmodel_final_layernorm_biaslm_head_weightlm_head_biasr   expand_2)      r   val_1r   sym_size_int_44val_4val_5sym_size_int_50	embedding)s34s16r	   add_4val_6val_7aranger'   val_8	unsqueeze)r   r'   val_10val_13val_14val_15   full)r'   	s16 + s62diagonaltriuval_18val_19arange_1r4   val_21view)r'   r   gtconvert_element_type_defaultmul_16val_22val_421unsqueeze_4)r   r   r'   r4   val_23val_31val_49val_50   val_52expand_1)r&   r   r'   r4   val_61val_72val_74val_75val_78val_79slice_8val_422unsqueeze_6)r&   r   r   r4   convert_element_type_default_1add_89scalar_tensor_defaulteq_64val_119val_121val_122val_125val_126slice_14val_127masked_fillval_179val_180val_181val_186)Nr   val_187)r'   r   r&   r4   val_188val_189val_191val_192val_193val_198val_199)r   r&   r'   r4   val_200val_201slice_scatter_1val_203val_204val_205val_210slice_scatter_2unsqueeze_9)r   r   r'   _to_copymatmul)r   r   r'   	transpose)r   r'   r   cat)r   r'       cossin
layer_normval_246val_247linearval_252val_253view_1)r&   r'   rw   P   transpose_1)r&   rw   r'   r   val_255val_256linear_1val_261view_2transpose_2val_263val_264linear_2val_269view_3transpose_3val_273val_277val_280val_281slice_26)r&   rw   r'   rw   val_284val_287val_290val_291slice_27)r&   rw   r'   0   val_294val_297val_300val_301slice_28val_304val_307val_310val_311slice_29unsqueeze_10)r   r   r'   rw   unsqueeze_11mul_213val_314val_318val_321val_322slice_30)r&   rw   r'   r   val_325val_328val_331val_332slice_31negcat_1mul_230add_290mul_238val_335val_338val_341val_342slice_32val_345val_348val_351val_352slice_33neg_1cat_2mul_255add_326cat_3cat_4transpose_4)r&   rw   r   r4   matmul_1)r&   rw   r'   r4   val_353mul_287val_372val_374val_375val_378val_379slice_41add_387val_380matmul_2transpose_5val_385   view_4val_387val_388linear_3val_389val_390)r&   r'   r   linear_4val_391mul_351val_392pow_1val_393mul_358add_446val_394mul_365tanhadd_459mul_375val_395val_396linear_5add_476add_481layer_norm_1val_419)r	   r   val_420r&   r'   r   c                    s   t  dtd dtd dtd dtd dtd	 td
 td
 ff
 	
fdd}|jtd}|S )N	input_ids)r&   r'   attention_mask)r&   r4   past_key_values_key_cache_0)r&   rw   s62r   past_key_values_value_cache_0returnr   )r&   rw   r4   r   c                    s&	  t j| ddd}t |}t j|ddd}t j|ddd}t |}t j| dd}	t ||}
t ||
d}t |dg}t j|
dgdd}t j||dd}t 	d	|}t j
dd
}t j||dd}t d|
d}t j|ddgdd}t ||}t j|dd}t ||}t |ddg}t j|dgdgdgdd}t |}t 	||}t j
dgd}t j
dgd}t j|
|dd}t j
dgd}t |||dg|}t |ddg} t j| dd}!t ||!}"t |"d}#t j
dgd}$t j
dgd}%t j|
|%dd}&t j
dgd}'t ||$|&dg|'}(t |#d	|(})t j|dd}*t j|*ddd}+t d|+d},t |,dg}-t j|)g dd}.t j|g dd}/t j|/|-|.dd}0t j|dd}1t j|1ddd}2t d|2d}3t |3dg}4t j|0g dd}5t j|g dd}6t j|6|4|5dd}7t j|7g dd}8t j|dd}9t j|9ddd}:t d|:d};t |;dg}<t j||<|8dd}=t |dg}>t j|>dd}?t  |?}@t j|@g dd}At j|A|Add}Bt |B}Ct |B}Dt j|	dddd}Et jddgd}Ft |E|F}Gt |G}Ht j||dgdgdd}It j|H|Idd}Jt j|Jg dd}Kt jddgd}Lt |E|L}Mt |M}Nt j||dgdgdd}Ot j|N|Odd}Pt j|Pg dd}Qt jddgd}Rt |E|R}St |S}Tt j||dgdgdd}Ut j|T|Udd}Vt j|Vg dd}Wt j
dgd}Xt |Kdgdgdg|X}Yt j
dgd}Zt |Kdgdgdg|Z}[t j
dgd}\t |Qdgdgdg|\}]t j
dgd}^t |Qdgdgdg|^}_t |Cdg}`t |Ddg}at |Y|`}bt j
dgd}ct |Ydgdgdg|c}dt j
dgd}et |Ydgdgdg|e}ft |f}gt j|g|ddd}ht |h|a}it |b|i}jt |]|`}kt j
dgd}lt |]dgdgdg|l}mt j
dgd}nt |]dgdgdg|n}ot |o}pt j|p|mdd}qt |q|a}rt |k|r}st j|j|[dd}tt j|s|_dd}ut j||udd}vt j||Wdd}wt j|vg dd}xt |t|x}yt |yd }zt j
dgd}{t j
dgd}|t j|
||dd}}t j
dgd}~t |=|{|}dg|~}t |z|}t j|dd}t ||w}t j|g dd}t j||dgdd}t j||dd}t jddgd}t ||}t |}t j	ddgd}t |E|}t |}t |d!}t |d"}t |d#}t ||}t |d$}t |}t |d%}t ||}t jddgd}t ||}t |
}t ||}t ||	}t j|dddd}t jddgd}t ||}t |}||v|wfS )&Nr2   r   )endstartr   r   )axis)	allowzerogM)	value_int)upper)to)
value_intsg        )r   )r2   r   r   r   )permnone)	reduction)r   r2   r   r   )r   r   r2   r   )r   r2   r   g   >)
stash_typeepsilonr   r   )r   r2   r   r   rw   l    r   )r   r   r   r2   g(%?g      ?g      @gHm?glHE?g      ?)r   ShapeSqueezeGatherAddRange	UnsqueezeReshapeConcatExpandConstantTriluGreaterCastMulAbsSliceEqualWhere	Transpose	ScatterNDMatMulCosSinLayerNormalizationNegSoftmaxPowTanh)r   r   r   r   r    r!   r"   r#   r$   r%   r(   r+   r-   r0   r1   r3   r5   r6   r9   r;   r<   r=   r>   rA   rE   rG   rH   rJ   rK   rL   rN   rO   rQ   rR   rS   rU   rV   rW   rX   rZ   r[   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rx   ry   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   cat_5cat_6r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   linear_6r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r    V/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/rewriter/models/_phi2lm.py
main_graph  sT  








zmake_model.<locals>.main_graph)value_infos)r   r   r   to_model_protor*  )r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)  modelr'  r&  r(  
make_model   s$   6 6r-  c                  C   s  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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dt j}t jdt j}t j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dt j}t| |||||||||	|
|||||||||}|S )Nr   r	   r   r   r   )numpyrandomrandastypefloat32r-  )r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,  r'  r'  r(  make_model_with_random_weights  sb   r3  c                   @   s   e Zd Zdd ZdS )_Phi2LMTestc                 C   s(   t | dst }tj|}|| _| jS )N_onnx_model)hasattrr3  irserdedeserialize_modelr5  )selfmodel_protor,  r'  r'  r(  get_onnx_model  s
   
z_Phi2LMTest.get_onnx_modelN)__name__
__module____qualname__r<  r'  r'  r'  r(  r4    s    r4  c                   C   s   t  S )N)r4  r'  r'  r'  r(  phi2lm_test  s   r@  )r.  onnx_irr7  
onnxscriptr   onnxscript.onnx_opsetr   onnxscript.onnx_typesr   r   r   r*  r-  r3  r4  r@  r'  r'  r'  r(  <module>   s  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
                                               !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  
X  
Y  
Z  
[  \  ]  a Q4	