Ë
    cQêj#@  ã                   ó  — d dl Z d dlZd dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZ d dlmZ  ej"                  e«      Z G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ d«      Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)ÚAttentionInputIDsÚAttentionOutputIDsÚMultiHeadAttentionInputIDsÚMultiHeadAttentionOutputIDsÚ	Operators)ÚhelperÚ
load_model)Ú	NodeProtoÚ	OnnxModel)ÚSymbolicShapeInferenceHelperc                   óÖ   — e Zd Zdedefd„Zdedz  fd„Zdedz  fd„Zdedz  fd„Z	de
fd	„Zd
ee   dee   ddfd„Zd
ee   dee   ddfd„Zdededdfd„Zdedz  fd„Zdde
ddfd„Zy)ÚPackingAttentionBaseÚmodelÚattention_op_typec                 óö   — || _         g | _        g | _        d| _        i | _        | j                   j                   j
                  j                  | _        || _        | j                   j                  |«      | _
        y )NF)r   Únodes_to_removeÚnodes_to_addÚprune_graphÚnode_name_to_graph_nameÚgraphÚnameÚthis_graph_namer   Úget_nodes_by_op_typeÚattention_nodes)Úselfr   r   s      úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/convert_to_packing_mode.pyÚ__init__zPackingAttentionBase.__init__   sg   € Ø %ˆŒ
Ø%'ˆÔØ"$ˆÔØ!&ˆÔØ-/ˆÔ$Ø$(§J¡J×$4Ñ$4×$:Ñ$:×$?Ñ$?ˆÔØ!2ˆÔØ#Ÿz™z×>Ñ>Ð?PÓQˆÕó    ÚreturnNc                 ón  — | j                   t        j                  k(  rt        j                  nt
        j                  }| j                  «       }|rt        |j                  «      |k  ry |j                  |   }| j                  D ].  }t        |j                  «      |k  s|j                  |   |k7  sŒ. y  |S ©N)r   r   Ú	ATTENTIONr   Ú
MASK_INDEXr   ÚKEY_PADDING_MASKÚ_try_getting_first_attentionÚlenÚinputr   )r   Ú
mask_indexÚfirst_attention_nodeÚattention_maskÚnodes        r   Ú_try_getting_attention_maskz0PackingAttentionBase._try_getting_attention_mask#   s­   € ð ×%Ñ%¬×)<Ñ)<Ò<ô ×(Ò(ä+×<Ñ<ð 	ð
  $×@Ñ@ÓBÐá#¤sÐ+?×+EÑ+EÓ'FÈ*Ò'TØà-×3Ñ3°JÑ?ˆð ×(Ñ(ò 	ˆDÜ�4—:‘:‹ *Ò,°·
±
¸:Ñ0FÈ.Ó0XÙð	ð Ðr   c                 óR   — t        | j                  «      dk  ry | j                  d   S )Nr   )r&   r   ©r   s    r   r%   z1PackingAttentionBase._try_getting_first_attention7   s)   € Üˆt×#Ñ#Ó$¨Ò)Øà×#Ñ# AÑ&Ð&r   c                 óÂ   — d }| j                   j                  «       D ]?  }|j                  t        j                  k(  s|j                  t        j
                  k(  sŒ>|}ŒA |S r!   )r   ÚnodesÚop_typer   Ú	LAYERNORMÚSKIPLAYERNORM)r   Úlast_layernorm_noder+   s      r   Ú_try_getting_last_layernormz0PackingAttentionBase._try_getting_last_layernorm=   sU   € Ø"ÐØ—J‘J×$Ñ$Ó&ò 	+ˆDØ�|‰|œy×2Ñ2Ò2°d·l±lÄi×F]ÑF]Ó6]Ø&*Ñ#ð	+ð #Ð"r   c                 ó   — t        «       ‚r!   ©ÚNotImplementedErrorr.   s    r   Ú_are_attentions_supportedz.PackingAttentionBase._are_attentions_supportedD   ó   € Ü!Ó#Ð#r   ÚinputsÚoutputsc                 ó*  — t        j                  t        j                  ||| j                  j                  t        j                  «      ¬«      }d|_        | j                  j                  |«       | j                  | j                  |j                  <   y ©N©r;   r<   r   úcom.microsoft)r   Ú	make_noder   ÚREMOVEPADDINGr   Úcreate_node_nameÚdomainr   Úappendr   r   r   ©r   r;   r<   Únew_nodes       r   Ú_insert_removepadding_nodez/PackingAttentionBase._insert_removepadding_nodeG   sp   € Ü×#Ñ#Ü×#Ñ#ØØØ—‘×,Ñ,¬Y×-DÑ-DÓEô	
