
    fPi	                     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      }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-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          |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.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$#[B4:abb>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)   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   