+
    –°³jµ¤  ã                  ó²  € ^ RI Ht ^ RIt^ RIHtHt ^ RIt^ RIHt ^RI	H
t
Ht ^RIHtHtHtHtHt ^RIHtHtHtHt ^RIHtHtHtHtHtHt ^R	IH t  ^R
I!H"t" ]'       d   ^ RI#H$t$ ^RIH%t% ]PL                  ! ]'4      t(]PR                  PT                  t*]R 4       t+]R 4       t,]R 4       t-]! R]-]"! R4      RR7      t.Rt/ ]! R]+R]/,           R,           ]/,           R,           R7      t0Rt1]! R],R]1,           R,           ]1,           R,           R7      t2]! ]Pf                  RR ]*Pf                  Ph                  R!7      t5R" t6]! ]6R4      t7 ! R# R$]4      t8R% R& lt9R' t:R( t;]! ]*Pf                  4      R) R* l4       t3]! ]*Px                  4      R+ 4       t<R, t=]! ]*Pf                  ]=4       R- R. lt>R/ R0 lt?R1 t@]! ]@R4      tAR2 tB]! ]BR4      tC]R3 4       tD]! R4]D]"! R54      R7      tE]R6 4       tF]! R7]F]"! R84      R7      tG]! ]*P�                  Ph                  4      tI]! ]*P�                  Ph                  4      R9 R: l4       tJR; tK]! ]*P�                  ]K4       R# )<é    )ÚannotationsN)ÚTYPE_CHECKINGÚ	TypedDict)ÚCKGroupedConvFwdTemplate)ÚconfigÚir)Úadd_layout_constraintÚconstrain_to_fx_stridesÚfallback_handlerÚ	loweringsÚregister_lowering)Úautotune_select_algorithmÚExternKernelChoiceÚSymbolicGridFnÚTritonTemplate)Úis_onesÚis_zerosÚpad_listlikeÚsympy_productÚuse_ck_conv_templateÚuse_triton_template)ÚV)Úload_kernel_template)ÚSequence)Ú	TensorBoxc               ój   € V! W,          V,          VR ,          4      V! WR,          4      VR,          3# ©ÚBLOCK_MÚBLOCK_NÚGROUPS© )ÚnÚcÚhÚwÚmetaÚcdivs   &&&&&$Ú\/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/kernel/conv.pyÚconv2d_gridr)   /   s5   € ñ 	ˆQ�U�Q�Y˜˜Y�Ó(ÙˆQ�Y•Ó ØˆX�ðð ó    c               óx   € V! W,          V,          V,          VR ,          4      V! WR,          4      VR,          3# r   r!   )r"   r#   Údr$   r%   r&   r'   s   &&&&&&$r(   Úconv3d_gridr-   8   s9   € ñ 	ˆQ�U�Q�Y˜�]˜D �OÓ,ÙˆQ�Y•Ó ØˆX�ðð r*   c               óZ   € V! WR ,          4      V! W#R,          4      V! WR,          4      3# )r   ÚBLOCK_LÚBLOCK_Cr!   )r"   r#   Úlr&   r'   s   &&&&$r(   Údepthwise_conv1d_gridr2   H   s2   € ñ 	ˆQ�Y•Ó ÙˆQ�Y•Ó ÙˆQ�Y•Ó ðð r*   Údepthwise_conv1dÚtriton_depthwise_convT)ÚnameÚgridÚsourceÚ"cache_codegen_enabled_for_templateaÓ  
        idx_x_h = i - PADDING_H + idx_y_h * STRIDE_H
        idx_x_w = j - PADDING_W + idx_y_w * STRIDE_W
        idx_x_c = tl.arange(0, BLOCK_K) + k

        x_ptrs = x_base + (
            (idx_x_h * stride_xh)[:, None]
            + (idx_x_w * stride_xw)[:, None]
            + (idx_x_c * stride_xc)[None, :]
        )
        mask_x = (
            (idx_n < BATCH)[:, None]
            & (idx_x_h >= 0)[:, None]
            & (idx_x_h < IN_H)[:, None]
            & (idx_x_w >= 0)[:, None]
            & (idx_x_w < IN_W)[:, None]
            & (idx_x_c < GROUP_IN_C)[None, :]
        )
        matrix_x = tl.load(x_ptrs, mask=mask_x, other=0.0)

        w_ptrs = w_base + (
            (idx_x_c * stride_wc_in)[:, None] + (i * stride_wh) + (j * stride_ww)
        )
        mask_w = (idx_x_c[:, None] < GROUP_IN_C) & (idx_y_c[None, :] < GROUP_OUT_C)
        matrix_w = tl.load(w_ptrs, mask=mask_w, other=0.0)
        acc += tl.dot(matrix_x, matrix_w, allow_tf32=ALLOW_TF32)
Úconvolution2da—  
{{def_kernel("X", "W")}}
    # Tensor dimensions
    BATCH = {{size("X", 0)}}
    IN_C = {{size("X", 1)}}
    IN_H = {{size("X", 2)}}
    IN_W = {{size("X", 3)}}
    OUT_C = {{size(None, 1)}}
    OUT_H = {{size(None, 2)}}
    OUT_W = {{size(None, 3)}}

    # Strides:
    stride_xn = {{stride("X", 0)}}
    stride_xc = {{stride("X", 1)}}
    stride_xh = {{stride("X", 2)}}
    stride_xw = {{stride("X", 3)}}
    stride_wc_out = {{stride("W", 0)}}
    stride_wc_in = {{stride("W", 1)}}
    stride_wh = {{stride("W", 2)}}
    stride_ww = {{stride("W", 3)}}

    nhw = tl.program_id(0).to(INDEX_DTYPE) * BLOCK_M + tl.arange(0, BLOCK_M)
    idx_y_w = nhw % OUT_W
    nh = nhw // OUT_W
    idx_y_h = nh % OUT_H
    idx_n = nh // OUT_H
    idx_y_c = tl.program_id(1).to(INDEX_DTYPE) * BLOCK_N + tl.arange(0, BLOCK_N)

{% if GROUPS == 1 %}
    group = 0
    GROUP_IN_C = IN_C
    GROUP_OUT_C = OUT_C
{% else %}
    group = tl.program_id(2).to(INDEX_DTYPE)
    GROUP_IN_C = IN_C // GROUPS
    GROUP_OUT_C = OUT_C // GROUPS
{% endif %}

    x_base = X + (group * stride_xc * GROUP_IN_C + idx_n * stride_xn)[:, None]
    w_base = (
        W + (group * stride_wc_out * GROUP_OUT_C + idx_y_c * stride_wc_out)[None, :]
    )

    acc = tl.zeros((BLOCK_M, BLOCK_N), dtype=tl.float32)

