
    h	                     j    S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  \" \5      r " S S\5      rg)	    )	getLogger)Fusion)FusionUtils)helpernumpy_helper)	OnnxModelc                   Z   ^  \ rS rSrSrS
S\4U 4S jjjrSS\S\\	   4S jjr
S rS	rU =r$ )FusionNhwcConv   zConvert Conv to NhwcConvmodelc                 X   > [         TU ]  USS/S5        X l        [        U5      U l        g )NNhwcConvConv)super__init__update_weightr   fusion_utils)selfr   r   	__class__s      c/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/fusion_nhwc_conv.pyr   FusionNhwcConv.__init__   s+    
VHjA*'.    
input_namepermc                     U R                   R                  S5      nUc  US-   S-   U-   n[        R                  " SU/U/US9nUR                  R                  [        R                  " SU5      /5        U$ )z&Append a Transpose node after an input	Transpose_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_node$FusionNhwcConv.create_transpose_node   sw    JJ//<	#f,s2Z?K))+zlU`Tahqr  '')>)>vt)L(MNr   c                    U R                  UR                  S   / SQ5      nUR                  S   nU R                  R	                  S5      nU R                  R                  UR                  S   5      nUc  g [        R                  " U5      n[        UR                  5      S:w  a  g U R                  R                  U5      n	U	b  UR                  U	:X  d4  U R                  R                  UUR                  US9n
U
R                  S   nU R                  (       aK  UR                  SSSS5      nUS	-   nU R!                  UUR                  [#        UR                  5      US
9  S nO0U R                  UR                  S   / SQ5      nUR                  S   nUS-   S-   UR                  S   -   n[$        R&                  " SX[/UR                  SS  QU/US-   UR(                  -   S9nUR*                  R-                  UR*                  5        SUl        U R                  UR                  S   / SQUR                  S   5      nU R0                  R3                  U5        XNU/nU(       a  UR3                  U5        U H&  nU R4                  U R6                  UR(                  '   M(     U R8                  R-                  U5        U R;                  S5        g )Nr   )r            r   r0      )r   to_typeoutput_name_to_noder.   r/   _weight_NHWC)r"   	data_typedimsvalsr   r   r   zcom.microsoft)r   r/   r0   r.   )r+   inputoutputr   r#   get_initializerr   to_arraylenshape	get_dtyper5   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_nodesr3   input_transpose_nodenhwc_conv_inputr)   weight_tensorweightdtype	cast_nodeweight_nameweight_transpose_nodenhwc_output_name	nhwc_convoutput_transpose_noderH   nodes                     r   fuseFusionNhwcConv.fuse$   s   #99$**Q-V.55a8 JJ//
;	 

224::a=A &&}5v||!

$$_5!m&=&=&F))77*%//$7 8 I
 (..q1O%%aAq1F#n4K   '11&,,'	 !  %)!$($>$>tzz!}l$[!/66q9K$v-3dkk!nD$$#B4::ab>B%&S499,	
	 	""4>>2*	 $ : :9;K;KA;NP\^b^i^ijk^l m##D),9NO  56 D6:6J6JD((3 !  .j)r   )r   r   )F)N)__name__
__module____qualname____firstlineno____doc__r   r   strrB   intr+   rX   __static_attributes____classcell__)r   s   @r   r
   r
      s8    "/i / /

 
49 
?* ?*r   r
   N)loggingr   fusion_baser   r   r   onnxr   r   
onnx_modelr   rZ   loggerr
    r   r   <module>ri      s.      $ %  	8	S*V S*r   