Ë
    g^(h-�  ã                   ól  — 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 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 ddl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e      dee d      ded   fd„Z!	 	 	 d5d
ddddddee d      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«      Z- G d.„ d/e«      Z. G d0„ d1e«      Z/ G d2„ d3e«      Z0y)6é    )ÚSequence)ÚAnyÚOptionalN)Úmake_channels_last_strides_for©Ú
OrderedSeté   )ÚExternKernelAllocÚFixedLayoutÚFlexibleLayoutÚget_device_typeÚir_node_to_tensorÚ is_contiguous_storage_and_layoutÚLayoutÚmay_convert_to_optionalÚMultiOutputÚMultiOutputLayoutÚMutationOutputÚ
NoneLayoutÚ	TensorBox)Úconvert_shape_to_inductorÚpad_listlike)ÚVÚxr   ÚweightÚbiasÚpaddingÚstrideÚdilationÚgroupsÚ
transposedÚoutput_paddingÚquantize_argsÚotherc                 ó~  — d„ }d„ }|j                  «        |j                  «        |�|j                  «        t        j                  j                  5  t	        |d¬«      }t	        |d¬«      }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                  «       } |||||	|||«      }nR|�t	        |d¬«      n|}t        j                  j                   j#                  ||||||||	|«	      }|j                  «       }dgt%        t'        t)        dt        |«      dz   «      «      «      z   }t        |«      g|z   }ddd«       | j+                  |«      }t-        d	„ D «       «       }|r!t/        |«      rt1        j2                  |«      }nt5        |«      }t7        |«      t7        |«      k(  sJ ‚t7        |«      d
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                 úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/mkldnn_ir.pyÚ_conv_input_sizez<_prepare_convolution_fusion_create.<locals>._conv_input_size5   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Ó(Ó)Ð)ó    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© )Ú.0r4   Úprepacked_weight_sizes     €r7   ú	<genexpr>z[_prepare_convolution_fusion_create.<locals>._original_deconv_weight_size.<locals>.<genexpr>[   s   øè ø€ ÒO¸AÐ4°QÕ7ÑOùs   ƒ)Úsizer(   r)   Úextendr*   Ú	transpose)Úprepacked_weightr    r0   r/   r?   s       @r7   Ú_original_deconv_weight_sizezH_prepare_convolution_fusion_create.<locals>._original_deconv_weight_sizeP   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ØÐr9   NT)Úguard_shaper'   r   r	   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr<   )Ú
isinstancer-   )r>   Úis     r7   r@   z5_prepare_convolution_fusion_create.<locals>.<genexpr>¡   s   è ø€ ÒG°AœZ¨¬3×/ÑGùs   ‚©ÚcpuÚxpu)#Úrealizer   ÚgraphÚ	fake_moder   r(   rA   r   rH   r-   ÚsympyÚcoreÚnumbersÚIntegerÚtorchÚopsÚatenÚconvolutionr+   Úreversedr*   Úrequire_stride_orderÚallr   r   Úcontiguous_stridesr   r   r   r   Úget_device_or_errorÚ	get_dtyper   Úinsertr)   ) Úclsr   r   r   r   r   r   r    r!   r"   r#   r$   r8   rE   Úx_fakeÚweight_fakeÚdimsr/   r3   r.   Ú	bias_fakeÚoutputÚreq_stride_orderÚdynamic_shapesÚoutput_strideÚinputsÚx_scaleÚx_zero_pointÚw_scaleÚw_zero_pointÚkernel_layoutÚconstant_argss                                    r7   Ú"_prepare_convolution_fusion_createro      sß  € ò.*ò6ð  ‡I�I„KØ
‡N�NÔØÐØ�‰ŒÜ	
�‰×	Ñ	ñ 2Fä" 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Ùñ 7°{ÀFÓKˆKØŸ™›ˆJÙ*ØØØØØØØó‰Kð >BÐ=MÔ! $°DÕ9ÐSWð ô —Y‘Y—^‘^×/Ñ/ØØØØØØØØØó
ˆFð !Ÿ+™+›-ˆKà˜3¤¤h¬u°Q¼¸F»Àa¹Ó/HÓ&IÓ!JÑJÐÜÐ 0Ó1Ð2Ð5EÑEÐ÷e2Fðh 	× Ñ  Ð$4Ó5€Aô ÑG¸+ÔGÓGÐG€NÙÔ:¸1Ô=Ü&×9Ñ9¸+ÓF‰ä6°{ÓCˆä˜1Ó¤°Ó!8Ò8Ð8Ð8Ü˜1Ó Ñ/Ð/Ð/Øˆ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÷I2Fñ 2Fús   ÁG
N2Î2N<Ú
binary_sumc           
      ó†  — |j                  «        |j                  «        |�|j                  «        |j                  «       �^ }}|j                  «       \  }}	t        |«      |	gz   }
