Ë
    �…j-`  ã                   óÔ  — d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZmZ d
ej8                  d<    e j:                  e«      Zdej@                  iZ!d-d„Z"d„ Z#d„ Z$ejJ                  fd„Z&d„ Z'd„ Z(d„ Z)d„ Z*	 d.d„Z+de,de,de-de.de.de
de.de.fd„Z/de,d e,d!e,fd"„Z0d#„ Z1	 d.d$„Z2d%„ Z3d/d&„Z4d'„ Z5d(„ Z6d)„ Z7d*„ Z8d+„ Z9d,„ Z:y)0é    N)ÚPath)ÚAffinitySetting)ÚOptimizerInfoÚ	PrecisionÚcreate_onnxruntime_session)ÚMODEL_CLASSES)ÚQuantizeHelper)Útorch_onnx_export)Ú
AutoConfigÚAutoFeatureExtractorÚAutoTokenizerÚLxmertConfigÚTransfoXLConfig)ÚPRETRAINED_GPT2_MODELSÚGPT2ModelNoPastStateÚTFGPT2ModelNoPastStateÚ2ÚTF_CPP_MIN_LOG_LEVELÚtriuc                 ó°  — |�J ‚t        | j                  «      dk(  r#| j                  d«      | j                  d«      k(  sJ ‚t        d   } |t	        j
                  dt        j                  ¬«      |«      }|d | j                  d«      …d | j                  d«      …f   }t	        j                  |j                  «       | t	        j                  | «      «      S )Né   r   é   r   )é   r   ©Údtype)
ÚlenÚshapeÚsizeÚ
torch_funcÚtorchÚonesÚuint8ÚwhereÚboolÚ
zeros_like)ÚxÚdiagonalÚoutÚ
torch_triuÚtemplateÚmasks         úg/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_exporter.pyÚ	triu_onnxr-   #   s©   € Øˆ;Ðˆ;Üˆq�w‰w‹<˜1Ò §¡¨£¨a¯f©f°Q«iÒ!7Ð7Ð7ä˜FÑ#€JÙœ%Ÿ*™* \¼¿¹ÔEÀxÓP€HØ�K�a—f‘f˜Q“i�K  1§6¡6¨!£9 Ð,Ñ-€DÜ�;‰;�t—y‘y“{ A¤u×'7Ñ'7¸Ó':Ó;Ð;ó    c                  ó"   — t         t        _        y ©N)r-   r    r   © r.   r,   Úreplace_torch_functionsr2   -   s	   € Ü„E…Jr.   c                  ó(   — t         d   t        _        y )Nr   )r   r    r   r1   r.   r,   Úrestore_torch_functionsr4   1   s   € Ü˜FÑ#„E…Jr.   c                 ó¨  — |j                   dv rYt        j                  j                  |d|j                  |j                  «      j                  t        j                  «      }d|i}|S t        j                  j                  d| dz
  ||f|¬«      }d|i}d|v rt        j                  ||g|¬	«      }||d<   d
|v rt        j                  ||g|¬	«      }	|	|d
<   |j                  r||d<   t        |t        «      r–t        j                  j                  dd|j                  «      j                  t        j                  «      |d<   t        j                  j                  dd|j                  «      j                  t        j                  «      |d<   t        |t         «      r3t        j                  |j"                  gt        j                  ¬	«      |d<   |S )N©ÚvitÚswiné   Úpixel_valuesr   r   ©ÚlowÚhighr   r   Ú	input_idsÚattention_maskr   Útoken_type_idsÚdecoder_input_idsÚvisual_featsÚ
visual_posz@tf_transfo_xl_model/transformer/pos_emb/einsum/Einsum/inputs_1:0)Ú
model_typeÚnumpyÚrandomÚrandÚ
image_sizeÚastypeÚfloat32Úrandintr!   ÚzerosÚis_encoder_decoderÚ
isinstancer   ÚrandnÚvisual_feat_dimÚvisual_pos_dimr   Úhidden_size)
Ú
vocab_sizeÚ
batch_sizeÚsequence_lengthÚinput_namesÚconfigÚ	data_typer>   Úinputsr?   Úsegment_idss
             r,   Úcreate_onnxruntime_inputr[   5   s›  € Ø×Ñ˜OÑ+Ü—L‘L×%Ñ% j°!°V×5FÑ5FÈ×HYÑHYÓZ×aÑaÔbg×boÑboÓpˆ	Ø  )Ð,ˆØˆä—‘×$Ñ$¨°¸a±ÀzÐSbÐFcÐktÐ$Óu€IØ˜9Ð%€Fà˜;Ñ&ÜŸ™ Z°Ð$AÈÔSˆØ#1ˆÐÑ à˜;Ñ&Ü—k‘k :¨Ð"?ÀyÔQˆØ#.ˆÐÑ à× Ò Ø&/ˆÐ"Ñ#ä�&œ,Ô'Ü!&§¡×!3Ñ!3°A°q¸&×:PÑ:PÓ!Q×!XÑ!XÔY^×YfÑYfÓ!gˆˆ~ÑÜ$Ÿ|™|×1Ñ1°!°Q¸×8MÑ8MÓN×UÑUÔV[×VcÑVcÓdˆˆ|ÑÜ�&œ/Ô*ÜUZ×U`ÑU`Ø×ÑÐ ¬¯©ôV
ˆÐQÑRð €Mr.   c                 ó2   — i }|D ]  }|| v sŒ| |   ||<   Œ |S r0   r1   )rY   rV   Úremaining_model_inputsÚ
input_names       r,   Úfilter_inputsr_   S   s9   € ØÐØ!ò Dˆ
Ø˜ÒØ17¸
Ñ1CÐ" :Ò.ðDð "Ð!r.   c                 ór   — t        | t        t        f«      r| D �cg c]  }t        |«      ‘Œ c}gS | gS c c}w r0   )rN   ÚlistÚtupleÚflatten)rY   Úis     r,   rc   rc   [   s3   € Ü,6°vÄÄe¸}Ô,M Ö(˜AŒW�Q�ZÒ(ÐZÐZÐSYÐZÐZùÒ(s   ›4c                 óz   — | D ]5  }t        |t        t        f«      s|j                  |«      nt	        ||«       Œ7 |S r0   )rN   ra   rb   ÚappendÚupdate_flatten_list)rY   Úres_listrd   s      r,   rg   rg   _   s>   € Øò eˆÜ",¨Q´´u°Ô">ˆ�‰˜ÔÔDWÐXYÐ[cÓDdùðeà€Or.   c                 óx  — | d   j                   d   }| D �ci c]  }|dddœ“Œ
 }}t        t        |«      «      D �cg c]  }dt        |dz   «      z   ‘Œ }}t	        |«      D ]J  \  }}ddi||<   ||   j                   }t	        |«      D ]!  \  }	}
|
|k(  sŒ||   j                  |	di«       Œ# ŒL ||fS c c}w c c}w )	Nr>   éÿÿÿÿrT   Úseq_len)r   r   Úoutput_r   r   )r   Úranger   ÚstrÚ	enumerateÚupdate)Úexample_inputsÚoutputs_flattenrU   ÚkeyÚdynamic_axesrd   Úoutput_namesÚoutput_nameÚdimsÚjÚdims              r,   Úbuild_dynamic_axesrz   e   så   € Ø$ [Ñ1×7Ñ7¸Ñ;€OàDRÖS¸S�C˜\¨iÑ8Ñ8ÐS€LÐSä49¼#¸oÓ:NÓ4OÖP¨q�I¤ A¨¡E£
Ó*ÐP€LÐPÜ# LÓ1ò A‰ˆˆ;Ø%&¨Ð$5ˆ�[Ñ!Ø˜qÑ!×'Ñ'ˆÜ “oò 	A‰FˆAˆsØ�oÓ%Ø˜[Ñ)×0Ñ0°!°Y°Õ@ñ	AðAð ˜Ð%Ð%ùò TùâPs
   —B2¼B7c           	      ó¬  — t        | |d¬«      }|€t        j                  | › d�«       yt        j                  | › d�«       |j	                  «       D ��ci c]  \  }}||j                  «       “Œ }	}}|j                  ||	«      }
t        |«      t        |
«      k7  r.t        j                  dt        |«      › dt        |
«      › �«       yt        t        |«      «      D ]Ö  }t        j                  t        j                  |
|   ||   j                  «       j                  «       z
  «      «      }|dkD  rt        j                  d|› d	|› �«       |rd
nd}|rdnd}t        j                  |
|   ||   j                  «       j                  «       ||¬«      rŒ¸t        j                  d|› d|› d|› �«        y t        j                  d| › �«       yc c}}w )NF)Úenable_all_optimizationz is an invalid ONNX modelz is a valid ONNX modelz"Number of output tensors expected z, got g-Cëâ6?zMax absolute diff=z for output tensor gš™™™™™©?gš™™™™™¹?)ÚrtolÚatolzOutput tensor z is not close: rtol=z, atol=z0inference result of onnxruntime is validated on T)r   ÚloggerÚerrorÚinfoÚitemsrE   Úrunr   rm   ÚamaxÚabsÚcpuÚallclose)Úonnx_model_pathrq   Úexample_outputs_flattenÚuse_gpuÚfp16ru   Útest_sessionÚkÚtÚexample_ort_inputsÚexample_ort_outputsrd   Úabs_diffr}   r~   s                  r,   Úvalidate_onnx_modelr’   t   sÎ  € ô .¨o¸wÐ`eÔf€LØÐÜ�‰˜Ð(Ð(AÐBÔCØä
‡K�K�?Ð#Ð#9Ð:Ô;ð 4B×3GÑ3GÓ3I×J©4¨1¨a˜!˜QŸW™W›Y™,ÐJÐÑJØ&×*Ñ*¨<Ð9KÓLÐÜ
Ð"Ó#¤sÐ+>Ó'?Ò?Ü�‰Ø0´Ð5LÓ1MÐ0NÈfÔUXÐYlÓUmÐTnÐoô	
ð ä”3Ð.Ó/Ó0ò ˆÜ—:‘:œeŸi™iÐ(;¸AÑ(>ÐAXÐYZÑA[×A_ÑA_ÓAa×AgÑAgÓAiÑ(iÓjÓkˆØ�dŠ?Ü�K‰KÐ,¨X¨JÐ6IÈ!ÈÐMÔNá‰u $ˆÙ‰u $ˆÜ�~‰~Ø Ñ"Ø# AÑ&×*Ñ*Ó,×2Ñ2Ó4ØØö	
ô �L‰L˜>¨!¨Ð,@ÀÀÀgÈdÈVÐTÔUÙðô  ‡K�KÐBÀ?ÐBSÐTÔUØùó3 Ks   ÁGÚonnx_dirÚ
model_nameÚinput_countÚoptimized_by_scriptrŠ   Ú	precisionÚoptimized_by_onnxruntimeÚuse_external_datac                 ód  — ddl m}  |dd|«      }	|s|	› d|› �}
n|rdnd}|	› d|› d|› d|› �}
|r|
dz  }
| }|rV|sTt        j                  j	                  | |
«      }t        j                  j                  |«      st        j                  |«       t        j                  j	                  ||
› d�«      S )	Nr   )Úsubz[^a-zA-Z0-9_]Ú_Úgpur†   Ú_ortz.onnx)Úrer›   ÚosÚpathÚjoinÚexistsÚmakedirs)r“   r”   r•   r–   rŠ   r—   r˜   r™   r›   Únormalized_model_nameÚfilenameÚdeviceÚ	directorys                r,   Úget_onnx_file_pathr©       sµ   € õ áÐ 0°#°zÓBÐáØ+Ð,¨A¨k¨]Ð;‰á!‘ uˆØ+Ð,¨A¨k¨]¸!¸I¸;ÀaÈÀxÐPˆáØ�FÑˆà€IáÑ!9Ü—G‘G—L‘L ¨8Ó4ˆ	Ü�w‰w�~‰~˜iÔ(Ü�K‰K˜	Ô"ä�7‰7�<‰<˜	 h Z¨uÐ#5Ó6Ð6r.   Ú	file_pathÚsuffixÚreturnc                 ó¬   — t        | «      }t        |j                  j                  |j                  |z   «      j                  |j                  «      «      S )a  
    Append a suffix at the filename (before the extension).
    Args:
        path: pathlib.Path The actual path object we would like to add a suffix
        suffix: The suffix to add
    Returns: path with suffix appended at the end of the filename and before extension
    )r   rn   ÚparentÚjoinpathÚstemÚwith_suffixr«   )rª   r«   r¡   s      r,   Úadd_filename_suffixr²   Á   s?   € ô �	‹?€DÜˆt�{‰{×#Ñ# D§I¡I°Ñ$6Ó7×CÑCÀDÇKÁKÓPÓQÐQr.   c                 ó  — |st         j                  j                  |«      sFt        |«      j                  j                  dd¬«       ddlm}m}  || ||d¬«      } ||«      ||<   y t        j                  d|› �«       y )NT©ÚparentsÚexist_okr   )Úget_fusion_statisticsÚoptimize_by_onnxruntimeéc   )rŠ   Úoptimized_model_pathÚ	opt_levelú'Skip optimization since model existed: )r    r¡   r£   r   r®   ÚmkdirÚ	optimizerr·   r¸   r   r�   )rˆ   Úort_model_pathrŠ   Ú	overwriteÚmodel_fusion_statisticsr·   r¸   rœ   s           r,   Úoptimize_onnx_model_by_ortrÂ   Í   su   € ÙœŸ™Ÿ™ ~Ô6Üˆ^Ó×#Ñ#×)Ñ)°$ÀÐ)ÔFßLñ $ØØØ!/Øô	
ˆñ 3HÈÓ2WÐ Ò/ä�‰Ð=¸nÐ=MÐNÕOr.   c           
      ót  — |st         j                  j                  |«      sÿt        |«      j                  j                  dd¬«       ddlm} ddlm	} |€ ||«      }|j                  |«       |t        j                  k(  rd|_        |t        j                  k(  rd|_        |dk(  rd}d} || |||d||d¬«      }|d	k(  s|d
k(  r|j!                  «        |j#                  «       |	|<   |t        j                  k(  r|j%                  d¬«       |j'                  ||
«       y t(        j+                  d|› �«       y )NTr´   r   )ÚFusionOptions)Úoptimize_modelFr8   )Ú	num_headsrR   r»   Úoptimization_optionsrŠ   Úonly_onnxruntimeÚ
bert_kerasÚbert_tf)Úkeep_io_typesr¼   )r    r¡   r£   r   r®   r½   Úfusion_optionsrÄ   r¾   rÅ   Úuse_raw_attention_maskr   ÚFLOAT16Úenable_gelu_approximationÚINT8Úenable_embed_layer_normÚuse_dynamic_axesÚget_fused_operator_statisticsÚconvert_float_to_float16Úsave_model_to_filer   r�   )rˆ   rº   rD   Únum_attention_headsrR   rŠ   r—   rÍ   rÀ   rÁ   Úuse_external_data_formatrÇ   rÄ   rÅ   Ú	opt_models                  r,   Úoptimize_onnx_modelrÙ   Þ   s:  € ñ œŸ™Ÿ™Ð';Ô<ÜÐ!Ó"×)Ñ)×/Ñ/¸ÀtÐ/ÔLå0Ý,àÐ'Ù#0°Ó#<Ð Ø×3Ñ3Ð4JÔKØœ	×)Ñ)Ò)Ø=AÐ Ô:Øœ	Ÿ™Ò&Ø;@Ð Ô8ð ˜ÒØ"#ÐØˆKñ
 #ØØØ)Ø#ØØ!5ØØ"ô	
