
    g!                     v    d dl mZ 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y	)
    )	getLogger)List)Fusion)FusionUtils)helpernumpy_helper)	OnnxModelc                   H     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 NhwcConvmodelc                 Z    t         |   |ddgd       || _        t        |      | _        y )NNhwcConvConv)super__init__update_weightr   fusion_utils)selfr   r   	__class__s      ^/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_nhwc_conv.pyr   zFusionNhwcConv.__init__   s-    
VHjA*'.    
input_namepermc                     | j                   j                  d      }||dz   dz   |z   }t        j                  d|g|g|      }|j                  j                  t        j                  d|      g       |S )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_nodez$FusionNhwcConv.create_transpose_node   sw    JJ//<	#f,s2Z?K))+zlU`Tahqr  '')>)>vt)L(MNr   c                    | j                  |j                  d   g d      }|j                  d   }| j                  j	                  d      }| j                  j                  |j                  d         }|y t        j                  |      }t        |j                        dk7  ry | j                  j                  |      }	|	|j                  |	k(  s7| j                  j                  ||j                  |      }
|
j                  d   }| j                  rN|j                  dddd      }|d	z   }| j!                  ||j                  t#        |j                        |
       d }n0| j                  |j                  d   g d      }|j                  d   }|dz   dz   |j                  d   z   }t%        j&                  d||g|j                  dd  z   |g|dz   |j(                  z         }|j*                  j-                  |j*                         d|_        | j                  |j                  d   g d|j                  d         }| j0                  j3                  |       |||g}|r|j3                  |       |D ]%  }| j4                  | j6                  |j(                  <   ' | j8                  j-                  |       | j;                  d       y )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_dtyper3   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_nodesr1   input_transpose_nodenhwc_conv_inputr(   weight_tensorweightdtype	cast_nodeweight_nameweight_transpose_nodenhwc_output_name	nhwc_convoutput_transpose_noderF   nodes                     r   fusez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$$#[1DJJqrNB%&S499,	
	 	""4>>2*	 $ : :9;K;KA;NP\^b^i^ijk^l m##D),i9NO  56 D6:6J6JD((3 !  .j)r   )F)N)__name__
__module____qualname____doc__r	   r   strr   intr*   rV   __classcell__)r   s   @r   r   r      s.    "/i /

 
49 
?*r   r   N)loggingr   typingr   fusion_baser   r   r   onnxr   r   
onnx_modelr	   rW   loggerr    r   r   <module>re      s1       $ %  	8	S*V S*r   