ˆð *ˆŒØ×Ñ× Ñ  Ô*Ø6:×6JÑ6Jˆ×$Ñ$ X§]¡]Ò3r   c                 ó*  — t        j                  t        j                  ||| j                  j                  t        j                  «      ¬«      }d|_        | j                  j                  |«       | j                  | j                  |j                  <   y r>   )r   rA   r   ÚRESTOREPADDINGr   rC   rD   r   rE   r   r   r   rF   s       r   Ú_insert_restorepadding_nodez0PackingAttentionBase._insert_restorepadding_nodeS   sp   € Ü×#Ñ#Ü×$Ñ$ØØØ—‘×,Ñ,¬Y×-EÑ-EÓFô	
ˆð *ˆŒØ×Ñ× Ñ  Ô*Ø6:×6JÑ6Jˆ×$Ñ$ X§]¡]Ò3r   Útoken_offsetÚcumulative_sequence_lengthc                 ó   — t        «       ‚r!   r7   )r   rL   rM   s      r   Ú)_replace_attention_with_packing_attentionz>PackingAttentionBase._replace_attention_with_packing_attention_   r:   r   c                 óx   — | j                   t        j                  k(  r|j                  t        j
                     S y r!   )r   r   r"   r'   r   ÚINPUT)r   r)   s     r   Ú_get_input_to_remove_paddingz1PackingAttentionBase._get_input_to_remove_paddingb   s1   € Ø×!Ñ!¤Y×%8Ñ%8Ò8Ø'×-Ñ-Ô.?×.EÑ.EÑFÐFØr   Úuse_symbolic_shape_inferc                 óp  — t         j                  d«       | j                  «       sy | j                  «       }|sy | j	                  «       }| j                  «       }|sy | j                  |«      }|sy |dz   }|dz   }|dz   }|dz   }	| j                  ||g||||	g«       | j                  j                  ||«       t         j                  d«       |j                  d   dz   }