ˆ	ð ˜Ò%¨°yÒ)@Ø×&Ñ&Ô(à8A×8_Ñ8_Ó8aÐÐ 4Ñ5àœ	×)Ñ)Ò)Ø×.Ñ.¸TÐ.ÔBà×$Ñ$Ð%9Ð;SÕTä�‰Ð=Ð>RÐ=SÐTÕUr.   c                 óê   — |�+|t         v r|S t        ddj                  t         «      z   «      ‚| t        v rydd l}|j                  d| «      �y|j                  d| «      �y|j                  d	| «      �y
y)NzValid model class: ú r   r   z-squad$ÚAutoModelForQuestionAnsweringz-mprc$Ú"AutoModelForSequenceClassificationÚgpt2ÚAutoModelWithLMHeadÚ	AutoModel)r   Ú	Exceptionr¢   r   rŸ   Úsearch)r”   Úcustom_model_classrŸ   s      r,   Úmodelclass_dispatcherrä     s~   € ØÐ%Ø¤Ñ.Ø%Ð%äÐ1°C·H±H¼]Ó4KÑKÓLÐLàÔ+Ñ+Ø%ãà	‡y�y�˜JÓ'Ð3Ø.Ø	�‰�8˜ZÓ	(Ð	4Ø3Ø	�‰�6˜:Ó	&Ð	2Ø$àr.   c                 ó"  — t        | |«      }|dk(  r2|rt        j                  | ||¬«      S t        j                  | ||¬«      S |rd|z   }t	        d|g¬«      }t
        j                  d|› �«       t        ||«      }|j                  | ||¬«      S )Nr   )rW   Ú	cache_dirÚTFÚtransformers)ÚfromlistzModel class name: )rä   r   Úfrom_pretrainedr   Ú
