Ë
    ÄÓ^j²©  ã                   óx  — d dl mZ d dlmZmZ d dlZd dlZd dlmZm	Z	 d dl
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ dd	lm Z  	 	 	 	 d4d
ddddddee!   dee!   dee!   de!de"dee!   dz  de#d   dz  ded   fd„Z$	 	 	 d5d
dddddde#d   dz  ded   de"fd„Z%d„ Z& G d„ de«      Z' G d„ de«      Z( G d„ de«      Z) G d „ d!e«      Z* G d"„ d#e«      Z+ G d$„ d%e«      Z, G d&„ d'e«      Z- G d(„ d)e«      Z. G d*„ d+e«      Z/ G d,„ d-e«      Z0 G d.„ d/e«      Z1 G d0„ d1e«      Z2 G d2„ d3e«      Z3y)6é    )ÚSequence)ÚAnyÚOptionalN)Úmake_channels_last_strides_forÚ
StrideType©Ú
OrderedSeté   )ÚExternKernelAllocÚFixedLayoutÚFlexibleLayoutÚget_device_typeÚir_node_to_tensorÚIRNodeÚ is_contiguous_storage_and_layoutÚLayoutÚmay_convert_to_optionalÚMultiOutputÚMultiOutputLayoutÚMutationOutputÚ
NoneLayoutÚ	TensorBox)Úconvert_shape_to_inductorÚpad_listlikeÚSUPPORTED_MKLDNN_DEVICES)ÚVÚxr   ÚweightÚbiasÚpaddingÚstrideÚdilationÚgroupsÚ
transposedÚoutput_paddingÚquantize_argsÚotherc                 ój  — d„ }dd„}d„ }|j                  «        |j                  «        |�|j                  «        t        j                  j                  5  t	        |«      }t	        |«      }t        |j                  «       «      dz
  }dt        |«      cxk  r|k  sJ ‚ J ‚dt        |«      cxk  r|k  sJ ‚ J ‚dt        |«      cxk  r|k  sJ ‚ J ‚t        ||«      }t        ||«      }t        ||«      }|	€t        dg|«      }	n%dt        |	«      cxk  r|k  sJ ‚ J ‚t        |	|«      }	t        |t        t        j                  j                  j                  f«      sJ ‚|r( |||«      }|j                  «       } |||||	|||«      }n|t        |j                  «      }t        |j                  «      }t        |«      t        |«      k7  r/t        |«      dk(  rt        |«      dk(  sJ ‚|j!                  d«        ||||||«      }dgt        t#        t%        d	t        |«      d	z   «      «      «      z   }t        |«      g|z   }ddd«       | j'                  |«      }t)        d
„ D «       «       }|st+        |«      dk(  r!t-        |«      rt/        j0                  |«      }nEt+        |«      dk(  r,|j3                  «       d   dk(  rt/        j0                  |«      }nt5        |«      }t+        |«      t+        |«      k(  sJ ‚t+        |«      t6        v sJ ‚|g}|
�X|
\  }}}}|j                  «        |j                  «        |j                  «        |j                  «        |||gz   |gz   ||gz   }n||gz  }|�*| j'                  ||«      }t        |t8        «      sJ ‚||gz  }t;        |j=                  «       |j?                  «       tA        |«      tA        |«      «      }||||g} |r| jC                  d	|	«       |�|jE                  |«       n| jC                  d|«       || |||fS # 1 sw Y   �ŒãxY w)a}  
    This function is a helper function to prepare inputs, layout and constant args
    for convolution post-op fusion's create function, including deciding the output
    layout (channels first or channels last), realizing inputs and make them etc. The
    function only supports the CPU/XPU device since conv post-op fusion kernel is only
    supported on CPU/XPU right now.
    c                 ó¾  — t        | «      t        |«      k(  sJ d«       ‚t        | «      }|dkD  sJ d«       ‚d}d}	g }
|
j                  | |   «       |
j                  ||	   |z  «       t        d|«      D ]P  }||   dz
  ||dz
     z  dz   }| |   dz
  ||dz
     z  ||dz
     dz  z
  |z   ||dz
     z   }|
j                  |«       ŒR t        t	        t
        |
«      «      S )NzExpect input dim == weight dimé   zExpect input dim > 2r   r
   )ÚlenÚappendÚrangeÚlistÚmapÚint)Úoutput_sizeÚweight_sizer    r%   r!   r"   r#   ÚdimÚ	BATCH_DIMÚWEIGHT_INPUT_CHANNELS_DIMÚ
input_sizeÚdÚkernelÚinput_size_ds                 úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/mkldnn_ir.pyÚ_conv_input_sizez<_prepare_convolution_fusion_create.<locals>._conv_input_size6   s!  € ô �;Ó¤3 {Ó#3Ò3ÐUÐ5UÓUÐ3Ü�+ÓˆØ�QŠwÐ.Ð.Ó.ˆwàˆ	Ø$%Ð!Øˆ
Ø×Ñ˜+ iÑ0Ô1Ø×Ñ˜+Ð&?Ñ@À6ÑIÔJÜ�q˜#“ò 	,ˆAØ! !‘n qÑ(¨H°Q¸±U©OÑ;¸aÑ?ˆFà˜Q‘ !Ñ# v¨a°!©e¡}Ñ4Ø˜1˜q™5‘> AÑ%ñ'àñð !  Q¡Ñ'ñ(ð ð ×Ñ˜lÕ+ð	,ô ”Cœ˜ZÓ(Ó)Ð)ó    Nc                 ó0  — |d u}t        | «      }g }|j                  | d   «       |j                  |d   «       t        d|«      D ]M  }|r||dz
     nd}	|	||   dz
  z  dz   }
| |   d||dz
     z  z   |
z
  ||dz
     z  dz   }|j                  |«       ŒO |S )Nr   r*   r
   )r+   r,   r-   )r6   r2   r    r!   r"   Úhas_dilationr3   r1   r7   Ú	dilation_r8   Úoutput_size_ds               r:   Ú_conv_output_sizez=_prepare_convolution_fusion_create.<locals>._conv_output_sizeN   sÐ   € Ø tÐ+ˆÜ�*‹oˆØˆØ×Ñ˜: a™=Ô)Ø×Ñ˜; q™>Ô*Ü�q˜#“ò 	.ˆAá+7˜  Q¡š¸QˆIØ +¨a¡.°1Ñ"4Ñ5¸Ñ9ˆFØ'¨™]¨a°'¸!¸a¹%±.Ñ.@ÑAÀFÑJÈvØ�A‘ñPñ àñˆMð ×Ñ˜}Õ-ð	.ð Ðr<   c                 óL  ‡— | j                  «       Št        ‰«      }|dkD  sJ d«       ‚|dkD  rVg }|j                  ‰d   |z  «       |j                  ‰d   |z  «       |j                  ˆfd„t	        d|«      D «       «       |S | j                  dd«      j                  «       }|S )Nr*   zExpect weight dim > 2r
   r   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­w©N© )Ú.0r7   Úprepacked_weight_sizes     €r:   ú	<genexpr>z[_prepare_convolution_fusion_create.<locals>._original_deconv_weight_size.<locals>.<genexpr>m   s   øè ø€ ÒO¸AÐ4°QÕ7ÑOùs   ƒ)Úsizer+   r,   Úextendr-   Ú	transpose)Úprepacked_weightr#   r3   r2   rG   s       @r:   Ú_original_deconv_weight_sizezH_prepare_convolution_fusion_create.<locals>._original_deconv_weight_sizeb   s´   ø€ ð !1× 5Ñ 5Ó 7ÐÜÐ'Ó(ˆØ�QŠwÐ/Ð/Ó/ˆwØ�AŠ:ØˆKØ×ÑÐ4°QÑ7¸&Ñ@ÔAØ×ÑÐ4°QÑ7¸&Ñ@ÔAØ×ÑÓOÄÀqÈ#ÃÔOÔOð Ðð +×4Ñ4°Q¸Ó:×?Ñ?ÓAˆKØÐr<   r*   r   é   é   r
   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrD   )Ú