| j                  |
|g|j                  d   g«       | j                  j                  |j                  d   |
«       t         j                  d	|j                  › d
�«       | j                  ||«       t         j                  d| j                  › d| j                  › �«       | j                  j!                  | j"                  «       | j                  j%                  | j&                  | j(                  «       | j*                  r| j                  j+                  «        n2| j"                  s| j&                  r| j                  j-                  «        | j                  j/                  «        |r^t1        | j                  j                  d¬«      }|j3                  | j                  j                  dd¬«      }|r|| j                  _        y y y )Nz$start converting to packing model...Ú_no_paddingÚ_token_offsetÚ_cumulated_seq_lenÚ_max_seq_lenz'inserted RemovePadding before Attentionr   Ú_restore_inputz#inserted RestorePadding after last z layerz	replaced z with Packed©ÚverboseTF)Ú
auto_mergeÚguess_output_rank)ÚloggerÚdebugr9   r,   r%   r5   rR   rH   r   Úreplace_input_of_all_nodesÚoutputrK   Úreplace_output_of_all_nodesr1   rO   r   Úremove_nodesr   Ú	add_nodesr   r   r   Úupdate_graphÚclean_shape_inferr   Úinfer_shapes)r   rS   r*   r)   r4   Úinput_to_remove_paddingÚoutput_without_paddingrL   Úcumulated_seq_lenÚmax_seq_lenÚrestorepadding_inputÚshape_infer_helperÚinferred_models                r   ÚconvertzPackingAttentionBase.convertg   sw  € Ü�‰Ð;Ô<à×-Ñ-Ô/Øà×9Ñ9Ó;ˆÙØà#×@Ñ@ÓBÐØ"×>Ñ>Ó@ÐÙ"Øð #'×"CÑ"CÐDXÓ"YÐÙ&Øà!8¸=Ñ!HÐØ.°Ñ@ˆØ3Ð6JÑJÐØ-°Ñ>ˆØ×'Ñ'Ø$ nÐ5Ø# \Ð3DÀkÐRô	
ð 	�
‰
×-Ñ-Ð.EÐG]Ô^Ü�‰Ð>Ô?ð  3×9Ñ9¸!Ñ<Ð?OÑOÐØ×(Ñ(Ð*>ÀÐ)MÐPc×PjÑPjÐklÑPmÐOnÔoØ�
‰
×.Ñ.Ð/B×/IÑ/IÈ!Ñ/LÐNbÔcÜ�‰Ð:Ð;N×;VÑ;VÐ:WÐW]Ð^Ô_ð 	×6Ñ6°|ÐEVÔWÜ�‰�y ×!7Ñ!7Ð 8¸ÀT×E[ÑE[ÐD\Ð]Ô^à�
‰
×Ñ × 4Ñ 4Ô5Ø�
‰
×Ñ˜T×.Ñ.°×0LÑ0LÔMà×ÒØ�J‰J×"Ñ"Õ$Ø×!Ò! T×%6Ò%6Ø�J‰J×#Ñ#Ô%Ø�
‰
×$Ñ$Ô&Ù#ô ">¸d¿j¹j×>NÑ>NÐXYÔ!ZÐØ/×<Ñ<¸T¿Z¹Z×=MÑ=MÐZ^ÐrwÐ<ÓxˆNÙØ#1�—
‘
Õ ð ð $r   ©T)Ú__name__Ú
__module__Ú__qualname__r   Ústrr   r,   r
   r%   r5   Úboolr9   ÚlistrH   rK   rO   rR   ro   © r   r   r   r      sã   „ ðR˜ið R¸Có Rð¨S°4©Zó ð('¨i¸$Ñ.>ó 'ð#¨Y¸Ñ-=ó #ð$¨4ó $ð
K°°c±ð 
KÀTÈ#ÁYð 
KÐSWó 
Kð
K°$°s±)ð 
KÀdÈ3Áið 
KÐTXó 
Kð$Àcð $Ðgjð $Ðosó $ðÀCÈ$ÁJó ñ
72°ð 72Àô 72r   r   c                   óD   ‡ — e Zd Zdefˆ fd„Zdefd„Zdededdfd„Zˆ xZ	S )	ÚPackingAttentionr   c                 óB   •— t         ‰| �  |t        j                  «       y r!   )Úsuperr   r   r"   ©r   r   Ú	__class__s     €r   r   zPackingAttention.__init__¢   s   ø€ Ü‰Ñ˜¤	× 3Ñ 3Õ4r   r   c                 óÚ  — | j                   D ]Ü  }t        j                  |d«      � yt        j                  |d«      � yt        j                  |d«      }|�|dk7  r yt        |j                  «      t
        j                  kD  r|j                  t
        j                     s yt        |j                  «      t
        j                  kD  sŒ¾|j                  t
        j                     rŒÜ y y)NÚpast_present_share_bufferFÚ	do_rotaryÚunidirectionalr   T)r   r   Úget_node_attributer&   r'   r   ÚPASTÚPAST_SEQUENCE_LENGTH)r   r+   Úunidirection_attrs      r   r9   z*PackingAttention._are_attentions_supported¥   sÇ   € Ø×(Ñ(ò 	ˆDÜ×+Ñ+¨DÐ2MÓNÐZÙÜ×+Ñ+¨D°+Ó>ÐJÙÜ )× <Ñ <¸TÐCSÓ TÐØ Ð,Ð1BÀaÒ1GÙÜ�4—:‘:‹Ô!2×!7Ñ!7Ò7ÀÇ