t        t        t	        t        |j                  «       «      «      «      «      }| j                  ||«      }t        |«      t        |«      k(  sJ ‚t        |«      d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.
    rJ   r   )rM   Úget_sizer+   rX   r*   r(   rY   r   r   r[   r   Ú
get_devicer]   r)   r^   )r_   r   r   r   r#   r$   rp   ÚmÚ_Úocr.   re   rh   ri   rj   rk   rl   rg   rm   rn   s                       r7   Ú_prepare_linear_fusion_createrw   Ë   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Ó Ñ/Ð/Ð/Øˆ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ÐHr9   c                 óŠ   — t        | j                  «       | g «      }t        | j                  «       ¬«      | _        |g| _        |S )N©Údevice)r   Ú
get_layoutr   rs   ÚlayoutÚoutputs)ÚpackedÚ	output_irs     r7   Ú_create_output_noder€   
  sD   € ÜØ×ÑÓØØ
ó€Iô
 &¨V×->Ñ->Ó-@ÔA€F„MØ�[€F„NØÐr9   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e	      fd„«       Z
ˆ xZS )ÚConvolutionUnaryc                 óˆ   •— t         ‰| �  |||d t        j                  j                  j
                  j                  d¬«       y )NÚ,aoti_torch_cpu_mkldnn__convolution_pointwise©Úop_overloadÚcpp_kernel_name)ÚsuperÚ__init__rT   rU   ÚmkldnnÚ_convolution_pointwiseÚdefault©Úselfr|   rh   rn   Ú	__class__s       €r7   r‰   zConvolutionUnary.__init__  s?   ø€ ô 	‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×GÑGØJð 	õ 	
r9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y ©Nz.torch/csrc/inductor/aoti_torch/c/shim_mkldnn.h©Úinclude_extra_headerrˆ   Úcodegen©rŽ   Úwrapperr�   s     €r7   r”   zConvolutionUnary.codegen%  ó   ø€ Ø×$Ñ$Ð%UÔVÜ‰‰˜Õ r9   r   r   r   r   Úpadding_Ústride_Ú	dilation_r    Úscalarsc           
      ó†   — t        | |||||||«      \  }}}}}||t        |	«      |
