
    fPi                     t    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	  ee
          Z G d de          ZdS )	    )	getLogger)Fusion)FusionUtils)helper)	OnnxModelc                   4     e Zd Zdef fdZdedefdZ xZS )FusionQOrderedGelumodelc                 R    t                                          |dddg           d S )NQOrderedGeluGeluFastGelu)super__init__)selfr
   	__class__s     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/transformers/fusion_qordered_gelu.pyr   zFusionQOrderedGelu.__init__   s*    0DEEEEE    input_name_to_nodesoutput_name_to_nodec           	         | j                             ||          }t          |          dk    r|d         j        dk    s7t          |          dk    r"|d         j        dk    r|d         j        dk    sdS |d         }d}t          |          dk    r|d         }t	          j        || j                   sdS | j                             |dgdgfg|          \  }}}	|dk     rdS |d         }
t	          j        |
| j                   sdS |g}|                    ||
g           | j                             |||j	        d         |j	        d         gn|j	        ||          st                              d           dS | j                            |           t          j        d	|
j        d         |
j        d         |j        d         g|j	        d         g| j                             d	d	
                    }|2| j                             ||j        d         |j	        d                    |j                            t          j        dd          g           |j                            t          j        dd          g           d|_        | j                            |           | j        | j        |j        <   dS )a  
        INPUT PATTERN
        Fuse (quantized) Gelu subgraph into one node QOrderedGelu:
            -> quantized input  -> DQ -> Gelu -> Q ->

        (or)

            -> quantized input  -> DQ -> FastGelu -> Q ->

        OUTPUT PATTERN
            -> QOrderedGelu ->
           r   QuantizeLinear   ShapeNDequantizeLinearz.It is not safe to fuse QOrderedGelu node. Skipr   )name_prefix)inputsoutputsnameorder_Xorder_Yzcom.microsoft)r
   get_childrenlenop_typer   check_qdq_node_for_fusionmatch_parent_pathsextendis_safe_to_fuse_nodesoutputloggerdebugnodes_to_remover   	make_nodeinputcreate_node_namereplace_node_input	attributemake_attributedomainnodes_to_addappendthis_graph_namenode_name_to_graph_namer    )r   noder   r   gelu_childrendownstream_quantize_nodedownstream_shape_nodefirst_path_idfirst_input_parent_nodes_upstream_dequantize_nodesubgraph_nodesordered_gelu_nodes                r   fusezFusionQOrderedGelu.fuse   s    
//6IJJ
 1$$q)9)AEU)U)UM""a''!!$,0@@@!!$,77 F#0#3  $}""$1!$4!45MtzZZ 	F 6:Z5R5R!"QC()6
 6
2/ 1F#;A#> 45MtzZZ 	F 79QRSSSz// )4 Q!9!@!CDD-4	
 	
 	 LLIJJJF##N333",(.q1(.q1(.q1
 .4Q78,,^,XX	
 	
 	
 !,J))%'<'B1'EG_GfghGi   	#**F,A)Q,O,O+PQQQ#**F,A)Q,O,O+PQQQ#2   !2333?C?S$%6%;<<<r   )__name__
__module____qualname__r   r   dictrC   __classcell__)r   s   @r   r	   r	      s        Fi F F F F F FbTd bT bT bT bT bT bT bT bT bTr   r	   N)loggingr   fusion_baser   fusion_utilsr   onnxr   
onnx_modelr   rD   r+   r	    r   r   <module>rO      s                $ $ $ $ $ $                  	8		fT fT fT fT fT fT fT fT fT fTr   