isinstancer0   )rF   Úis     r:   rH   z5_prepare_convolution_fusion_create.<locals>.<genexpr>°   s   è ø€ ÒG°AœZ¨¬3×/ÑGùs   ‚ÚxpurD   )#Úrealizer   ÚgraphÚ	fake_moder   r+   rI   r   rQ   r0   ÚsympyÚcoreÚnumbersÚIntegerr.   ÚshapeÚpopÚreversedr-   Úrequire_stride_orderÚallr   r   r   Úcontiguous_stridesÚ
get_strider   r   r   r   Úget_device_or_errorÚ	get_dtyper   Úinsertr,   )!Úclsr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r;   rA   rM   Úx_fakeÚweight_fakeÚdimsr2   r6   r1   Úx_shapeÚweight_shapeÚreq_stride_orderÚdynamic_shapesÚoutput_strideÚinputsÚx_scaleÚx_zero_pointÚw_scaleÚw_zero_pointÚkernel_layoutÚconstant_argss!                                    r:   Ú"_prepare_convolution_fusion_createru      s9  € ò.*ó0ò(ð  ‡I�I„KØ
‡N�NÔØÐØ�‰ŒÜ	
�‰×	Ñ	ñ /Fä" 1Ó%ˆÜ'¨Ó/ˆÜ�6—;‘;“=Ó! AÑ%ˆØ”3�w“<Ô' 4Ò'Ð'Ñ'Ð'Ð'Ø”3�x“=Ô( DÒ(Ð(Ñ(Ð(Ð(Ø”3�v“;Ô& $Ò&Ð&Ñ&Ð&Ð&Ü˜w¨Ó-ˆÜ ¨$Ó/ˆÜ˜f dÓ+ˆØÐ!Ü)¨1¨#¨tÓ4‰Nà”s˜>Ó*Ô2¨dÒ2Ð2Ñ2Ð2Ð2Ü)¨.¸$Ó?ˆNÜ˜&¤3¬¯
©
×(:Ñ(:×(BÑ(BÐ"CÔDÐDÐDÙñ 7°{ÀFÓKˆKØŸ™›ˆJÙ*ØØØØØØØó‰Kô ˜6Ÿ<™<Ó(ˆGÜ × 1Ñ 1Ó2ˆLÜ�7‹|œs <Ó0Ò0Ü˜7“| qÒ(¬S°Ó->À!Ò-CÐCÐCØ× Ñ  Ô#Ù+ØØØØØóˆKð ˜3¤¤h¬u°Q¼¸F»Àa¹Ó/HÓ&IÓ!JÑJÐÜÐ 0Ó1Ð2Ð5EÑEÐ÷_/Fðb 	× Ñ  Ð$4Ó5€Aô ÑG¸+ÔGÓGÐG€Náœ/¨!Ó,°Ò5Ü
*¨1Ô
-Ü$2×$EÑ$EÀkÓ$R‰ô 
˜Ó	˜uÒ	$¨¯©«¸Ñ):¸aÒ)?Ü&×9Ñ9¸+ÓF‰ä6°{ÓCˆä˜1Ó¤°Ó!8Ò8Ð8Ð8Ü˜1ÓÔ!9Ñ9Ð9Ð9ØˆS€FàÐ Ø7DÑ4ˆ�˜w¨Ø�‰ÔØ×ÑÔØ�‰ÔØ×ÑÔØ˜7 LÐ1Ñ1°V°HÑ<ÀÈÐ?VÑV‰à�6�(ÑˆàÐØ×(Ñ(¨Ð0@ÓAˆÜ˜%¤Ô+Ð+Ð+Ø�5�'ÑˆäØ	×ÑÓØ	�‰‹Ü! +Ó.Ü! -Ó0ó	€Mð ˜f h°Ð7€MÙØ×Ñ˜Q Ô/àÐØ�‰�dÕà×Ñ˜Q Ô%Ø�= -Ð1AÀ5ÐHÐH÷W/Fñ /Fús   ÁG0P(Ð(P2Ú
binary_sumc           
      óŽ  — |j                  «        |j                  «        |�|j                  «        |j                  «       �^ }}|j                  «       \  }}	t        |«      |	gz   }
t        t        t	        t        |j                  «       «      «      «      «      }| j                  ||«      }t        |«      t        |«      k(  sJ ‚t        |«      t        v sJ ‚|g}|�X|\  }}}}|j                  «        |j                  «        |j                  «        |j                  «        |||gz   |gz   ||gz   }n||gz  }|�|r| j                  ||«      }||gz   }t        j                  |
«      }t        |j                  «       |j                  «       |
|«      }g }|�|j                  |«       n|j                  d|«       |||||fS )zþ
    This function is a helper function to prepare inputs, layout and constant args
    for linear post-op fusion's create function. The function only supports the CPU device
    since linear post-op fusion kernel is only supported on CPU right now.
    r   )rT   Úget_sizer.   r]   r-   r+   r^   r   r   r   r`   r   Ú
get_devicerc   r,   rd   )re   r   r   r   r&   r'   rv   ÚmÚ_Úocr1   rk   rn   ro   rp   rq   rr   rm   rs   rt   s                       r:   Ú_prepare_linear_fusion_creater}   ä   s½  € ð ‡I�I„KØ
‡N�NÔØÐØ�‰Œà�J‰J‹L�E€Qˆð �O‰OÓ�E€A€rÜ�q“'˜R˜D‘.€KÜœH¤U¬3¨q¯z©z«|Ó+<Ó%=Ó>Ó?Ðà× Ñ  Ð$4Ó5€AÜ˜1Ó¤°Ó!8Ò8Ð8Ð8Ü˜1ÓÔ!9Ñ9Ð9Ð9ØˆS€FàÐ Ø7DÑ4ˆ�˜w¨Ø�‰ÔØ×ÑÔØ�‰ÔØ×ÑÔØ˜7 LÐ1Ñ1°V°HÑ<ÀÈÐ?VÑV‰à�6�(ÑˆàÐÙØ×,Ñ,¨UÐ4DÓEˆEØ˜5˜'Ñ!ˆä"×5Ñ5°kÓB€MÜØ	�‰‹Ø	�‰‹ØØó	€Mð  "€MàÐØ�‰�dÕà×Ñ˜Q Ô%Ø�= -Ð1AÀ5ÐHÐHr<   c                 óŠ   — t        | j                  «       | g «      }t        | j                  «       ¬«      | _        |g| _        |S )N©Údevice)r   Ú
get_layoutr   ry   ÚlayoutÚoutputs)ÚpackedÚ	output_irs     r:   Ú_create_output_noder†   #  sD   € ÜØ×ÑÓØØ
ó€Iô
 &¨V×->Ñ->Ó-@ÔA€F„MØ�[€F„NØÐr<   c                   ó€   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zedddddddee   d	ee   d
ee   dedee   dz  fd„«       Z	ˆ xZ
S )ÚConvolutionUnaryNc           
      óÊ   •— t        |d   «      | _        t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       y )Nr   Úaoti_torch_Ú_mkldnn__convolution_pointwise©Úop_overloadÚcpp_kernel_name)	r   Údevice_typeÚsuperÚ__init__ÚtorchÚopsÚmkldnnÚ_convolution_pointwiseÚdefault©Úselfr‚   rn   rt   Ú	__class__s       €r:   r‘   zConvolutionUnary.__init__/  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×GÑGØ)¨$×*:Ñ*:Ð);Ð;YÐZð 	õ 	
r<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y ©Nz&torch/csrc/inductor/aoti_torch/c/shim_z.h©Úinclude_extra_headerr�   r�   Úcodegen©r˜   Úwrapperr™   s     €r:   rž   zConvolutionUnary.codegen?  ó2   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Õ r<   r   r   r   r   Úpadding_Ústride_r?   r#   Úscalarsc           
      ó†   — t        | |||||||«      \  }}}}}||t        |	«      |
gz   }t        |||¬«      }t        |«      S )N©r‚   rn   rt   )ru   r   rˆ   r†   )re   r   r   r   r¢   r£   r?   r#   Úattrr¤   Ú	algorithmrn   rt   rs   r{   r„   s                   r:   ÚcreatezConvolutionUnary.createE  sr   € ô( /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 "Ø ØØ'ô
ˆô
 # 6Ó*Ð*r<   ©rE   ©ÚreturnN©Ú__name__Ú
__module__Ú__qualname__r‘   rž   Úclassmethodr.   r0   r   r©   Ú__classcell__©r™   s   @r:   rˆ   rˆ   .  s“   ø„ ð
 ð	
ð
 
õ
ô !ð ð +àð +ð ð +ð ð	 +ð
 �s‘)ð +ð �c‘ð +ð ˜‘9ð +ð ð +ð �c‘˜TÑ!ò +ó ô +r<   rˆ   c                   ó¨   ‡ — e Zd Z	 	 d	 dˆ fd„Zˆ fd„Zeddddddddd	ee   d
ee   dee   dedede	dz  dedz  dee
   dz  dedz  fd„«       Zˆ xZS )ÚConvolutionBinaryNc           
      óØ   •— t        |d   «      | _        t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       || _	        y )Nr   rŠ   Ú%_mkldnn__convolution_pointwise_binaryrŒ   )
r   r�   r�   r‘   r’   r“   r”   r•   ÚbinaryÚcpp_constant_args)r˜   r‚   rn   rt   r¹   r™   s        €r:   r‘   zConvolutionBinary.__init__j  sk   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×FÑFØ)¨$×*:Ñ*:Ð);Ð;`Ðað 	ô 	
ð "3ˆÕr<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y r›   rœ   rŸ   s     €r:   rž   zConvolutionBinary.codegen|  r¡   r<   r   r   r'   r   r   r¢   r£   r?   r#   Úbinary_attrÚbinary_alphaÚ
unary_attrÚunary_scalarsÚunary_algorithmc           
      óÒ   — t        | |||||||«      \  }}}}}| j                  ||«      }|j                  d|«       ||	|