gz   }t        |||¬«      }t        |«      S )N©r|   rh   rn   )ro   r   r‚   r€   )r_   r   r   r   r˜   r™   rš   r    Úattrr›   Ú	algorithmrh   rn   rm   ru   r~   s                   r7   ÚcreatezConvolutionUnary.create)  sr   € ô( /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 "Ø ØØ'ô
ˆô
 # 6Ó*Ð*r9   ©r=   ©ÚreturnN©Ú__name__Ú
__module__Ú__qualname__r‰   r”   Úclassmethodr+   r-   r   r   r    Ú__classcell__©r�   s   @r7   r‚   r‚     s“   ø„ ð
 ð	
ð
 
õ
ô!ð ð +àð +ð ð +ð ð	 +ð
 �s‘)ð +ð �c‘ð +ð ˜‘9ð +ð ð +ð ˜$˜s™)Ñ$ò +ó ô +r9   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	e
   de	e   de	ee      de	e   fd„«       Zˆ xZS )ÚConvolutionBinaryc                 ó–   •— t         ‰| �  |||d t        j                  j                  j
                  j                  d¬«       || _        y )NÚ3aoti_torch_cpu_mkldnn__convolution_pointwise_binaryr…   )rˆ   r‰   rT   rU   rŠ   r‹   ÚbinaryÚcpp_constant_args)rŽ   r|   rh   rn   r°   r�   s        €r7   r‰   zConvolutionBinary.__init__N  sI   ø€ ô 	‰ÑØØØØÜŸ	™	×(Ñ(×?Ñ?×FÑFØQð 	ô 	
ð "3ˆÕr9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   zConvolutionBinary.codegen_  r—   r9   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�   )ro   rY   r^   r   r¬   r€   )r_   r   r$   r   r   r˜   r™   rš   r    r²   r³   r´   rµ   r¶   rh   rn   rm   re   ru   r~   s                       r7   r    zConvolutionBinary.createc  s™   € ô. /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô #Ø ØØ'ô
ˆô
 # 6Ó*Ð*r9   )r=   r=   r¢   )r¥   r¦   r§   r‰   r”   r¨   r+   r-   Ústrr   Úfloatr   r    r©   rª   s   @r7   r¬   r¬   M  sÔ   ø„ ð
 Øð3ð 
õ3ô"!ð ð'+àð'+ð ð'+ð ð	'+ð
 ð'+ð �s‘)ð'+ð �c‘ð'+ð ˜‘9ð'+ð ð'+ð ð'+ð ˜u‘oð'+ð ˜S‘Mð'+ð    S¡	Ñ*ð'+ð " #™ò'+ó ô'+r9   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e   dee   dee
e      dee   fd„«       Zˆ xZS )ÚConvolutionBinaryInplacer£   c                 ó^  •— |d   |d   g|dd  z   }t         ‰| �  |||d t        j                  j                  j
                  j                  d¬«       t        t        |d   j                  «       ¬«      |d   | «      t        t        |d   j                  «       ¬«      |d   | «      g| _
        y )Nr	   r   r'   Ú4aoti_torch_cpu_mkldnn__convolution_pointwise_binary_r…   ry   )rˆ   r‰   rT   rU   rŠ   Ú_convolution_pointwise_r¯   r   r   rs   Úmutation_outputs)rŽ   rm   rh   rn   Úreordered_inputsr�   s        €r7   r‰   z!ConvolutionBinaryInplace.__init__�  s¯   ø€ ð # 1™I v¨a¡yÐ1°F¸1¸2°JÑ>Ðä‰ÑØØØØÜŸ	™	×(Ñ(×@Ñ@×GÑGØRð 	ô 	
ô œ:¨V°A©Y×-AÑ-AÓ-CÔDÀfÈQÁiÐQUÓVÜœ:¨V°A©Y×-AÑ-AÓ-CÔDÀfÈQÁiÐQUÓVð!
ˆÕr9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   z ConvolutionBinaryInplace.codegen¦  r—   r9   c                 ó   — t        «       S r<   r   ©rŽ   s    r7   Úget_unbacked_symbol_defsz1ConvolutionBinaryInplace.get_unbacked_symbol_defsª  ó
   € Ü‹|Ðr9   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	   ry   )rm   rh   rn   r   )ro   rY   r^   r   r»   r   rs   rh   )r_   r   r$   r   r   r˜   r™   rš   r    r²   r³   r´   rµ   r¶   rh   rn   ru   re   r~   s                      r7   r    zConvolutionBinaryInplace.create­  s¯   € ô. /Ø��F˜D (¨G°YÀó
ñ	
ØØØØØð ×(Ñ(¨Ð0@ÓAˆØ�‰�a˜ÔØ%ØØØÜ# MÓ2Øð)
ñ 
ˆô *Ü$¨F°1©I×,@Ñ,@Ó,BÔCØØ'ô
ˆð �}‰}˜QÑÐr9   r¡   r¢   )r¥   r¦   r§   r‰   r”   r   rP   ÚSymbolrÄ   r¨   r+   r-   r¸   r   r¹   r   r    r©   rª   s   @r7   r»   r»   Ž  sæ   ø„ ð
 ð	
ð
 
õ
ô.!ð¨*°U·\±\Ñ*Bó ð ð* àð* ð ð* ð ð	* ð
 ð* ð �s‘)ð* ð �c‘ð* ð ˜‘9ð* ð ð* ð ð* ð ˜u‘oð* ð ˜S‘Mð* ð    S¡	Ñ*ð* ð " #™ò* ó ô* r9   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e	      fd„«       Z
