
     Ng!                         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d	S )
    )	getLogger)List)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      e/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/transformers/fusion_nhwc_conv.pyr   zFusionNhwcConv.__init__   sA    
VHj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2Z?K)+zlU`Tahqrrr '')>vt)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          z   |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_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V.5a8 J//
;;	 
224:a=AA F&}55v|!!F
$$_55!m&=&F&F)77*%/$7 8  I
 (.q1O 	:%%aAq11F#n4K   '1&,''	 !    %)!!$($>$>tz!}lll$[$[!/6q9K$v-3dk!nD$#[1DJqrrNB%&S49,	
 
 
	 	""4>222*	 $ : :9;KA;NP\P\P\^b^ijk^l m m##D))),i9NO  	7 5666  	K 	KD6:6JD(3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      s                      $ $ $ $ $ $ % % % % % % % %            	8		S* S* S* S* S*V S* S* S* S* S*r   