|t        |«      |gz   }t	        |||¬«      }t        |«      S )Nr
   r¦   )ru   r^   rd   r   rµ   r†   )re   r   r'   r   r   r¢   r£   r?   r#   r»   r¼   r½   r¾   r¿   rn   rt   rs   rk   r{   r„   s                       r:   r©   zConvolutionBinary.create‚  s™   € ô. /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð
 ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô #Ø ØØ'ô
ˆô
 # 6Ó*Ð*r<   )rE   rE   r«   )r®   r¯   r°   r‘   rž   r±   r.   r0   ÚstrÚfloatr   r©   r²   r³   s   @r:   rµ   rµ   i  sÔ   ø„ ð
 Øð3ð 
õ3ô$!ð ð(+àð(+ð ð(+ð ð	(+ð
 ð(+ð �s‘)ð(+ð �c‘ð(+ð ˜‘9ð(+ð ð(+ð ð(+ð ˜d‘lð(+ð ˜$‘Jð(+ð ˜C‘y 4Ñ'ð(+ð ˜t™ò(+ó ô(+r<   rµ   c                   óÌ   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zdeej                     fd„Ze	ddddd	dd
dde
e   de
e   de
e   dedededz  dedz  de
e   dz  dedz  fd„«       Zˆ xZS )ÚConvolutionBinaryInplacer¬   Nc           
      ó   •— t        |d   «      | _        |d   |d   g|dd  z   }t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       t        t        |d   j                  «       ¬«      |d   | «      t        t        |d   j                  «       ¬«      |d   | «      g| _        y )Nr   r
   r*   rŠ   Ú&_mkldnn__convolution_pointwise_binary_rŒ   r   )r   r�   r�   r‘   r’   r“   r”   Ú_convolution_pointwise_r¸   r   r   ry   Úmutation_outputs)r˜   rs   rn   rt   Úreordered_inputsr™   s        €r:   r‘   z!ConvolutionBinaryInplace.__init__¯  sÑ   ø€ ô +¨6°!©9Ó5ˆÔØ" 1™I v¨a¡yÐ1°F¸1¸2°JÑ>Ðä‰ÑØØØØÜŸ	™	×(Ñ(×@Ñ@×GÑGØ)¨$×*:Ñ*:Ð);Ð;aÐbð 	ô 	
ô œ:¨V°A©Y×-AÑ-AÓ-CÔDÀfÈQÁiÐQUÓVÜœ:¨V°A©Y×-AÑ-AÓ-CÔDÀfÈQÁiÐQUÓVð!
ˆÕr<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y r›   rœ   rŸ   s     €r:   rž   z ConvolutionBinaryInplace.codegenÇ  r¡   r<   c                 ó   — t        «       S rD   r   ©r˜   s    r:   Úget_unbacked_symbol_defsz1ConvolutionBinaryInplace.get_unbacked_symbol_defsÍ  ó
   € Ü‹|Ðr<   r   r   r'   r   r   r¢   r£   r?   r#   r»   r¼   r½   r¾   r¿   c           
      ó  — t        | |||||||«      \  }}}}}| j                  ||«      }|j                  d|«       ||	|