__import__r   r�   Úgetattr)r”   rW   ræ   rã   Úis_tf_modelÚmodel_class_nameÚtransformers_moduleÚmodel_classs           r,   Úload_pretrained_modelrñ   /  s¤   € Ü,¨ZÐ9KÓLÐàÐ1Ò1ÙÜ)×9Ñ9¸*ÈVÐ_hÔiÐiä'×7Ñ7¸
È6Ð]fÔgÐgáØÐ"2Ñ2Ðä$ ^Ð?OÐ>PÔQÐÜ
‡K�KÐ$Ð%5Ð$6Ð7Ô8ÜÐ-Ð/?Ó@€Kà×&Ñ& z¸&ÈIÐ&ÓVÐVr.   c                 óž   — t        j                  | |¬«      }t        |d«      rd|_        |j	                  |«       t        | |||¬«      }||fS )N©ræ   Úreturn_dictF)rW   ræ   rã   )r   rê   Úhasattrrô   Úmodifyrñ   )r”   rð   ræ   Úconfig_modifierrW   Úmodels         r,   Úload_pt_modelrù   B  sO   € Ü×'Ñ'¨
¸iÔH€FÜˆv�}Ô%Ø"ˆÔà×Ñ˜6Ô"ä! *°VÀyÐepÔq€Eà�5ˆ=Ðr.   c                 óÎ   — t        j                  | |¬«      }|j                  |«       t        «       }|j	                  «        t        | |||d¬«      }|j                  «        ||fS )Nró   T)rW   ræ   rã   rí   )r   rê   rö   r   Úget_affinityrñ   Úset_affinity)r”   rð   ræ   r÷   rW   Úaffinity_settingrø   s          r,   Úload_tf_modelrþ   N  sj   € Ü×'Ñ'¨
¸iÔH€Fà×Ñ˜6Ô"ô 'Ó(ÐØ×!Ñ!Ô#Ü!ØØØØ&Øô€Eð ×!Ñ!Ô#à�5ˆ=Ðr.   c                 ó,   — ddl m}  || «      \  }}||fS )Nr   )Útf2pt_pipeline)Úconvert_tf_models_to_pytorchr   )r”   r   rW   rø   s       r,   Úload_pt_model_from_tfr  c  s   € õ <á" :Ó.�M€FˆEà�5ˆ=Ðr.   c                 ó€  — d}|rt        ||||d|«      }|j                  t        j                  j                  k(  r|||j                  fS |j                  t        j
                  j                  k(  s&|t        j                  k(  s|t        j                  k(  rÄt        || t        |«      d||d|«      }t        ||||j                  |j                  |||	|
|||«       |}|r!t        |||||t        j                  k(  |«      }|t        j                  k(  rGt        j                  d|› �«       t!        j"                  |||«       t        j                  d|› �«       |j                  t        j$                  j                  k(  r|rt'        |d«      }t)        ||||
|«       |||dv r|j*                  fS |j                  fS )NTFzQuantizing model: zFinished quantizing model: rž   r6   )r’   Únamer   ÚNOOPTrS   ÚBYSCRIPTr   rÎ   rÐ   r©   r   rÙ   rÖ   rR   r   r�   r	   Úquantize_onnx_modelÚBYORTr²   rÂ   Ú
num_labels)r”   r×   rD   r“   rV   rŠ   r—   Úoptimize_infoÚvalidate_onnxrÍ   rÀ   rW   rÁ   rˆ   rq   r‰   ru   rÌ   Úis_valid_onnx_modelrº   r¿   s                        r,   Úvalidate_and_optimize_onnxr  m  sè  € ð( ÐÙÜ1ØØØ#ØØØó
Ðð ×Ñœ]×0Ñ0×5Ñ5Ò5ØÐ 3°V×5FÑ5FÐFÐFð 	×Ñœm×4Ñ4×9Ñ9Ò9Øœ	×)Ñ)Ò)Øœ	Ÿ™Ò&ä1ØØÜ�ÓØØØØØ$ó	 
Ðô 	ØØ ØØ×&Ñ&Ø×ÑØØØ"ØØ#Ø$Øô	
ð /ˆÙÜ"5ØØØ'ØØœY×.Ñ.Ñ.Øó#Ðð œ	Ÿ™Ò&Ü�K‰KÐ,¨_Ð,=Ð>Ô?Ü×.Ñ.¨ÀÐQiÔjÜ�K‰KÐ5°oÐ5FÐGÔHà×Ñœ]×0Ñ0×5Ñ5Ò5ÙÜ0°À&ÓIˆNÜ&ØØØØØ'ôð 	ØØ'¨?Ñ:ˆ×Ñðð ð AG×@QÑ@Qðð r.   c                 ó  — t        | |||«      \  }}|j                  «        d }d }|dv r’t        j                  | |¬«      }t        j
                  j                  dd|j                  |j                  z  dz  t        j                  ¬«      j                  |j                  |j                  d«      } ||d¬«      }n6t        j                  | |¬«      }|j                  }|j                  d	d¬«      }t        ||«      } |di |¤Ž}t        |t        t         f«      sJ d