ˆ xZS )ÚConvolutionTransposeUnaryc                 óˆ   •— t         ‰| �  |||d t        j                  j                  j
                  j                  d¬«       y )NÚ6aoti_torch_cpu_mkldnn__convolution_transpose_pointwiser…   )rˆ   r‰   rT   rU   rŠ   Ú _convolution_transpose_pointwiserŒ   r�   s       €r7   r‰   z"ConvolutionTransposeUnary.__init__Ü  s?   ø€ ô 	‰ÑØØØØÜŸ	™	×(Ñ(×IÑI×QÑQØTð 	õ 	
r9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   z!ConvolutionTransposeUnary.codegenë  r—   r9   r   r   r   r   r˜   Úoutput_padding_r™   rš   Úgroups_r›   c                 óŽ   — d}t        | |||||||||«
      \  }}}}}||	t        |
«      |gz   }t        |||¬«      }t        |«      S )NTr�   )ro   r   rÉ   r€   )r_   r   r   r   r˜   rÎ   r™   rš   rÏ   rž   r›   rŸ   r!   rh   rn   rm   ru   r~   s                     r7   r    z ConvolutionTransposeUnary.createï  s†   € ð ˆ
ô /ØØØØØØØØØØó
ñ	
ØØØØØð &ØÜ# GÓ,Øð)
ñ 
ˆô
 +Ø ØØ'ô
ˆô
 # 6Ó*Ð*r9   r¡   r¢   r¤   rª   s   @r7   rÉ   rÉ   Û  s¡   ø„ ð
 ð	
ð
 
õ
ô!ð ð++àð++ð ð++ð ð	++ð
 �s‘)ð++ð ˜c™ð++ð �c‘ð++ð ˜‘9ð++ð ð++ð ˜$˜s™)Ñ$ò++ó ô++r9   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
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k(  | _        t        ‰| �  |||dt        j
                  j                  j                  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]
        é   NÚ(aoti_torch_cpu__qconv2d_pointwise_tensorr…   )	r(   Úhas_biasrˆ   r‰   rT   rU   ÚonednnÚqconv2d_pointwiserŒ   r�   s       €r7   r‰   zQConvPointWisePT2E.__init__  sO   ø€ ô  ˜F› qÑ(ˆŒÜ‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×BÑBØFð 	õ 	
r9   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r‘   ©r“   rˆ   r”   rH   r|   r   Úcodegen_size_assertsr•   s     €r7   r”   zQConvPointWisePT2E.codegen9  ó?   ø€ Ø×$Ñ$Ð%UÔVÜ‰‰˜Ô Ü�d—k‘k¤6Ô*Ø×%Ñ% gÕ.ð +r9   Úqxr   ri   rj   Úqwrk   rl   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�   )ro   r   rT   Úfloat32Úbfloat16ÚdtyperÒ   )r_   rÝ   ri   rj   rÞ   rk   rl   r   r   r   r   r    rß   rà   Úoutput_dtyperž   r›   rŸ   r!   r"   rh   rn   rm   ru   s                           r7   r    zQConvPointWisePT2E.create?  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Ôä!Ø ØØ'ô
ð 	
r9   r¡   r¢   )r¥   r¦   r§   r‰   r”   r¨   r+   r-   r¹   r    r©   rª   s   @r7   rÒ   rÒ     sË   ø„ ð
 ð	
ð
 
õ
ô4/ð ðB
àðB
ð ðB
ð "ð	B
ð
 ðB
ð ðB
ð "ðB
ð ðB
ð �S‘	ðB
ð �c‘ðB
ð �s‘)ðB
ð ðB
ð ðB
ð òB
ó ôB
r9   rÒ   c                   ó°   ‡ — e Zd Z	 d	 dˆ fd„Zˆ fd„Z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k(  | _        d| _        t        ‰| �  |||dt
        j                  j                  j                  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, aplha, 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, aplha, unary_attr, unary_scalars, unary_algorithm]
        é   é   NÚ/aoti_torch_cpu__qconv2d_pointwise_binary_tensorr…   )