|t        |«      |gz   }t	        t        |d   j                  «       ¬«      ||¬«      }|j                  d   S )Nr
   r   )rs   rn   rt   r   )ru   r^   rd   r   rÄ   r   ry   rn   )re   r   r'   r   r   r¢   r£   r?   r#   r»   r¼   r½   r¾   r¿   rn   rt   r{   rk   r„   s                      r:   r©   zConvolutionBinaryInplace.createÐ  s¯   € ô. /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð
 ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô *Ü$¨F°1©I×,@Ñ,@Ó,BÔCØØ'ô
ˆð �}‰}˜QÑÐr<   rª   r«   )r®   r¯   r°   r‘   rž   r	   rW   ÚSymbolrÍ   r±   r.   r0   rÁ   rÂ   r   r©   r²   r³   s   @r:   rÄ   rÄ   ®  sæ   ø„ ð
 ð	
ð
 
õ
ô0!ð¨*°U·\±\Ñ*Bó ð ð+ àð+ ð ð+ ð ð	+ ð
 ð+ ð �s‘)ð+ ð �c‘ð+ ð ˜‘9ð+ ð ð+ ð ð+ ð ˜d‘lð+ ð ˜$‘Jð+ ð ˜C‘y 4Ñ'ð+ ð ˜t™ò+ ó ô+ r<   rÄ   c                   óŠ   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zedddddddee   d	ee   d
ee   dee   dedee   dz  fd„«       Z	ˆ xZ
S )ÚConvolutionTransposeUnaryNc           
      óÊ   •— t        |d   «      | _        t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       y )Nr   rŠ   Ú(_mkldnn__convolution_transpose_pointwiserŒ   )	r   r�   r�   r‘   r’   r“   r”   Ú _convolution_transpose_pointwiser–   r—   s       €r:   r‘   z"ConvolutionTransposeUnary.__init__   sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×IÑI×QÑQØ)¨$×*:Ñ*:Ð);Ð;cÐdð 	õ 	
r<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y r›   rœ   rŸ   s     €r:   rž   z!ConvolutionTransposeUnary.codegen  r¡   r<   r   r   r   r   r¢   Úoutput_padding_r£   r?   Úgroups_r¤   c                 óŽ   — d}t        | |||||||||«
      \  }}}}}||	t        |
«      |gz   }t        |||¬«      }t        |«      S )NTr¦   )ru   r   rÒ   r†   )re   r   r   r   r¢   r×   r£   r?   rØ   r§   r¤   r¨   r$   rn   rt   rs   r{   r„   s                     r:   r©   z ConvolutionTransposeUnary.create  s†   € ð ˆ
ô /ØØØØØØØØØØó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 +Ø ØØ'ô
ˆô
 # 6Ó*Ð*r<   rª   r«   r­   r³   s   @r:   rÒ   rÒ   ÿ  s¡   ø„ ð
 ð	
ð
 
õ
ô !ð ð++àð++ð ð++ð ð	++ð
 �s‘)ð++ð ˜c™ð++ð �c‘ð++ð ˜‘9ð++ð ð++ð �c‘˜TÑ!ò++ó ô++r<   rÒ   c                   ó„   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zeddddddddddd	dd
ee   dee   dee   dededefd„«       Z	ˆ xZ
S )ÚQConvPointWisePT2Ec           
      óð   •— t        |d   «      | _        t        |«      dk(  | _        t        ‰| �  |||dt        j                  j                  j                  j                  d| j                  › d�¬«       y)aõ  
        if bias is not None
            - inputs = [x, w, b, weight_scale, weight_zp]
            - const_args is: [stride, padding, dilation, groups, x_scale, x_zp, o_scale, o_zp,
              fp32_output, unary_attr, unary_scalars, unary_algorithm]
        else
            - inputs = [x, w, weight_scale, weight_zp]
            - const_args is: [bias, stride, padding, dilation, groups, x_scale, x_zp, o_scale, o_zp,
              fp32_output, unary_attr, unary_scalars, unary_algorithm]
        r   é   NrŠ   Ú__qconv_pointwise_tensorrŒ   )r   r�   r+   Úhas_biasr�   r‘   r’   r“   ÚonednnÚqconv_pointwiseÚtensorr—   s       €r:   r‘   zQConvPointWisePT2E.__init__F  sq   ø€ ô  +¨6°!©9Ó5ˆÔÜ˜F› qÑ(ˆŒÜ‰ÑØØØØÜŸ	™	×(Ñ(×8Ñ8×?Ñ?Ø)¨$×*:Ñ*:Ð);Ð;SÐTð 	õ 	
r<   c                 óº   •— |j                  d| j                  › d�«       t        ‰| �  |«       t	        | j
                  t        «      r| j                  |«       y y r›   ©r�   r�   r�   rž   rQ   r‚   r   Úcodegen_size_assertsrŸ   s     €r:   rž   zQConvPointWisePT2E.codegena  óS   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Ô Ü�d—k‘k¤6Ô*Ø×%Ñ% gÕ.ð +r<   Úqxr   ro   rp   Úqwrq   r   r!   r    r"   r#   Úoutput_scaleÚoutput_zero_pointc                 ó0  — d}d }t        | ||||	||
|||||||g«      \  }}}}}|€|d   |d   c|d<   |d<   n|d   |d   c|d<   |d<   |||||t        |«      |gz   }|€J ‚|t        j                  t        j                  fv r||_        t        |||¬«      S )NFr*   r
   r   r¦   )ru   r   r’   Úfloat32Úbfloat16ÚdtyperÛ   )re   rç   ro   rp   rè   rq   rr   r   r!   r    r"   r#   ré   rê   Úoutput_dtyper§   r¤   r¨   r$   r%   rn   rt   rs   r{   s                           r:   r©   zQConvPointWisePT2E.createi  s  € ð* ˆ
Øˆô /ØØØØØØØØØØØ�l G¨\Ð:ó
ñ	
ØØØØØð ˆ<Ø1>¸qÑ1AÀ=ÐQRÑCSÐ.ˆM˜!Ñ˜m¨AÒ.à1>¸qÑ1AÀ=ÐQRÑCSÐ.ˆM˜!Ñ˜m¨AÑ.à%ØØØØÜ# GÓ,Øð)
ñ 
ˆð Ð'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ñ:ð #/ˆMÔä!Ø ØØ'ô
ð 	
r<   rª   r«   )r®   r¯   r°   r‘   rž   r±   r.   r0   rÂ   r©   r²   r³   s   @r:   rÛ   rÛ   E  sÀ   ø„ ð
 ð	