t#        |«      › �«       ‚t%        |«      }t'        |g «      }t)        || t+        |«      d|	|
d|«      }|st,        j.                  j1                  |«      sÃt2        j5                  d|› �«       t7        |«      j8                  j;                  dd¬«       d }d }|dv r|D �ci c]  }|ddi“Œ	 c}dg}}nt=        ||«      \  }}t?        «        tA        |t!        |jC                  «       «      |t        |jE                  «       «      ||d||¬«	       tG        «        nt2        j5                  d|› �«       tI        | |||||	|
|||||||||d |«      \  }}} ||| |fS c c}w )Nr6   ró   r   é   r9   r;   Úpt)Úreturn_tensorsúThis is a sample inputz%type of output is not list or tuple: FúExporting ONNX model to Tr´   r:   Úlogits)	rø   ÚargsÚfrV   ru   rt   Údo_constant_foldingÚopset_versionr×   ú!Skip export since model existed: r1   )%rù   r†   r   rê   rE   rF   rK   rH   r"   Úreshaper   Úmodel_max_lengthÚencode_plusr_   rN   ra   rb   Útyperc   rg   r©   r   r    r¡   r£   r   r�   r   r®   r½   rz   r2   r
   ÚvaluesÚkeysr4   r  )!r”   r  r×   rD   rð   r÷   ræ   r“   rV   rŠ   r—   Úoptimizer_infor  rÍ   rÀ   rÁ   rÌ   rW   rø   rq   Úmax_input_sizeÚimage_processorÚdataÚ	tokenizerÚexample_outputsr‰   rˆ   rt   ru   rs   Úonnx_model_filer  rS   s!                                    r,   Úexport_onnx_model_from_ptr'  Î  s¸  € ô& " *¨k¸9ÀoÓV�M€FˆEà	‡I�I„Kà€NØ€Nà�_Ñ$Ü.×>Ñ>¸zÐU^Ô_ˆÜ�|‰|×#Ñ#Ø˜ &×"3Ñ"3°f×6GÑ6GÑ"GÈ!Ñ"KÔSX×S^ÑS^ð $ó 