r(   rÖ   Úidx_for_inplace_sumrˆ   r‰   rT   rU   r×   rØ   r¯   r�   s       €r7   r‰   z!QConvPointWiseBinaryPT2E.__init__†  sW   ø€ ô" ˜F› qÑ(ˆŒØ#$ˆÔ Ü‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×AÑAØNð 	õ 	
r9   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r‘   rÚ   r•   s     €r7   r”   z QConvPointWiseBinaryPT2E.codegen¢  rÜ   r9   c                 óR   — | j                   | j                     j                  «       gS r<   )rh   rì   Úget_namerÃ   s    r7   Úget_mutation_namesz+QConvPointWiseBinaryPT2E.get_mutation_names¨  s#   € Ø—‘˜D×4Ñ4Ñ5×>Ñ>Ó@ÐAÐAr9   c                 ó   — t        «       S r<   r   rÃ   s    r7   rÄ   z1QConvPointWiseBinaryPT2E.get_unbacked_symbol_defs«  rÅ   r9   rÝ   r   ri   rj   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.ry   r�   )ro   r   r   rN   Úmark_buffer_mutatedrï   rç   r   rs   rh   rì   )r_   rÝ   ri   rj   rÞ   rk   rl   rò   r   r   r   r   r    rß   rà   rå   Úaccum_scaleÚaccum_zero_pointr²   Úalphar´   rµ   r¶   r!   r"   rh   rn   Ú_kernel_layoutre   r~   s                                 r7   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Ð8r9   r¡   r¢   )r¥   r¦   r§   r‰   r”   rð   r   rP   rÇ   rÄ   r¨   r+   r-   r    r©   rª   s   @r7   rç   rç   …  sÛ   ø„ ð
 ð	
ð
 
õ
ô8/òBð¨*°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9r9   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‰   rT   rU   ÚmklÚ_mkl_linearrŒ   r�   s       €r7   r‰   zMKLPackedLinear.__init__  s:   ø€ ô 	‰ÑØØØØÜŸ	™	Ÿ™×1Ñ1×9Ñ9ð 	õ 	
r9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   zMKLPackedLinear.codegen  r—   r9   c                 óÈ  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	t	        j
                  |	«      }
|||g}|g}|�||gz  }n|j                  dd «       t        t        |j                  «       |j                  «       |	|
«      ||¬«      S )Nr   r�   )Úrequire_stride1Úrealize_inputrr   r+   r   r[   r^   rû   r   rs   r]   )r_   r   Úpacked_wÚorig_wÚBÚ
batch_sizert   ru   rv   r.   rg   rh   rn   s                r7   r    zMKLPackedLinear.create  sÛ   € à×Ñ × 1Ñ 1°!Ó 4Ó5ˆØ×$Ñ$ S×%6Ñ%6°vÓ%>Ó?ˆØ—
‘
“‰ˆˆAØ—‘Ó!‰ˆˆAÜ˜1“g  ‘nˆÜ&×9Ñ9¸+ÓFˆØ�X˜vÐ&ˆØ#˜ˆØˆ=Ø�q�c‰M‰Fà× Ñ   DÔ)äÜØ—‘“ §¡£¨{¸Móð Ø'ô
ð 	
r9   r¡   r¢   ©r¥   r¦   r§   r‰   r”   r¨   r    r©   rª   s   @r7   rû   rû     s0   ø„ ð
 ð	
ð
 
õ
ô!ð ñ
ó ô
r9   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        j                  j                  j
                  j                  d¬«       y )NÚ aoti_torch_cpu__linear_pointwiser…   )rˆ   r‰   rT   rU   rŠ   Ú_linear_pointwiserŒ   r�   s       €r7   r‰   zLinearUnary.__init__-  s?   ø€ ô 	‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×BÑBØ>ð 	õ 	
r9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   zLinearUnary.codegen<  r—   r9   c                 ó  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }	}t        |«      |	gz   }
||g}||r|ndg|g}|�2| j                  | j                  |«      «      }|j	                  |«       n|j                  dd «       t        t        |j                  «       |j                  «       |
¬«      ||¬«      }t        |«      S )Néÿÿÿÿr   ©rz   rä   rA   r�   )Úrequire_contiguousr  rr   r+   r)   r^   r
  r   rs   r]   r€   )r_   r   Úwr  rž   r›   rŸ   rt   Ú_icrv   r.   rh   rn   r~   s                 r7   r    zLinearUnary.create@  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Ó*Ð*r9   c                  ó   — y r<   r=   rÃ   s    r7   Úapply_constraintzLinearUnary.apply_constraint[  ó   € Ør9   r¡   r¢   )	r¥   r¦   r§   r‰   r”   r¨   r    r  r©   rª   s   @r7   r
  r
  ,  s5   ø„ ð
 ð	
ð
 
