Ë
    cQêj)  ã                   óf   — d dl mZ d dl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y)é    )Ú	getLoggerN)ÚFusion)ÚTensorProtoÚhelper)Ú	OnnxModelc                   ó6   ‡ — e Zd Zddefˆ fd„Zdedefd„Zˆ xZS )ÚFusionGroupNormÚmodelc                 ó6   •— t         ‰| �  |dd«       || _        y )NÚ	GroupNormÚAdd)ÚsuperÚ__init__Úchannels_last)Úselfr
   r   Ú	__class__s      €úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_group_norm.pyr   zFusionGroupNorm.__init__   s   ø€ Ü‰Ñ˜ ¨UÔ3Ø*ˆÕó    Úinput_name_to_nodesÚoutput_name_to_nodec           	      óª  — | j                   j                  |g d¢g d¢|«      }|€y|\  }}}}|j                  d   }	| j                   j                  |dgdg|«      }
|
€y|
d   j                  d   |	k7  ry|
d   }| j                   j                  |d«      }d}|�'| j                   j                  |dgdg|«      }|�|d   }|j                  d| j                   j	                  |j
                  d   |«      z
     }| j                   j                  |d	d
«      sy|j                  d| j                   j	                  |j
                  d   |«      z
     }| j                   j                  |d	d«      sy| j                   j                  |«      }|€yt        |j                  «      d	k(  r$|j                  d   dk(  r|j                  d   dk(  sy| j                   j                  |«      }|€yt        |j                  «      d	k(  r$|j                  d   dk(  r|j                  d   dk(  syt        t        j                  |j                  «      «      }t        t        j                  |j                  «      «      }||k7  ry| j                   j                  |j                  d   «      }|�t        |j                  «      dk7  ryt        |j                  d   «      }| j                   j                  |j                  d   «      }|�|j                  |j                  k7  ryt        j                  t        j                  |«      |«      syt        j                  t        j                  |«      |«      sy| j                   j!                  dd¬«      }| j#                  |dz   t$        j&                  |g|¬«       | j#                  |dz   t$        j&                  |g|¬«       |}||||||g}|xr |}|r|r|j)                  ||g«       |}| j                   j+                  ||j
                  ||«      s| j,                  j)                  |g«       n| j,                  j)                  |«       d| _        |	}|j
                  d   }| j0                  r|dz   n|}| j0                  r|dz   n|}| j0                  rwt3        j4                  d|g|g| j                   j!                  dd¬«      g d¢¬«      } | j6                  j9                  | «       | j:                  | j<                  | j>                  <   t3        j4                  d||dz   |dz   g|g|¬«      }!|!j@                  j)                  |j@                  «       |!j@                  j)                  t3        jB                  d|«      g«       |!j@                  j)                  t3        jB                  d|rdnd«      g«       | j0                  s0|!j@                  j)                  t3        jB                  dd«      g«       d|!_"        | j6                  j9                  |!«       | j:                  | j<                  |!j>                  <   | j0                  rxt3        j4                  d|g|g| j                   j!                  dd¬«      g d¢¬«      }"| j6                  j9                  |"«       | j:                  | j<                  |"j>                  <   yy)a‚  
         Fuse Group Normalization subgraph into one node GroupNorm.
         The following is the pattern with swish activation:
               +----------------Shape-------------------------------+
               |                                                    |
               |    (0, 32, -1)                                     v     (512x1x1) (512x1x1) (optional)
           [Root] --> Reshape -------> InstanceNormalization --> Reshape ---> Mul --> Add --> Mul--> [output]
        Bx512xHxW                 (scale=ones(32), B=zeros(32))                        |       ^     Bx512xHxW
                                                                                       |       |
                                                                                       +--->Sigmoid (optional)
        The Mul and Sigmoid before output is for Swish activation. They are optional.
        )ÚMulÚReshapeÚInstanceNormalizationr   )r   r   r   r   Nr   ÚShapeé   r   ÚSigmoidé   zgroup norm weightzlayernorm biasé   r   )Úname_prefixÚ_gamma)ÚnameÚ	data_typeÚdimsÚvalsÚ_betaTÚ_NHWCÚ	TransposeÚTranspose_NCHW_to_NHWC)r   r   r   r   )r"   Úperm)ÚinputsÚoutputsr"   ÚgroupsÚ
activationr   zcom.microsoftÚTranspose_NHWC_to_NCHW)r   r   r   r   )#r
   Úmatch_parent_pathÚinputÚfind_first_child_by_typeÚinput_indexÚoutputÚ$is_constant_with_specified_dimensionÚget_constant_valueÚlenÚshapeÚintÚnpÚprodÚallcloseÚ	ones_likeÚ