ç
‰'�&×#Ñ# V×%6Ñ%6¸Ó
:ð 	ñ )¨¸dÔC‰ä!×1Ñ1°*È	ÔRˆ	Ø"×3Ñ3ˆØ"×.Ñ.Ð/GÐX\Ð.Ó]ˆä" >°;Ó?€NáÑ-˜nÑ-€Oä�o¬¬e }Ô5ÐvÐ9^Ô_cÐdsÓ_tÐ^uÐ7vÓvÐ5ô & oÓ6ÐÜ1Ð2IÈ2ÓNÐä(ØØÜˆKÓØØØØØ ó	€Oñ œŸ™Ÿ™ Ô7Ü�‰Ð.¨Ð.?Ð@ÔAÜˆ_Ó×$Ñ$×*Ñ*°4À$Ð*ÔGàˆØˆà˜Ñ(ØN\Ö)]Às¨#°°>Ð/BÑ*BÒ)]Ð`hÐ_i˜,‰Lä);¸NÐLcÓ)dÑ&ˆL˜,äÔ!ÜØÜ�~×,Ñ,Ó.Ó/ØÜ˜^×0Ñ0Ó2Ó3Ø%Ø%Ø $Ø'Ø%=õ
	
ô 	 Õ!ä�‰Ð7¸Ð7HÐIÔJä7QØØ ØØØØØØØØØØØØØØØØó%8Ñ4€OÐ(¨*ð* Ð/°¸^ÐKÐKùòS *^s   ÇJc                 ó  — dd l }|j                  j                  g d«       t        j                  | |¬«      }|j
                  €|j                  ddi«       |j                  }t        | |||«      \  }}|j                  t        |«      «       |j                  dd|dd	¬