õ
ô!ð ñ+ó ð+ö4r9   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        j                  j                  j
                  j                  d¬«       y )NÚ'aoti_torch_cpu__linear_pointwise_binaryr…   )rˆ   r‰   rT   rU   rŠ   r  r¯   r�   s       €r7   r‰   zLinearBinary.__init__b  s?   ø€ ô 	‰ÑØØØØÜŸ	™	×(Ñ(×:Ñ:×AÑAØEð 	õ 	
r9   c                 óF   •— |j                  d«       t        ‰| �	  |«       y r‘   r’   r•   s     €r7   r”   zLinearBinary.codegenq  r—   r9   c                 óJ  — | j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	|||g}
|g}|�2| j                  | j                  |«      «      }|
j	                  |«       n|j                  d|«       t        t        |j                  «       |j                  «       |	¬«      |
|¬«      }t        |«      S )Nr   r  r�   )r  r  rr   r+   r)   r^   r  r   rs   r]   r€   )r_   r   Úyr  r  rž   rt   r  rv   r.   rh   rn   r~   s                r7   r    zLinearBinary.createu  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Ó*Ð*r9   c                  ó   — y r<   r=   rÃ   s    r7   r  zLinearBinary.apply_constraint‘  r  r9   r¡   r¢   )
r¥   r¦   r§   r5   r‰   r”   r¨   r    r  r©   rª   s   @r7   r  r  _  s:   ø„ Ø8€Fð ð	
ð
 
õ
ô!ð ñ+ó ð+ö6r9   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        j                  j
                  j                  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]
        NÚ(aoti_torch_cpu__qlinear_pointwise_tensorr…   )rÖ   rˆ   r‰   rT   rU   r×   Úqlinear_pointwiseÚtensor©rŽ   r|   rh   rn   rÖ   r�   s        €r7   r‰   zQLinearPointwisePT2E.__init__–  sF   ø€ ð" !ˆŒÜ‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×BÑBØGð 	õ 	
r9   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r‘   rÚ   r•   s     €r7   r”   zQLinearPointwisePT2E.codegen±  ó?   ø€ Ø×$Ñ$Ð%UÔVÜ‰‰˜Ô ä�d—k‘k¤6Ô*Ø×%Ñ% gÕ.ð +r9   rÝ   r   ri   rj   rÞ   rk   rl   r   rß   rà   c           
      óØ   — t        | |||||||g«      \  }}}}}|||	|
|t        |«      |gz   }|
€J ‚|
t        j                  t        j                  fv r|
|_        t        ||||d u¬«      S )N©r|   rh   rn   rÖ   )rw   r   rT   râ   rã   rä   r!  )r_   rÝ   ri   rj   rÞ   rk   rl   r   rß   rà   rå   Úpost_op_nameÚpost_op_argsÚpost_op_algorithmrh   rn   rm   ru   s                     r7   r    zQLinearPointwisePT2E.create¸  s¥   € ô" 8UØØØØØ�l G¨\Ð:ó8
Ñ4ˆ� ¨q°!ð &ØØØØÜ# LÓ1Øð)
ñ 
ˆð Ð'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ñ:ð #/ˆMÔä#Ø ØØ'Ø $Ð&ô	
ð 	
r9   ©r=   Tr¢   )
r¥   r¦   r§   r‰   r”   r¨   r¹   r-   r    r©   rª   s   @r7   r!  r!  •  s‹   ø„ ð
 Øð
ð 
õ
ô6/ð ð,
àð,
ð ð,
ð "ð	,
ð
 ð,
ð ð,
ð "ð,
ð ð,
ð ð,
ð ò,
ó ô,
r9   r!  c                   ór   ‡ — e Zd Z	 	 d	 dˆ fd„Zˆ fd„Z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 )ÚQLinearPointwiseBinaryPT2Ec                 ó¤   •— || _         d| _        t        ‰| �  |||dt        j
                  j                  j                  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, aplha, 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, aplha, unary_attr, unary_scalars, unary_algorithm]
        rê   NÚ/aoti_torch_cpu__qlinear_pointwise_binary_tensorr…   )	rÖ   rì   rˆ   r‰   rT   rU   r×   r$  Úbinary_tensorr&  s        €r7   r‰   z#QLinearPointwiseBinaryPT2E.__init__é  sN   ø€ ð" !ˆŒØ#$ˆÔ Ü‰ÑØØØØÜŸ™×)Ñ)×;Ñ;×IÑIØMð 	õ 	
