ó
    Eñiý©  ã                   ó€  • S SK Jr  S SKJrJr  S SKrS SKrS SKJrJ	r	  S SK
Jr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJr  SS	KJ r       S4S
SSSSSS\\!   S\\!   S\\!   S\!S\"S\\\!      S\\#S      S\S   4S jjr$   S5S
SSSSSS\\#S      S\S   S\"4S jjr%S r& " S S\5      r' " S S\5      r( " S S\5      r) " S  S!\5      r* " S" S#\5      r+ " S$ S%\5      r, " S& S'\5      r- " S( S)\5      r. " S* S+\5      r/ " S, S-\5      r0 " S. S/\5      r1 " S0 S1\5      r2 " S2 S3\5      r3g)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                 óâ  • S nSS jnS nUR                  5         UR                  5         Ub  UR                  5         [        R                  R                     [	        USS9n[	        USS9n[        UR                  5       5      S-
  nS[        U5      s=:  a  U::  d   e   eS[        U5      s=:  a  U::  d   e   eS[        U5      s=:  a  U::  d   e   e[        UU5      n[        UU5      n[        UU5      nU	c  [        S/U5      n	O'S[        U	5      s=:  a  U::  d   e   e[        U	U5      n	[        U[        [        R                  R                  R                  45      (       d   eU(       a(  U" UU5      nUR                  5       nU" UUUU	UUU5      nO[        UR                  5      n[        UR                  5      n[        U5      [        U5      :w  a1  [        U5      S	:X  a  [        U5      S
:X  d   eUR!                  S5        U" UUUUU5      nS/[        [#        [%        S[        U5      S-   5      5      5      -   n[        U5      /U-   nSSS5        U R'                  UW5      n[)        S W 5       5      (       + nU(       d  [+        U5      S:X  a'  [-        U5      (       a  [.        R0                  " U5      nOH[+        U5      S:X  a.  UR3                  5       S   S:X  a  [.        R0                  " U5      nO[5        U5      n[+        U5      [+        U5      :X  d   e[+        U5      [6        ;   d   eU/nU
bX  U
u  nnnnUR                  5         UR                  5         UR                  5         UR                  5         UUU/-   U/-   UU/-   nOUU/-  nUb/  U R'                  UU5      n[        U[8        5      (       d   eUU/-  n[;        UR=                  5       UR?                  5       [A        U5      [A        U5      5      nXEXg/n U(       a  U RC                  SU	5        Ub  URE                  U5        OU RC                  SU5        UU UUU4$ ! , (       d  f       GN	= f)ae  
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                 ó¶  • [        U 5      [        U5      :X  d   S5       e[        U 5      nUS:”  d   S5       eSnSn	/ n
U
R                  X   5        U
R                  X   U-  5        [        SU5       HK  nX   S-
  X[S-
     -  S-   nX   S-
  XKS-
     -  X+S-
     S-  -
  U-   X;S-
     -   nU
R                  U5        MM     [        [	        [
        U
5      5      $ )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                 ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/mkldnn_ir.pyÚ_conv_input_sizeÚ<_prepare_convolution_fusion_create.<locals>._conv_input_size6   s  € ô �;Ó¤3 {Ó#3Ó3ÐUÐ5UÓUÐ3Ü�+ÓˆØ�Q‹wÐ.Ð.Ó.ˆwàˆ	Ø$%Ð!Øˆ
Ø×Ñ˜+Ñ0Ô1Ø×Ñ˜+Ñ@À6ÑIÔJÜ�q˜#–ˆAØ!‘n qÑ(¨H¸±U©OÑ;¸aÑ?ˆFà‘ !Ñ# v°!©e¡}Ñ4Ø˜q™5‘> AÑ%ñ'àñð ! Q¡Ñ'ñ(ð ð ×Ñ˜lÖ+ñ ô ”Cœ˜ZÓ(Ó)Ð)ó    Nc                 ó6  • US Ln[        U 5      n/ nUR                  U S   5        UR                  US   5        [        SU5       HO  nU(       a  XHS-
     OSn	X‘U   S-
  -  S-   n
X   SX(S-
     -  -   U
-
  UUS-
     -  S-   nUR                  U5        MQ     U$ )Nr   r*   r
   )r+   r,   r-   )r6   r2   r    r!   r"   Úhas_dilationr3   r1   r7   Ú	dilation_r8   Úoutput_size_ds               r:   Ú_conv_output_sizeÚ=_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                 óR  ^• U R                  5       m[        T5      nUS:”  d   S5       eUS:”  aW  / nUR                  TS   U-  5        UR                  TS   U-  5        UR                  U4S j[	        SU5       5       5        U$ U R                  SS5      R                  5       nU$ )Nr*   zExpect weight dim > 2r
   r   c              3   ó.   >#   • U  H
  nTU   v •  M     g 7f©N© )Ú.0r7   Úprepacked_weight_sizes     €r:   Ú	<genexpr>Ú[_prepare_convolution_fusion_create.<locals>._original_deconv_weight_size.<locals>.<genexpr>m   s   øé € ÐOÂ¸AÐ4°QÖ7Âùs   ƒ)Úsizer+   r,   Úextendr-   Ú	transpose)Úprepacked_weightr#   r3   r2   rI   s       @r:   Ú_original_deconv_weight_sizeÚH_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=   T)Úguard_shaper*   r   é   é   r
   c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7frF   )Ú
isinstancer0   )rH   Úis     r:   rJ   Ú5_prepare_convolution_fusion_create.<locals>.<genexpr>°   s   é € ÐGº+°AœZ¨¬3×/Ð/º+ùs   ‚ÚxpurF   )#Úrealizer   ÚgraphÚ	fake_moder   r+   rL   r   rV   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;   rB   rP   Ú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_creater{      s7  € ò.*ô0ò(ð  ‡I�I„KØ
‡N�NÔØÑØ�‰ŒÜ	
�‰×	Ó	ä" 1°$Ñ7ˆÜ'¨¸DÑAˆÜ�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Ð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Ð÷_ 
ð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ð  hÐ7€MÞØ×Ñ˜Q Ô/àÑØ�‰�dÕà×Ñ˜Q Ô%Ø�= -Ð1AÀ5ÐHÐH÷W 
Ö	ús   ÁHQÑ
Q.Ú
binary_sumc           
      ó–  • UR                  5         UR                  5         Ub  UR                  5         UR                  5       Gt pxUR                  5       u  p‰[        U5      U	/-   n
[        [        [	        [        UR                  5       5      5      5      5      nU R                  X5      n[        U5      [        U5      :X  d   e[        U5      [        ;   d   eU/nUbV  Uu  pÞnnUR                  5         UR                  5         UR                  5         UR                  5         XÍU/-   U/-   UU/-   nOXÂ/-  nUb  U(       a  U R                  X[5      nXÅ/-   n[        R                  " U
5      n[        UR                  5       UR                  5       U
U5      n/ nUb  UR                  U5        OUR                  SU5        UUUXµ4$ )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   )rZ   Úget_sizer.   rc   r-   r+   rd   r   r   r   rf   r   Ú
get_deviceri   r,   rj   )rk   r   r   r   r&   r'   r|   ÚmÚ_Úocr1   rq   rt   ru   rv   rw   rx   rs   ry   rz   s                       r:   Ú_prepare_linear_fusion_createrƒ   ä   s©  € ð ‡I�I„KØ
‡N�NÔØÑØ�‰Œà�J‰J‹L�E€Qð �O‰OÓ�E€AÜ�q“'˜R˜D‘.€KÜœH¤U¬3¨q¯z©z«|Ó+<Ó%=Ó>Ó?Ðà× Ñ  Ó5€AÜ˜1Ó¤°Ó!8Ó8Ð8Ð8Ü˜1ÓÔ!9Ó9Ð9Ð9ØˆS€FàÑ Ø7DÑ4ˆ˜w¨Ø�‰ÔØ×ÑÔØ�‰ÔØ×ÑÔØ LÐ1Ñ1°V°HÑ<ÀÈÐ?VÑV‰à�(ÑˆàÑÞØ×,Ñ,¨UÓEˆEØ˜'Ñ!ˆä"×5Ò5°kÓB€MÜØ	�‰‹Ø	�‰‹ØØó	€Mð  "€MàÑØ�‰�dÕà×Ñ˜Q Ô%Ø�= -Ð1AÐHÐHr=   c                 ó„   • [        U R                  5       U / 5      n[        U R                  5       S9U l        U/U l        U$ )N©Údevice)r   Ú
get_layoutr   r   ÚlayoutÚoutputs)ÚpackedÚ	output_irs     r:   Ú_create_output_noderŒ   #  sD   € ÜØ×ÑÓØØ
ó€Iô
 &¨V×->Ñ->Ó-@ÑA€F„MØ�[€F„NØÐr=   c                   ó’   ^ • \ rS rSr S SU 4S jjjrU 4S jr\SSSSSSS\\   S	\\   S
\\   S\S\	\\
      4S j5       rSrU =r$ )ÚConvolutionUnaryi.  c           
      óÄ   >• [        US   5      U l        [        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  g )Nr   Úaoti_torch_Ú_mkldnn__convolution_pointwise©Úop_overloadÚcpp_kernel_name)	r   Údevice_typeÚsuperÚ__init__ÚtorchÚopsÚmkldnnÚ_convolution_pointwiseÚdefault©Úselfrˆ   rt   rz   Ú	__class__s       €r:   r—   ÚConvolutionUnary.__init__/  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×GÑGØ)¨$×*:Ñ*:Ð);Ð;YÐZð 	ò 	
r=   c                 ób   >• UR                  SU R                   S35        [        TU ]  U5        g ©Nz&torch/csrc/inductor/aoti_torch/c/shim_z.h©Úinclude_extra_headerr•   r–   Úcodegen©rž   ÚwrapperrŸ   s     €r:   r¥   ÚConvolutionUnary.codegen?  ó2   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Õ r=   r   r   r   r   Úpadding_Ústride_r@   r#   Úscalarsc           
      óx   • [        XX#XEXg5      u  nnnnnUU[        U	5      U
/-   n[        UUUS9n[        U5      $ )N©rˆ   rt   rz   )r{   r   rŽ   rŒ   )rk   r   r   r   rª   r«   r@   r#   Úattrr¬   Ú	algorithmrt   rz   ry   r�   rŠ   s                   r:   ÚcreateÚConvolutionUnary.createE  sj   € ô( /Ø�F (°Yó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 "Ø ØØ'ñ
ˆô
 # 6Ó*Ð*r=   ©r•   ©rG   ©ÚreturnN©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r—   r¥   Úclassmethodr.   r0   r   r   r±   Ú__static_attributes__Ú__classcell__©rŸ   s   @r:   rŽ   rŽ   .  s˜   ø† ð
 ð	
ð
 
÷
ð 
õ !ð ð +àð +ð ð +ð ð	 +ð
 �s‘)ð +ð �c‘ð +ð ˜‘9ð +ð ð +ð ˜$˜s™)Ñ$ó +ó ö +r=   rŽ   c                   óº   ^ • \ rS rSr  S SU 4S jjjrU 4S jr\SSSSSSSSS	\\   S
\\   S\\   S\S\	S\
\   S\
\	   S\
\\      S\
\	   4S j5       rSrU =r$ )ÚConvolutionBinaryii  c           
      óÐ   >• [        US   5      U l        [        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  X@l	        g )Nr   r�   Ú%_mkldnn__convolution_pointwise_binaryr’   )
r   r•   r–   r—   r˜   r™   rš   r›   ÚbinaryÚcpp_constant_args)rž   rˆ   rt   rz   rÅ   rŸ   s        €r:   r—   ÚConvolutionBinary.__init__j  si   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×FÑFØ)¨$×*:Ñ*:Ð);Ð;`Ðað 	ñ 	
ð "3Õr=   c                 ób   >• UR                  SU R                   S35        [        TU ]  U5        g r¢   r£   r¦   s     €r:   r¥   ÚConvolutionBinary.codegen|  r©   r=   r   r   r'   r   r   rª   r«   r@   r#   Úbinary_attrÚbinary_alphaÚ
unary_attrÚunary_scalarsÚunary_algorithmc           
      óÄ   • [        XX4XVXx5      u  nnnnnU R                  UU5      nUR                  SU5        UU	U
U[        U5      U/-   n[	        UUUS9n[        U5      $ )Nr
   r®   )r{   rd   rj   r   rÁ   rŒ   )rk   r   r'   r   r   rª   r«   r@   r#   rÉ   rÊ   rË   rÌ   rÍ   rt   rz   ry   rq   r�   rŠ   s                       r:   r±   ÚConvolutionBinary.create‚  s‘   € ô. /Ø�F (°Yó
ñ	
ØØØØØð
 ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô #Ø ØØ'ñ
ˆô
 # 6Ó*Ð*r=   )rÅ   r•   )rG   rG   rµ   )r¸   r¹   rº   r»   r—   r¥   r¼   r.   r0   Ústrr   Úfloatr   r±   r½   r¾   r¿   s   @r:   rÁ   rÁ   i  sÙ   ø† ð
 Øð3ð 
÷3ð 3õ$!ð ð(+àð(+ð ð(+ð ð	(+ð
 ð(+ð �s‘)ð(+ð �c‘ð(+ð ˜‘9ð(+ð ð(+ð ð(+ð ˜u‘oð(+ð ˜S‘Mð(+ð    S¡	Ñ*ð(+ð " #™ó(+ó ö(+r=   rÁ   c                   óà   ^ • \ rS rSr S SU 4S jjjrU 4S jrS\\R                     4S jr	\
SSSSS	SS
SS\\   S\\   S\\   S\S\S\\   S\\   S\\\      S\\   4S j5       rSrU =r$ )ÚConvolutionBinaryInplacei®  r¶   c           
      óŽ  >• [        US   5      U l        US   US   /USS  -   n[        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  [        [        US   R                  5       S9US   U 5      [        [        US   R                  5       S9US   U 5      /U l        g )Nr   r
   r*   r�   Ú&_mkldnn__convolution_pointwise_binary_r’   r…   )r   r•   r–   r—   r˜   r™   rš   Ú_convolution_pointwise_rÄ   r   r   r   Úmutation_outputs)rž   ry   rt   rz   Úreordered_inputsrŸ   s        €r:   r—   Ú!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   >• UR                  SU R                   S35        [        TU ]  U5        g r¢   r£   r¦   s     €r:   r¥   Ú ConvolutionBinaryInplace.codegenÇ  r©   r=   c                 ó   • [        5       $ rF   r   ©rž   s    r:   Úget_unbacked_symbol_defsÚ1ConvolutionBinaryInplace.get_unbacked_symbol_defsÍ  ó
   € Ü‹|Ðr=   r   r   r'   r   r   rª   r«   r@   r#   rÉ   rÊ   rË   rÌ   rÍ   c           
      óü   • [        XX4XVXx5      u  nnnnnU R                  UU5      nUR                  SU5        UU	U
U[        U5      U/-   n[	        [        US   R                  5       S9UUS9nUR                  S   $ )Nr
   r…   )ry   rt   rz   r   )r{   rd   rj   r   rÓ   r   r   rt   )rk   r   r'   r   r   rª   r«   r@   r#   rÉ   rÊ   rË   rÌ   rÍ   rt   rz   r�   rq   rŠ   s                      r:   r±   ÚConvolutionBinaryInplace.createÐ  s§   € ô. /Ø�F (°Yó
ñ	
ØØØØØð
 ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô *Ü$¨F°1©I×,@Ñ,@Ó,BÑCØØ'ñ
ˆð �}‰}˜QÑÐr=   )r•   r×   r´   rµ   )r¸   r¹   rº   r»   r—   r¥   r	   r]   ÚSymbolrÞ   r¼   r.   r0   rÐ   r   rÑ   r   r±   r½   r¾   r¿   s   @r:   rÓ   rÓ   ®  së   ø† ð
 ð	
ð
 
÷
ð 
õ0!ð¨*°U·\±\Ñ*Bô ð ð+ àð+ ð ð+ ð ð	+ ð
 ð+ ð �s‘)ð+ ð �c‘ð+ ð ˜‘9ð+ ð ð+ ð ð+ ð ˜u‘oð+ ð ˜S‘Mð+ ð    S¡	Ñ*ð+ ð " #™ó+ ó ö+ r=   rÓ   c                   óœ   ^ • \ rS rSr S SU 4S jjjrU 4S jr\SSSSSSS\\   S	\\   S
\\   S\\   S\S\	\\
      4S j5       rSrU =r$ )ÚConvolutionTransposeUnaryiÿ  c           
      óÄ   >• [        US   5      U l        [        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  g )Nr   r�   Ú(_mkldnn__convolution_transpose_pointwiser’   )	r   r•   r–   r—   r˜   r™   rš   Ú _convolution_transpose_pointwiserœ   r�   s       €r:   r—   Ú"ConvolutionTransposeUnary.__init__   sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×IÑI×QÑQØ)¨$×*:Ñ*:Ð);Ð;cÐdð 	ò 	
r=   c                 ób   >• UR                  SU R                   S35        [        TU ]  U5        g r¢   r£   r¦   s     €r:   r¥   Ú!ConvolutionTransposeUnary.codegen  r©   r=   r   r   r   r   rª   Úoutput_padding_r«   r@   Úgroups_r¬   c                 óˆ   • Sn[        U UUUUUUUUU5
      u  nnnnnUU	[        U
5      U/-   n[        UUUS9n[        U5      $ )NTr®   )r{   r   rå   rŒ   )rk   r   r   r   rª   rì   r«   r@   rí   r¯   r¬   r°   r$   rt   rz   ry   r�   rŠ   s                     r:   r±   Ú ConvolutionTransposeUnary.create  s†   € ð ˆ
ô /ØØØØØØØØØØó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 +Ø ØØ'ñ
ˆô
 # 6Ó*Ð*r=   r³   r´   rµ   r·   r¿   s   @r:   rå   rå   ÿ  s¦   ø† ð
 ð	
ð
 
÷
ð 
õ !ð ð++àð++ð ð++ð ð	++ð
 �s‘)ð++ð ˜c™ð++ð �c‘ð++ð ˜‘9ð++ð ð++ð ˜$˜s™)Ñ$ó++ó ö++r=   rå   c                   ó–   ^ • \ rS rSr S SU 4S jjjrU 4S jr\SSSSSSSSS	SS
SS\\   S\\   S\\   S\S\	S\4S j5       r
SrU =r$ )ÚQConvPointWisePT2EiE  c           
      óê   >• [        US   5      U l        [        U5      S:H  U l        [        TU ]  UUUS[        R                  R                  R                  R                  SU R                   S3S9  g)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—   ÚQConvPointWisePT2E.__init__F  sq   ø€ ô  +¨6°!©9Ó5ˆÔÜ˜F› qÑ(ˆŒÜ‰ÑØØØØÜŸ	™	×(Ñ(×8Ñ8×?Ñ?Ø)¨$×*:Ñ*:Ð);Ð;SÐTð 	ò 	
r=   c                 óÄ   >• UR                  SU R                   S35        [        TU ]  U5        [	        U R
                  [        5      (       a  U R                  U5        g g r¢   ©r¤   r•   r–   r¥   rV   rˆ   r   Úcodegen_size_assertsr¦   s     €r:   r¥   ÚQConvPointWisePT2E.codegena  óV   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Ô Ü�d—k‘k¤6×*Ñ*Ø×%Ñ% gÕ.ð +r=   Úqxr   ru   rv   Úqwrw   r   r!   r    r"   r#   Úoutput_scaleÚoutput_zero_pointc                 ó.  • SnS n[        U UUUU	UU
UUUX#XV/5      u  nnnnnUc  US   US   sUS'   US'   OUS   US   sUS'   US'   UUUUU[        U5      U/-   nUc   eU[        R                  [        R                  4;   a  UUl        [        UUUS9$ )NFr*   r
   r   r®   )r{   r   r˜   Úfloat32Úbfloat16Údtyperñ   )rk   rÿ   ru   rv   r   rw   rx   r   r!   r    r"   r#   r  r  Úoutput_dtyper¯   r¬   r°   r$   r%   rt   rz   ry   r�   s                           r:   r±   ÚQConvPointWisePT2E.createi  s  € ð* ˆ
Øˆô /ØØØØØØØØØØØ 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—   r¥   r¼   r.   r0   rÑ   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                   óÒ   ^ • \ rS rSr S SU 4S jjjrU 4S jrS\\   4S jrS\	\
R                     4S jr\SSS	SS
SSSSSSSS\\   S\\   S\\   S\SSSS4S j5       rSrU =r$ )ÚQConvPointWiseBinaryPT2Ei¯  r¶   c           
      óø   >• [        US   5      U l        [        U5      S:H  U l        SU l        [
        TU ]  UUUS[        R                  R                  R                  R                  SU R                   S3S9  g)a  
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—   Ú!QConvPointWiseBinaryPT2E.__init__°  sy   ø€ ô" +¨6°!©9Ó5ˆÔÜ˜F› qÑ(ˆŒØ#$ˆÔ Ü‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×HÑHà˜d×.Ñ.Ð/Ð/PÐQð 	ò 		
r=   c                 óÄ   >• UR                  SU R                   S35        [        TU ]  U5        [	        U R
                  [        5      (       a  U R                  U5        g g r¢   rû   r¦   s     €r:   r¥   Ú QConvPointWiseBinaryPT2E.codegenÏ  rþ   r=   c                 ó:   • U R                  U R                  5      /$ rF   )Ú
input_namer  rÝ   s    r:   Úget_mutation_namesÚ+QConvPointWiseBinaryPT2E.get_mutation_names×  s   € Ø—‘ × 8Ñ 8Ó9Ð:Ð:r=   c                 ó   • [        5       $ rF   r   rÝ   s    r:   rÞ   Ú1QConvPointWiseBinaryPT2E.get_unbacked_symbol_defsÚ  rà   r=   rÿ   r   ru   rv   r   Úqaccumr   r!   r    r"   r#   r  r  c                 ó¨  • SnS n[        U UUUU
U	UUUUX#XV/U5      u  nnnnnUc  US   US   sUS'   US'   OUS   US   sUS'   US'   UUUUUUUUU[        U5      U/
-   nUS:X  d   S5       e[        R                  R	                  UR                  5       5        [        [        UR                  5       S9UUS9nUR                  UR                     $ )	NFr*   r
   r   ÚsumzCFor now, only post op sum is supported in QConvPointWiseBinaryPT2E.r…   r®   )r{   r   r   r[   Úmark_buffer_mutatedÚget_namer  r   r   rt   r  )rk   rÿ   ru   rv   r   rw   rx   r  r   r!   r    r"   r#   r  r  r  Úaccum_scaleÚaccum_zero_pointrÉ   ÚalpharË   rÌ   rÍ   r$   r%   rt   rz   Ú_kernel_layoutrq   rŠ   s                                 r:   r±   ÚQConvPointWiseBinaryPT2E.createÝ  s=  € ð4 ˆ
Øˆô /ØØØØØØØØØØØ 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¥   r   rÐ   r  r	   r]   rã   rÞ   r¼   r.   r0   r±   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                   óP   ^ • \ rS rSr S SU 4S jjjrU 4S jr\S 5       rSrU =r	$ )ÚMKLPackedLineari0  rG   c                 ó€   >• [         TU ]  UUUS [        R                  R                  R
                  R                  S9  g ©N)r“   )r–   r—   r˜   r™   ÚmklÚ_mkl_linearrœ   r�   s       €r:   r—   ÚMKLPackedLinear.__init__1  s:   ø€ ô 	‰ÑØØØØÜŸ	™	Ÿ™×1Ñ1×9Ñ9ð 	ò 	
r=   c                 óF   >• UR                  S5        [        TU ]	  U5        g ©Nz+torch/csrc/inductor/aoti_torch/c/shim_cpu.h©r¤   r–   r¥   r¦   s     €r:   r¥   ÚMKLPackedLinear.codegen?  s   ø€ Ø×$Ñ$Ð%RÔSÜ‰‰˜Õ r=   c                 óÈ  • U R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  5       Gt pgUR                  5       u  p‡[        U5      U/-   n	[        R
                  " U	5      n
XU/nU/nUb  X´/-  nOUR                  SS 5        UR                  5       nUc   e[        [        XÑR                  5       Xš5      UUS9$ )Nr   r®   )Úrequire_stride1Úrealize_inputr~   r.   r   rf   rj   r   r(  r   ri   )rk   r   Úpacked_wÚorig_wÚBÚ
batch_sizer€   r�   r‚   r1   rs   rt   rz   r†   s                 r:   r±   ÚMKLPackedLinear.createC  sÛ   € à×Ñ × 1Ñ 1°!Ó 4Ó5ˆØ×$Ñ$ S×%6Ñ%6°vÓ%>Ó?ˆØ—
‘
“‰ˆØ—‘Ó!‰ˆÜ˜1“g  ‘nˆÜ&×9Ò9¸+ÓFˆØ˜vÐ&ˆØ#˜ˆØ‰=Ø�c‰M‰Fà× Ñ   DÔ)à—‘“ˆØÑ!Ð!Ð!ÜÜ˜v§{¡{£}°kÓQØØ'ñ
ð 	
r=   r´   rµ   ©
r¸   r¹   rº   r»   r—   r¥   r¼   r±   r½   r¾   r¿   s   @r:   r(  r(  0  s5   ø† ð
 ð	
ð
 
÷
ð 
õ!ð ñ
ó ö
r=   r(  c                   óV   ^ • \ rS rSr S SU 4S jjjrU 4S jr\S 5       rS rSr	U =r
$ )	ÚLinearUnaryi[  c           
      óÄ   >• [        US   5      U l        [        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  g )Nr   r�   Ú__linear_pointwiser’   )	r   r•   r–   r—   r˜   r™   rš   Ú_linear_pointwiserœ   r�   s       €r:   r—   ÚLinearUnary.__init__\  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×BÑBØ)¨$×*:Ñ*:Ð);Ð;MÐNð 	ò 	
r=   c                 ób   >• UR                  SU R                   S35        [        TU ]  U5        g r¢   r£   r¦   s     €r:   r¥   ÚLinearUnary.codegenl  r©   r=   c                 ó  • U R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  5       Gt pxUR                  5       u  p˜[        U5      U	/-   n
X/nXE(       a  UOS/U/nUb2  U R                  U R                  U5      5      nUR	                  U5        OUR                  SS 5        UR                  5       nUc   e[        [        UUR                  5       U
S9UUS9n[        U5      $ )Néÿÿÿÿr   ©r†   r  rL   r®   )Úrequire_contiguousr4  r~   r.   r,   rj   r   r<  r   ri   rŒ   )rk   r   Úwr7  r¯   r¬   r°   r€   Ú_icr‚   r1   rt   rz   r†   rŠ   s                  r:   r±   ÚLinearUnary.creater  s  € à×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆà—*‘*“,‰ˆØ—*‘*“,‰ˆÜ˜1“g  ‘nˆØ�ˆØ­'™w¸°t¸YÐGˆØ‰=Ø×&Ñ& s×'8Ñ'8¸Ó';Ó<ˆAØ�M‰M˜!Õà× Ñ   DÔ)à—‘“ˆØÑ!Ð!Ð!äÜØØ—k‘k“mØ ñð
 Ø'ñ
ˆô # 6Ó*Ð*r=   c                 ó   • g rF   rG   rÝ   s    r:   Úapply_constraintÚLinearUnary.apply_constraint�  ó   € Ør=   r³   r´   rµ   )r¸   r¹   rº   r»   r—   r¥   r¼   r±   rK  r½   r¾   r¿   s   @r:   r<  r<  [  s?   ø† ð
 ð	
ð
 
÷
ð 
õ !ð ñ+ó ð+÷:ð r=   r<  c                   óZ   ^ • \ rS rSrSr S S	U 4S jjjrU 4S jr\S 5       rS r	Sr
U =r$ )
ÚLinearBinaryi”  z)torch.ops.mkldnn._linear_pointwise.binaryc           
      óÄ   >• [        US   5      U l        [        TU ]  UUUS [        R
                  R                  R                  R                  SU R                   S3S9  g )Nr   r�   Ú__linear_pointwise_binaryr’   )	r   r•   r–   r—   r˜   r™   rš   r?  rÄ   r�   s       €r:   r—   ÚLinearBinary.__init__—  sa   ø€ ô +¨6°!©9Ó5ˆÔÜ‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×AÑAØ)¨$×*:Ñ*:Ð);Ð;TÐUð 	ò 	
r=   c                 ób   >• UR                  SU R                   S35        [        TU ]  U5        g r¢   r£   r¦   s     €r:   r¥   ÚLinearBinary.codegen§  r©   r=   c                 óH  • U R                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  5       Gt pgUR                  5       u  p‡[        U5      U/-   n	XU/n
U/nUb2  U R                  U R                  U5      5      nU
R	                  U5        OUR                  SU5        UR                  5       nUc   e[        [        UUR                  5       U	S9U
US9n[        U5      $ )Nr   rE  r®   )rF  r4  r~   r.   r,   rj   r   rO  r   ri   rŒ   )rk   r   ÚyrG  r7  r¯   r€   rH  r‚   r1   rt   rz   r†   rŠ   s                 r:   r±   ÚLinearBinary.create­  s  € à×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆØ×"Ñ" 3×#4Ñ#4°QÓ#7Ó8ˆà—*‘*“,‰ˆØ—*‘*“,‰ˆÜ˜1“g  ‘nˆØ˜�ˆØ˜ˆØ‰=Ø×&Ñ& s×'8Ñ'8¸Ó';Ó<ˆAØ�M‰M˜!Õà× Ñ   AÔ&à—‘“ˆØÑ!Ð!Ð!ÜÜØØ—k‘k“mØ ñð
 Ø'ñ
ˆô # 6Ó*Ð*r=   c                 ó   • g rF   rG   rÝ   s    r:   rK  ÚLinearBinary.apply_constraintË  rM  r=   r³   r´   rµ   )r¸   r¹   rº   r»   r8   r—   r¥   r¼   r±   rK  r½   r¾   r¿   s   @r:   rO  rO  ”  sD   ø† Ø8€Fð ð	
ð
 
÷
ð 
õ !ð ñ+ó ð+÷:ð r=   rO  c                   óz   ^ • \ rS rSr  S SU 4S jjjrU 4S jr\SSSSSSSSS	SS
SSSS\S\4S j5       r	Sr
U =r$ )ÚQLinearPointwisePT2EiÏ  c           
      óÐ   >• [        US   5      U l        X@l        [        TU ]  UUUS[
        R                  R                  R                  R                  SU R                   S3S9  g)ag  
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ˆ   rt   rz   rõ   rŸ   s        €r:   r—   ÚQLinearPointwisePT2E.__init__Ð  sf   ø€ ô" +¨6°!©9Ó5ˆÔØ ŒÜ‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×BÑBà˜d×.Ñ.Ð/Ð/IÐJð 	ò 		
r=   c                 óÄ   >• UR                  SU R                   S35        [        TU ]  U5        [	        U R
                  [        5      (       a  U R                  U5        g g r¢   rû   r¦   s     €r:   r¥   ÚQLinearPointwisePT2E.codegenî  sV   ø€ Ø×$Ñ$Ø4°T×5EÑ5EÐ4FÀbÐIô	
ô 	‰‰˜Ô ä�d—k‘k¤6×*Ñ*Ø×%Ñ% gÕ.ð +r=   rÿ   r   ru   rv   r   rw   rx   r   r  r  c           
      óÒ   • [        U UUUX#XV/5      u  pïn  nUUU	U
U[        U5      U/-   nU
c   eU
[        R                  [        R                  4;   a  U
Ul        [        UUUUS LS9$ )N©rˆ   rt   rz   rõ   )rƒ   r   r˜   r  r  r  r[  )rk   rÿ   ru   rv   r   rw   rx   r   r  r  r  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmrt   rz   ry   r�   s                     r:   r±   ÚQLinearPointwisePT2E.create÷  sŸ   € ô" 8UØØØØØ GÐ:ó8
Ñ4ˆ ¨q°!ð &ØØØØÜ# LÓ1Øð)
ñ 
ˆð Ñ'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ó:ð #/ˆMÔä#Ø ØØ'Ø $Ð&ñ	
ð 	
r=   r	  ©rG   Trµ   )r¸   r¹   rº   r»   r—   r¥   r¼   rÑ   r0   r±   r½   r¾   r¿   s   @r:   r[  r[  Ï  s�   ø† ð
 Øð
ð 
÷
ð 
õ</ð ð,
àð,
ð ð,
ð "ð	,
ð
 ð,
ð ð,
ð "ð,
ð ð,
ð ð,
ð ó,
ó ö,
r=   r[  c                   ó’   ^ • \ rS rSr  S SU 4S jjjrU 4S jrS\\   4S jr\	SSSSS	SS
SSSSSSSSSS\
S\4S j5       rSrU =r$ )ÚQLinearPointwiseBinaryPT2Ei'  r¶   c           
      óÞ   >• [        US   5      U l        X@l        SU l        [        TU ]  UUUS[        R                  R                  R                  R                  SU R                   S3S9  g)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ö   r^  r  r_  s        €r:   r—   Ú#QLinearPointwiseBinaryPT2E.__init__(  sn   ø€ ô" +¨6°!©9Ó5ˆÔØ ŒØ#$ˆÔ Ü‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×IÑIØ)¨$×*:Ñ*:Ð);Ð;\Ð]ð 	ò 	
r=   c                 óÄ   >• UR                  SU R                   S35        [        TU ]  U5        [	        U R
                  [        5      (       a  U R                  U5        g g r¢   rû   r¦   s     €r:   r¥   Ú"QLinearPointwiseBinaryPT2E.codegenE  rþ   r=   c                 ó²   • U R                   S   nUS:X  aA  U R                  U R                     n[        U[        5      (       d   eUR                  5       /$ / $ )Néûÿÿÿr  )rz   rt   r  rV   r   r   )rž   Úbinary_post_opÚinputs      r:   r  Ú-QLinearPointwiseBinaryPT2E.get_mutation_namesM  sV   € Ø×+Ñ+¨BÑ/ˆØ˜UÓ"Ø—K‘K × 8Ñ 8Ñ9ˆEÜ˜e¤V×,Ñ,Ð,Ð,Ø—N‘NÓ$Ð%Ð%àˆIr=   rÿ   r   ru   rv   r   rw   rx   r'   r   r  r  c                 óÄ  • [        U UUUX#XV/UUS:H  5      u  nnnnnUU	U
UUUUUU[        U5      U/
-   nUS:X  ai  [        R                  R	                  UR                  5       5        [        [        UR                  5       S9UUUS LS9nUR                  UR                     $ Uc   eU[        R                  [        R                  4;   a  UUl        [        UUUUS LS9$ )Nr  r…   rd  )rƒ   r   r   r[   r  r   rk  r   r   rt   r  r˜   r  r  r  )rk   rÿ   ru   rv   r   rw   rx   r'   r   r  r  r  Úother_scaleÚother_zprs  rÊ   Úunary_post_opÚunary_post_op_argsÚunary_post_op_algorithmrt   rz   ry   rq   rŠ   s                           r:   r±   Ú!QLinearPointwiseBinaryPT2E.createV  s   € ô8 *ØØØØØ GÐ:ØØ˜eÑ#ó
ñ	
ØØØØØð &ØØØØØØØØÜ#Ð$6Ó7Ø#ð)
ñ 
ˆð ˜UÓ"Ü�G‰G×'Ñ'¨¯©Ó(8Ô9Ü/Ü!¨×)9Ñ)9Ó);Ñ<ØØ+Ø dÐ*ñ	ˆFð —=‘= ×!;Ñ!;Ñ<Ð<àÑ'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ó:ð #/ˆMÔä)Ø ØØ'Ø $Ð&ñ	
ð 	
r=   r&  ri  rµ   )r¸   r¹   rº   r»   r—   r¥   r   rÐ   r  r¼   rÑ   r0   r±   r½   r¾   r¿   s   @r:   rk  rk  '  s¶   ø† ð
 Øð
ð 
÷
ð 
õ:/ð H¨S¡Mô ð ðH
àðH
ð ðH
ð "ð	H
ð
 ðH
ð ðH
ð "ðH
ð ðH
ð ðH
ð ðH
ð óH
ó öH
r=   rk  c            !       óš   ^ • \ rS rSr S SU 4S jjjr\SSSSSSSSS	SS
SSSS\S\\   S\S\S\S\S\S\S\4 S j5       r	U 4S jr
SrU =r$ )ÚMkldnnRnnLayeri¢  rG   c                 ó€   >• [         TU ]  UUUS [        R                  R                  R
                  R                  S9  g r*  )r–   r—   r˜   r™   ÚatenÚmkldnn_rnn_layerrœ   r�   s       €r:   r—   Ú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                 ó¦  • U R                  U R                  U5      5      nUR                  5         U R                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  5         U R                  U R                  U5      5      nUR                  5         UR                  5       n[	        U5      S:X  d   S5       eUu  nnnUUU/nUR                  5       nUR                  5       nXX4XVU/nUU	U
UUUUUU/	nUR                  5       nUc   e[        [        US9UUS9nS nUUUS//nU" UU5      [        R                  " U5      [        R                  " U5      S//n[        [        UU5      5       VVV s/ s HE  u  nu  nn [        [        UR                  5       UR                  5       UU 5      U[        U4/5      PMG     n!nnn U!Ul        U!$ s  sn nnf )NrS   zExpect lstm input to be 3Dr…   )rt   rz   c                 óZ   • [        U 5      S:X  d   S5       e[        R                  " U 5      $ )NrS   zExpect output_shape to be 3D)r+   r   rf   )Úoutput_shaper�  s     r:   Úget_strides_of_lstm_outputÚ9MkldnnRnnLayer.create.<locals>.get_strides_of_lstm_outputø  s,   € Ü�|Ó$¨Ó)ÐIÐ+IÓIÐ)Ü!×4Ò4°\ÓBÐBr=   r
   )r3  r4  Úfreeze_layoutr~   r+   r   r~  r   r   rf   Ú	enumerateÚzipr   r   ri   Útupler‰   )"rk   r   rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r6   Ú
seq_lengthÚ
mini_batchr”  Úhy_shapeÚcy_shapert   rz   r†   rŠ   r•  Úoutput_sizesÚoutput_stridesrW   r1   rs   r‹   s"                                     r:   r±   ÚMkldnnRnnLayer.create±  si  € ð* ×Ñ × 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°Ð<ˆà—;‘;“=ˆØ—;‘;“=ˆà˜ ¨Ð,ˆàØØØØØØØØð

ˆð —‘“ˆØÑ!Ð!Ð!ÜÜ VÑ,ØØ'ñ
ˆò	Cð % h°¸1¸#Ð>ˆá& |°[ÓAÜ×-Ò-¨hÓ7Ü×-Ò-¨hÓ7ØˆCð	
ˆô" 4=Ü�L .Ó1ô4õ
ò4Ñ/�Ñ/�K ô ÜØ—L‘L“NØ—K‘K“MØØ!ó	ð Ü˜��ö	ñ4ð 	ò 
ð #ˆŒàÐùô#
s   Ç3AIc                 óD   >• UR                  S5        [        TU ]	  U5      $ r/  r0  r¦   s     €r:   r¥   ÚMkldnnRnnLayer.codegen  s!   ø€ Ø×$Ñ$Ð%RÔSÜ‰w‰˜wÓ'Ð'r=   r´   rµ   )r¸   r¹   rº   r»   r—   r¼   Úboolr.   r0   r±   r¥   r½   r¾   r¿   s   @r:   r~  r~  ¢  sï   ø† ð
 ð	
ð
 
÷
ð 
ð ðdàðdð ðdð ð	dð
 ðdð ðdð ðdð ðdð ðdð ˜#‘Yðdð ðdð ðdð ðdð ðdð ðdð  ð!dð" ó#dó ðd÷L(ó (r=   r~  c                   ód   ^ • \ rS rSr S SU 4S jjjrU 4S jr\        SS j5       rSrU =r	$ )	ÚWeightInt4PackMatmuli  rG   c           	      óÆ   >• [        U5      S:X  d   e[        U5      S:X  d   e[        TU ]	  UUUS[        R                  R
                  R                  R                  SS9  g)zA
inputs = [x, w, qGroupSize, qScalesAndZeros]
constant_args = ()
rT   r   NÚ-aoti_torch_cpu__weight_int4pack_mm_cpu_tensorr’   )r+   r–   r—   r˜   r™   Ú	quantizedÚint4mm_packed_weight_cpurœ   r�   s       €r:   r—   ÚWeightInt4PackMatmul.__init__  sd   ø€ ô �6‹{˜aÓÐÐÜ�=Ó! QÓ&Ð&Ð&Ü‰ÑØØØØÜŸ™×,Ñ,×EÑE×MÑMØLð 	ò 	
r=   c                 ó¨   >• UR                  S5        [        TU ]	  U5        [        U R                  [
        5      (       a  U R                  U5        g g r/  )r¤   r–   r¥   rV   rˆ   r   rü   r¦   s     €r:   r¥   ÚWeightInt4PackMatmul.codegen4  sB   ø€ Ø×$Ñ$Ð%RÔSÜ‰‰˜Ô ä�d—k‘k¤6×*Ñ*Ø×%Ñ% gÕ.ð +r=   c                 ó  • XX4/nUR                  5       Gt pgUR                  5       u  p‡[        U5      U/-   n	[        R                  " U	5      n
[	        UR                  5       UR                  5       U	U
5      n[        UUS9$ )N)rˆ   rt   )r~   r.   r   rf   r   r   ri   r¦  )rk   r   rG  Ú
qGroupSizeÚqScalesAndZerosrt   r€   r�   Únr1   rs   ry   s               r:   r±   ÚWeightInt4PackMatmul.create;  s~   € ð ˜
Ð4ˆØ—
‘
“‰ˆØ�z‰z‹|‰ˆÜ˜1“g  ‘mˆÜ&×9Ò9¸+ÓFˆÜ#Ø�L‰L‹NØ�K‰K‹MØØó	
ˆô $Ø Øñ
ð 	
r=   r´   rµ   )r   r   rG  r   r¯  r   r°  r   r:  r¿   s   @r:   r¦  r¦    s[   ø† ð
 ð	
ð
 
÷
ð 
õ*/ð ð
àð
ð ð
ð  ð	
ð
 %ó
ó ö
r=   r¦  )FNNN)NNF)4Úcollections.abcr   Útypingr   r   r]   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   r¤  r.   r{   rƒ   rŒ   rŽ   rÁ   rÓ   rå   rñ   r  r(  r<  rO  r[  rk  r~  r¦  rG   r=   r:   Ú<module>rº     s  ðå $ß  ã ã ß JÝ /÷÷ ÷ ÷ ÷  UÑ TÝ ð Ø.2Ø15Ø#'ñBIàðBIð ðBIð ð	BIð
 �c‰]ðBIð �S‰MðBIð �s‰mðBIð ðBIð ðBIð ˜X c™]Ñ+ðBIð ˜D Ñ-Ñ.ðBIð �KÑ õBIðT 26Ø#'Øñ<Iàð<Ið ð<Ið ð	<Ið
 ˜D Ñ-Ñ.ð<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=   