Á
ÔK\×KaÑKaÒ@bÙä�D—J‘J“Ô"3×"HÑ"HÓHØŸ
™
Ô#4×#IÑ#IÓJáð	ð r   rL   rM   Nc           
      óä  — | j                   D �]·  }t        |j                  «      t        j                  kD  r|j                  t        j                     nd}t        j                  t        j                  |j                  t        j                     |j                  t        j                     |j                  t        j                     |||g|j                  t        j                     g| j                  j!                  t        j                  «      ¬«      }g }|j"                  D ]"  }|j$                  dv sŒ|j'                  |«       Œ$ |j"                  j)                  |«       d|_        | j,                  j'                  |«       | j.                  j'                  |«       | j0                  | j2                  |j$                  <   �Œº t4        j7                  dt        | j                   «      «       y )NÚ r?   )Ú	num_headsÚqkv_hidden_sizesÚscaler@   z0Converted %d Attention nodes to PackedAttention.)r   r&   r'   r   ÚATTENTION_BIASr   rA   r   ÚPACKEDATTENTIONrQ   ÚWEIGHTSÚBIASra   r   ÚOUTPUTr   rC   Ú	attributer   rE   ÚextendrD   r   r   r   r   r^   Úinfo)r   rL   rM   Ú	attentionÚattention_biasÚpacked_attentionÚ
attributesÚattrs           r   rO   z:PackingAttention._replace_attention_with_packing_attention·   s�  € Ø×-Ñ-ó 	WˆIô �y—‘Ó'Ô*;×*JÑ*JÒJð —‘Ô 1× @Ñ @ÒAàð ô
  &×/Ñ/Ü×)Ñ)à—O‘OÔ$5×$;Ñ$;Ñ<Ø—O‘OÔ$5×$=Ñ$=Ñ>Ø—O‘OÔ$5×$:Ñ$:Ñ;Ø Ø.Ø"ðð #×)Ñ)Ô*<×*CÑ*CÑDÐEØ—Z‘Z×0Ñ0´×1JÑ1JÓKô Ðð ˆJØ!×+Ñ+ò ,�Ø—9‘9Ð JÒJØ×%Ñ% dÕ+ð,ð ×&Ñ&×-Ñ-¨jÔ9Ø&5ÐÔ#Ø×Ñ×$Ñ$Ð%5Ô6Ø× Ñ ×'Ñ'¨	Ô2ØBF×BVÑBVˆD×(Ñ(Ð)9×)>Ñ)>Ó?ð;	Wô> 	�‰ÐFÌÈD×L`ÑL`ÓHaÕbr   )
