§
    kŠtj	  ã                   óx   — d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
  ee¦  «        Z G d„ de¦  «        ZdS )	é    )Ú	getLogger)ÚFusion)ÚFusionUtils)ÚhelperÚnumpy_helper)Ú	OnnxModelc                   óN   ‡ — e Zd ZdZd
defˆ fd„Zddedee         fd„Z	d	„ Z
ˆ xZS )ÚFusionNhwcConvzConvert Conv to NhwcConvFÚmodelc                 óˆ   •— t          ¦   «                              |ddgd¦  «         || _        t          |¦  «        | _        d S )NÚNhwcConvÚConv)ÚsuperÚ__init__Úupdate_weightr   Úfusion_utils)Úselfr   r   Ú	__class__s      €úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/fusion_nhwc_conv.pyr   zFusionNhwcConv.__init__   sA   ø€ Ý‰Œ×Ò˜ 
¨V¨H°jÑAÔAÐAØ*ˆÔÝ'¨Ñ.Ô.ˆÔÐÐó    NÚ
input_nameÚpermc                 óä   — | j                              d¦  «        }|€|dz   dz   |z   }t          j        d|g|g|¬¦  «        }|j                             t          j        d|¦  «        g¦  «         |S )z&Append a Transpose node after an inputÚ	TransposeNÚ_outú-©ÚinputsÚoutputsÚnamer   )r   Úcreate_node_namer   Ú	make_nodeÚ	attributeÚextendÚmake_attribute)r   r   r   Úoutput_nameÚ	node_nameÚtranspose_nodes         r   Úcreate_transpose_nodez$FusionNhwcConv.create_transpose_node   s~   € à”J×/Ò/°Ñ<Ô<ˆ	àÐØ# fÑ,¨sÑ2°ZÑ?ˆKåÔ)¨+¸z¸lÐU`ÐTaÐhqÐrÑrÔrˆØÔ ×'Ò'­Ô)>¸vÀtÑ)LÔ)LÐ(MÑNÔNÐNàÐr   c                 ó>  — |                       |j        d         g d¢¦  «        }|j        d         }| j                             d¦  «        }| j                             |j        d         ¦  «        }|€d S t          j        |¦  «        }t          |j	        ¦  «        dk    rd S | j         
                    |¦  «        }	|	�|j        |	k    s/| j                             ||j        |¬¦  «        }
|
j        d         }| j        rP|                     dddd¦  «        }|d	z   }|                      ||j        t#          |j	        ¦  «        |¬
¦  «         d }n0|                       |j        d         g d¢¦  «        }|j        d         }|dz   dz   |j        d         z   }t%          j        d||g|j        dd …         ¢|g|dz   |j        z   ¬¦  «        }|j                             |j        ¦  «         d|_        |                       |j        d         g d¢|j        d         ¦  «        }| j                             |¦  «         |||g}|r|                     |¦  «         |D ]}| j        | j        |j        <   Œ| j                             |¦  «         |                      d¦  «         d S )Nr   )r   é   é   é   r   r-   é   )r   Úto_typeÚoutput_name_to_noder+   r,   Ú_weight_NHWC)r    Ú	data_typeÚdimsÚvalsr   r   r   zcom.microsoft)r   r,   r-   r+   )r)   ÚinputÚoutputr   r!   Úget_initializerr   Úto_arrayÚlenÚshapeÚ	get_dtyper2   r   Úadd_cast_noder   Ú	transposeÚadd_initializerÚlistr   r"   r    r#   r$   ÚdomainÚnodes_to_removeÚappendÚthis_graph_nameÚnode_name_to_graph_nameÚnodes_to_addÚincrease_counter)r   ÚconvÚinput_name_to_nodesr0   Úinput_transpose_nodeÚnhwc_conv_inputr'   Úweight_tensorÚweightÚdtypeÚ	cast_nodeÚweight_nameÚweight_transpose_nodeÚnhwc_output_nameÚ	nhwc_convÚoutput_transpose_noderE   Únodes                     r   ÚfusezFusionNhwcConv.fuse$   sà  € à#×9Ò9¸$¼*ÀQ¼-ÈÈÈÑVÔVÐà.Ô5°aÔ8ˆð ”J×/Ò/°
Ñ;Ô;ˆ	ð œ
×2Ò2°4´:¸a´=ÑAÔAˆØÐ ØˆFÝÔ& }Ñ5Ô5ˆÝˆvŒ|ÑÔ Ò!Ð!ØˆFà”
×$Ò$ _Ñ5Ô5ˆØÐ! mÔ&=ÀÒ&FÐ&FØÔ)×7Ò7Ø*Ø%Ô/Ø$7ð 8ñ ô ˆIð
 (Ô.¨qÔ1ˆOàÔð 	:à×%Ò% a¨¨A¨qÑ1Ô1ˆFà# nÑ4ˆKØ× Ò Ø Ø'Ô1Ý˜&œ,Ñ'Ô'Øð	 !ñ ô ð ð %)Ð!Ð!à$(×$>Ò$>¸t¼zÈ!¼}ÈlÈlÈlÑ$[Ô$[Ð!Ø/Ô6°qÔ9ˆKà$ vÑ-°Ñ3°d´kÀ!´nÑDÐÝÔ$ØØ# [ÐB°4´:¸a¸b¸b´>ÐBØ%Ð&Ø˜S‘ 4¤9Ñ,ð	
ñ 
ô 
ˆ	ð 	Ô×"Ò" 4¤>Ñ2Ô2Ð2Ø*ˆ	Ôà $× :Ò :¸9Ô;KÈAÔ;NÐP\ÐP\ÐP\Ð^bÔ^iÐjkÔ^lÑ mÔ mÐàÔ×#Ò# DÑ)Ô)Ð)à,¨iÐ9NÐOˆØ ð 	7Ø×ÒÐ 5Ñ6Ô6Ð6Ø ð 	Kð 	KˆDØ6:Ô6JˆDÔ(¨¬Ñ3Ð3ØÔ× Ò  Ñ.Ô.Ð.à×Ò˜jÑ)Ô)Ð)Ð)Ð)r   )F)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústrr?   Úintr)   rU   Ú__classcell__)r   s   @r   r
   r
      s‰   ø€ € € € € Ø"Ð"ð/ð /˜ið /ð /ð /ð /ð /ð /ð

ð 
°ð 
¸4À¼9ð 
ð 
ð 
ð 
ð?*ð ?*ð ?*ð ?*ð ?*ð ?*ð ?*r   r
   N)Úloggingr   Úfusion_baser   r   r   Úonnxr   r   Ú
onnx_modelr   rV   Úloggerr
   © r   r   ú<module>rc      s´   ðð Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø  Ð  Ð  Ð  Ð  Ð  à	ˆ�8Ñ	Ô	€ðS*ð S*ð S*ð S*ð S*�Vñ S*ô S*ð S*ð S*ð S*r   