{% if UNROLL %}
{% for i in range(KERNEL_H) %}
{% for j in range(KERNEL_W) %}
    i = {{i}}
    j = {{j}}
    for k in range(0, GROUP_IN_C, BLOCK_K):
        aÐ  
{% endfor %}
{% endfor %}
{% else %}
    # Could be simplified, but slightly slower:
    # for i in range(KERNEL_H):
    #     for j in range(KERNEL_W):
    #         for k in range(0, GROUP_IN_C, BLOCK_K):
    BLOCK_K_COUNT = (GROUP_IN_C + BLOCK_K - 1) // BLOCK_K
    for ijk in range(KERNEL_H * KERNEL_W * BLOCK_K_COUNT):
        k = (ijk % BLOCK_K_COUNT) * BLOCK_K
        ij = ijk // BLOCK_K_COUNT
        i = ij // KERNEL_W
        j = ij % KERNEL_W
        aÎ  
{% endif %}

    mask = (
        (idx_n < BATCH)[:, None]
        & (idx_y_h < OUT_H)[:, None]
        & (idx_y_w < OUT_W)[:, None]
        & (idx_y_c < GROUP_OUT_C)[None, :]
    )
    idx_n = idx_n[:, None]
    idx_c = idx_y_c[None, :] + group * GROUP_OUT_C
    idx_h = idx_y_h[:, None]
    idx_w = idx_y_w[:, None]

    # inductor generates a suffix
    {{store_output(("idx_n", "idx_c", "idx_h", "idx_w"), "acc", "mask", val_shape=("BLOCK_M", "BLOCK_N"))}}
)r5   r6   r7   a¡  
        idx_x_d = d - PADDING_D + idx_y_d * STRIDE_D
        idx_x_h = i - PADDING_H + idx_y_h * STRIDE_H
        idx_x_w = j - PADDING_W + idx_y_w * STRIDE_W
        idx_x_c = tl.arange(0, BLOCK_K) + k

        x_ptrs = x_base + (
            (idx_x_d * stride_xd)[:, None]
            + (idx_x_h * stride_xh)[:, None]
            + (idx_x_w * stride_xw)[:, None]
            + (idx_x_c * stride_xc)[None, :]
        )
        mask_x = (
            (idx_n < BATCH)[:, None]
            & (idx_x_d >= 0)[:, None]
            & (idx_x_d < IN_D)[:, None]
            & (idx_x_h >= 0)[:, None]
            & (idx_x_h < IN_H)[:, None]
            & (idx_x_w >= 0)[:, None]
            & (idx_x_w < IN_W)[:, None]
            & (idx_x_c < GROUP_IN_C)[None, :]
        )
        matrix_x = tl.load(x_ptrs, mask=mask_x, other=0.0)

        w_ptrs = w_base + (
            (idx_x_c * stride_wc_in)[:, None] +
            (d * stride_wd) + (i * stride_wh) + (j * stride_ww)
        )
        mask_w = (idx_x_c[:, None] < GROUP_IN_C) & (idx_y_c[None, :] < GROUP_OUT_C)
        matrix_w = tl.load(w_ptrs, mask=mask_w, other=0.0)
        acc += tl.dot(matrix_x, matrix_w, allow_tf32=ALLOW_TF32)
Úconvolution3dax  
{{def_kernel("X", "W")}}
    # Tensor dimensions
    BATCH = {{size("X", 0)}}
    IN_C = {{size("X", 1)}}
    IN_D = {{size("X", 2)}}
    IN_H = {{size("X", 3)}}
    IN_W = {{size("X", 4)}}
    OUT_C = {{size(None, 1)}}
    OUT_D = {{size(None, 2)}}
    OUT_H = {{size(None, 3)}}
    OUT_W = {{size(None, 4)}}

    # Strides:
    stride_xn = {{stride("X", 0)}}
    stride_xc = {{stride("X", 1)}}
    stride_xd = {{stride("X", 2)}}
    stride_xh = {{stride("X", 3)}}
    stride_xw = {{stride("X", 4)}}
    stride_wc_out = {{stride("W", 0)}}
    stride_wc_in = {{stride("W", 1)}}
    stride_wd = {{stride("W", 2)}}
    stride_wh = {{stride("W", 3)}}
    stride_ww = {{stride("W", 4)}}

    ndhw = tl.program_id(0).to(INDEX_DTYPE) * BLOCK_M + tl.arange(0, BLOCK_M)
    idx_y_w = ndhw % OUT_W
    ndh = ndhw // OUT_W
    idx_y_h = ndh % OUT_H
    nd = ndh // OUT_H
    idx_y_d = nd % OUT_D
    idx_n = nd // OUT_D
    idx_y_c = tl.program_id(1).to(INDEX_DTYPE) * BLOCK_N + tl.arange(0, BLOCK_N)

{% if GROUPS == 1 %}
    group = 0
    GROUP_IN_C = IN_C
    GROUP_OUT_C = OUT_C
{% else %}
    group = tl.program_id(2).to(INDEX_DTYPE)
    GROUP_IN_C = IN_C // GROUPS
    GROUP_OUT_C = OUT_C // GROUPS
{% endif %}

    x_base = X + (group * stride_xc * GROUP_IN_C + idx_n * stride_xn)[:, None]
    w_base = (
        W + (group * stride_wc_out * GROUP_OUT_C + idx_y_c * stride_wc_out)[None, :]
    )

    acc = tl.zeros((BLOCK_M, BLOCK_N), dtype=tl.float32)

{% if UNROLL %}
{% for d in range(KERNEL_D) %}
{% for i in range(KERNEL_H) %}
{% for j in range(KERNEL_W) %}
    d = {{d}}
    i = {{i}}
    j = {{j}}
    for k in range(0, GROUP_IN_C, BLOCK_K):
        aF  
{% endfor %}
{% endfor %}
{% endfor %}
{% else %}
    # Could be simplified, but slightly slower:
    # for d in range(KERNEL_D):
    #   for i in range(KERNEL_H):
    #     for j in range(KERNEL_W):
    #         for k in range(0, GROUP_IN_C, BLOCK_K):
    BLOCK_K_COUNT = (GROUP_IN_C + BLOCK_K - 1) // BLOCK_K
    for dijk in range(KERNEL_D * KERNEL_H * KERNEL_W * BLOCK_K_COUNT):
        k = (dijk % BLOCK_K_COUNT) * BLOCK_K
        dij = dijk // BLOCK_K_COUNT
        j = dij % KERNEL_W
        di = dij // KERNEL_W
        i = di % KERNEL_H
        d = di // KERNEL_H
        a  
{% endif %}

    mask = (
        (idx_n < BATCH)[:, None]
        & (idx_y_d < OUT_D)[:, None]
        & (idx_y_h < OUT_H)[:, None]
        & (idx_y_w < OUT_W)[:, None]
        & (idx_y_c < GROUP_OUT_C)[None, :]
    )
    idx_n = idx_n[:, None]
    idx_c = idx_y_c[None, :] + group * GROUP_OUT_C
    idx_d = idx_y_d[:, None]
    idx_h = idx_y_h[:, None]
    idx_w = idx_y_w[:, None]

    # inductor generates a suffix
    {{store_output(("idx_n", "idx_c", "idx_d", "idx_h", "idx_w"), "acc", "mask", val_shape=("BLOCK_M", "BLOCK_N"))}}
