
    gm                     (    d dl Z d dlZ G d d      Zy)    Nc                   x    e Zd ZdZdej
                  fdZdeddfdZde	ddfd	Z
de	d
ededdfdZddZddZy)DynamoOnnxHelperzK
    Helper class for processing ONNX models exported by torch Dynamo.
    modelc                     || _         y )N)r   )selfr   s     `/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/dynamo_onnx_helper.py__init__zDynamoOnnxHelper.__init__   s	    
    edge_mappingreturnNc                    | j                   j                  j                  D ]  }t        t	        |j
                              D ]3  }|j
                  |   |v s||j
                  |      |j
                  |<   5 t        t	        |j                              D ]3  }|j                  |   |v s||j                  |      |j                  |<   5  | j                   j                  j
                  D ]%  }|j                  |v s||j                     |_        ' | j                   j                  j                  D ]%  }|j                  |v s||j                     |_        ' y)zP
        Updates the edges in the model according to the given mapping.
        N)r   graphnoderangeleninputoutputname)r   r   r   igraph_inputgraph_outputs         r   update_edgeszDynamoOnnxHelper.update_edges   s    JJ$$))D3tzz?+::a=L0$0A$?DJJqM , 3t{{+,;;q>\1%1$++a.%ADKKN -	 *  ::++11K</#/0@0@#A  2 !JJ,,33L  L0$01B1B$C! 4r
   	func_namec                 8   t        j                  d| d       g }g }g }g }| j                  j                  j                  D ]]  }|j
                  |k(  s|j                  |       |j                  t        |j                        t        |j                        z          _ d}| j                  j                  D ]r  }|j                  |k(  s|j                  t        |j                               |j                  t        |j                        t        |j                        z          |}t t        |      t        |      k(  sJ |D ]1  }| j                  j                  j                  j                  |       3 |D ]1  }| j                  j                  j                  j                  |       3 |%| j                  j                  j                  |       i }	t        t        |            D ]  }
||
   }||
   }||k7  s||	|<    | j!                  |	      S )zH
        Unrolls the function with the given name in the model.
        zUnrolling function z...N)logginginfor   r   r   op_typeappendextendlistr   r   	functionsr   r   remover   r   )r   r   nodes_to_removenodes_to_addedges_to_removeedges_to_addr   func_to_removefr   r   kvs                r   unroll_functionz DynamoOnnxHelper.unroll_function%   s    	*9+S9:JJ$$))D||y(&&t,&&tDJJ'7$t{{:K'KL *
 %%Avv"##DL1##DMDN$BC!"	 & ?#s<'8888#DJJ!!((. $ DJJ!!((. !%JJ  ''7s?+,A"AQAAv"#Q	 -   ..r
   input_id	output_idc                    i }g }| j                   j                  j                  D ]Q  }|j                  j	                  |      dk7  s"|j
                  |   ||j                  |   <   |j                  |       S |D ]1  }| j                   j                  j                  j                  |       3 | j                  |       y)z4
        Removes the function in the model.
        N)
r   r   r   r   findr   r   r   r"   r   )r   r   r,   r-   r   r#   r   s          r   remove_functionz DynamoOnnxHelper.remove_functionL   s     JJ$$))D||  +r159[[5KTZZ12&&t, * $DJJ!!((. $ 	,'r
   c                 T    t        j                  d       | j                  ddd       y)z9
        Removes the dropout layer in the model.
        zRemoving dropout layer...Dropoutr   Nr   r   r1   r   s    r   remove_dropout_layerz%DynamoOnnxHelper.remove_dropout_layer[   s#     	01Y1-r
   c                 T    t        j                  d       | j                  ddd       y)z9
        Removes the LM head layer in the model.
        zRemoving LM head layer...Linear_lm_head   r   Nr4   r5   s    r   remove_lm_head_layerz%DynamoOnnxHelper.remove_lm_head_layerb   s$     	01-q!4r
   )r   N)__name__
__module____qualname____doc__onnx
ModelProtor	   dictr   strr+   intr1   r6   r:    r
   r   r   r   
   sm    doo D D$ D&%/ %/ %/N( ( ( (PT (.5r
   r   )r   r?   r   rD   r
   r   <module>rE      s   
  ^5 ^5r
   