
     Ti                         S SK Jr  S SKJrJr  S SKrS SKr       S                     SS jjr          S	                     S
S jjr	       S               SS jjr
g)    )annotations)AnySequenceNc
                   [         R                  R                  R                  X/U5      n
S nU(       a*  [        R
                  " [        R                  " X5      5      nS nU(       a8  US:  d   S5       e[         R                  R                  R                  X/U5      nS nS nS nU	(       a  US:  d   S5       eUS:  d   S5       eUS:  d   S5       e[         R                  R                  R                  U /U5      n[         R                  R                  R                  X/U5      n[         R                  R                  R                  U /U5      nU
UUUUU4$ )Nr   ztype_vocab_size is nullz type_sequence_label_size is nullznum_labels is nullznum_choices is null)
onnxscripttoolstransformers_models
ids_tensortorchtrilones)
batch_size
seq_length
vocab_sizetype_sequence_label_sizetype_vocab_size
num_labelsnum_choicesuse_input_maskuse_token_type_ids
use_labels	input_ids
input_masktoken_type_idssequence_labelstoken_labelschoice_labelss                   g/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/tools/transformers_models/phi.py_prepare_config_and_inputsr      sb      44??	 *I JZZ

: BC
N"=$=="#))==HH$o
 OLM'!+O-OO+A~333~Q5 55$**>>IIL2
 "'';;FF$j
 #((<<GGL+

 	     c
           
       ^ SSK Jn
  SSKJm  SSSS.0nU	(       a  UR	                  SSSS.05        U
" UUUUUUUS9nU(       a  Xl        U	(       a\   " U4S	 jS
[        R                  R                  5      nSS jn/ nU  H  u  nnUR                  U" UUU5      5        M!     U" U5      X4$  " U4S jS[        R                  R                  5      nSS jn/ nU  H  u  nnUR                  U" UUU5      5        M!     U" U5      X4$ )a0  
Returns a model.
See `PhiConfig
<https://huggingface.co/docs/transformers/main/en/model_doc/phi#transformers.PhiConfig>`_.
The parameters are chosen for a unit test configuration from `test_modeling_phi.py
<https://github.com/huggingface/transformers/blob/main/tests/models/phi/test_modeling_phi.py>`_.
r   )	PhiConfig)PhiModelbatchlength)r      r&   )hidden_sizenum_hidden_layersr   intermediate_sizemax_position_embeddingsnum_attention_headsnum_key_value_headsc                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ )&get_phi_model.<locals>.PhiModelWrapperm   c                <   > [         TU ]  5         T" U5      U l        g Nsuper__init__modelselfconfigr#   	__class__s     r   r4   /get_phi_model.<locals>.PhiModelWrapper.__init__n   s     "%f-
r    c                B    U R                  XSS9nUR                  5       $ )NF)attention_mask	use_cacher5   to_tuple)r7   r   r<   model_outputs       r   forward.get_phi_model.<locals>.PhiModelWrapper.forwardr   s+    #zz  *   $,,..r    r5   __name__
__module____qualname____firstlineno__r4   rA   __static_attributes____classcell__r9   r#   s   @r   PhiModelWrapperr.   m   s    ./ /r    rL   c                .    [        U UUSS9u  nnnnnnX54$ NT)r   r   r   r   r   )r$   seqr   r   _r   s         r   generate_example_inputs.get_phi_model.<locals>.generate_example_inputsx   s:     + %#	 ((r    c                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ ),get_phi_model.<locals>.PhiModelWrapperNoMask   c                <   > [         TU ]  5         T" U5      U l        g r1   r2   r6   s     r   r4   5get_phi_model.<locals>.PhiModelWrapperNoMask.__init__   s    G!&)DJr    c                B    U R                  USS9nUR                  5       $ )NF)r=   r>   )r7   r   r@   s      r   rA   4get_phi_model.<locals>.PhiModelWrapperNoMask.forward   s#    ::i5:AL((**r    rC   rD   rK   s   @r   PhiModelWrapperNoMaskrU      s    	*	+ 	+r    r[   c                .    [        U UUSS9u  nnnnnnU4$ rN   rO   )r$   rP   r   r   rQ   s        r   generate_example_inputs_no_mask6get_phi_model.<locals>.generate_example_inputs_no_mask   s9     '!	
	
 |r    )r$   intrP   r_   r   r_   )
transformersr"   $transformers.models.phi.modeling_phir#   update_attn_implementationr   nnModuleappend)
input_dimsr'   r(   r   r)   r*   r+   r,   rc   	with_maskr"   dynamic_shapesr8   rL   rR   example_args_collectionbsr[   r]   r#   s                       @r   get_phi_modelrm   E   s   & '=W23Nqg(";<=++ 7//F &:#		/ehhoo 		/	)  #%DAq#**+B1a+TU  v&(?OO+ +  !1&&'Fq!Z'XY  !(*AQQr    c                   US:X  a;  [        [        R                  R                  R	                  XPU5      SUSSSSSUUS9
nOUS	:X  a;  [        [        R                  R                  R	                  XPU5      S
US
S
SSS
UUS9
nOQUS;   a;  [        [        R                  R                  R	                  XPU5      SUSSSSSUUS9
nO[        SU< S35      e[        S0 UD6$ )ay  
Returns a model Phi to test or benchmark.

Args:
    warmup: Number of inputs to generate.
    repeat: Number of inputs to generate for repeat.
    config: small, medium or large
    num_hidden_layers: number of hidden layers
    implementation: eager or sdpa
    with_mask: One or two inputs.
    dynamic_shapes: dynamic shapes or not

Returns:
    Model and list of inputs.
small    c               )
rg   r'   r(   r   r)   r*   r+   r,   rc   rh   mediumi   )
rg   r'   r(   r   r)   r+   r,   r*   rc   rh   )largedefaulti   i   i    NzUnexpected configuration . )dictr   r   r	   get_input_dims_for_llm
ValueErrorrm   )warmuprepeatr8   r(   implementationri   rh   	conf_dicts           r   get_phi_model_from_configr      s   0 !'';;RR / $' ! !!/
	 
8	!'';;RR /" ! !$(!/
	 
'	'!'';;RR /" " $$(!/
	 4VJa@AA%9%%r    )ru   rr      rt   FFF)r   r_   r   r_   r   r_   r   r_   r   r_   r   r_   r   r_   r   boolr   r   r   r   returnztuple[Any, ...])
))      )   r   )      rp   ru   rq   rr   rs   rt   ru   eagerT)rg   zSequence[tuple[int, int]]r'   r_   r(   r_   r   r_   r)   r_   r*   r_   r+   r_   r,   r_   rc   strrh   r   r   0tuple[Any, list[tuple[torch.Tensor, ...]], dict])   
   ro   r&   r   FT)r~   r_   r   r_   r8   r   r(   r_   r   r   ri   r   rh   r   r   r   )
__future__r   typingr   r   r   $onnxscript.tools.transformers_modelsr   r   rm   r   rz   r    r   <module>r      s   #    + %& $333 3 "	3
 3 3 3 3 3 3 3n -H#&   'hR)hRhR hR 	hR
 hR !hR hR hR hR hR 6hRX ! H&H&H& H& 	H&
 H& H& H& 6H&r    