rq   rr   rs   r   r   ru   r9   rt   rO   Ú__classcell__©r}   s   @r   ry   ry   ¡   s;   ø„ ð5˜iõ 5ð¨4ó ð$ cÀcð  cÐgjð  cÐos÷  cr   ry   c                   óv   ‡ — e Zd Zdefˆ fd„Zdedefd„Zdedefd„Zde	fd„Z
d	ed
eddfd„Zdedz  fd„Zˆ xZS )ÚPackingMultiHeadAttentionr   c                 óB   •— t         ‰| �  |t        j                  «       y r!   )r{   r   r   ÚMULTI_HEAD_ATTENTIONr|   s     €r   r   z"PackingMultiHeadAttention.__init__Û   s   ø€ Ü‰Ñ˜¤	× >Ñ >Õ?r   Úindexr   c                 ó¨   — t        |j                  «      |kD  r:t        |j                  |   «      dkD  rt        j                  d|› d|› d|› �«       yy)ú'Check a node does not have given input.r   znode input ú (ú0) is not supported in PackedMultiHeadAttention: FT)r&   r'   r^   Úerror©r   r+   rž   r   s       r   Ú_check_empty_inputz,PackingMultiHeadAttention._check_empty_inputÞ   sP   € äˆt�z‰z‹?˜UÒ"Ü�4—:‘:˜eÑ$Ó%¨Ò)Ü—‘˜{¨5¨'°°D°6Ð9iÐjnÐioÐpÔqØØr   c                 ó¨   — t        |j                  «      |kD  r:t        |j                  |   «      dkD  rt        j                  d|› d|› d|› �«       yy)r    r   znode output r¡   r¢   FT)r&   ra   r^   r£   r¤   s       r   Ú_check_empty_outputz-PackingMultiHeadAttention._check_empty_outputæ   sQ   € äˆt�{‰{Ó˜eÒ#Ü�4—;‘;˜uÑ%Ó&¨Ò*Ü—‘˜|¨E¨7°"°T°FÐ:jÐkoÐjpÐqÔrØØr   r   c                 óf  — | j                   D �]!  }|j                  D ]8  }|j                  dvsŒt        j	                  d|j                  › d|› �«         y |j
                  t        j                     r4|j
                  t        j                     st        j	                  d«        y| j                  |t        j                  d«      re| j                  |t        j                  d«      rD| j                  |t        j                  d«      r#| j                  |t        j                  d«      r�Œ" y y)	N©rˆ   Úmask_filter_valuerŠ   znode attribute z/ is not supported in PackedMultiHeadAttention: Fz=packed kv format is not supported in PackedMultiHeadAttentionÚpast_keyÚpresent_keyT)r   r�   r   r^   r£   r'   r   ÚKEYÚVALUEr¥   ÚPAST_KEYÚ
PAST_VALUEr§   r   ÚPRESENT_KEYÚPRESENT_VALUE)r   r+   r—   s      r   r9   z3PackingMultiHeadAttention._are_attentions_supportedî   s  € Ø×(Ñ(ó 	ˆDØŸ™ò !�Ø—9‘9Ð$OÒOÜ—L‘L ?°4·9±9°+Ð=lÐmqÐlrÐ!sÔtÚ ð!ð
 �z‰zÔ4×8Ñ8Ò9À$Ç*Á*ÔMg×MmÑMmÒBnÜ—‘Ð\Ô]Ùð ×'Ñ'¨Ô.H×.QÑ.QÐS]Ô^Ø×+Ñ+¨DÔ2L×2WÑ2WÐYcÔdØ×,Ñ,¨TÔ3N×3ZÑ3ZÐ\iÔjØ×,Ñ,¨TÔ3N×3\Ñ3\Ð^kÖláð!	ð$ r   rL   rM   Nc                 óF  — d}| j                   D �]P  }t        |j                  «      t        j                  kD  r|j                  t        j                     nd}t        j                  t        j                  |j                  t        j                     |j                  t        j                     |j                  t        j                     |j                  t        j                     |||g|j                  t        j                     g| j                   j#                  t        j                  «      ¬«      }g }|j$                  D ]"  }|j&                  dv sŒ|j)                  |«       Œ$ |j$                  j+                  |«       d|_        | j.                  j)                  |«       | j0                  j)                  |«       | j2                  | j4                  |j&                  <   |s�ŒØ| j                   j7                  |t        j                  «      }	|	s�Œ|	j8                  dk(  s�Œt        |	j                  «      dk(  s�Œ1|	j                  j)                  |«       |dz  }�ŒS t:        j=                  d	t        | j                   «      «       t:        j=                  d
