
    `i	                     \    S SK Jr  S SKJr  S SKJr  S SKJrJr  \" \	5      r
 " S S5      rg)    )	getLogger)	OnnxModel)Tuple)helperTensorProtoc                   Z    \ rS rSrS\4S jrS\S\\\4   4S jr	S\4S jr
S\4S jrS	rg
)FusionUtils   modelc                     Xl         g )Nr   )selfr   s     j/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxruntime_tools/transformers/fusion_utils.py__init__FusionUtils.__init__   s     %
    
input_namereturnc                 D   U R                   R                  U5      nUbb  UR                  R                  R                  [
        R                  :w  a0  U R                  U5      u  p4[        R                  SU S35        SU4$ [        R                  SU SUS L 35        SU4$ )NzCasted graph input z	 to int32TzDid not cast graph input z to int32: found F)
r   find_graph_inputtypetensor_type	elem_typer   INT32cast_input_to_int32loggerdebug)r   r   graph_inputcast_output	cast_nodes        r   cast_graph_input_to_int32%FusionUtils.cast_graph_input_to_int32   s    jj11*="{'7'7'C'C'M'MQ\QbQb'b%)%=%=j%I"KLL.zl)DE$$0<MkaeNeMfghj  r   c                    US-   nU/nU R                   R                  5       nX;   a+  XA   nU(       a   UR                  S:X  a  UR                  S   /n[        R
                  " SX2/S9nUR                  R                  [        R                  " S[        [        R                  5      5      /5        U R                   R                  U5        X&4$ )N_int32Castr   )inputsoutputsto)r   output_name_to_nodeop_typeinputr   	make_node	attributeextendmake_attributeintr   r   add_node)r   r   r   r&   r)   parent_noder    s          r   r   FusionUtils.cast_input_to_int32   s     8+ "jj<<>,-9K{22f<%++A./$$VFMR	""F$9$9$KDUDU@V$W#XY

I&%%r   c                    U R                   R                  5       nX!   nU H  nUR                  S:X  d  M  SnUR                   H@  nUR                  S:X  d  M  UR
                  [        [        R                  5      :X  d  M>  Sn  O   U(       d  Mp  UR                  S   nU R                   R                  U5        U R                   R                  Xq5        M     g )Nr%   Fr(   Tr   )r   input_name_to_nodesr*   r-   nameir0   r   r   outputremove_nodereplace_input_of_all_nodes)r   r   r5   nodesnodeis_int32attoutput_names           r   remove_cast_int32FusionUtils.remove_cast_int32,   s    "jj<<>#/D||v% >>Cxx4'CEES9J9J5K,K#' * 8"&++a.KJJ**40JJ99+R r   r   N)__name__
__module____qualname____firstlineno__r   r   strr   boolr!   r   r@   __static_attributes__ r   r   r	   r	      sD    &i &!C !E$)<L !&c &"SC Sr   r	   N)loggingr   
onnx_modelr   typingr   onnxr   r   rB   r   r	   rI   r   r   <module>rN      s)   
     $	8	,S ,Sr   