zat::convolutionF)Úhas_out_variantÚop_overloadc          
     óô   € \         P                  ! \         P                  ! VR4      R4      p\         P                  ! V P                  ^ ^^^4      VP                  ^^ 4      VP                  ^ ^^^4      R7      # )é   )Úoutéÿÿÿÿ)ÚtorchÚsqueezeÚmatmulÚpermute)Úxr%   r?   s   &&$r(   Úconv1x1_via_mmrF   f  s]   € Ü�Š”e—m’m A rÓ*¨BÓ/€AÜ�<Š<Ø	�	‰	�!�Q˜˜1Ó˜qŸy™y¨¨A›°C·K±KÀÀ1ÀaÈÓ4Kôð r*   c                  óT   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚConvLayoutParamsip  útuple[int, ...]ÚstrideÚpaddingÚdilationÚboolÚ
transposedÚoutput_paddingÚintÚgroupsr!   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r!   r*   r(   rH   rH   p  s%   ‡ ØÓØÓØÓØÓØ#Ó#Ø‡Kr*   rH   c               ó@   € V ^8„  d   QhRRRRRRRRRR	R
R	RRRR	RRRR/
# )é   rE   r   ÚweightÚbiasúTensorBox | NonerJ   úSequence[int]rK   rI   rL   rN   rM   rO   rQ   rP   Úreturnú	ir.Layoutr!   )Úformats   "r(   Ú__annotate__ra   y  sl   € ÷ (ñ (Øð(àð(ð ð(ð ð	(ð
 ð(ð ð(ð ð(ð $ð(ð ð(ð ñ(r*   c	                óÊ  € \         P                  P                  P                  p	\         P                  P                  ;_uu_ 4        \
        P                  P                  P                  \        P                  ! V 4      \        P                  ! V4      \        P                  ! V4      V	! V4      V	! V4      V	! V4      VV	! V4      V4	      p
\        P                  ! V
P                  4       4      p\        P                  ! V
P                  4       4      pRRR4       \        P                  ! V P                  4       V P!                  4       XV4      #   + '       g   i     LE; i)z)Determine output layout for a convolutionN)r   ÚgraphÚsizevarsÚguard_int_seqÚ	fake_moderA   ÚopsÚatenÚconvolutionr   Úir_node_to_tensorÚconvert_shape_to_inductorÚsizerJ   ÚFixedLayoutÚget_device_or_errorÚ	get_dtype)rE   rZ   r[   rJ   rK   rL   rN   rO   rQ   ÚguardÚoutputÚsizess   &&&&&&&&&   r(   Úconv_layoutrs   y  sø   € ô& �G‰G×Ñ×*Ñ*€EÜ	
�‰×	×	Ó	Ü—‘—‘×+Ñ+Ü× Ò  Ó#Ü× Ò  Ó(Ü× Ò  Ó&Ù�&‹MÙ�'‹NÙ�(‹OØÙ�.Ó!Øó

ˆô ×,Ò,¨V¯[©[«]Ó;ˆÜ×-Ò-¨f¯m©m«oÓ>ˆ÷ 
ô �>Š>Ø	×ÑÓØ	�‰‹ØØó	ð ÷ 
×	ús   ÁCEÅE"	c                ó‚   € \        \        \        V 4      4      4      pVP                  ^VP	                  R4      4       V# )r>   r@   )ÚlistÚreversedÚrangeÚinsertÚpop)ÚrankÚorders   & r(   Úchannels_last_orderr|   ¤  s0   € Ü”œ% ›+Ó&Ó'€EØ	‡L�L��E—I‘I˜b“MÔ"Ø€Lr*   c                óö  € \        VP                  4       4      p\        V^,
          4       F&  p\        \        P
                  ,          ! VRR7      pK(  	  \        \        P                  ,          ! V^^ .4      p\        P                  P                  V \        V4      4      p \        \        V4      4      pVP                  VP                  ^4      4       \        \        P                  ,          ! W4      p V P                  4       Ev rg\        \        P                  ,          ! V \        V4      V.4      p Vf#   \        \        P                   ,          ! W4      pM"\        \        P"                  ,          ! W V4      p\        \        P                  ,          ! V. VORN4      p\        \        V4      4      p	V	P%                  ^V	P                  R4      4       \        \        P                  ,          ! W‰4      # )rY   ©Údimr@   )ÚlenÚget_sizerw   ÚLrh   rB   rD   r   ÚExternKernelÚrequire_stride_orderr|   ru   Úappendry   Úreshaper   ÚmmÚaddmmrx   )
rE   rZ   r[   rz   Ú_Ú	x_permuterr   Úin_chanÚresultÚresult_permutes
   &&&       r(   Úconvert_1x1_conv_to_mmrŽ   ª  sR  € äˆv�‰Ó Ó!€DÜ�4˜!•8Ž_ˆÜ”4—<‘<– ¨RÔ0Šñ äŒt�|‰|Ž_˜V a¨ VÓ,€Fä
�‰×,Ñ,¨QÔ0CÀDÓ0IÓJ€AÜ”U˜4“[Ó!€IØ×Ñ�Y—]‘] 1Ó%Ô&Ü	Œ$�,‰,Ž˜Ó%€AØ—j‘j“l�O€UÜ	Œ$�,‰,Ž˜œM¨%Ó0°'Ð:Ó;€AØ‚|Ü”4—7‘7–˜AÓ&‰ä”4—:‘:–˜t¨Ó/ˆÜŒt�|‰|Ž_˜V \ u \¨b \Ó2€FÜœ% ›+Ó&€NØ×Ñ˜!˜^×/Ñ/°Ó3Ô4ÜŒT�\‰\Ž?˜6Ó2Ð2r*   c               ó<   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRR/	# )rY   rE   r   rZ   r[   r\   rJ   r]   rK   rL   rN   rM   rO   rQ   rP   r!   )r`   s   "r(   ra   ra   Â  sm   € ÷ Hñ HØðHàðHð ðHð ð	Hð
 ðHð ðHð ðHð "ðHð ñHr*   c	                 óz  a aaa € \        V4      p\        V4      p\        V4      p\        V4      p\        V\        4      '       g*   \        P                  P
                  P                  V4      p\        V\        4      '       g   \        R\        V4       24      h\        \        P                  P
                  P                  V4      4      p\        \        P                  P
                  P                  V4      4      pV'       d3   \        \        P                  P
                  P                  V4      4      pRVRVRVRVRVRV/o\        P                  ! S 4      p	\        S P                  4       4      \        SP                  4       4      ^,
          8X  da   \        \        P                   ,          ! \#        \        \        P$                  ,          ! S ^.S P                  4       O4      SV3/ SB ^ R7      # \        P                  P
                  P                  SP                  4       4      vr«p\        S P                  4       4      ^8X  dÂ   \        V4      ^8X  d²   V	R	8X  d«   SP'                  RR,V,           RR-V,           RR,V,           RR-V,           /4       \        \        P(                  ,          ! S ^R7      o \        \        P(                  ,          ! S^R7      o\        \        P                   ,          ! \#        S SV3/ SB ^R7      # \        V4      o \+        VS 4      p\+        VS 4      p\+        VS 4      p\+        VS 4      pVV VV 3R
 lp\,        P.                  ;'       g    \,        P0                  p\,        P2                  '       g   V'       dÆ   V! 4       '       d¹   \5        V4      '       d¨   \5        V4      '       d—   \7        V4      '       d†   \5        V4      '       du   V'       gm   \7        V4      '       d\   V^8X  dU   \        P                  P
                  P9                  \;        S P                  4       4      ^ 4      '       d   \=        S SV4      # VeÃ   V	R8w  d¼   \#        S SR3/ SB p\        P                  P
                  P?                  VP                  4       ^,          ^ 4      '       d   V# \        \        P@                  ,          ! V\        \        PB                  ,          ! W/P                  4       ^,          .S ^.,          ,           4      4      # S PE                  4        SPE                  4        \        P                  PF                  '       d|   S ^8X  du   \        P                  ;PH                  ^,          un$        \        PJ                  PM                  S 4      o \        PJ                  PM                  S4      o\O        S SR3/ SB pM•\O        S SR3/ SB p\        PP                  ! \        P                  P
                  PS                  VPT                  4      4      p\        PJ                  PW                  S V4      o \        PJ                  PW                  SV4      o. R.OpVf   S S.pRSR&   VPY                  ^ R4       Mz\        PJ                  P[                  V4      pVf   \        R4      hS SV.pVP]                  4        \        P                  P
                  P                  VP                  4       4       . p\^        P`                  Pb                  Pe                  R4      '       d   \f        Ph                  ! VVV3/ SB .p\^        P`                  Pb                  Pe                  R4      '       Ed¼   \k        V4      '       Edª   \5        V4      '       Ed˜   V'       Eg�   \7        V4      '       Ed}   \        P                  P
                  P?                  W¸,          S P                  4       ^,          4      '       Ed1   \5        V4      '       dO   \5        V4      '       d>   \7        V4      '       d-   V^8X  d&   VPm                  \n        Pi                  VV4      4       V^8„  ;'       d    V^8H  ;'       d    W¨8H  pV'       dŠ   S ^8X  dƒ   \        Pp                  Ps                  V	4      pV F]  p\t        Pv                  ! V3RS S3RVRV^ ,          RV^ ,          RV^ ,          RVPx                  RVPz                  /VP|                  B  K_  	  \        Pp                  P                  V	4      pS P�                  4       P‚                  pV! \;        S P                  4       ^ ,          .S P                  4       R,          O4      V
VVR7       EF¢  p\5        V4      pV'       d   VPz                  M\…        VPz                  ^4      pS ^8X  d™   \†        Pv                  ! V3RS S3RVRV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          R VR!VR"\^        Pˆ                  PŠ                  PŒ                  R#8H  RVPx                  RV/VP|                  B  KØ  S ^8X  g   Ká  \Ž        Pv                  ! V3/ RS S3bRVbR$V^ ,          bRV^,          bRV^,          bR%V^ ,          bRV^,          bRV^,          bR&V^ ,          bRV^,          bRV^,          bR VbR!VbR"\^        Pˆ                  PŠ                  PŒ                  R#8H  bRVPx                  bRVbVP|                  B  EK¥  	  V	R'8H  ;'       d     \^        P�                  P’                  '       * p\^        P`                  Pb                  Pe                  R4      '       Edh   \k        V4      '       EdV   V'       EdM   S ^8X  EdE   V'       Eg<   \        Pp                  P                  V	4      pS P�                  4       P‚                  pV! \;        VP”                  ^ ,          VP”                  ^,          VP”                  ^,          .4      V
VVR7       F³  p\–        Pv                  ! V3RS S3RVRV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          R(V^ ,          R)V^,          R VR"\^        Pˆ                  PŠ                  PŒ                  R#8H  RVPx                  RVPz                  /VP|                  B  Kµ  	  \™        V4      '       d7   \š        Pœ                  ! TTS S3Ve   V3M	\        4       ,           VVVVS R*7       V'       gM   \,        Pž                  P¡                  4       '       d)   VPm                  \f        Ph                  ! VVV3/ SB 4       \£        R+VVV4      w  ppV# )/zGLower aten.convolution using Inductor convolution kernels or fallbacks.zExpected int for groups, got rJ   rK   rL   rN   rO   rQ   r~   Úxpuc                 ó&  <€ \         P                  P                  '       d
   S^8X  d   R# \        SSR3/ SB p \        P
                  ! \         P                  P                  P                  V P                  4      4      pV\        P                  8H  # )rY   TN)
r   rc   Ú
layout_optrs   r   Úget_stride_orderrd   Úguarding_hints_or_throwrJ   ÚNHWC_STRIDE_ORDER)ÚlayoutÚreq_stride_orderÚkwargsÚndimrZ   rE   s     €€€€r(   Úchannels_last_convÚ'convolution.<locals>.channels_last_conv  sq   ø€ Ü�7‰7××Ð $¨!¤)Ùä˜Q ¨Ñ7°Ñ7ˆô ×.Ò.Ü�G‰G×Ñ×4Ñ4°V·]±]ÓCó
Ðð  ¤2×#7Ñ#7Ñ7Ð7r*   NÚcpur[   z)bias must not be None after realize_inputÚATENÚTRITONÚinput_nodesr—   ÚKERNEL_SIZEÚCONV_STRIDEÚPADDINGÚ
num_stagesÚ	num_warpsºrY   NN©Ú
dtype_sizeÚKERNEL_HÚKERNEL_WÚSTRIDE_HÚSTRIDE_WÚ	PADDING_HÚ	PADDING_Wr    ÚUNROLLÚ
ALLOW_TF32Útf32ÚKERNEL_DÚSTRIDE_DÚ	PADDING_DÚcudaÚ
DILATION_HÚ
DILATION_W)r    rJ   rK   rL   rQ   Ún_spatial_dimensionsri   )r>   )r   )rJ   rK   rL   rN   rO   rQ   )RÚtupleÚ
isinstancerP   r   rc   rd   Ú	guard_intÚAssertionErrorÚtypere   r   Úget_device_typer€   r�   r‚   rh   rB   ri   ÚexpandÚupdateÚ	unsqueezer   r   Úmax_autotuneÚmax_autotune_gemmÚconv_1x1_as_mmr   r   Ústatically_known_gtr   rŽ   Ústatically_known_equalsÚaddÚviewÚrealizer“   Únum_channels_last_convrƒ   Úrequire_channels_lastrs   r”   r•   rJ   r„   rx   Úrealize_inputÚfreeze_layoutrA   Ú	_inductorÚutilsÚ_use_conv_autotune_backendÚaten_convolutionÚbindr   r…   Úaten_conv1x1_via_mmÚchoicesÚget_depthwise_conv_configsÚdepthwise_conv1d_templateÚmaybe_append_choicer¤   r¥   r™   Úget_conv_configsro   ÚitemsizeÚminÚconv2d_templateÚbackendsÚcudnnÚfp32_precisionÚconv3d_templateÚversionÚhiprl   Úconv2d_bwd_input_templater   r   Úadd_ck_conv_choicesÚmax_autotune_conv_backendsÚstripr   )!rE   rZ   r[   rJ   rK   rL   rN   rO   rQ   Údevice_typeÚout_chanr‹   Úkernel_shaper›   Úautotuning_gemmrŒ   r—   r˜   Úordered_kwargs_for_cpp_kernelÚargsrÔ   Úis_depthwiseÚdepthwise_configsÚcfgÚconv_configsr¨   Úunrollr¥   Údisable_triton_conv_bwdÚnoder‰   r™   rš   s!   ff&&&&&&&                      @@r(   ri   ri   Á  sÌ  û€ ô �6‹]€FÜ�G‹n€GÜ�X‹€HÜ˜>Ó*€NÜ�fœc×"Ò"Ü—‘×!Ñ!×+Ñ+¨FÓ3ˆÜ�fœc×"Ò"ÜÐ<¼TÀ&»\¸NÐKÓLÐLô ”1—7‘7×#Ñ#×1Ñ1°&Ó9Ó:€FÜ”A—G‘G×$Ñ$×2Ñ2°7Ó;Ó<€GßÜœŸ™×)Ñ)×7Ñ7¸ÓAÓBˆð 	�&Ø�7Ø�HØ�jØ˜.Ø�&ð €Fô ×$Ò$ QÓ'€Kä
ˆ1�:‰:‹<ÓœC §¡Ó 1Ó2°QÕ6Ô6ä”—‘ŽÜœœ$Ÿ+™+ž q¨1Ð*<¨q¯z©z«|Ð*<Ó=¸vÀtÑVÈvÑVØô
ð 	
ô
 ()§w¡w×'7Ñ'7×'EÑ'EÀfÇoÁoÓFWÓ'XÐ$€H˜ô
 ˆ1�:‰:‹<Ó˜AÔ¤# lÓ"3°qÔ"8¸[ÈEÔ=QØ�‰à˜$ �-Ø˜4 '�>Ø˜D 8�OØ  $¨Õ"7ð	ô	
ô Œd�n‰nÖ˜a QÔ'ˆÜ”4—>‘>Ö" 6¨qÔ1ˆä”—‘ŽÜ˜˜6 4Ñ2¨6Ñ2Øô
ð 	
ô
 ˆ|Ó€DÜ˜& $Ó'€FÜ˜7 DÓ)€GÜ˜H dÓ+€HÜ! .°$Ó7€N÷
8ð 
8ô ×)Ñ)×EÐE¬V×-EÑ-E€Oô 
×	×	Ð	§?Ñ7I×7KÒ7KÜ�L×!Ò!Ü�F�OŠOÜ�W×ÒÜ�H×ÒßÜ�^×$Ò$Ø�aŒKÜ�G‰G×Ñ×0Ñ0´¸q¿z¹z»|Ó1LÈa×PÒPä% a¨°Ó6Ð6àÒ˜K¨5Ô0ä˜Q ¨Ñ7°Ñ7ˆÜ�7‰7×Ñ×3Ñ3°F·O±OÓ4EÀaÕ4HÈ!×LÒLàˆMÜ”—‘Ž{Ø”A”d—i‘i–L ¯©Ó(9¸!Õ(<Ð'=ÀÈÀsÅ
Õ'JÓKó
ð 	
ð ‡I�I„KØ
‡N�NÔô
 	‡w�w××Ð˜d aœiÜ	�‰×&Ò&¨!Õ+Õ&Ü�O‰O×1Ñ1°!Ó4ˆô —‘×6Ñ6°vÓ>ˆÜ˜Q ¨Ñ7°Ñ7‰ä˜Q ¨Ñ7°Ñ7ˆô ×.Ò.Ü�G‰G×Ñ×4Ñ4°V·]±]ÓCó
Ðô �O‰O×0Ñ0°Ð4DÓEˆÜ—‘×5Ñ5°fÐ>NÓOˆò%Ð!ð ‚|Ø�6ˆ{ˆØˆˆv‰Ø%×,Ñ,¨Q°Õ7ä�‰×,Ñ,¨TÓ2ˆØŠ<Ü Ð!LÓMÐMØ�6˜4Ð ˆØ×ÑÔÜ	�‰×Ñ×&Ñ& t§}¡}£Ô7à€GÜ‡�×Ñ×7Ñ7¸×?Ò?ä×!Ò!ØØØ-ñð ñ	ð
ˆô 	�‰×Ñ×8Ñ8¸×BÓBÜ ×'Ó'ä�H×Óß�
Ü�^×$Ó$ä�G‰G×Ñ×4Ñ4°WÕ5EÀqÇzÁzÃ|ÐTUÅ×WÓWô �L×!Ò!Ü˜—’Ü˜×!Ò!Ø˜!”à�N‰NÔ.×3Ñ3°D¸&ÓAÔBà ‘z×IÐI g°¡l×IÐI°xÑ7Iˆß˜D AœIÜ !§	¡	× DÑ DÀ[Ó QÐÛ(�Ü)×=Ò=Øñ
à!" F ð
ð "ð
ð !-¨Q¥ð	
ð
 !' q¥	ð
ð $ A�Jð
ð  #Ÿ~™~ð
ð "Ÿm™mð
ð —j‘jô
ñ )ô —y‘y×1Ñ1°+Ó>ˆà—[‘[“]×+Ñ+ˆ
ÙÜ˜1Ÿ:™:›<¨�?Ð>¨Q¯Z©Z«\¸"Õ-=Ð>Ó?ØØØ!÷	
ð 
ˆCô ˜\Ó*ˆF÷ *0˜Ÿš´S¸¿¹ÈÓ5JˆIà�qŒyÜ×3Ò3Øñà!" F ðð "ðð *¨!�_ð	ð
 *¨!�_ðð $ A�Yðð $ A�Yðð & a�jðð & a�jðð "ðð "ðô  %Ÿ~™~×3Ñ3×BÑBÀfÑLðð  #Ÿ~™~ðð  (ð!ð" —j‘jô#ð& ˜–Ü×3Ò3Øòà!" F¡ðñ "ðð *¨!ž_ð	ð
 *¨!ž_ðð *¨!ž_ðð $ AžYðð $ AžYðð $ AžYðð & ažjðð & ažjðð & ažjðñ "ðñ  "ð!ô"  %Ÿ~™~×3Ñ3×BÑBÀfÒLð#ð$  #Ÿ~š~ð%ñ& (Ø—j‘jõ)ñA
ðv *¨VÑ3×MÐM¼E¿M¹M×<MÑ<MÔ8MÐä�‰×Ñ×8Ñ8¸×BÓBÜ ×'Ó'ßˆJØ�A�Iß'Ð'ô
 —y‘y×1Ñ1°+Ó>ˆØ—[‘[“]×+Ñ+ˆ
ÙÜ˜6Ÿ;™; q�>¨6¯;©;°q­>¸6¿;¹;Àq½>ÐJÓKØØØ!÷	
ˆCô &×9Ò9Øñà ˜Kðð ðð & a�ð	ð
 & a�ðð " !�*ðð " !�*ðð   �ðð   �ðð $ A�;ðð $ A�;ðð ðô !Ÿ>™>×/Ñ/×>Ñ>À&ÑHðð Ÿ>™>ðð Ÿ-™-ðð  —*‘*ô!ñ
ô2 ˜F×#Ò#Ü ×4Ò4ØØØ˜F˜°$Ò2B¨¡wÌËÕPØØØØØ!%õ		
÷ ”v×8Ñ8×>Ñ>×@Ò@Ø�‰Ü×!Ò!ØØØ-ñð ñ	ô	
ô (¨°wÀÀfÓM�G€Dˆ!Ø€Kr*   c                ó    € \        WW#WEWgV4	      # )N)ri   )rE   rZ   r[   rJ   rK   rL   rN   rO   rQ   Ú	benchmarkÚdeterministicÚcudnn_enabledÚ
allow_tf32s   &&&&&&&&&&&&&r(   Ú_convolutionrø     s   € ô  Ø	�4 °JÐPVóð r*   c                ó  € V P                   \        P                  P                  P                  P
                  Jd   \        R V P                    24      h\        P                  P                  '       d   W3# \        V .VO5/ VB # )z'Expected aten.convolution.default, got )ÚtargetrA   rg   rh   ri   Údefaultr¼   r   rc   r“   r
   ©Úfx_noderë   r™   s   &*,r(   Úconstrain_conv_to_fx_stridesrþ   "  sg   € Ø‡~�~œUŸY™YŸ^™^×7Ñ7×?Ñ?Ó?ÜÐFÀwÇ~Á~ÐFVÐWÓXÐXÜ‡w�w××ÐØˆ|Ðä& wÐ@°Ò@¸Ñ@Ð@r*   c               ó@   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRRRR/
# ©rY   Úgrad_outr   ÚinputrZ   rJ   r]   rK   rI   rL   rN   rM   rO   rQ   rP   r^   r_   r!   )r`   s   "r(   ra   ra   .  ól   € ÷ &ñ &Øð&àð&ð ð&ð ð	&ð
 ð&ð ð&ð ð&ð $ð&ð ð&ð ñ&r*   c	                óâ  € \         P                  P                  P                  p	\         P                  P                  ;_uu_ 4        \
        P                  ! V 4      p
\
        P                  ! V4      p\
        P                  ! V4      p\        P                  P                  P                  V
VVR V	! V4      V	! V4      V	! V4      VV	! V4      VR4      w  p p\
        P                  ! VP                  4       4      p\
        P                  ! VP                  4       4      pR R R 4       \
        P                  ! VP                  4       VP!                  4       XX4      #   + '       g   i     LE; i)N©TFF©r   rc   rd   re   rf   r   rj   rA   rg   rh   Úconvolution_backwardrk   rl   rJ   rm   rn   ro   )r  r  rZ   rJ   rK   rL   rN   rO   rQ   rp   ÚgorE   r%   Údxr‰   rr   Ústride_s   &&&&&&&&&        r(   Úconv_bwd_input_layoutr  .  s  € ô �G‰G×Ñ×*Ñ*€EÜ	
�‰×	×	Ó	Ü×!Ò! (Ó+ˆÜ× Ò  Ó'ˆÜ× Ò  Ó(ˆä—9‘9—>‘>×6Ñ6ØØØØÙ�&‹MÙ�'‹NÙ�(‹OØÙ�.Ó!ØØ ó
‰ˆˆAˆqô ×,Ò,¨R¯W©W«YÓ7ˆÜ×.Ò.¨r¯y©y«{Ó;ˆ÷' 
ô* �>Š>Ø×!Ñ!Ó#Ø�‰ÓØØó	ð ÷+ 
×	ús   ÁCEÅE.	c               ó@   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRRRR/
# r   r!   )r`   s   "r(   ra   ra   W  r  r*   c	                óà  € \         P                  P                  P                  p	\         P                  P                  ;_uu_ 4        \
        P                  ! V 4      p
\
        P                  ! V4      p\
        P                  ! V4      p\        P                  P                  P                  V
VVR V	! V4      V	! V4      V	! V4      VV	! V4      VR4      w  rÞp\
        P                  ! VP                  4       4      p\
        P                  ! VP                  4       4      pR R R 4       \
        P                  ! VP                  4       VP!                  4       XX4      #   + '       g   i     LE; i)N©FTFr  )r  r  rZ   rJ   rK   rL   rN   rO   rQ   rp   r  rE   r%   r‰   Údwrr   r
  s   &&&&&&&&&        r(   Úconv_bwd_weight_layoutr  W  s  € ô �G‰G×Ñ×*Ñ*€EÜ	
�‰×	×	Ó	Ü×!Ò! (Ó+ˆÜ× Ò  Ó'ˆÜ× Ò  Ó(ˆä—9‘9—>‘>×6Ñ6ØØØØÙ�&‹MÙ�'‹NÙ�(‹OØÙ�.Ó!ØØ ó
‰ˆˆqô ×,Ò,¨R¯W©W«YÓ7ˆÜ×.Ò.¨r¯y©y«{Ó;ˆ÷' 
ô* �>Š>Ø×"Ñ"Ó$Ø×ÑÓØØó	ð ÷+ 
×	ús   ÁCEÅE-	c               óp  € V P                  \        P                  R 7      '       d   \        P                  p
M\        P                  p
\        P                  ! W)P
                  V P                  V
R7      p\        P                  P                  P                  P                  RV	RVV VRVVVVVVRR7       V	# )©Úmemory_format©ÚdtypeÚdevicer  N©Úout1Úout2Úout3Úgrad_outputr  rZ   Ú
bias_sizesrJ   rK   rL   rN   rO   rQ   Úoutput_maskr  ©Úis_contiguousrA   Úchannels_lastÚcontiguous_formatÚemptyr  r  rg   rh   r  r?   )Úx_tÚgo_tÚw_shaperJ   rK   rL   rN   rO   rQ   r?   Ú
memory_fmtÚdummy_weights   &&$$$$$$$$  r(   Úcall_aten_dwr(  €  s¥   € ð ×Ñ¤u×':Ñ':Ð×;Ò;Ü×(Ñ(‰
ä×,Ñ,ˆ
ä—;’;Ø—y‘y¨¯©À:ô€Lô 
‡I�I‡N�N×'Ñ'×+Ñ+ØØØØØØØØØØØØ%ØØ(ð ,ô ð  €Jr*   c               óp  € V P                  \        P                  R 7      '       d   \        P                  p
M\        P                  p
\        P                  ! W)P
                  V P                  V
R7      p\        P                  P                  P                  P                  V	RRV VVRVVVVVVRR7       V	# )r  r  Nr  r  r  )r$  Úw_tÚx_shaperJ   rK   rL   rN   rO   rQ   r?   r&  Údummy_inputs   &&$$$$$$$$  r(   Úcall_aten_dxr-  ¬  s¥   € ð ×Ñ¬×(;Ñ(;Ð×<Ò<Ü×(Ñ(‰
ä×,Ñ,ˆ
ä—+’+Ø—y‘y¨¯©ÀJô€Kô 
‡I�I‡N�N×'Ñ'×+Ñ+ØØØØØØØØØØØØ%ØØ(ð ,ô ð  €Jr*   c               ó|   € VR ,          pV! W,          V,          VR,          4      V! W,          VR,          4      V3# ©r    r   r   r!   )ÚcoutÚcinÚkhÚkwr&   r'   Úgs   &&&&&$ r(   Úconv2d_bwd_weight_gridr5  Ø  s<   € àˆX�€AáˆS�X˜�]˜D �OÓ,ÙˆT�Y˜˜Y�Ó(Ø	ðð r*   Úconvolution2d_bwd_weightÚtriton_conv2d_bwd_weightc               ó|   € VR ,          pV! W,          V,          VR,          4      V! W,          VR,          4      V3# r/  r!   )r"   r1  r$   r%   r&   r'   r4  s   &&&&&$ r(   Úconv2d_bwd_input_gridr9  é  s<   € àˆX�€AáˆQ�U�Q�Y˜˜Y�Ó(ÙˆS�X�t˜I•Ó'Ø	ðð r*   Úconvolution2d_bwd_inputÚtriton_conv2d_bwd_inputc               óD   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRRRRRR/# )rY   r  r   r  rZ   r  zSequence[int] | NonerJ   r]   rK   rL   rN   rM   rO   rQ   rP   r  zSequence[bool]r!   )r`   s   "r(   ra   ra   þ  sƒ   € ÷ Kñ KØðKàðKð ðKð %ð	Kð
 ðKð ðKð ðKð ðKð "ðKð ðKð  ñKr*   c                 óz  € \        V4      p\        V4      p\        V4      p\        V4      p\        V	\        4      '       g*   \        P                  P
                  P                  V	4      p	\        P                  P
                  P                  VP                  4       4      vr¼p\        \        P                  P
                  P                  V4      4      p\        \        P                  P
                  P                  V4      4      p\        \        P                  P
                  P                  V4      4      pVP                  4        VP                  4        V P                  4        RVRVRVRVRVRV	/p\        V4      p\        WO4      p\        W_4      p\        Wo4      p\        W�4      p\        P                  ! V4      pVR8H  ;'       d     \        P                  P                   '       * p\        P"                  P%                  V4      pVP'                  4       P(                  pRpR	p. p. p\+        WV3/ VB pV
^,          '       EdŽ   \        P                  P,                  '       d{   V^8X  dt   \        P                  ;P.                  ^,          un        \        P0                  P3                  V4      p\        P0                  P3                  V 4      p \+        WV3/ VB pMŠ\        P                  P
                  P                  p\        P4                  ! V! VP6                  4      4      p\        P0                  P9                  VV4      p\        P0                  P9                  V V4      p W.pV'       Eg^   \        P:                  P<                  P?                  R
4      '       Ed.   \A        V4      '       Ed   V'       Eg   \C        V4      '       Ed   V! \E        VP                  4       ^ ,          .VP                  4       R,          O4      VVVR7       Fº  pV^8X  g   K  Rp\F        PH                  ! V3RW3RVRV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          RV	R\        PJ                  PL                  PN                  RVPP                  RVPR                  /VPT                  B  K¼  	  RpR	p. p. p\W        WV3/ VB p V
^ ,          '       EdŽ   \        P                  P,                  '       d{   V^8X  dt   \        P                  ;P.                  ^,          un        \        P0                  P3                  V 4      p \        P0                  P3                  V4      p\W        WV3/ VB p MŠ\        P                  P
                  P                  p\        P4                  ! V! V P6                  4      4      p\        P0                  P9                  V V4      p \        P0                  P9                  VV4      pW.pV'       Eg^   \        P:                  P<                  PY                  R
4      '       Ed.   \A        V 4      '       Ed   V'       Eg   \C        V4      '       Ed   V! \E        VP                  4       ^ ,          .VP                  4       R,          O4      VVVR7       Fº  pV^8X  g   K  Rp\Z        PH                  ! V3RW3RV RV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          RV^ ,          RV^,          RV	R\        PJ                  PL                  PN                  RVPP                  RVPR                  /VPT                  B  K¼  	  V'       g   V'       g   \]        V VVVVVVVVV	V
4      # V
^,          '       d‡   \        P:                  P<                  P?                  R4      '       g	   V'       g?   VP_                  \`        Pc                  VV. R"OVP                  4       VVVVVV	R7
      4       \e        RVVV4      w  pp!V
^ ,          '       d‡   \        P:                  P<                  PY                  R4      '       g	   V'       g?   VP_                  \f        Pc                  VV . R#OVP                  4       VVVVVV	R7
      4       \e        R VVV 4      w  pp!R	p"V
^,          '       dJ   VeF   \h        \j        Pl                  ,          ! V ^ .\o        \q        ^V^,           4      4      ,           R!7      p"VVV"3# )$aŒ  
Lowering function for backward convolution operator.

TRITON kernels are only registered for supported configurations (currently 2D convolutions).
For unsupported dimensions or configurations, the choices list remains empty,
triggering an automatic fallback to the ATen reference implementation.
This ensures correctness for all cases while enabling TRITON optimizations only where implemented.
rJ   rK   rL   rN   rO   rQ   rµ   FNrŸ   r¦   r§   Tr    r—   r©   rª   r­   r®   r«   r¬   r¶   r·   r    r°   r¤   r¥   rž   )
r    r—   rê   r%  rJ   rK   rL   rN   rO   rQ   Úconvolution_bwd_weight)
r    r—   rê   r+  rJ   rK   rL   rN   rO   rQ   Úconvolution_bwd_input)Úaxis)r%  rJ   rK   rL   rN   rO   rQ   )r+  rJ   rK   rL   rN   rO   rQ   )9r¹   rº   rP   r   rc   rd   r»   re   r�   rÉ   r€   r   r   r¾   rA   rà   rá   rÔ   rØ   ro   rÙ   r  r“   rÊ   rƒ   rË   r”   rJ   r„   rÎ   rÏ   Ú%_use_conv_bwd_weight_autotune_backendr   r   r   Úconv2d_bwd_weight_templater×   rÜ   rÝ   r÷   r¤   r¥   r™   r  Ú$_use_conv_bwd_input_autotune_backendrâ   Ú"aten_convolution_backward_fallbackr…   Úext_kn_aten_dwrÒ   r   Úext_kn_aten_dxr‚   rh   Úsumru   rw   )#r  r  rZ   r  rJ   rK   rL   rN   rO   rQ   r  rç   r‹   rè   r™   rš   ræ   rñ   rï   r¨   Úhas_triton_dw_choicesr  Ú
choices_dwÚargs_wÚ	layout_dwrp   Ústride_orderrî   Úhas_triton_dx_choicesr	  Ú
choices_dxÚargs_xÚ	layout_dxr‰   Údbs#   &&&&&&&&&&&                        r(   Úconvolution_backward_loweringrR  ý  s  € ô, �6‹]€FÜ�G‹n€GÜ�X‹€HÜ˜>Ó*€NÜ�fœc×"Ò"Ü—‘×!Ñ!×+Ñ+¨FÓ3ˆä'(§w¡w×'7Ñ'7×'EÑ'EÀfÇoÁoÓFWÓ'XÐ$€H˜ô ”1—7‘7×#Ñ#×1Ñ1°&Ó9Ó:€FÜ”A—G‘G×$Ñ$×2Ñ2°7Ó;Ó<€GÜ”Q—W‘W×%Ñ%×3Ñ3°HÓ=Ó>€Hà	‡M�M„OØ
‡N�NÔØ×ÑÔð 	�&Ø�7Ø�HØ�jØ˜.Ø�&ð €Fô ˆ|Ó€DÜ˜&Ó'€FÜ˜7Ó)€GÜ˜HÓ+€HÜ! .Ó7€Nä×$Ò$ UÓ+€Kð *¨VÑ3×MÐM¼E¿M¹M×<MÑ<MÔ8MÐä—9‘9×-Ñ-¨kÓ:€LØ—‘Ó"×+Ñ+€Jà!ÐØ	€BØ€JØ€FÜ& x¸ÑIÀ&ÑI€IØ�1‡~…~Ü�7‰7××Ð $¨!¤)Ü�G‰G×*Ò*¨aÕ/Õ*Ü—O‘O×9Ñ9¸%Ó@ˆEÜ—‘×<Ñ<¸XÓFˆHÜ.¨xÀÑQÈ&ÑQ‰Iä—G‘G×$Ñ$×2Ñ2ˆEÜ×.Ò.©u°Y×5EÑ5EÓ/FÓGˆLÜ—O‘O×8Ñ8¸ÀÓMˆEÜ—‘×;Ñ;¸HÀlÓSˆHàÐ"ˆ÷ (Ð'Ü—‘×%Ñ%×KÑKÈH×UÓUÜ# I×.Ó.ß�JÜ˜×(Ó(á#Ü˜uŸ~™~Ó/°Õ2ÐJ°U·^±^Ó5EÀbÕ5IÐJÓKØØØ%÷	�ð ˜1–9Ø,0Ð)Ü.×BÒBØ"ñà%*Ð$5ðð  )ðð ".¨a¥ð	ð
 ".¨a¥ðð #*¨!¥*ðð #*¨!¥*ðð "(¨¥ðð "(¨¥ðð $,¨A¥;ðð $,¨A¥;ðð  &ðô $)§>¡>×#7Ñ#7×#BÑ#Bðð $'§>¡>ðð #&§-¡-ðð  Ÿ*™*ô!ñð: "ÐØ	€BØ€JØ€FÜ% h°vÑHÀÑH€IØ�1‡~…~Ü�7‰7××Ð $¨!¤)Ü�G‰G×*Ò*¨aÕ/Õ*Ü—‘×<Ñ<¸XÓFˆHÜ—_‘_×:Ñ:¸6ÓBˆFÜ-¨h¸vÑPÈÑP‰Iä—G‘G×$Ñ$×2Ñ2ˆEÜ×.Ò.©u°Y×5EÑ5EÓ/FÓGˆLÜ—‘×;Ñ;¸HÀlÓSˆHÜ—_‘_×9Ñ9¸&À,ÓOˆFàÐ#ˆ÷ (Ð'Ü—‘×%Ñ%×JÑJÈ8×TÓTÜ# I×.Ó.ß�JÜ˜×(Ó(ñ $Ü˜uŸ~™~Ó/°Õ2ÐJ°U·^±^Ó5EÀbÕ5IÐJÓKØØØ%÷	�ð ˜1–9Ø,0Ð)Ü-×AÒAØ"ñà%-Ð$6ðð  )ðð ".¨a¥ð	ð
 ".¨a¥ðð #*¨!¥*ðð #*¨!¥*ðð "(¨¥ðð "(¨¥ðð $,¨A¥;ðð $,¨A¥;ðð  &ðô $)§>¡>×#7Ñ#7×#BÑ#Bðð $'§>¡>ðð #&§-¡-ðð  Ÿ*™*ô!ñ÷< !×)>Ü1ØØØØØØØØØØØó
ð 	
ð �1‡~„~ä�O‰O×!Ñ!×GÑGÈ×OÒOß(à×ÑÜ×#Ñ#Ø &Ø$ò3ð #ŸO™OÓ-Ø!Ø#Ø%Ø)Ø#1Ø!ð% $ó ôô2 *Ø$ j°&¸)ó
‰ˆˆAð �1‡~„~ä�O‰O×!Ñ!×FÑFÀv×NÒNß(à×ÑÜ×#Ñ#Ø &Ø$ò3ð "ŸN™NÓ,Ø!Ø#Ø%Ø)Ø#1Ø!ð% $ó ôô2 *Ø# Z°¸ó
‰ˆˆAð 
€BØ�1‡~„~˜*Ò0ÜŒt�x‰xŽ[˜¨¨¬d´5¸¸DÀ1½HÓ3EÓ.FÕ(FÔGˆà��Bˆ<Ðr*   c                ó  € V P                   \        P                  P                  P                  P
                  8w  d   \        R V P                    24      h\        P                  P                  '       d   W3# \        V .VO5/ VB # )z*expected convolution_backward target, got )rú   rA   rg   rh   r  rû   r¼   r   rc   r“   r
   rü   s   &*,r(   Ú constrain_conv_bwd_to_fx_stridesrT    sm   € Ø‡~�~œŸ™Ÿ™×<Ñ<×DÑDÔDÜØ8¸¿¹Ð8HÐIó
ð 	
ô 	‡w�w××ÐØˆ|Ðä& wÐ@°Ò@¸Ñ@Ð@r*   )LÚ
__future__r   ÚloggingÚtypingr   r   rA   Ú-torch._inductor.codegen.rocm.ck_conv_templater   Ú r   r   Úloweringr	   r
   r   r   r‚   r   Úselect_algorithmr   r   r   r   rÏ   r   r   r   r   r   r   Úvirtualizedr   Ú	mm_commonr   Úcollections.abcr   r   Ú	getLoggerrR   Úlogrg   rh   r)   r-   r2   rÖ   ÚLOOP_BODY_2DrÛ   ÚLOOP_BODY_3Drß   ri   rû   rÑ   rF   rÓ   rH   rs   r|   rŽ   rø   rþ   r  r  r(  rE  r-  rF  r5  rB  r9  râ   r  rD  rR  rT  r!   r*   r(   Ú<module>rc     s  ðå "ã ß +ã Ý Rç ÷õ ÷ó ÷÷ õ Ý +÷ Ý(åà×Ò˜Ó!€ð ‡y�y‡~�~€ð ñó ðð ñó ðð ñó ðñ +Ø	Ø	ÙÐ 7Ó8Ø'+ô	Ð ð€ð8ñ
 !Ø	Ø	ð3ðh õi4ðjõkCðH õIDðJõKUôY€ðv€ñB !Ø	Ø	ð;ðx õy<ðzõ{Oð` õaPðbõccôg€ñR &Ø	×ÑØØØ× Ñ ×(Ñ(ô	Ð òñ )¨¸Ó>Ð ô�yô õ(òVò3ñ. �4×#Ñ#Ó$ôHó %ðHñV
 �4×$Ñ$Ó%ñó &ðò(Añ �d×&Ñ&Ð(DÔ Eõ&õR&òR&ñR $ L°$Ó7€ò&ñR $ L°$Ó7€ð ñó ðñ ,Ø	#Ø	ÙÐ :Ó;ôÐ ð ñó ðñ +Ø	"Ø	ÙÐ 9Ó:ôÐ ñ &6°d×6OÑ6O×6WÑ6WÓ%XÐ "ñ �4×,Ñ,×4Ñ4Ó5ôKó 6ðKò\Añ �d×/Ñ/Ð1QÖ Rr*   