r9   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r‘   rÚ   r•   s     €r7   r”   z"QLinearPointwiseBinaryPT2E.codegen  rÜ   r9   c                 ó~   — | j                   d   }|dk(  r(| j                  | j                     j                  «       gS g S )Néûÿÿÿrô   )rn   rh   rì   rï   )rŽ   Úbinary_post_ops     r7   rð   z-QLinearPointwiseBinaryPT2E.get_mutation_names  s@   € Ø×+Ñ+¨BÑ/ˆØ˜UÒ"Ø—K‘K × 8Ñ 8Ñ9×BÑBÓDÐEÐEàˆIr9   rÝ   r   ri   rj   rÞ   rk   rl   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ô   ry   r*  )rw   r   r   rN   rõ   rï   r0  r   rs   rh   rì   rT   râ   rã   rä   )r_   rÝ   ri   rj   rÞ   rk   rl   r$   r   rß   rà   rå   Úother_scaleÚother_zpr7  r³   Úunary_post_opÚunary_post_op_argsÚunary_post_op_algorithmrh   rn   rm   re   r~   s                           r7   r    z!QLinearPointwiseBinaryPT2E.create  s$  € ô8 *ØØØØØ�l G¨\Ð:ØØ˜eÑ#ó
ñ	
ØØØØØð &ØØØØØØØØÜ#Ð$6Ó7Ø#ð)
ñ 
ˆð ˜UÒ"Ü�G‰G×'Ñ'¨¯©Ó(8Ô9Ü/Ü!¨×)9Ñ)9Ó);Ô<ØØ+Ø dÐ*ô	ˆFð —=‘= ×!;Ñ!;Ñ<Ð<àÐ'Ð'Ð'ØœEŸM™M¬5¯>©>Ð:Ñ:ð #/ˆMÔä)Ø ØØ'Ø $Ð&ô	
ð 	
r9   r.  r¢   )r¥   r¦   r§   r‰   r”   rð   r¨   r¹   r-   r    r©   rª   s   @r7   r0  r0  è  s¦   ø„ ð
 Øð
ð 
õ
ô8/òð ðH
àðH
ð ðH
ð "ð	H
ð
 ðH
ð ðH
ð "ðH
ð ðH
ð ðH
ð ðH
ð òH
ó ôH
r9   r0  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‰   rT   rU   rV   Úmkldnn_rnn_layerrŒ   r�   s       €r7   r‰   zMkldnnRnnLayer.__init___  s:   ø€ ô 	‰ÑØØØØÜŸ	™	Ÿ™×7Ñ7×?Ñ?ð 	õ 	
r9   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	}t        t        |j                  «       ¬«      ||¬«      }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 )Né   zExpect lstm input to be 3Dry   )rh   rn   c                 óV   — t        | «      dk(  sJ d«       ‚t        j                  | «      S )NrR  zExpect output_shape to be 3D)r(   r   r[   )Úoutput_shaperO  s     r7   Úget_strides_of_lstm_outputz9MkldnnRnnLayer.create.<locals>.get_strides_of_lstm_output«  s,   € Ü�|Ó$¨Ò)ÐIÐ+IÓIÐ)Ü!×4Ñ4°\ÓBÐBr9   r	   )r  r  Úfreeze_layoutrr   r(   r?  r   rs   r   r[   Ú	enumerateÚzipr   r   r]   Útupler}   )!r_   r   rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  r3   Ú
seq_lengthÚ
mini_batchrT  Úhy_shapeÚcy_shaperh   rn   r~   rU  Úoutput_sizesÚoutput_stridesrI   r.   rg   r   s!                                    r7   r    zMkldnnRnnLayer.createm  s]  € ð( ×Ñ × 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¨Ð,ˆàØØØØØØØØð

ˆô  Ü Q§\¡\£^Ô4ØØ'ô
ˆò	Cð % h°¸1¸#Ð>ˆá& |°[ÓAÜ×-Ñ-¨hÓ7Ü×-Ñ-¨hÓ7ØˆCð	
ˆô" 4=Ü�L .Ó1ó4÷
ð 
ñ 0�Ñ/�K ô ÜØ—L‘L“NØ—K‘K“MØØ!ó	ð Ü˜��õ	ð
ˆ	ò 
ð #ˆŒàÐùô#
s   Ç2A	Ic                 óD   •— |j                  d«       t        ‰| �	  |«      S r‘   r’   r•   s     €r7   r”   zMkldnnRnnLayer.codegenË  s!   ø€ Ø×$Ñ$Ð%UÔVÜ‰w‰˜wÓ'Ð'r9   r¡   r¢   )r¥   r¦   r§   r‰   r¨   Úboolr+   r-   r    r”   r©   rª   s   @r7   r?  r?  ^  sê   ø„ ð
 ð	