ð
 
õ
ô6/ð ðB
àðB
ð ðB
ð "ð	B
ð
 ðB
ð ðB
ð ðB
ð �S‘	ðB
ð �c‘ðB
ð �s‘)ðB
ð ðB
ð ðB
ð òB
ó ôB
r<   rÛ   c                   ó¼   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zdee   fd„Zdee	j                     fd„Zeddddd	dd
ddddddee   dee   dee   deddddfd„«       Zˆ xZS )ÚQConvPointWiseBinaryPT2Er¬   c           
      óþ   •— t        |d   «      | _        t        |«      dk(  | _        d| _        t
        ‰| �  |||dt        j                  j                  j                  j                  d| j                  › d�¬«       y)ag  
        Needs input/weight/output qparams
        if bias is not None
            - inputs = [x, x_scale, x_zp, w,  w_scale, w_zp, accum, b]
            - const_args = [stride, padding, dilation, groups, o_scale, o_zp,
            output_dtype, accum_scale, accum_zp, binary_attr, alpha, unary_attr, unary_scalars, unary_algorithm]
        else
            - inputs = [x, x_scale, x_zp, w,  w_scale, w_zp, accum]
            - const_args [b, stride, padding, dilation, groups, o_scale, o_zp,
             output_dtype, accum_scale, accum_zp, binary_attr, alpha, unary_attr, unary_scalars, unary_algorithm]
        r   é   é   NrŠ   Ú!__qconv2d_pointwise_binary_tensorrŒ   )r   r�   r+   rß   Úidx_for_inplace_sumr�   r‘   r’   r“   rà   Úqconv2d_pointwiseÚbinary_tensorr—   s       €r:   r‘   z!QConvPointWiseBinaryPT2E.__init__°  sy   ø€ ô" +¨6°!©9Ó5ˆÔÜ˜F› qÑ(ˆŒØ#$ˆÔ Ü‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×HÑHà˜d×.Ñ.Ð/Ð/PÐQð 	õ 		
r<   c                 óº   •— |j                  d| j                  › d�«       t        ‰| �  |«       t	        | j
                  t        «      r| j                  |«       y y r›   rä   rŸ   s     €r:   rž   z QConvPointWiseBinaryPT2E.codegenÏ  ræ   r<   c                 ó:   — | j                  | j                  «      gS rD   )Ú
input_namerö   rÌ   s    r:   Úget_mutation_namesz+QConvPointWiseBinaryPT2E.get_mutation_names×  s   € Ø—‘ × 8Ñ 8Ó9Ð:Ð:r<   c                 ó   — t        «       S rD   r   rÌ   s    r:   rÍ   z1QConvPointWiseBinaryPT2E.get_unbacked_symbol_defsÚ  rÎ   r<   rç   r   ro   rp   rè   Úqaccumr   r!   r    r"   r#   ré   rê   c                 ó´  — d}d }t        | ||||
|	||||||||g|«      \  }}}}}|€|d   |d   c|d<   |d<   n|d   |d   c|d<   |d<   |||||||||t        |«      |g
z   }|dk(  sJ d«       ‚t        j                  j	                  |j                  «       «       t        t        |j                  «       ¬«      ||¬«      }|j                  |j                     S )	NFr*   r
   r   ÚsumzCFor now, only post op sum is supported in QConvPointWiseBinaryPT2E.r   r¦   )ru   r   r   rU   Úmark_buffer_mutatedÚget_namerñ   r   ry   rn   rö   )re   rç   ro   rp   rè   rq   rr   rþ   r   r!   r    r"   r#   ré   rê   rï   Úaccum_scaleÚaccum_zero_pointr»   Úalphar½   r¾   r¿   r$   r%   rn   rt   Ú_kernel_layoutrk   r„   s                                 r:   r©   zQConvPointWiseBinaryPT2E.createÝ  sA  € ð4 ˆ
Øˆô /ØØØØØØØØØØØ�l G¨\Ð:Øó
ñ	
ØØØØØð" ˆ<Ø1>¸qÑ1AÀ=ÐQRÑCSÐ.ˆM˜!Ñ˜m¨AÒ.à1>¸qÑ1AÀ=ÐQRÑCSÐ.ˆM˜!Ñ˜m¨AÑ.à%ØØØØØØØØÜ# MÓ2Øð)
ñ 
ˆð ˜eÒ#ð 	
ØQó	
Ð#ô 	
�‰×#Ñ# F§O¡OÓ$5Ô6Ü)Ü V×%6Ñ%6Ó%8Ô9ØØ'ô
ˆð �}‰}˜V×7Ñ7Ñ8Ð8r<   rª   r«   )r®   r¯   r°   r‘   rž   r   rÁ   rü   r	   rW   rÐ   rÍ   r±   r.   r0   r©   r²   r³   s   @r:   rñ   rñ   ¯  så   ø„ ð
 ð	
ð
 
õ
ô>/ð; H¨S¡Mó ;ð¨*°U·\±\Ñ*Bó ð ðO9àðO9ð ðO9ð "ð	O9ð
 ðO9ð ðO9ð ðO9ð �S‘	ðO9ð �c‘ðO9ð �s‘)ðO9ð ðO9ð "ðO9ð 'òO9ó ôO9r<   rñ   c                   ó@   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zed„ «       Zˆ xZS )ÚMKLPackedLinearc                 ó†   •— t         ‰| �  |||d t        j                  j                  j
                  j                  ¬«       y ©N)r�   )r�   r‘   r’   r“   ÚmklÚ_mkl_linearr–   r—   s       €r:   r‘   zMKLPackedLinear.__init__1  s:   ø€ ô 	‰ÑØØØØÜŸ	™	Ÿ™×1Ñ1×9Ñ9ð 	õ 	
r<   c                 óF   •— |j                  d«       t        ‰| �	  |«       y ©Nz+torch/csrc/inductor/aoti_torch/c/shim_cpu.h©r�   r�   rž   rŸ   s     €r:   rž   zMKLPackedLinear.codegen?  s   ø€ Ø×$Ñ$Ð%RÔSÜ‰‰˜Õ r<   c                 óÔ  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	t	        j
                  |	«      }