«      }t        ||«      }|j                  r#|j                  dd|dd	¬
«      j                  |d<   | dk(  rV|j                  j!                  dd|j"                  g«      |d<   |j                  j!                  dd|j$                  g«      |d<   	 |j&                  rd|_         ||d¬«      }d }| dk(  s| dk(  rdg}|d   }ddlm} |j/                  |«      }t1        || t        |«      d|	|
d|«      }|r|d d n|}|s t2        j4                  j7                  |«      �sßt8        j;                  d|› �«       |s&t=        |«      j>                  jA                  d	d	¬«       dd l!}dd l"}|jF                  jI                  |jF                  jJ                  «       g }|jM                  «       D ]T  \  } }!d gt        |!jN                  «      z  }"|jQ                  |jS                  tU        |"«      |!jV                  | ¬«      «       ŒV |jX                  j[                  |tU        |«      |||¬«      \  }#}#|ré|j]                  |d«      5 }$|$j_                  t2        j4                  ja                  |«      «       d d d «       t2        j4                  jc                  t2        j4                  ja                  |«      d«      }t2        j4                  j7                  |«      rt3        jd                  |«       t3        jf                  ||«       nt8        j;                  d|› �«       |dz   }ti        | |||||	|
|||||||||||«      \  }%}&}'|%|&|'|fS # t(        $ r Y �Œ©w xY w# 1 sw Y   ŒäxY w)Nr   ÚGPUró   Ú	pad_tokenz[PAD]r  ÚtfÚ
max_lengthT)r  r,  ÚpaddingÚ
truncationrA   zunc-nlp/lxmert-base-uncasedr   rB   rC   F)Útrainingzxlnet-base-casedzxlnet-large-casedÚlast_hidden_state)Únestéûÿÿÿr  r´   )r  )Úinput_signatureÚopsetÚlarge_modelÚoutput_pathÚrz__MODEL_PROTO.onnxr  Ú_tf)5Ú
tensorflowrW   Úset_visible_devicesr   rê   r*  Úadd_special_tokensr  rþ   Úresize_token_embeddingsr   r  r_   rM   r>   rF   ÚnormalrP   rQ   Ú	use_cacherá   Útensorflow.python.utilr1  rc   r©   r    r¡   r£   r   r�   r   r®   r½   ÚzipfileÚtf2onnxÚloggingÚ	set_levelÚERRORr‚   r   rf   Ú
TensorSpecrb   r   ÚconvertÚ
from_kerasÚZipFileÚ
extractallÚdirnamer¢   ÚremoveÚrenamer  )(r”   r  r×   rD   rð   r÷   ræ   r“   rV   rŠ   r—   r   r  rÍ   rÀ   rÁ   rÌ   r+  r$  r!  rW   rø   rq   r%  ru   r1  r‰   rˆ   Útf_internal_model_pathr@  rA  Úspecsr  Úvaluerw   rœ   ÚzÚoptimized_onnx_pathr  rS   s(                                           r,   Úexport_onnx_model_from_tfrR  =  s  € ó( à‡I�I×!Ñ! " eÔ,ä×-Ñ-¨jÀIÔN€Ià×ÑÐ"Ø×$Ñ$ k°7Ð%;Ô<Ø×/Ñ/€Nä! *¨k¸9ÀoÓV�M€FˆEØ	×!Ñ!¤# i£.Ô1à×*Ñ*Ø ØØ!ØØð +ó €Nô # >°;Ó?€Nà× Ò Ø.7×.CÑ.CØ$ØØ%Ø Øð /Dó /
÷ ‰)ð 	Ð*Ñ+ð Ð2Ò2Ø)+¯©×)9Ñ)9¸1¸aÀ×AWÑAWÐ:XÓ)Yˆ�~Ñ&Ø')§y¡y×'7Ñ'7¸¸A¸v×?TÑ?TÐ8UÓ'Vˆ�|Ñ$ðà×ÒØ$ˆFÔñ ˜N°UÔ;€OØ€Lð Ð'Ò'¨:Ð9LÒ+LØ+Ð,ˆØ)Ð*=Ñ>ˆõ ,à"Ÿl™l¨?Ó;Ðä(ØØÜˆKÓØØØØØ ó	€Oñ 6N˜_¨S¨bÑ1ÐSbÐáœŸ™Ÿ™Ð'=Õ>Ü�‰Ð.¨Ð.?Ð@ÔAÙ'ÜÐ'Ó(×/Ñ/×5Ñ5¸dÈTÐ5ÔRããà�‰×!Ñ! '§/¡/×"7Ñ"7Ô8ØˆØ)×/Ñ/Ó1ò 	M‰KˆD�%Ø�6œC §¡Ó,Ñ,ˆDØ�L‰L˜Ÿ™¤u¨T£{°E·K±KÀd˜ÓKÕLð	Mð �‰×)Ñ)ØÜ! %›LØØ0Ø.ð *ó 
‰ˆˆ1ñ $à—‘Ð!7¸Ó=ð FÀØ—‘œRŸW™WŸ_™_Ð-CÓDÔE÷Fä%'§W¡W§\¡\´"·'±'·/±/ÐBXÓ2YÐ[oÓ%pÐ"Ü�w‰w�~‰~˜oÔ.Ü—	‘	˜/Ô*Ü�I‰IÐ,¨oÕ>ô 	�‰Ð7¸Ð7HÐIÔJà˜eÑ#€JÜ;UØØ ØØØØØØØØØØØØØØØØó%<Ñ8ÐÐ,¨jð, 	ØØØð	ð øôg ò Úðú÷fFð Fús   Ä;O+ Ë)/O;Ï+	O8Ï7O8Ï;P)r   Nr0   )F);rB  r    Úpathlibr   rE   r    Úaffinity_helperr   Úbenchmark_helperr   r   r   Úhuggingface_modelsr   Úquantize_helperr	   Útorch_onnx_export_helperr
   rè   r   r   r   r   r   Ú0onnxruntime.transformers.models.gpt2.gpt2_helperr   r   r   ÚenvironÚ	getLoggerÚ__name__r   r   r   r-   r2   r4   Úint64r[   r_   rc   rg   rz   r’   rn   Úintr$   r©   r²   rÂ   rÙ   rä   rñ   rù   rþ   r  r  r'  rR  r1   r.   r,   ú<module>r_     s]  ðó Û 	Ý ã Û Ý +ß QÑ QÝ ,Ý *Ý 6ß gÕ g÷ñ ð &)€‡
�
Ð!Ñ "à	ˆ×	Ñ	˜8Ó	$€ð �e—j‘jÐ!€
ó<òò$ð fk×epÑepó ò<"ò[òò&ð* ó)ðX7Øð7àð7ð ð7ð ð	7ð
 ð7ð ð7ð #ð7ð ó7ðB	R 3ð 	R°ð 	R¸ó 	RòPð: ó8Vòvó,Wò&	òò*ò^òBlLó^Rr.   