zeros_likeÚcreate_node_nameÚadd_initializerr   ÚFLOATÚextendÚis_safe_to_fuse_nodesÚnodes_to_removeÚprune_graphr   r   Ú	make_nodeÚnodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_namer"   Ú	attributeÚmake_attributeÚdomain)#r   Úadd_noder   r   ÚnodesÚ
weight_mulÚ
reshape_4dÚinstance_normÚ
reshape_3dÚrootÚparentsÚ
shape_nodeÚ	swish_mulÚswish_sigmoidÚsigmoid_pathÚweight_inputÚ
bias_inputÚweightÚbiasÚweight_elementsÚbias_elementsÚinstance_norm_scaleÚ
num_groupsÚinstance_norm_biasÚgroup_norm_nameÚ	last_nodeÚsubgraph_nodesÚhas_swish_activationÚ
input_nameÚoutput_nameÚgroup_norm_input_nameÚgroup_norm_output_nameÚtranspose_inputÚnew_nodeÚtranspose_outputs#                                      r   ÚfusezFusionGroupNorm.fuse   sb  € ð —
‘
×,Ñ,ØÒLÊlÐ\oó
ˆð ˆ=Øà<AÑ9ˆ
�J ¨zØ×Ñ Ñ"ˆà—*‘*×.Ñ.¨z¸G¸9ÀqÀcÐK^Ó_ˆØˆ?ØØ�1‰:×Ñ˜AÑ $Ò&ØØ˜Q‘Zˆ
ð —J‘J×7Ñ7¸À%ÓHˆ	ØˆØÐ ØŸ:™:×7Ñ7¸	ÀIÀ;ÐQUÐPVÐXkÓlˆLØÐ'Ø ,¨Q¡�à!×'Ñ'¨¨D¯J©J×,BÑ,BÀ:×CTÑCTÐUVÑCWÐYcÓ,dÑ(dÑeˆØ�z‰z×>Ñ>¸|ÈQÐPcÔdØà—^‘^ A¨¯
©
×(>Ñ(>¸z×?PÑ?PÐQRÑ?SÐU]Ó(^Ñ$^Ñ_ˆ
Ø�z‰z×>Ñ>¸zÈ1ÐN^Ô_Øà—‘×.Ñ.¨|Ó<ˆØˆ>Øä�F—L‘LÓ! QÒ&¨6¯<©<¸©?¸aÒ+?ÀFÇLÁLÐQRÁOÐWXÒDXØà�z‰z×,Ñ,¨ZÓ8ˆØˆ<ØÜ�D—J‘J“ 1Ò$¨¯©°A©¸!Ò);ÀÇ
Á
È1ÁÐQRÒ@RØäœbŸg™g f§l¡lÓ3Ó4ˆÜœBŸG™G D§J¡JÓ/Ó0ˆØ˜mÒ+Øà"Ÿj™j×;Ñ;¸M×<OÑ<OÐPQÑ<RÓSÐØÐ&¬#Ð.A×.GÑ.GÓ*HÈAÒ*MØÜÐ,×2Ñ2°1Ñ5Ó6ˆ
à!ŸZ™Z×:Ñ:¸=×;NÑ;NÈqÑ;QÓRÐØÐ%Ð)<×)BÑ)BÐFY×F_ÑF_Ò)_Øä�{‰{œ2Ÿ<™<Ð(;Ó<Ð>QÔRØÜ�{‰{œ2Ÿ=™=Ð);Ó<Ð>PÔQØàŸ*™*×5Ñ5°kÈ{Ð5Ó[ˆà×ÑØ  8Ñ+Ü!×'Ñ'Ø!Ð"Øð	 	ô 	
ð 	×ÑØ  7Ñ*Ü!×'Ñ'Ø�Øð	 	ô 	
ð ˆ	Ø" J°
¸MÈ:ÐWaÐbˆØ(Ò:¨]ÐÙ™Ø×!Ñ! 9¨mÐ"<Ô=Ø!ˆIà�z‰z×/Ñ/ØØ×ÑØØô	
ð × Ñ ×'Ñ'¨¨Õ4à× Ñ ×'Ñ'¨Ô7ð  ˆÔàˆ
Ø×&Ñ& qÑ)ˆà8<×8JÒ8J 
¨WÒ 4ÐPZÐØ:>×:LÒ:L ¨wÒ!6ÐR]Ðð ×ÒÜ$×.Ñ.ØØ�Ø&Ð'Ø—Z‘Z×0Ñ0°ÐJbÐ0ÓcÚ!ôˆOð ×Ñ×$Ñ$ _Ô5ØAE×AUÑAUˆD×(Ñ(¨×)=Ñ)=Ñ>ä×#Ñ#ØØ)¨?¸XÑ+EÀÐY`ÑG`ÐaØ+Ð,Ø ô	
ˆð 	×Ñ×!Ñ! -×"9Ñ"9Ô:à×Ñ×!Ñ!¤6×#8Ñ#8¸À:Ó#NÐ"OÔPØ×Ñ×!Ñ!¤6×#8Ñ#8¸ÑL`ÁqÐfgÓ#hÐ"iÔjà×!Ò!Ø×Ñ×%Ñ%¤v×'<Ñ'<¸_ÈaÓ'PÐ&QÔRà)ˆŒØ×Ñ× Ñ  Ô*Ø6:×6JÑ6Jˆ×$Ñ$ X§]¡]Ñ3ð ×ÒÜ%×/Ñ/ØØ'Ð(Ø�Ø—Z‘Z×0Ñ0°ÐJbÐ0ÓcÚ!ô Ðð ×Ñ×$Ñ$Ð%5Ô6ØBF×BVÑBVˆD×(Ñ(Ð)9×)>Ñ)>Ò?ð r   )T)Ú__name__Ú
__module__Ú__qualname__r   r   Údictrn   Ú__classcell__)r   s   @r   r	   r	      s(   ø„ ñ+˜iõ +ð`W°$ð `WÈT÷ `Wr   r	   )Úloggingr   Únumpyr:   Úfusion_baser   Úonnxr   r   Ú
onnx_modelr   ro   Úloggerr	   © r   r   ú<module>r{      s0   ðõ
 ã Ý ß $Ý  á	�8Ó	€ôeW�fõ eWr   