|||g}|g}|�||gz  }n|j                  dd «       |j                  «       }|€J ‚t        t        ||j                  «       |	|
«      ||¬«      S )Nr   r¦   )Úrequire_stride1Úrealize_inputrx   r.   r   r`   rd   ry   r  r   rc   )re   r   Úpacked_wÚorig_wÚBÚ
batch_sizerz   r{   r|   r1   rm   rn   rt   r€   s                 r:   r©   zMKLPackedLinear.createC  sç   € à×Ñ × 1Ñ 1°!Ó 4Ó5ˆØ×$Ñ$ S×%6Ñ%6°vÓ%>Ó?ˆØ—
‘
“‰ˆˆAØ—‘Ó!‰ˆˆAÜ˜1“g  ‘nˆÜ&×9Ñ9¸+ÓFˆØ�X˜vÐ&ˆØ#˜ˆØˆ=Ø�q�c‰M‰Fà× Ñ   DÔ)à—‘“ˆØÐ!Ð!Ð!ÜÜ˜v q§{¡{£}°kÀ=ÓQØØ'ô
ð 	
r<   rª   r«   ©r®   r¯   r°   r‘   rž   r±   r©   r²   r³   s   @r:   r  r  0  s0   ø„ ð
 ð	
ð
 
õ
ô!ð ñ
ó ô
r<   r  c                   óF   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Zed„ «       Zd„ Zˆ xZS )ÚLinearUnaryc           
      óÊ   •— t        |d   «      | _        t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       y )Nr   rŠ   Ú__linear_pointwiserŒ   )	r   r�   r�   r‘   r’   r“   r”   Ú_linear_pointwiser–   r—   s       €r:   r‘   zLinearUnary.__init__\  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×BÑBØ)¨$×*:Ñ*:Ð);Ð;MÐNð 	õ 	
r<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y r›   rœ   rŸ   s     €r:   rž   zLinearUnary.codegenl  r¡   r<   c                 ó"  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }	}t        |«      |	gz   }
||g}||r|ndg|g}|�2| j                  | j                  |«      «      }|j	                  |«       n|j                  dd «       |j                  «       }|€J ‚t        t        ||j                  «       |
¬«      ||¬«      }t        |«      S )Néÿÿÿÿr   ©r€   rî   rI   r¦   )Úrequire_contiguousr  rx   r.   r,   rd   ry   r  r   rc   r†   )re   r   Úwr  r§   r¤   r¨   rz   Ú_icr|   r1   rn   rt   r€   r„   s                  r:   r©   zLinearUnary.creater  s	  € à×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆà—*‘*“,‰ˆˆCØ—*‘*“,‰ˆˆCÜ˜1“g  ‘nˆØ�Q�ˆØ©'™w¸°t¸YÐGˆØˆ=Ø×&Ñ& s×'8Ñ'8¸Ó';Ó<ˆAØ�M‰M˜!Õà× Ñ   DÔ)à—‘“ˆØÐ!Ð!Ð!äÜØØ—k‘k“mØ ôð
 Ø'ô
ˆô # 6Ó*Ð*r<   c                  ó   — y rD   rE   rÌ   s    r:   Úapply_constraintzLinearUnary.apply_constraint�  ó   € Ør<   rª   r«   )	r®   r¯   r°   r‘   rž   r±   r©   r%  r²   r³   s   @r:   r  r  [  s5   ø„ ð
 ð	
ð
 
õ
ô !ð ñ+ó ð+ö:r<   r  c                   óJ   ‡ — e Zd ZdZ	 d	 dˆ fd„Zˆ fd„Zed„ «       Zd„ Zˆ xZ	S )ÚLinearBinaryz)torch.ops.mkldnn._linear_pointwise.binaryc           
      óÊ   •— t        |d   «      | _        t        ‰| �  |||d t        j
                  j                  j                  j                  d| j                  › d�¬«       y )Nr   rŠ   Ú__linear_pointwise_binaryrŒ   )	r   r�   r�   r‘   r’   r“   r”   r  r¸   r—   s       €r:   r‘   zLinearBinary.__init__—  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×AÑAØ)¨$×*:Ñ*:Ð);Ð;TÐUð 	õ 	
r<   c                 ób   •— |j                  d| j                  › d�«       t        ‰| �  |«       y r›   rœ   rŸ   s     €r:   rž   zLinearBinary.codegen§  r¡   r<   c                 óV  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	|||g}
|g}|�2| j                  | j                  |«      «      }|
j	                  |«       n|j                  d|«       |j                  «       }|€J ‚t        t        ||j                  «       |	¬«      |
|¬«      }t        |«      S )Nr   r   r¦   )r!  r  rx   r.   r,   rd   ry   r(  r   rc   r†   )re   r   Úyr"  r  r§   rz   r#  r|   r1   rn   rt   r€   r„   s                 r:   r©   zLinearBinary.create­  s  € à×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆà—*‘*“,‰ˆˆCØ—*‘*“,‰ˆˆCÜ˜1“g  ‘nˆØ�Q˜�ˆØ˜ˆØˆ=Ø×&Ñ& s×'8Ñ'8¸Ó';Ó<ˆAØ�M‰M˜!Õà× Ñ   AÔ&à—‘“ˆØÐ!Ð!Ð!ÜÜØØ—k‘k“mØ ôð
 Ø'ô
ˆô # 6Ó*Ð*r<   c                  ó   — y rD   rE   rÌ   s    r:   r%  zLinearBinary.apply_constraintË  r&  r<   rª   r«   )
r®   r¯   r°   r8   r‘   rž   r±   r©   r%  r²   r³   s   @r:   r(  r(  ”  s:   ø„ Ø8€Fð ð	
ð
 
õ
ô !ð ñ+ó ð+ö:r<   r(  c                   óh   ‡ — e Zd Z	 	 d	 dˆ fd„Zˆ fd„Zeddddddddddd	dd
ddedefd„«       Zˆ xZ	S )ÚQLinearPointwisePT2Ec           
      óØ   •— t        |d   «      | _        || _        t        ‰| �  |||dt
        j                  j                  j                  j                  d| j                  › d�¬«       y)a¯  
        if bias is not None
            - inputs = [x, w, b, weight_scale, weight_zp]
            - const_args is: [x_scale, x_zp, o_scale, o_zp,
              fp32_output, unary_attr, unary_scalars, unary_algorithm]
        else
            - inputs = [x, w, weight_scale, weight_zp]
            - const_args is: [bias, x_scale, x_zp, o_scale, o_zp,
              fp32_output, unary_attr, unary_scalars, unary_algorithm]
        r   NrŠ   Ú__qlinear_pointwise_tensorrŒ   )
r   r�   rß   r�   r‘   r’   r“   rà   Úqlinear_pointwiserâ   ©r˜   r‚   rn   rt   rß   r™   s        €r:   r‘   zQLinearPointwisePT2E.__init__Ð  sh   ø€ ô" +¨6°!©9Ó5ˆÔØ ˆŒÜ‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×BÑBà˜d×.Ñ.Ð/Ð/IÐJð 	õ 		
r<   c                 óº   •— |j                  d| j                  › d�«       t        ‰| �  |«       t	        | j
                  t        «      r| j                  |«       y y r›   rä   rŸ   s     €r:   rž   zQLinearPointwisePT2E.codegenî  sS   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Ô ä�d—k‘k¤6Ô*Ø×%Ñ% gÕ.ð +r<   rç   r   ro   rp   rè   rq   rr   r   ré   rê   c           
      óØ   — t        | |||||||g«      \  }}}}}|||	|
|t        |«      |gz   }|
€J ‚|
t        j                  t        j                  fv r|
|_        t        ||||d u¬«      S )N©r‚   rn   rt   rß   )r}   r   r’   rì   rí   rî   r0  )re   rç   ro   rp   rè   rq   rr   r   ré   rê   rï   Úpost_op_nameÚpost_op_argsÚpost_op_algorithmrn   rt   rs   r{   s                     r:   r©   zQLinearPointwisePT2E.create÷  s¥   € ô" 8UØØØØØ�l G¨\Ð:ó8
Ñ4ˆ� ¨q°!ð &ØØØØÜ# LÓ1Øð)
ñ 
ˆð Ð'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ñ:ð #/ˆMÔä#Ø ØØ'Ø $Ð&ô	
ð 	
r<   ©rE   Tr«   )
r®   r¯   r°   r‘   rž   r±   rÂ   r0   r©   r²   r³   s   @r:   r0  r0  Ï  s‹   ø„ ð
 Øð
ð 
õ
ô</ð ð,
àð,
ð ð,
ð "ð	,
ð
 ð,
ð ð,
ð "ð,
ð ð,
ð ð,
ð ò,
ó ô,
r<   r0  c                   ó~   ‡ — e Zd Z	 	 d	 dˆ fd„Zˆ fd„Zdee   fd„Zeddddddd	dd
dddddddde	de
fd„«       Zˆ xZS )ÚQLinearPointwiseBinaryPT2Er¬   c           
      óæ   •— t        |d   «      | _        || _        d| _        t        ‰| �  |||dt        j                  j                  j                  j                  d| j                  › d�¬«       y)aâ  
        if bias is not None
            - inputs = [x, w, x_scale, x_zp, weight_scale, weight_zp, x2, bias]
            - const_args is: [o_scale, o_zp,
              fp32_output, binary_attr, alpha, unary_attr, unary_scalars, unary_algorithm]
        else
            - inputs = [x, w, x_scale, x_zp, weight_scale, weight_zp, x2]
            - const_args is: [bias, o_scale, o_zp,
              fp32_output, binary_attr, alpha, unary_attr, unary_scalars, unary_algorithm]
        r   rô   NrŠ   Ú!__qlinear_pointwise_binary_tensorrŒ   )r   r�   rß   rö   r�   r‘   r’   r“   rà   r3  rø   r4  s        €r:   r‘   z#QLinearPointwiseBinaryPT2E.__init__(  sp   ø€ ô" +¨6°!©9Ó5ˆÔØ ˆŒØ#$ˆÔ Ü‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×IÑIØ)¨$×*:Ñ*:Ð);Ð;\Ð]ð 	õ 	
r<   c                 óº   •— |j                  d| j                  › d�«       t        ‰| �  |«       t	        | j
                  t        «      r| j                  |«       y y r›   rä   rŸ   s     €r:   rž   z"QLinearPointwiseBinaryPT2E.codegenE  ræ   r<   c                 ó¦   — | j                   d   }|dk(  r<| j                  | j                     }t        |t        «      sJ ‚|j                  «       gS g S )Néûÿÿÿr   )rt   rn   rö   rQ   r   r  )r˜   Úbinary_post_opÚinputs      r:   rü   z-QLinearPointwiseBinaryPT2E.get_mutation_namesM  sS   € Ø×+Ñ+¨BÑ/ˆØ˜UÒ"Ø—K‘K × 8Ñ 8Ñ9ˆEÜ˜e¤VÔ,Ð,Ð,Ø—N‘NÓ$Ð%Ð%àˆIr<   rç   r   ro   rp   rè   rq   rr   r'   r   ré   rê   c                 óÒ  — t        | |||||||g||dk(  «      \  }}}}}||	|
||||||t        |«      |g
z   }|dk(  rot        j                  j	                  |j                  «       «       t        t        |j                  «       ¬«      |||d u¬«      }|j                  |j                     S |€J ‚|t        j                  t        j                  fv r||_        t        ||||d u¬«      S )Nr   r   r7  )r}   r   r   rU   r  r  r=  r   ry   rn   rö   r’   rì   rí   rî   )re   rç   ro   rp   rè   rq   rr   r'   r   ré   rê   rï   Úother_scaleÚother_zprC  r¼   Úunary_post_opÚunary_post_op_argsÚunary_post_op_algorithmrn   rt   rs   rk   r„   s                           r:   r©   z!QLinearPointwiseBinaryPT2E.createV  s$  € ô8 *ØØØØØ�l G¨\Ð:ØØ˜eÑ#ó
ñ	
ØØØØØð &ØØØØØØØØÜ#Ð$6Ó7Ø#ð)
ñ 
ˆð ˜UÒ"Ü�G‰G×'Ñ'¨¯©Ó(8Ô9Ü/Ü!¨×)9Ñ)9Ó);Ô<ØØ+Ø dÐ*ô	ˆFð —=‘= ×!;Ñ!;Ñ<Ð<àÐ'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ñ:ð #/ˆMÔä)Ø ØØ'Ø $Ð&ô	
ð 	
r<   r;  r«   )r®   r¯   r°   r‘   rž   r   rÁ   rü   r±   rÂ   r0   r©   r²   r³   s   @r:   r=  r=  '  s±   ø„ ð
 Øð
ð 
õ
ô:/ð H¨S¡Mó ð ðH
àðH
ð ðH
ð "ð	H
ð
 ðH
ð ðH
ð "ðH
ð ðH
ð ðH
ð ðH
ð òH
ó ôH
r<   r=  c            !       óˆ   ‡ — e Zd Z	 d	 dˆ fd„Zeddddddddddddd	dd
edee   dededededededef d„«       Zˆ fd„Z	ˆ xZ
S )ÚMkldnnRnnLayerc                 ó†   •— t         ‰| �  |||d t        j                  j                  j
                  j                  ¬«       y r
  )r�   r‘   r’   r“   ÚatenÚmkldnn_rnn_layerr–   r—   s       €r:   r‘   zMkldnnRnnLayer.__init__£  s:   ø€ ô 	‰ÑØØØØÜŸ	™	Ÿ™×7Ñ7×?Ñ?ð 	õ 	
r<   r   r   Úw0Úw1Úw2Úw3ÚhxÚcxÚreverseÚbatch_sizesÚmodeÚhidden_sizeÚ
num_layersÚ
has_biasesÚbidirectionalÚbatch_firstÚtrainc                 óª  — | j                  | j                  |«      «      }|j                  «        | j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «        | j                  | j                  |«      «      }|j                  «        |j                  «       }t	        |«      dk(  sJ d«       ‚|\  }}}|||g}|j                  «       }|j                  «       }|||||||g}||	|
||||||g	}|j                  «       }|€J ‚t        t        |¬«      ||¬«      }d„ }|||dgg} |||«      t        j                  |«      t        j                  |«      dgg}t        t        ||«      «      D ��� cg c]D  \  }\  }} t        t        |j                  «       |j                  «       || «      |t        |fg«      ‘ŒF }!}}} |!|_        |!S c c} }}w )NrN   zExpect lstm input to be 3Dr   )rn   rt   c                 óV   — t        | «      dk(  sJ d«       ‚t        j                  | «      S )NrN   zExpect output_shape to be 3D)r+   r   r`   )Úoutput_shaper]  s     r:   Úget_strides_of_lstm_outputz9MkldnnRnnLayer.create.<locals>.get_strides_of_lstm_outputø  s,   € Ü�|Ó$¨Ò)ÐIÐ+IÓIÐ)Ü!×4Ñ4°\ÓBÐBr<   r
   )r  r  Úfreeze_layoutrx   r+   ry   rL  r   r   r`   Ú	enumerateÚzipr   r   rc   Útuplerƒ   )"re   r   rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r6   Ú
seq_lengthÚ
mini_batchra  Úhy_shapeÚcy_shapern   rt   r€   r„   rb  Úoutput_sizesÚoutput_stridesrR   r1   rm   r…   s"                                     r:   r©   zMkldnnRnnLayer.create±  sn  € ð* ×Ñ × 1Ñ 1°!Ó 4Ó5ˆð 	
�‰Ôà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆØ
×ÑÔà× Ñ  ×!2Ñ!2°2Ó!6Ó7ˆØ
×ÑÔà—Z‘Z“\ˆ
Ü�:‹ !Ò#ÐAÐ%AÓAÐ#ð .8Ñ*ˆ
�J 
Ø" J°Ð<ˆà—;‘;“=ˆØ—;‘;“=ˆà�R˜˜R  R¨Ð,ˆàØØØØØØØØð

ˆð —‘“ˆØÐ!Ð!Ð!ÜÜ VÔ,ØØ'ô
ˆò	Cð % h°¸1¸#Ð>ˆá& |°[ÓAÜ×-Ñ-¨hÓ7Ü×-Ñ-¨hÓ7ØˆCð	
ˆô" 4=Ü�L .Ó1ó4÷
ð 
ñ 0�Ñ/�K ô ÜØ—L‘L“NØ—K‘K“MØØ!ó	ð Ü˜��õ	ð
ˆ	ò 
ð #ˆŒàÐùô#
s   Ç8A	Ic                 óD   •— |j                  d«       t        ‰| �	  |«      S r  r  rŸ   s     €r:   rž   zMkldnnRnnLayer.codegen  s!   ø€ Ø×$Ñ$Ð%RÔSÜ‰w‰˜wÓ'Ð'r<   rª   r«   )r®   r¯   r°   r‘   r±   Úboolr.   r0   r©   rž   r²   r³   s   @r:   rL  rL  ¢  sê   ø„ ð
 ð	
ð
 
õ
ð ðdàðdð ðdð ð	dð
 ðdð ðdð ðdð ðdð ðdð ˜#‘Yðdð ðdð ðdð ðdð ðdð ðdð  ð!dð" ò#dó ðd÷L(ð (r<   rL  c                   óR   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Ze	 	 	 	 	 	 	 	 dd„«       Zˆ xZS )ÚWeightInt4PackMatmulc                 óÈ   •— t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        ‰| �	  |||dt        j                  j
                  j                  j                  d¬«       y)zY
        inputs = [x, w, qGroupSize, qScalesAndZeros]
        constant_args = ()
        rO   r   NÚ-aoti_torch_cpu__weight_int4pack_mm_cpu_tensorrŒ   )r+   r�   r‘   r’   r“   Ú	quantizedÚint4mm_packed_weight_cpur–   r—   s       €r:   r‘   zWeightInt4PackMatmul.__init__  sd   ø€ ô �6‹{˜aÒÐÐÜ�=Ó! QÒ&Ð&Ð&Ü‰ÑØØØØÜŸ™×,Ñ,×EÑE×MÑMØLð 	õ 	
r<   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r  )r�   r�   rž   rQ   r‚   r   rå   rŸ   s     €r:   rž   zWeightInt4PackMatmul.codegen4  s?   ø€ Ø×$Ñ$Ð%RÔSÜ‰‰˜Ô ä�d—k‘k¤6Ô*Ø×%Ñ% gÕ.ð +r<   c                 ó  — ||||g}|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	t        j                  |	«      }
t	        |j                  «       |j                  «       |	|
«      }t        ||¬«      S )N)r‚   rn   )rx   r.   r   r`   r   ry   rc   rp  )re   r   r"  Ú
qGroupSizeÚqScalesAndZerosrn   rz   r{   Únr1   rm   rs   s               r:   r©   zWeightInt4PackMatmul.create;  s†   € ð �Q˜
 OÐ4ˆØ—
‘
“‰ˆˆAØ�z‰z‹|‰ˆˆ1Ü˜1“g  ‘mˆÜ&×9Ñ9¸+ÓFˆÜ#Ø�L‰L‹NØ�K‰K‹MØØó	
ˆô $Ø Øô
ð 	
r<   rª   r«   )r   r   r"  r   rw  r   rx  r   r  r³   s   @r:   rp  rp    sV   ø„ ð
 ð	
