
    `i7                         S SK r S SKrS SKrS SKrS SKJrJrJr  S SKJrJ	r	  S SK
rS SKJr  S SKJrJr  S SKJr  SSS	S
SSS.r " S S\ R$                  5      r\S:X  a  \ R*                  " 5         gg)    N)helperTensorProto
ModelProto)	make_nodemake_tensor_value_info)numpy_helper)optimize_modeloptimize_by_onnxruntime)	OnnxModelzGtest_data\bert_squad_pytorch1.4_opset11\BertForQuestionAnswering_0.onnxzGtest_data\bert_squad_pytorch1.4_opset11\BertForQuestionAnswering_1.onnxzJtest_data\bert_squad_pytorch1.4_opset10_fp32\BertForQuestionAnswering.onnxzPtest_data\bert_mrpc_tensorflow2.1_opset10\TFBertForSequenceClassification_1.onnxzUtest_data\bert_squad_tensorflow2.1_keras2onnx_opset11\TFBertForQuestionAnswering.onnxz8test_data\gpt2_pytorch1.4_opset11_no_past\GPT2Model.onnx)bert_pytorch_0bert_pytorch_1"bert_squad_pytorch1.4_opset10_fp32bert_keras_0bert_keras_squadgpt2c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestBertOptimization&   c                 .   UR                  5        H  u  p4[        UR                  U5      5      U:w  a4  [        SR	                  U[        UR                  U5      5      U5      5        U R                  [        UR                  U5      5      U5        M     g )Nz{}:{} expected={})itemslenget_nodes_by_op_typeprintformatassertEqual)self
bert_modelexpected_node_countop_typecounts        l/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxruntime_tools/transformers/test_optimizer.pyverify_node_count&TestBertOptimization.verify_node_count(   sy    1779NG:227;<E)00#j>]>]^e>f:ginopS!@!@!IJER :    c                 D   [         S   nSn[        USUS9  [        5       n[        US5       nUR	                  UR                  5       5        S S S 5        [        R                  " U5        [        U5      nSSSS	S	SS
.nU R                  XV5        g ! , (       d  f       NJ= f)Nr   	temp.onnxFuse_gpuoptimized_model_pathrb         r   EmbedLayerNormalization	AttentionSkipLayerNormalizationGeluFastGeluBiasGelu
BERT_TEST_MODELSr
   r   openParseFromStringreadosremover   r"   r   inputoutputmodelfr   r   s          r!   $test_pytorch_model_0_cpu_onnxruntime9TestBertOptimization.test_pytorch_model_0_cpu_onnxruntime.   s     !12u6R&$1!!!&&(+  
		&u%
'(&(
 	z?  s    B
Bc                    S[         R                  " 5       ;  a  [        S5        g [        S   nSn[	        USUS9  [        5       n[        US5       nUR                  UR                  5       5        S S S 5        [        R                  " U5        [        U5      nSS	S
SS	SS.nU R                  XV5        g ! , (       d  f       NJ= f)NCUDAExecutionProviderz<skip test_pytorch_model_0_gpu_onnxruntime since no gpu foundr   r&   Tr'   r*   r+   r,   r-   r   r.   onnxruntimeget_available_providersr   r6   r
   r   r7   r8   r9   r:   r;   r   r"   r<   s          r!   $test_pytorch_model_0_gpu_onnxruntime9TestBertOptimization.test_pytorch_model_0_gpu_onnxruntimeA   s    "+*M*M*OOPQ !12t&Q&$1!!!&&(+  
		&u%
'(&(
 	z?  s    B66
Cc                 F   [         S   nSn[        USUS9  [        5       n[        US5       nUR	                  UR                  5       5        S S S 5        [        R                  " U5        [        U5      nSSSS	S	S	SS
.nU R                  XV5        g ! , (       d  f       NK= f)Nr   r&   Fr'   r*   r+   r,   r-   r   r/   r0   LayerNormalizationr1   r2   r3   r4   r5   r<   s          r!   $test_pytorch_model_1_cpu_onnxruntime9TestBertOptimization.test_pytorch_model_1_cpu_onnxruntimeX   s     !12u6R&$1!!!&&(+  
		&u%
'("$&'
 	z?  s    B
B c                    S[         R                  " 5       ;  a  [        S5        g [        S   nSn[	        USUS9  [        5       n[        US5       nUR                  UR                  5       5        S S S 5        [        R                  " U5        [        U5      nSS	S
SSS	SS.nU R                  XV5        g ! , (       d  f       NK= f)NrD   z<skip test_pytorch_model_1_gpu_onnxruntime since no gpu foundr   r&   Tr'   r*   r+   r,   r-   r   rK   rE   r<   s          r!   $test_pytorch_model_1_gpu_onnxruntime9TestBertOptimization.test_pytorch_model_1_gpu_onnxruntimel   s    "+*M*M*OOPQ !12t&Q&$1!!!&&(+  
		&u%
'("$&'
 	z?  s    B77
Cc                 b    [         S   n[        USSSS9nSSSS	S	SS
.nU R                  X#5        g )Nr   bert      	num_headshidden_sizer+   r,   r-   r   r.   r6   r	   r"   r   r=   r   r   s       r!   test_pytorch_model_0)TestBertOptimization.test_pytorch_model_0   sI     !12#E6QAN
 ()&(
 	z?r$   c                 l    [         S   n[        USSSS9nU R                  UR                  5       5        g )Nr   rS   rT   rU   rV   r6   r	   
assertTrueis_fully_optimizedr   r=   r   s      r!   test_pytorch_model_2)TestBertOptimization.test_pytorch_model_2   s2     !EF#E6QAN

5578r$   c                 d    [         S   n[        USSSS9nSSSS	SSSS
.nU R                  X#5        g )Nr   
bert_kerasrT   rU   rV   r+   r,   r   r-   )r/   r0   rL   r1   r4   r2   r3   rY   rZ   s       r!   test_keras_model_1'TestBertOptimization.test_keras_model_1   sL     0#E<1RST
 ()"#&(
 	z?r$   c                 l    [         S   n[        USSSS9nU R                  UR                  5       5        g )Nr   re   rT   rU   rV   r^   ra   s      r!   test_keras_squad_model+TestBertOptimization.test_keras_squad_model   s3     !34#E<1RST

5578r$   c                 d    [         S   n[        USSSS9nSSSSSSSS.nU R                  X#5        g )	Nr   rT      rV   r   r,      )r/   r0   r2   r3   r4   rL   r1   rY   rZ   s       r!   	test_gpt2TestBertOptimization.test_gpt2   sK     (#E6QAN
 ()"$&'
 	z?r$    N)__name__
__module____qualname____firstlineno__r"   rA   rH   rM   rP   r[   rb   rf   ri   rn   __static_attributes__rp   r$   r!   r   r   &   s<    S@&@.@(@0@9
@ 9@r$   r   __main__)unittestr:   onnxrF   r   r   r   onnx.helperr   r   numpynpr   	optimizerr	   r
   r   r6   TestCaser   rq   mainrp   r$   r!   <module>r      st     	   0 0 9   =  	TSV\aD  U@8,, U@p zMMO r$   