|«       y )Nr   r‡   r?   r©   r@   ÚGatedRelativePositionBiasé   é   zBConverted %d MultiHeadAttention nodes to PackedMultiHeadAttention.z=Converted %d GatedRelativePositionBias nodes to packing mode.)r   r&   r'   r   r‹   r   rA   r   ÚPACKED_MULTI_HEAD_ATTENTIONÚQUERYr­   r®   rŽ   ra   r   r�   r   rC   r�   r   rE   r‘   rD   r   r   r   r   Ú
get_parentr1   r^   r’   )
r   rL   rM   Úgated_relative_pos_bias_countÚmhar”   Ú
packed_mhar–   r—   Úrel_pos_bias_nodes
             r   rO   zCPackingMultiHeadAttention._replace_attention_with_packing_attention  s%  € Ø()Ð%Ø×'Ñ'ó )	7ˆCô �s—y‘y“>Ô$>×$MÑ$MÒMð —	‘	Ô4×CÑCÒDàð ô
  ×)Ñ)Ü×5Ñ5à—I‘IÔ8×>Ñ>Ñ?Ø—I‘IÔ8×<Ñ<Ñ=Ø—I‘IÔ8×>Ñ>Ñ?Ø—I‘IÔ8×=Ñ=Ñ>Ø Ø.Ø"ðð Ÿ™Ô$?×$FÑ$FÑGÐHØ—Z‘Z×0Ñ0´×1VÑ1VÓWôˆJð ˆJØŸ™ò ,�Ø—9‘9Ð KÒKØ×%Ñ% dÕ+ð,ð × Ñ ×'Ñ'¨
Ô3Ø /ˆJÔØ×Ñ×$Ñ$ ZÔ0Ø× Ñ ×'Ñ'¨Ô,Ø<@×<PÑ<PˆD×(Ñ(¨¯©Ñ9ó Ø$(§J¡J×$9Ñ$9¸#Ô?Y×?hÑ?hÓ$iÐ!ã%Ø)×1Ñ1Ð5PÔPÜÐ-×3Ñ3Ó4¸Ô9à%×+Ñ+×2Ñ2°<Ô@Ø1°QÑ6Ò1ðS)	7ôV 	�‰ÐXÔZ]Ð^b×^rÑ^rÓZsÔtÜ�‰ÐSÐUrÕsr   c                 ó|   — | j                   j                  |d«      }|r|j                  dk(  r|j                  d   S y )Nr   ÚMatMul)r   r¹   r1   r'   )r   r)   Úmatmuls      r   rR   z6PackingMultiHeadAttention._get_input_to_remove_padding3  s8   € à—‘×&Ñ&Ð';¸QÓ?ˆÙ�f—n‘n¨Ò0Ø—<‘< ‘?Ð"Ør   )rq   rr   rs   r   r   Úintrt   r¥   r§   ru   r9   rO   rR   r˜   r™   s   @r   r›   r›   Ú   st   ø„ ð@˜iõ @ð¨cð ¸ó ð¨sð ¸#ó ð¨4ó ð*.tÀcð .tÐgjð .tÐosó .tð`ÀCÈ$ÁJ÷ r   r›   c                   ó*   — e Zd Zdefd„Zddeddfd„Zy)ÚPackingModer   c                 ó   — || _         y r!   )r   )r   r   s     r   r   zPackingMode.__init__<  s	   € Øˆ�
r   rS   r   Nc                 óè  — | j                   j                  t        j                  «      re| j                   j                  t        j                  «      rt
        j                  d«       y t        | j                   «      }|j                  |«      S | j                   j                  t        j                  «      r&t        | j                   «      }|j                  |«      S t
        j                  d«       y )NzRPacking mode does not support both Attention and MultiHeadAttention in same graph.zPPacking mode requires either Attention or MultiHeadAttention node in onnx graph.)