ð
 
õ
ô*/ð ð
àð
ð ð
ð  ð	
ð
 %ò
ó ô
r<   rp  )FNNN)NNF)4Úcollections.abcr   Útypingr   r   rW   r’   Útorch._prims_commonr   r   Útorch.utils._ordered_setr	   Úirr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úutilsr   r   r   Úvirtualizedr   r0   rn  r.   ru   r}   r†   rˆ   rµ   rÄ   rÒ   rÛ   rñ   r  r  r(  r0  r=  rL  rp  rE   r<   r:   ú<module>r�     s  ðå $ß  ã ã ß JÝ /÷÷ ÷ ÷ ÷  UÑ TÝ ð Ø+/Ø.2Ø#'ñBIàðBIð ðBIð ð	BIð
 �c‰]ðBIð �S‰MðBIð �s‰mðBIð ðBIð ðBIð ˜S‘M DÑ(ðBIð ˜Ñ$ tÑ+ðBIð �KÑ óBIðT /3Ø#'Øñ<Iàð<Ið ð<Ið ð	<Ið
 ˜Ñ$ tÑ+ð<Ið �KÑ ð<Ið ó<Iò~ô8+Ð(ô 8+ôvB+Ð)ô B+ôJN Ð0ô N ôbC+Ð 1ô C+ôLg
Ð*ô g
ôT~9Ð0ô ~9ôB(
Ð'ô (
ôV6Ð#ô 6ôr8Ð$ô 8ôvU
Ð,ô U
ôpx
Ð!2ô x
ôvx(Ð&ô x(ôx3
Ð,õ 3
r<   