o
    Xi+                     @   sf   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 dd Zdd	 ZG d
d dZdd ZdS )z
A one-layer SmolLM model test case, with inputs: input_ids, attention_mask, and position_ids.
This is an onnxscript version of the model.
    N)script)opset18)FLOATINT64c                    sb   t  dtd dtd dtd dtd td td ff 	
fdd	}| }|S )
Ninput0   
   input1input2return)r   r	      )r       r	   @   c           v         s   t jd}t jd}t jd}t j d}t j	d}t jd}t j
d}	t jd}
t jd}t jd}t jd}t j|| dd}t ddgdg}t |d}t |g d}t |dg}t |dg}|| }|d	k}|}t |d
|}t j|g dd}t j|g dd}t j|g dd}t j|g dd}t |dg}t j	|dd}t jt
tjg dtjdg dd}t j|g ddd}|| } t j| g ddd}!t j|!g dd}"t j|"|"dd}#t |#}$t |#}%|d }&t j|&dgddd}'|'d }(t |(})t |)}*||* }+||+ },t j|ddgd}-|,|- }.t j|ddgd}/|,|/ }0t j|	ddgd}1|,|1 }2t j|.g ddd}3t j|3g dd}4t j|0g ddd}5t j|5g dd}6t j|2g ddd}7t j|7g dd}8t |$dg}9t |%dg}:|4|9 };t jdgd}<t |4dgdgdg|<}=t jdgd}>t |4dgdgdg|>}?t |?}@t j|@|=dd}A|A|: }B|;|B }C|6|9 }Dt jdgd}Et |6dgdgdg|E}Ft jdgd}Gt |6dgdgdg|G}Ht |H}It j|I|Fdd}J|J|: }K|D|K }Lt j|Lg d dd}Mt j|Mg dd}Nt j|Ng d!dd}O|Cd"g }P|Od"g }Q|P|Q }R|R| }St j|Sdd}T|T|8 }Ut j|Ug dd}Vt j|Vg d#dd}Wt j|
ddgd}X|W|X }Y||Y }Z|Zd }[t j|[dgddd}\|\d }]t |]}^t |^}_|Z|_ }`||` }at j|ddgd}b|a|b }ct |c}d|c|d }et j|ddgd}f|a|f }g|e|g }ht j|ddgd}i|h|i }j|Z|j }k|kd }lt j|ldgddd}m|md }nt |n}ot |o}p|k|p }q||q }rt j|ddgd}s|r|s }tt |t}u|u|L|8fS )$N)valuer   )axisr	   g   r   )r   r   r	   r	      g        gM)r   r   r      )perm)r   r   r   r   )to) g      ?g    "?g   @?g   `?g   `=?g   `Z?g   ?g   ?g   ?g   2?g   @ʬ?g   B?g   `0?g   iH?g    5?g   @~O?g   @z?g    6~?g   w?g   Eq?g    i?g   !mc?g    "]?g   1U?g   MbP?g   H?g   BmB?g   ;?g    l4?g   /?g   `N'?g   @z!?dtype)r   r   r   )r   r   r	   )	allowzero)r   r   r	   )r   r   r   g       @)keepdimsnoop_with_empty_axesgh㈵>)r   r	   r   r   )r   r   r   r   )
value_intsr   r   l    )r   r	   r   )r   r   r   r	   gm`[?)r   r	   r   )r   ConstantGatherConstantOfShapeTriluReshape	UnsqueezeWhere	TransposeCastirtensornparrayfloat32reshapeConcatCosSin
ReduceMeanSqrt
ReciprocalSliceNegSoftmaxSigmoidIdentity)vr   r
   r   %model_layers_0_input_layernorm_weight.model_layers_0_post_attention_layernorm_weightmodel_norm_weightlm_head_weight&model_layers_0_self_attn_q_proj_weight&model_layers_0_self_attn_k_proj_weight&model_layers_0_self_attn_v_proj_weight&model_layers_0_self_attn_o_proj_weight#model_layers_0_mlp_gate_proj_weight!model_layers_0_mlp_up_proj_weight#model_layers_0_mlp_down_proj_weight	embeddingminus_inf_10x10
mask_10x10slice_5unsqueeze_2unsqueeze_3addeqslice_10masked_fillval_179slice_scatterval_191slice_scatter_1unsqueeze_6	to_copy_1view_1view_2bmmview_3	transposecatcossinpow_1meanadd_1val_244rsqrtmul_3mul_4tview_5t_1view_7t_2view_9view_10transpose_1view_11transpose_2view_12transpose_3unsqueeze_7unsqueeze_8mul_5val_267slice_19val_277slice_20negcat_1mul_6add_2mul_7val_287slice_21val_297slice_22neg_1cat_2mul_8add_3val_346val_347val_349val_351val_353val_354val_355val_356getitemtranspose_4view_13t_3view_15add_4pow_2mean_1add_5val_379rsqrt_1mul_9mul_10t_4view_17val_383silut_5view_19mul_11t_6view_21add_6pow_3mean_2add_7val_391rsqrt_2mul_12mul_13t_7view_23
to_copy_12head_weightinput_layernorm_weight_0mlp_down_proj_weight0mlp_gate_proj_weight0mlp_up_proj_weight0norm_weight post_attention_layernorm_weight0self_attn_k_proj_weight0self_attn_o_proj_weight0self_attn_q_proj_weight0self_attn_v_proj_weight0 X/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/rewriter/models/_smollm_1.py
main_graph   s  "
$)














zmake_model.<locals>.main_graph)r   r   r   to_model_proto)r   r   r   r   r   r   r   r   r   r   r   r   modelr   r   r   
make_model   s   $ .r   c                  C   sN  t jdt j} t jdt j}t jdt j}t jddt j}t jddt j}t jddt j}t jddt j}t jddt j}t jddt j}t jddt j}	t jddt j}
tt| t|t|t|t|t|t|t|t|t|	t|
}|S )Ni   r   i    )r(   randomrandastyper*   r   r&   r'   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   make_model_with_random_weights   s2   r   c                   @   s   e Zd Zdd Zdd ZdS )_SmollmTest1c                 C   s(   t | dst }tj|}|| _| jS )N_onnx_model)hasattrr   r&   serdedeserialize_modelr   )selfmodel_protor   r   r   r   get_onnx_model   s
   
z_SmollmTest1.get_onnx_modelc                 C   sV   t | ds(tjdddtjtjdtjdtjdtjd	ddd}|| _
| j
S )	N_ort_inputsr   r   r   r   r	   r   )r   r
   r   )r   r(   r   randintr   int64onesr*   aranger+   r   )r   inputsr   r   r   get_ort_inputs   s   
z_SmollmTest1.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   smollm_test_1   s   r   )__doc__numpyr(   onnx_irr&   
onnxscriptr   onnxscript.onnx_opsetr   onnxscript.onnx_typesr   r   r   r   r   r   r   r   r   r   <module>   s    @