ð
 
õ
ð ð[àð[ð ð[ð ð	[ð
 ð[ð ð[ð ð[ð ð[ð ð[ð ˜#‘Yð[ð ð[ð ð[ð ð[ð ð[ð ð[ð  ð![ð" ò#[ó ð[÷z(ð (r9   r?  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 = ()
        é   r   NÚ-aoti_torch_cpu__weight_int4pack_mm_cpu_tensorr…   )r(   rˆ   r‰   rT   rU   Ú	quantizedÚint4mm_packed_weight_cpurŒ   r�   s       €r7   r‰   zWeightInt4PackMatmul.__init__Ò  sd   ø€ ô �6‹{˜aÒÐÐÜ�=Ó! QÒ&Ð&Ð&Ü‰ÑØØØØÜŸ™×,Ñ,×EÑE×MÑMØLð 	õ 	
r9   c                 óž   •— |j                  d«       t        ‰| �	  |«       t        | j                  t
        «      r| j                  |«       y y r‘   rÚ   r•   s     €r7   r”   zWeightInt4PackMatmul.codegenç  r(  r9   c                 ó  — ||||g}|j                  «       �^ }}|j                  «       \  }}t        |«      |gz   }	t        j                  |	«      }
t	        |j                  «       |j                  «       |	|
«      }t        ||¬«      S )N)r|   rh   )rr   r+   r   r[   r   rs   r]   rc  )r_   r   r  Ú
qGroupSizeÚqScalesAndZerosrh   rt   ru   Únr.   rg   rm   s               r7   r    zWeightInt4PackMatmul.createî  s†   € ð �Q˜
 OÐ4ˆØ—
‘
“‰ˆˆAØ�z‰z‹|‰ˆˆ1Ü˜1“g  ‘mˆÜ&×9Ñ9¸+ÓFˆÜ#Ø�L‰L‹NØ�K‰K‹MØØó	
ˆô $Ø Øô
ð 	
r9   r¡   r¢   )r   r   r  r   rk  r   rl  r   r  rª   s   @r7   rc  rc  Ñ  sV   ø„ ð
 ð	
ð
 
õ
ô*/ð ð
àð
ð ð
ð  ð	
ð
 %ò
ó ô
r9   rc  )FNNN)NNF)1Úcollections.abcr   Útypingr   r   rP   rT   Útorch._prims_commonr   Útorch.utils._ordered_setr   Úirr
   r   r   r   r   r   r   r   r   r   r   r   r   Úutilsr   r   Úvirtualizedr   r-   ra  r+   ro   rw   r€   r‚   r¬   r»   rÉ   rÒ   rç   rû   r
  r  r!  r0  r?  rc  r=   r9   r7   ú<module>ru     s  ðå $ß  ã ã Ý >Ý /÷÷ ÷ õ ÷ ;Ý ð Ø.2Ø15Ø#'ñjIàðjIð ðjIð ð	jIð
 �c‰]ðjIð �S‰MðjIð �s‰mðjIð ðjIð ðjIð ˜X c™]Ñ+ðjIð ˜D Ñ-Ñ.ðjIð �KÑ ójIðd 26Ø#'Øñ<Iàð<Ið ð<Ið ð	<Ið
 ˜D Ñ-Ñ.ð<Ið �KÑ ð<Ið ó<Iò~ô5+Ð(ô 5+ôp>+Ð)ô >+ôBJ Ð0ô J ôZ@+Ð 1ô @+ôFd
Ð*ô d
ôNy9Ð0ô y9ôx(
Ð'ô (
ôV0Ð#ô 0ôf3Ð$ô 3ôlP
Ð,ô P
ôfs
Ð!2ô s
ôlo(Ð&ô o(ôf3
Ð,õ 3
r9   