r   r   r   r"   r�   r^   r£   ry   ro   r›   )r   rS   Úpackings      r   ro   zPackingMode.convert?  s¦   € Ø�:‰:×*Ñ*¬9×+>Ñ+>Ô?Ø�z‰z×.Ñ.¬y×/MÑ/MÔNÜ—‘ÐqÔrØÜ& t§z¡zÓ2ˆGØ—?‘?Ð#;Ó<Ð<Ø�Z‰Z×,Ñ,¬Y×-KÑ-KÔLÜ/°·
±
Ó;ˆGØ—?‘?Ð#;Ó<Ð<ä�L‰LÐkÔlØr   rp   )rq   rr   rs   r   r   ru   ro   rw   r   r   rÃ   rÃ   ;  s!   „ ð˜ió ñ°ð Àô r   rÃ   c                  óR  — t        j                  d¬«      } | j                  ddt        d¬«       | j                  ddt        d¬«       | j                  d	d
dd¬«       | j	                  d
¬«       | j                  dd
dd¬«       | j	                  d
¬«       | j                  «       }|S )Nz_Convert to packing mode tool for ONNX Runtime. It converts BERT like model to use packing mode.)Údescriptionz--inputTzinput onnx model path)ÚrequiredÚtypeÚhelpz--outputzoptimized onnx model pathz	--verboseFÚ
store_truezshow debug information.)rÉ   ÚactionrË   rZ   z--use_external_data_formatz4use external data format to store large model (>2GB)©Úuse_external_data_format)ÚargparseÚArgumentParserÚadd_argumentrt   Úset_defaultsÚ
parse_args)ÚparserÚargss     r   Ú_parse_argumentsr×   N  sµ   € Ü×$Ñ$Øuô€Fð ×Ñ˜	¨D´sÐAXÐÔYà
×Ñ˜
¨T¼ÐB]ÐÔ^à
×Ñ˜¨e¸LÐOhÐÔiØ
×Ñ ÐÔ&à
×ÑØ$ØØØCð	 ô ð ×Ñ°ÐÔ7à×ÑÓ€Dà€Kr   c                 óž   — | r&t        j                  dt         j                  ¬«       y t        j                  dt         j                  ¬«       y )Nz8[%(filename)s:%(lineno)s - %(funcName)20s()] %(message)s)ÚformatÚlevelz%(funcName)20s: %(message)s)ÚloggingÚbasicConfigÚDEBUGÚINFOrZ   s    r   Ú_setup_loggerrß   f  s4   € ÙÜ×ÑØMÜ—-‘-ö	
ô
 	×ÑÐ#@ÌÏÉÖUr   c                  ó  — t        «       } t        | j                  «       t        j	                  d| › �«       t
        j                  j                  | j                  «      t
        j                  j                  | j                  «      k(  rt        j                  d«       t        | j                  «      }t        t        |«      «      }|j                  «        |j                  j!                  | j                  | j"                  ¬«       y )Nz
arguments:zYSpecified the same input and output path. Note that this may overwrite the original modelrÎ   )r×   rß   r[   r^   r_   ÚosÚpathÚrealpathr'   ra   Úwarningr	   rÃ   r   ro   r   Úsave_model_to_filerÏ   )rÖ   r   Úpacking_modes      r   Úmainrç   p  s±   € ÜÓ€Dä�$—,‘,Ôä
‡L�L�:˜d˜VÐ$Ô%ä	‡w�w×Ñ˜Ÿ
™
Ó#¤r§w¡w×'7Ñ'7¸¿¹Ó'DÒDÜ�‰ÐrÔsä�t—z‘zÓ"€EÜœy¨Ó/Ó0€LØ×ÑÔØ×Ñ×)Ñ)¨$¯+©+ÐPT×PmÑPmÐ)Õnr   Ú__main__)rÐ   rÛ   rá   Ú	constantsr   r   r   r   r   Úonnxr   r	   Ú
onnx_modelr
   r   rm   r   Ú	getLoggerrq   r^   r   ry   r›   rÃ   r×   rß   rç   rw   r   r   ú<module>rí      s“   ðó Û Û 	÷õ ÷ $ß +Ý ;à	ˆ×	Ñ	˜8Ó	$€÷F2ñ F2ôR6cÐ+ô 6côr^Ð 4ô ^÷Bñ ò&ò0Vòoð  ˆzÒÙ…Fð r   