Ë
    1²jZe  ã                   ó¢  — 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m	Z	m
Z
 d dlmZ d dlmZ  G d„ d«      Z ed	¬
«       G d„ de«      «       Z ed	¬
«       G d„ de«      «       Z ed	¬
«       G d„ de«      «       Z ed	¬
«       G d„ de«      «       Z ed	¬
«       G d„ de«      «       Z ed	¬
«       G d„ de«      «       Z ed	d	¬«       G d„ de«      «       Z G d„ d«      Zed„ «       Z ed	¬
«       G d„ de«      «       Z ed	d	¬«       G d„ d e«      «       Z ed	d	¬«       G d!„ d"e«      «       Z ed	¬
«       G d#„ d$e«      «       Zd'd%„Zd&„ Zy)(é    )Ú	dataclassÚfieldN)ÚList)Ú_unwrap_if_constexprÚ_unwrap_shapeÚconstexpr_type)Úconstexpr_function)Úgluon_irc                   ó\   — e Zd ZdZed„ «       Zed„ «       Zdee   de	fd„Z
dee   de	fd„Zy)	ÚDistributedLayoutz@
    Base class for distributed memory layouts in Gluon IR.
    c                 ó   — t        | «      S ©N©r   ©Úselfs    új/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/triton/experimental/gluon/language/_layouts.pyÚtypezDistributedLayout.type   ó   € ä˜dÓ#Ð#ó    c                 ó   — t        d«      ‚)Nz-DistributedLayout subclasses must define rank)ÚNotImplementedErrorr   s    r   ÚrankzDistributedLayout.rank   s   € ä!Ð"QÓRÐRr   ÚshapeÚreturnc           	      óh   — t        j                  | |D �cg c]  }t        |«      ‘Œ c}d«      S c c}w ©NF©r
   Úget_layout_viewr   ©r   r   Úss      r   Úformat_tensor_viewz$DistributedLayout.format_tensor_view   ó-   € Ü×'Ñ'¨ÐPUÖ.VÈ1Ô/CÀAÕ/FÒ.VÐX]Ó^Ð^ùÒ.Vó   •/
c           	      óh   — t        j                  | |D �cg c]  }t        |«      ‘Œ c}d«      S c c}w ©NTr   r   s      r   Úformat_hardware_viewz&DistributedLayout.format_hardware_view   ó-   € Ü×'Ñ'¨ÐPUÖ.VÈ1Ô/CÀAÕ/FÒ.VÐX\Ó]Ð]ùÒ.Vr#   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   ÚlistÚintÚstrr!   r&   © r   r   r   r      se   „ ñð ñ$ó ð$ð ñSó ðSð_¨¨S©	ð _°có _ð^¨$¨s©)ð ^¸ô ^r   r   T)Úfrozenc                   ó(   — e Zd Zd„ Zd„ Zed„ «       Zy)Ú
AutoLayoutc                 ó"   — |j                  «       S r   )Úget_auto_layout©r   Úbuilders     r   Ú_to_irzAutoLayout._to_ir"   s   € Ø×&Ñ&Ó(Ð(r   c                  ó   — y)NÚALr0   r   s    r   ÚmanglezAutoLayout.mangle%   ó   € Ør   c                 ó   — t        d«      ‚)NzAutoLayout has no rank©Ú
ValueErrorr   s    r   r   zAutoLayout.rank(   s   € äÐ1Ó2Ð2r   N©r(   r)   r*   r8   r;   r,   r   r0   r   r   r3   r3      s    „ ò)òð ñ3ó ñ3r   r3   c                   ó(   — e Zd Zd„ Zd„ Zed„ «       Zy)ÚCoalescedLayoutc                 ó"   — |j                  «       S r   )Úget_coalesced_layoutr6   s     r   r8   zCoalescedLayout._to_ir0   s   € Ø×+Ñ+Ó-Ð-r   c                  ó   — y)NÚCLr0   r   s    r   r;   zCoalescedLayout.mangle3   r<   r   c                 ó   — t        d«      ‚)NzCoalescedLayout has no rankr>   r   s    r   r   zCoalescedLayout.rank6   s   € äÐ6Ó7Ð7r   Nr@   r0   r   r   rB   rB   -   s    „ ò.òð ñ8ó ñ8r   rB   c                   ó´   ‡ — e Zd ZU dZee   ed<   ee   ed<   ee   ed<   ee   ed<    ee¬«      Z	eee      ed<   ˆ fd„Z
d	„ Zd
efd„Zd„ Zed„ «       Zˆ xZS )ÚBlockedLayoutaû  
    Represents a blocked layout, partitioning a tensor across threads, warps, and CTAs.

    Args:
        size_per_thread (List[int]): Number of elements per thread per dimension.
        threads_per_warp (List[int]): Number of threads per warp per dimension.
        warps_per_cta (List[int]): Number of warps per CTA per dimension.
        order (List[int]): The ordering of dimensions for partitioning.
        cga_layout (Optional[List[List[int]]]): Bases describing how CTAs tile each dimension.
    Úsize_per_threadÚthreads_per_warpÚwarps_per_ctaÚorder©Údefault_factoryÚ
cga_layoutc                 ó*  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t        | j                  «      }t        | j                  «      |k(  sJ ‚t        | j
                  «      |k(  sJ ‚t        | j                  «      |k(  sJ ‚y )NrJ   rK   rL   rM   rP   )	ÚsuperÚ__setattr__r   rJ   rK   rL   rM   rP   Úlen)r   r   Ú	__class__s     €r   Ú__post_init__zBlockedLayout.__post_init__M   sà   ø€ Ü‰ÑÐ-Ô/CÀD×DXÑDXÓ/YÔZÜ‰ÑÐ.Ô0DÀT×EZÑEZÓ0[Ô\Ü‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜GÔ%9¸$¿*¹*Ó%EÔFÜ‰Ñ˜LÔ*>¸t¿¹Ó*OÔPä�4×'Ñ'Ó(ˆÜ�4×(Ñ(Ó)¨TÒ1Ð1Ð1Ü�4×%Ñ%Ó&¨$Ò.Ð.Ð.Ü�4—:‘:‹ $Ò&Ð&Ñ&r   c                 ó�   — |j                  | j                  | j                  | j                  | j                  | j
                  «      S r   )Úget_blocked_layoutrJ   rK   rL   rM   rP   r6   s     r   r8   zBlockedLayout._to_irY   s>   € Ø×)Ñ)Ø× Ñ Ø×!Ñ!Ø×ÑØ�J‰JØ�O‰Oó
ð 	
r   r   c                 ó  — d„ } || j                   «      } || j                  «      } || j                  «      } || j                  «      }| j                  r"dj                  d„ | j                  D «       «      nd}d|› d|› d|› d|› d|› d�S )Nc                 óF   — | €ydj                  t        t        | «      «      S ©NÚ Ú_©ÚjoinÚmapr/   ©Úxs    r   Ú	stringifyz'BlockedLayout.mangle.<locals>.stringifyd   ó   € ØˆyØØ—8‘8œC¤ Q›KÓ(Ð(r   r]   c              3   óZ   K  — | ]#  }d j                  t        t        |«      «      –— Œ% y­w©ú~Nr^   ©Ú.0Úvecs     r   ú	<genexpr>z'BlockedLayout.mangle.<locals>.<genexpr>m   ó   è ø€ ÒQ¸#˜cŸh™h¤s¬3°£}×5ÑQùó   ‚)+r\   ÚB)rJ   rK   rL   rM   rP   r_   )r   rc   rJ   rK   rL   rM   rP   s          r   r;   zBlockedLayout.mangleb   s—   € ò	)ñ
 $ D×$8Ñ$8Ó9ˆÙ$ T×%:Ñ%:Ó;ÐÙ! $×"4Ñ"4Ó5ˆÙ˜$Ÿ*™*Ó%ˆØUY×UdÒUd�S—X‘XÑQÀÇÁÔQÔQÐjlˆ
Ø�?Ð# 1Ð%5Ð$6°a¸°ÀaÈÀwÈaÐPZÈ|Ð[\Ð]Ð]r   c           
      óî   — t        t        | j                  «      t        | j                  «      t        | j                  «      t        | j
                  «      t        d„ | j                  D «       «      f«      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   ©Útuplerh   s     r   rk   z)BlockedLayout.__hash__.<locals>.<genexpr>r   s   è ø€ Ò-T¸S¬e°C¯jÑ-Tùó   ‚)Úhashrr   rJ   rK   rL   rM   rP   r   s    r   Ú__hash__zBlockedLayout.__hash__p   s]   € Ü”U˜4×/Ñ/Ó0´%¸×8MÑ8MÓ2NÔPUÐVZ×VhÑVhÓPiÜ˜4Ÿ:™:Ó&¬Ñ-TÀDÇOÁOÔ-TÓ(TðVó Wð 	Wr   c                 ó,   — t        | j                  «      S r   )rT   rM   r   s    r   r   zBlockedLayout.rankt   ó   € ä�4—:‘:‹Ðr   ©r(   r)   r*   r+   r   r.   Ú__annotations__r   r-   rP   rV   r8   r/   r;   ru   r,   r   Ú__classcell__©rU   s   @r   rI   rI   ;   s{   ø… ñ	ð ˜#‘YÓØ˜3‘iÓØ˜‘9ÓØ�‰9ÓÙ"'¸Ô"=€J��T˜#‘Y‘Ó=ô
'ò
ð^˜ó ^òWð ñó ôr   rI   c                   óp   ‡ — e Zd ZU dZeed<   eed<   ˆ fd„Zd„ Zde	fd„Z
d„ Zed	„ «       Zed
„ «       Zˆ xZS )ÚSliceLayoutzâ
    Represents a layout corresponding to slicing a distributed tensor along one dimension.

    Args:
        dim (int): The dimension index to slice.
        parent (DistributedLayout): The parent layout before slicing.
    ÚdimÚparentc                 ó’   •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       y )Nr~   r   )rR   rS   r   r~   r   ©r   rU   s    €r   rV   zSliceLayout.__post_init__…   s5   ø€ Ü‰Ñ˜EÔ#7¸¿¹Ó#AÔBÜ‰Ñ˜HÔ&:¸4¿;¹;Ó&GÕHr   c                 ól   — |j                  | j                  | j                  j                  |«      «      S r   )Úget_slice_layoutr~   r   r8   r6   s     r   r8   zSliceLayout._to_ir‰   s.   € Ø×'Ñ'Ø�H‰HØ�K‰K×Ñ˜wÓ'ó
ð 	
r   r   c                 óX   — d| j                   › d| j                  j                  «       › d�S )NÚSLr]   )r~   r   r;   r   s    r   r;   zSliceLayout.mangle�   s)   € Ø�D—H‘H�:˜Q˜tŸ{™{×1Ñ1Ó3Ð4°BÐ7Ð7r   c                 óD   — t        | j                  | j                  f«      S r   )rt   r~   r   r   s    r   ru   zSliceLayout.__hash__’   s   € Ü�T—X‘X˜tŸ{™{Ð+Ó,Ð,r   c                 ó4   — | j                   j                  dz
  S )Né   ©r   r   r   s    r   r   zSliceLayout.rank•   s   € à�{‰{×Ñ !Ñ#Ð#r   c                 ó   — | j                   j                  }|sg S | j                   j                  }d| j                  cxk  r|k  sJ ‚ J ‚|D �cg c]$  }|d | j                   || j                  dz   d  z   ‘Œ& c}S c c}w ©Nr   rˆ   )r   rP   r   r~   )r   Úparent_cga_layoutr   Úbasiss       r   rP   zSliceLayout.cga_layout™   sy   € à ŸK™K×2Ñ2ÐÙ ØˆIà�{‰{×ÑˆØ�D—H‘HÔ#˜tÒ#Ð#Ñ#Ð#Ð#ØEVÖW¸E��i�t—x‘xÐ  5¨¯©°A©¨Ð#7Ó7ÒWÐWùÒWs   Á)A;©r(   r)   r*   r+   r.   ry   r   rV   r8   r/   r;   ru   r,   r   rP   rz   r{   s   @r   r}   r}   y   s[   ø… ñð 
ƒHØÓôIò
ð8˜ó 8ò-ð ñ$ó ð$ð ñXó ôXr   r}   c                   ó®   ‡ — e Zd ZU dZeee      ed<   eee      ed<   eee      ed<   eee      ed<   ee   ed<   ˆ fd„Zd„ Zd	„ Z	d
„ Z
ed„ «       Zˆ xZS )ÚDistributedLinearLayouta  
    Represents a linear distributed layout with explicit bases at register, lane, warp, and block levels.
    See: https://arxiv.org/abs/2505.23819 for reference.

    Args:
        reg_bases (List[List[int]]): Bases for register-level distribution.
        lane_bases (List[List[int]]): Bases for lane-level distribution.
        warp_bases (List[List[int]]): Bases for warp-level distribution.
        block_bases (List[List[int]]): Bases for block-level distribution.
        shape (List[int]): The tensor global shape.
    Ú	reg_basesÚ
lane_basesÚ
warp_basesÚblock_basesr   c                 ó–  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t        | j                  «      }| j                  D ]  }t        |«      |k(  rŒJ ‚ | j                  D ]  }t        |«      |k(  rŒJ ‚ | j
                  D ]  }t        |«      |k(  rŒJ ‚ | j                  D ]  }t        |«      |k(  rŒJ ‚ y )Nr‘   r’   r“   r”   r   )	rR   rS   r   r‘   r’   r“   r”   r   rT   ©r   r   r�   rU   s      €r   rV   z%DistributedLinearLayout.__post_init__·   s   ø€ Ü‰Ñ˜K¬°t·~±~Ó)FÔGÜ‰Ñ˜L¬-¸¿¹Ó*HÔIÜ‰Ñ˜L¬-¸¿¹Ó*HÔIÜ‰Ñ˜M¬=¸×9IÑ9IÓ+JÔKÜ‰Ñ˜G¤]°4·:±:Ó%>Ô?ä�4—:‘:‹ˆà—^‘^ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à—_‘_ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à—_‘_ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à×%Ñ%ò 	&ˆEÜ�u“: Ó%Ð%Ð%ñ	&r   c                 ó�   — |j                  | j                  | j                  | j                  | j                  | j
                  «      S r   )Úget_distributed_linear_layoutr‘   r’   r“   r”   r   r6   s     r   r8   zDistributedLinearLayout._to_irÉ   s<   € Ø×4Ñ4°T·^±^ÀTÇ_Á_ÐVZ×VeÑVeÐgk×gwÑgwØ59·Z±ZóAð 	Ar   c                 óŠ   — d| j                   › d| j                  › d| j                  › d| j                  › d| j                  › d�S )NÚDLLr]   )r‘   r’   r“   r”   r   r   s    r   r;   zDistributedLinearLayout.mangleÍ   sI   € Ø�T—^‘^Ð$ A d§o¡oÐ%6°a¸¿¹Ð7HÈÈ$×JZÑJZÐI[Ð[\Ð]a×]gÑ]gÐ\hÐhkÐlÐlr   c                 óP  — t        t        t        t        | j                  «      «      t        t        t        | j                  «      «      t        t        t        | j
                  «      «      t        t        t        | j                  «      «      t        | j                  «      f«      S r   )rt   rr   r`   r‘   r’   r“   r”   r   r   s    r   ru   z DistributedLinearLayout.__hash__Ð   sn   € ÜÜ”#”e˜TŸ^™^Ó,Ó-Ü”#”e˜TŸ_™_Ó-Ó.Ü”#”e˜TŸ_™_Ó-Ó.Ü”#”e˜T×-Ñ-Ó.Ó/Ü�$—*‘*Óð
ó ð 	r   c                 ó,   — t        | j                  «      S r   )rT   r   r   s    r   r   zDistributedLinearLayout.rankÙ   rw   r   )r(   r)   r*   r+   r   r.   ry   rV   r8   r;   ru   r,   r   rz   r{   s   @r   r�   r�   ¤   sv   ø… ñ
ð �D˜‘I‰ÓØ�T˜#‘Y‘ÓØ�T˜#‘Y‘ÓØ�d˜3‘i‘Ó Ø�‰9Óô&ò$Aòmòð ñó ôr   r�   c                   óz   ‡ — e Zd ZU dZeed<   eed<   eed<   ˆ fd„Zd„ Zde	fd„Z
d	„ Zed
„ «       Zed„ «       Zˆ xZS )ÚDotOperandLayouta
  
    Represents a layout for a dot operand.

    Args:
        operand_index (int): 0 for LHS and 1 for RHS of the dot operation.
        parent (DistributedLayout): The parent layout, representing the MMA.
        k_width (int): Number of elements per 32-bits.
    Úoperand_indexr   Úk_widthc                 óØ   •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       y )NrŸ   r   r    )rR   rS   r   rŸ   r   r    r�   s    €r   rV   zDotOperandLayout.__post_init__ì   sP   ø€ Ü‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜HÔ&:¸4¿;¹;Ó&GÔHÜ‰Ñ˜IÔ';¸D¿L¹LÓ'IÕJr   c                 ó‚   — |j                  | j                  | j                  j                  |«      | j                  «      S r   )Úget_dot_operand_layoutrŸ   r   r8   r    r6   s     r   r8   zDotOperandLayout._to_irñ   s4   € Ø×-Ñ-¨d×.@Ñ.@À$Ç+Á+×BTÑBTÐU\ÓB]Ð_c×_kÑ_kÓlÐlr   r   c                 ór   — d| j                   › d| j                  j                  «       › d| j                  › d�S )NÚDOr]   )rŸ   r   r;   r    r   s    r   r;   zDotOperandLayout.mangleô   s6   € Ø�D×&Ñ&Ð' q¨¯©×);Ñ);Ó)=Ð(>¸aÀÇÁ¸~ÈRÐPÐPr   c                 óZ   — t        | j                  | j                  | j                  f«      S r   )rt   rŸ   r   r    r   s    r   ru   zDotOperandLayout.__hash__÷   s"   € Ü�T×'Ñ'¨¯©°d·l±lÐCÓDÐDr   c                 ó.   — | j                   j                  S r   r‰   r   s    r   r   zDotOperandLayout.rankú   s   € à�{‰{×ÑÐr   c                 óV  ‡— t        t        | j                  dg «      «      xs g }|sg S | j                  j                  Št	        ˆfd„|D «       «      sJ ‚| j
                  dk(  r‰dz
  n‰dz
  }d|cxk  r‰k  sJ ‚ J ‚g }|D ]#  }t        |«      }d||<   |j                  |«       Œ% |S )NrP   c              3   ó:   •K  — | ]  }t        |«      ‰k(  –— Œ y ­wr   ©rT   )ri   r�   r   s     €r   rk   z.DotOperandLayout.cga_layout.<locals>.<genexpr>  s   øè ø€ ÒE¨%”3�u“: Õ%ÑEùs   ƒr   rˆ   é   )r   Úgetattrr   r   ÚallrŸ   r-   Úappend)r   rŒ   Úk_dimÚderivedr�   Ú	new_basisr   s         @r   rP   zDotOperandLayout.cga_layoutþ   s½   ø€ ä0´¸¿¹ÀlÐTVÓ1WÓXÒ^Ð\^ÐÙ ØˆIà�{‰{×ÑˆÜÓEÐ3DÔEÔEÐEÐEà ×.Ñ.°!Ò3��q’¸À¹ˆØ�EÔ ˜DÒ Ð Ñ Ð Ð àˆØ&ò 	&ˆEÜ˜U›ˆIØ ˆI�eÑØ�N‰N˜9Õ%ð	&ð ˆr   rŽ   r{   s   @r   rž   rž   Þ   sc   ø… ñð ÓØÓØƒLôKò
mðQ˜ó QòEð ñ ó ð ð ñó ôr   rž   )r1   Úeqc                   ó¤   ‡ — e Zd ZU dZee   ed<   ee   ed<   ee   ed<    ee¬«      Z	eee      ed<   ˆ fd„Z
d„ Zd	efd
„Zd„ Zed„ «       Zˆ xZS )ÚNVMMADistributedLayouta_  
    Represents a layout for NVIDIA MMA (tensor core) operations.

    Args:
        version (List[int]): Version identifier for the MMA instruction.
        warps_per_cta (List[int]): Number of warps per CTA.
        instr_shape (List[int]): Instruction shape for MMA.
        cga_layout (Optional[List[List[int]]]): Bases describing CTA tiling.
    ÚversionrL   Úinstr_shaperN   rP   c                 ó  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       y )Nrµ   rL   r¶   rP   )rR   rS   r   rµ   rL   r¶   rP   r�   s    €r   rV   z$NVMMADistributedLayout.__post_init__"  sk   ø€ Ü‰Ñ˜IÔ';¸D¿L¹LÓ'IÔJÜ‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜MÔ+?À×@PÑ@PÓ+QÔRÜ‰Ñ˜LÔ*>¸t¿¹Ó*OÕPr   c                 óz   — |j                  | j                  | j                  | j                  | j                  «      S r   )Úget_mma_layoutrµ   rL   rP   r¶   r6   s     r   r8   zNVMMADistributedLayout._to_ir(  s5   € Ø×%Ñ%Ø�L‰LØ×ÑØ�O‰OØ×Ñó	
ð 	
r   r   c           	      ó¼   — | j                   r"dj                  d„ | j                   D «       «      nd}d| j                  › d| j                  › d| j                  › d|› d�	S )Nr]   c              3   óZ   K  — | ]#  }d j                  t        t        |«      «      –— Œ% y­wrf   r^   rh   s     r   rk   z0NVMMADistributedLayout.mangle.<locals>.<genexpr>1  rl   rm   r\   ÚMMA_Ú_MMA)rP   r_   rµ   rL   r¶   ©r   rP   s     r   r;   zNVMMADistributedLayout.mangle0  sY   € ØUY×UdÒUd�S—X‘XÑQÀÇÁÔQÔQÐjlˆ
Ø�d—l‘l�^ 1 T×%7Ñ%7Ð$8¸¸$×:JÑ:JÐ9KÈ1ÈZÈLÐX\Ð]Ð]r   c           	      óÆ   — t        t        | j                  «      t        | j                  «      t        | j                  «      t        d„ | j
                  D «       «      f«      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rq   rh   s     r   rk   z2NVMMADistributedLayout.__hash__.<locals>.<genexpr>6  ó   è ø€ ÒA¨#œ5 Ÿ:ÑAùrs   )rt   rr   rµ   rL   r¶   rP   r   s    r   ru   zNVMMADistributedLayout.__hash__4  sN   € Ü”U˜4Ÿ<™<Ó(¬%°×0BÑ0BÓ*CÄUÈ4×K[ÑK[ÓE\ÜÑA°·±ÔAÓAðCó Dð 	Dr   c                 ó,   — t        | j                  «      S r   )rT   rL   r   s    r   r   zNVMMADistributedLayout.rank8  s   € ä�4×%Ñ%Ó&Ð&r   rx   r{   s   @r   r´   r´     sr   ø… ñð �#‰YÓØ˜‘9ÓØ�c‘ÓÙ"'¸Ô"=€J��T˜#‘Y‘Ó=ôQò
ð^˜ó ^òDð ñ'ó ô'r   r´   c                   óL   — e Zd ZdZed„ «       Zdee   defd„Z	dee   defd„Z
y)ÚSharedLayoutz;
    Base class for shared memory layouts in Gluon IR.
    c                 ó   — t        | «      S r   r   r   s    r   r   zSharedLayout.typeB  r   r   r   r   c           	      óh   — t        j                  | |D �cg c]  }t        |«      ‘Œ c}d«      S c c}w r   r   r   s      r   r!   zSharedLayout.format_tensor_viewF  r"   r#   c           	      óh   — t        j                  | |D �cg c]  }t        |«      ‘Œ c}d«      S c c}w r%   r   r   s      r   r&   z!SharedLayout.format_hardware_viewI  r'   r#   N)r(   r)   r*   r+   r,   r   r-   r.   r/   r!   r&   r0   r   r   rÄ   rÄ   =  sO   „ ñð ñ$ó ð$ð_¨¨S©	ð _°có _ð^¨$¨s©)ð ^¸ô ^r   rÄ   c                 ó�  — |s| S t        | «      }t        |d   «      }dg|z  }|D ]7  }t        |«      |k(  sJ ‚t        |«      D ]  }t        ||   ||   «      ||<   Œ Œ9 t        |«      D ]  }||   dk(  rd||<   Œ||xx   dz  cc<   Œ t        |«      D ]-  }||   ||   z  dk(  sJ d| › d|› �«       ‚||xx   ||   z  cc<   Œ/ |S )Nr   rˆ   r«   zShape z  is not divisible by CGA layout )r-   rT   ÚrangeÚmax)r   rP   Úshape_per_ctar   Ú	cga_shaper�   Úir~   s           r   Ú_get_shape_per_ctarÎ   M  s  € áØˆÜ˜“K€MÜˆz˜!‰}Ó€DØ��d‘
€IØò 7ˆÜ�5‹z˜TÒ!Ð!Ð!Ü�t“ò 	7ˆAÜ˜y¨™|¨U°1©XÓ6ˆI�aŠLñ	7ð7ô
 �4‹[ò ˆØ�Q‰<˜1ÒØˆI�aŠLà�a‹L˜AÑŒLð	ô
 �T‹{ò .ˆØ˜SÑ! I¨c¡NÑ2°aÒ7Ðu¸6À%ÀÐHhÐisÐhtÐ9uÓuÐ7Ø�cÓ˜y¨™~Ñ-Ôð.ð Ðr   c                   ó¾   ‡ — e Zd ZU dZeed<   eed<   dZeed<   dZeed<   dZ	eed<    e
e¬	«      Zeee      ed
<   ˆ fd„Zd„ Zeedd„«       «       Zdefd„Zd„ Zˆ xZS )ÚNVMMASharedLayoutaÂ  
    Represents a layout for shared memory suitable for NVIDIA MMA operations.

    Args:
        swizzle_byte_width (int): Width in bytes for swizzling.
        element_bitwidth (int): Bitwidth of element type.
        rank (int): Rank of the tensor.
        transposed (bool): Whether the layout is transposed.
        fp4_padded (bool): Whether FP4 padding is used.
        cga_layout (Optional[List[List[int]]]): Bases describing CTA tiling.
    Úswizzle_byte_widthÚelement_bitwidthr«   r   FÚ
transposedÚ
fp4_paddedrN   rP   c                 ó¦  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       | j                  xs g }|rt        |d   «      | j                  k(  sJ ‚t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        |«      «       | j                  dv sJ ‚| j                  d	v sJ ‚| j                  r-| j                  d
k(  sJ d«       ‚| j                  dk(  sJ d«       ‚y y )NrÑ   rÒ   rÓ   rÔ   r   r   rP   )é   é   é    é@   )r   rØ   rÙ   é€   rÚ   z+fp4_padded only supports 128 byte swizzlingrÖ   z3fp4_padded is only supported for element_bitwidth=8)
rR   rS   r   rÑ   rÒ   rÓ   rÔ   rP   rT   r   )r   rP   rU   s     €r   rV   zNVMMASharedLayout.__post_init__x  s2  ø€ Ü‰ÑÐ0Ô2FÀt×G^ÑG^Ó2_Ô`Ü‰ÑÐ.Ô0DÀT×EZÑEZÓ0[Ô\Ü‰Ñ˜LÔ*>¸t¿¹Ó*OÔPÜ‰Ñ˜LÔ*>¸t¿¹Ó*OÔPð —_‘_Ò*¨ˆ
ÙÜ�z !‘}Ó%¨¯©Ò2Ð2Ð2ä‰Ñ˜FÔ$8¸¿¹Ó$CÔDÜ‰Ñ˜LÔ*>¸zÓ*JÔKà×$Ñ$¨Ñ7Ð7Ð7Ø×&Ñ&Ð*:Ñ:Ð:Ð:à�?Š?Ø×*Ñ*¨cÒ1Ð`Ð3`Ó`Ð1Ø×(Ñ(¨AÒ-ÐdÐ/dÓdÑ-ð r   c                 ó¦   — |j                  | j                  | j                  | j                  | j                  | j
                  | j                  «      S r   )Úget_nvmma_shared_layoutrÑ   rÒ   rÓ   rÔ   rP   r   r6   s     r   r8   zNVMMASharedLayout._to_ir�  sC   € Ø×.Ñ.Ø×#Ñ#Ø×!Ñ!Ø�O‰OØ�O‰OØ�O‰OØ�I‰Ió
ð 	
r   c                 óx  — |rdnd}|€| nt        | |«      }t        | «      }|r|dd |dd z   }|d   |z  }||j                  z  dz  }	|	dk\  r|	dz  dk(  rd}
n"|	dk\  r|	dz  dk(  rd}
n|	d	k\  r|	d	z  dk(  rd	}
nd}
d}|dd D ]  }||z  }Œ	 t        | «      dk  s|dk  rd}
t        |
|j                  ||||¬
«      S )zØReturns an NVMMASharedLayout with default swizzling for a given shape.

        This picks the largest swizzle pattern compatible with the shape, which
        allows emitting the fewest TMA or MMA messages.
        r«   rˆ   NéÿÿÿÿrÖ   rÚ   r   rÙ   rØ   )rÑ   rÒ   r   rÓ   rÔ   rP   )rÎ   rT   Úprimitive_bitwidthrÐ   )Úblock_shapeÚdtyperÓ   rÔ   rP   Úpacking_factorrË   r   Úcontig_dim_sizeÚcontig_dim_bytesrÑ   Úflatten_outer_dimÚsizes                r   Úget_default_forz!NVMMASharedLayout.get_default_for—  s+  € ñ )™¨aˆØ'1Ð'9™Ô?QÐR]Ð_iÓ?jˆÜ�;ÓˆÙØ)¨!¨"Ð-°¸b¸qÐ0AÑAˆMØ'¨Ñ+¨nÑ<ˆØ*¨U×-EÑ-EÑEÈÑJÐØ˜sÒ"Ð'7¸#Ñ'=ÀÒ'BØ!$ÑØ Ò#Ð(8¸2Ñ(=ÀÒ(BØ!#ÑØ Ò#Ð(8¸2Ñ(=ÀÒ(BØ!#Ñà!"ÐàÐØ! # 2Ð&ò 	&ˆDØ Ñ%Ñð	&äˆ{Ó˜aÒÐ#4°qÒ#8Ø!"Ðä Ø1Ø"×5Ñ5ØØ!Ø!Ø!ô
ð 	
r   r   c                 óÖ   — | j                   r"dj                  d„ | j                   D «       «      nd}d| j                  › d| j                  › d| j                  › d| j
                  › d|› d�S )Nr]   c              3   óZ   K  — | ]#  }d j                  t        t        |«      «      –— Œ% y­wrf   r^   rh   s     r   rk   z+NVMMASharedLayout.mangle.<locals>.<genexpr>¿  rl   rm   r\   ÚNVMMA_Ú_NVMMA)rP   r_   rÑ   rÒ   rÓ   rÔ   r¾   s     r   r;   zNVMMASharedLayout.mangle¾  sr   € ØUY×UdÒUd�S—X‘XÑQÀÇÁÔQÔQÐjlˆ
Ø˜×/Ñ/Ð0°°$×2GÑ2GÐ1HÈÈ$Ï/É/ÐIZÐZ[Ð\`×\kÑ\kÐ[lÐlmÐnxÐmyÐyð  Að  	Ar   c                 óâ   — t        | j                  | j                  | j                  | j                  | j
                  | j                  r!t        d„ | j                  D «       «      f«      S d f«      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rq   rh   s     r   rk   z-NVMMASharedLayout.__hash__.<locals>.<genexpr>Ä  rÁ   rs   )rt   rÑ   rÒ   r   rÓ   rÔ   rP   rr   r   s    r   ru   zNVMMASharedLayout.__hash__Â  sl   € Ü�T×,Ñ,¨d×.CÑ.CÀTÇYÁYÐPT×P_ÑP_Ðae×apÑapØEIÇ_Â_”UÑA°·±ÔAÓAð`ó að 	aØZ^ð`ó að 	ar   )FFN)r(   r)   r*   r+   r.   ry   r   rÓ   ÚboolrÔ   r   r-   rP   r   rV   r8   Ústaticmethodr	   rç   r/   r;   ru   rz   r{   s   @r   rÐ   rÐ   d  s†   ø… ñ
ð ÓØÓØ€Dˆ#ƒMØ€J�ÓØ€J�ÓÙ"'¸Ô"=€J��T˜#‘Y‘Ó=ôeò*
ð Øò#
ó ó ð#
ðJA˜ó Aöar   rÐ   c                   ó’   ‡ — e Zd ZU dZeed<   eed<   eed<   ee   ed<    ee¬«      Z	eee      ed<   ˆ fd„Z
d	„ Zd
efd„Zd„ Zˆ xZS )ÚSwizzledSharedLayoutaq  
    Represents a generic swizzled shared memory layout.

    Args:
        vec (int): Vector width for swizzling.
        per_phase (int): Elements per swizzle phase.
        max_phase (int): Maximum number of swizzle phases.
        order (List[int]): Dimension ordering for swizzling.
        cga_layout (Optional[List[List[int]]]): Bases describing CTA tiling.
    rj   Ú	per_phaseÚ	max_phaserM   rN   rP   c                 ód  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       y )Nrj   rò   ró   rM   rP   )rR   rS   r   rj   rò   ró   rM   rP   r�   s    €r   rV   z"SwizzledSharedLayout.__post_init__Ù  s€   ø€ Ü‰Ñ˜EÔ#7¸¿¹Ó#AÔBÜ‰Ñ˜KÔ)=¸d¿n¹nÓ)MÔNÜ‰Ñ˜KÔ)=¸d¿n¹nÓ)MÔNÜ‰Ñ˜GÔ%9¸$¿*¹*Ó%EÔFÜ‰Ñ˜LÔ*>¸t¿¹Ó*OÕPr   c                 ó�   — |j                  | j                  | j                  | j                  | j                  | j
                  «      S r   )Úget_swizzled_shared_layoutrj   rò   ró   rM   rP   r6   s     r   r8   zSwizzledSharedLayout._to_irà  s8   € Ø×1Ñ1Ø�H‰HØ�N‰NØ�N‰NØ�J‰JØ�O‰Oó
ð 	
r   r   c                 óè   — d„ }| j                   r"dj                  d„ | j                   D «       «      nd}d| j                  › d| j                  › d| j                  › d || j
                  «      › d|› d�S )Nc                 óF   — | €ydj                  t        t        | «      «      S r[   r^   ra   s    r   rc   z.SwizzledSharedLayout.mangle.<locals>.stringifyë  rd   r   r]   c              3   óZ   K  — | ]#  }d j                  t        t        |«      «      –— Œ% y­wrf   r^   rh   s     r   rk   z.SwizzledSharedLayout.mangle.<locals>.<genexpr>ð  rl   rm   r\   ÚSSS_Ú_SSS)rP   r_   rj   rò   ró   rM   )r   rc   rP   s      r   r;   zSwizzledSharedLayout.mangleé  sq   € ò	)ð
 VZ×UdÒUd�S—X‘XÑQÀÇÁÔQÔQÐjlˆ
Ø�d—h‘h�Z˜q §¡Ð 0°°$·.±.Ð1AÀÁ9ÈTÏZÉZÓCXÐBYÐYZÐ[eÐZfÐfjÐkÐkr   c           
      ó¸   — t        | j                  | j                  | j                  t	        | j
                  «      t	        d„ | j                  D «       «      f«      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rq   rh   s     r   rk   z0SwizzledSharedLayout.__hash__.<locals>.<genexpr>õ  s   è ø€ ÒOvÐ_bÔPUÐVY×PZÑOvùrs   )rt   rj   rò   ró   rr   rM   rP   r   s    r   ru   zSwizzledSharedLayout.__hash__ó  sF   € ÜØ�X‰X�t—~‘~ t§~¡~´u¸T¿Z¹ZÓ7HÌ%ÑOvÐfj×fuÑfuÔOvÓJvÐwóyð 	yr   )r(   r)   r*   r+   r.   ry   r   r   r-   rP   rV   r8   r/   r;   ru   rz   r{   s   @r   rñ   rñ   Ç  sY   ø… ñ	ð 
ƒHØƒNØƒNØ�‰9ÓÙ"'¸Ô"=€J��T˜#‘Y‘Ó=ôQò
ðl˜ó löyr   rñ   c                   ó²   ‡ — e Zd ZU dZeee      ed<   eee      ed<   eee      ed<   ee   ed<   ˆ fd„Zd„ Zde	fd	„Z
d
„ Zeeg fd„«       «       Zd„ Zˆ xZS )ÚPaddedSharedLayouta÷  
    Represents a layout for the access to shared memory. Compared to SwizzledSharedLayout,
    it combined padding and element reordering via linear transformation (e.g. row permutation)
    to avoid shared memory bank conflicts. After every interval tensor elements, the
    corresponding number of padding elements are inserted. If a position corresponds to
    multiple intervals, the padding amounts are summed.

    In the following example of a tensor,
    `eM` represents original elements in the and `pN` represents padded element.

    Before padding, the shared memory looks like:
    [e0, e1,
     e2, e3,
     e4, e5,
     e6, e7,
     ...]

    After padding with interval-padding list [[2, 1], [4, 2]] with an identity remapping,
    the shared memory will be
    [e0, e1, p0,
     e2, e3, p1, p2, p3,
     e4, e5, p4,
     e6, e7, p5, p6, p7,
     ...]

    Furthermore this encoding allows for a linear remapping from the 1-D shared
    memory offset to logical n-D tensor elements. The remapping is given in the form
    of linear bases mapping from offset to [dim0, dim1...dimN-1].
    See LinearLayout.h for more details how linear layouts are applied to remap
    elements.
    Some concrete examples using `xN` and `yN` to mean the logical n-D tensor elements
    and `pN` to mean padding:

    After padding for shape = [8] with interval-padding list [[2, 2]], offset_bases = [[2], [1]] and cga_layout = []:
    [x0, x2, p0 p1, x1, x3]

    After padding for shape = [8, 4] with interval_padding_pairs = [[8, 1]], offset_bases = [[0, 1], [0, 2], /*gap, stride by 2 rows*/[2, 0], [4, 0], [1, 0]]] and cga_layout = []:
    [
        x0y0, x0y1, x0y2, x0y3,
        x2y0, x2y1, x2y2, x2y3,
        p0,
        x4y0, x4y1, x4y2, x4y3,
        x6y0, x6y1, x6y2, x6y3,
        p1,
        x1y0, x1y1, x1y2, x1y3,
        x3y0, x3y1, x3y2, x3y3,
        p2,
        x5y0, x5y1, x5y2, x5y3,
        x7y0, x7y1, x7y2, x7y3,
    ]

    Args:
        interval_padding_pairs (List[int]): List of [interval, padding] pair and both interval and padding must be powers of 2.
        offset_bases (List[int]): Bases for shared memory offsets
        cga_layout (List[List[int]]): Bases for block-level shared memory offsets.
        shape (List[int]): n-D logical shared memory shape
    Úinterval_padding_pairsÚoffset_basesrP   r   c                 óì  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j
                  «      «       t         ‰| �  dt        | j                  «      «       t        | j                  «      }| j                  D ]  }t        |«      |k(  rŒJ ‚ | j
                  D ]  }t        |«      |k(  rŒJ ‚ | j                  «        y )Nr   r  rP   r   )	rR   rS   r   r   r  rP   r   rT   Úverifyr–   s      €r   rV   z PaddedSharedLayout.__post_init__8  sÌ   ø€ Ü‰ÑÐ4´mÀD×D_ÑD_Ó6`ÔaÜ‰Ñ˜N¬M¸$×:KÑ:KÓ,LÔMÜ‰Ñ˜L¬-¸¿¹Ó*HÔIÜ‰Ñ˜G¤]°4·:±:Ó%>Ô?ä�4—:‘:‹ˆà×&Ñ&ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à—_‘_ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&ð 	�‰�r   c                 ó’   — t        | j                  Ž \  }}|j                  ||| j                  | j                  | j
                  «      S r   )Úzipr   Úget_padded_shared_layoutr  rP   r   )r   r7   Ú	intervalsÚpaddingss       r   r8   zPaddedSharedLayout._to_irG  sD   € Ü! 4×#>Ñ#>Ð?Ñˆ	�8Ø×/Ñ/°	¸8ÀT×EVÑEVÐX\×XgÑXgÐim×isÑisÓtÐtr   r   c           	      óp   — d| j                   › d| j                  › d| j                  › d| j                  › d�	S )NÚPaddedShared_r]   Ú_PaddedShared)r   r  rP   r   r   s    r   r;   zPaddedSharedLayout.mangleK  sC   € Ø˜t×:Ñ:Ð;¸1¸T×=NÑ=NÐ<OÈqÐQU×Q`ÑQ`ÐPaÐabÐcg×cmÑcmÐbnÐn{Ð|Ð|r   c                 ó”  ‡— | j                   }t        |«      dkD  sJ d«       ‚t        d„ |D «       «      sJ ‚t        |Ž \  }}t	        t        |«      «      }t        |«      t        |«      k(  sJ ‚d„ Št        ˆfd„|D «       «      sJ d«       ‚t        ˆfd„|D «       «      sJ d«       ‚t        | j                  «      }|dkD  sJ d	«       ‚y )
Nr   zVPaddedSharedLayout interval_padding_pairs must have at least one interval-padding pairc              3   ó8   K  — | ]  }t        |«      d k(  –— Œ y­w)r«   Nrª   )ri   Úpairs     r   rk   z,PaddedSharedLayout.verify.<locals>.<genexpr>Q  s   è ø€ Ò4 d”3�t“9 •>Ñ4ùs   ‚c                 ó&   — | dkD  xr | | dz
  z  dk(  S r‹   r0   ©Úns    r   ú<lambda>z+PaddedSharedLayout.verify.<locals>.<lambda>W  ó   €  ! a¡%Ò"<¨A°°Q±©K¸1Ñ,<€ r   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r0   ©ri   r  Úis_power_of_2s     €r   rk   z,PaddedSharedLayout.verify.<locals>.<genexpr>X  s   øè ø€ Ò7¨‘= ×#Ñ7ùó   ƒz;PaddedSharedLayout interval values must all be power of twoc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r0   r  s     €r   rk   z,PaddedSharedLayout.verify.<locals>.<genexpr>Y  s   øè ø€ Ò6¨‘= ×#Ñ6ùr  z:PaddedSharedLayout padding values must all be power of twoz*PaddedSharedLayout order must not be empty)r   rT   r­   r  r-   Úsetr   )r   Úpairsr  r  Úunique_intervalsr   r  s         @r   r  zPaddedSharedLayout.verifyN  sÅ   ø€ Ø×+Ñ+ˆÜ�5‹z˜AŠ~ÐwÐwÓwˆ~ÜÑ4¨eÔ4Ô4Ð4Ð4Ü! 5˜kÑˆ	�8ä¤ I£Ó/ÐÜÐ#Ó$¬¨I«Ò6Ð6Ð6á<ˆÜÓ7¨YÔ7Ô7ÐvÐ9vÓvÐ7ÜÓ6¨XÔ6Ô6ÐtÐ8tÓtÐ6ä�4—:‘:‹ˆØ�aŠxÐEÐEÓE‰xr   c           	      ó˜  ‡
— t        |«      t        |«      k(  sJ ‚d„ Š
t        ˆ
fd„|D «       «      sJ ‚t        |«      }|rt        ||«      n|}g }|D ]c  }t        t	        t        j                  ||   «      «      «      D ]4  }|j                  t        |«      D �	cg c]  }	|	|k(  rd|z  nd‘Œ c}	«       Œ6 Œe t        | |||«      S c c}	w )zžReturns a PaddedSharedLayout with the given interval and padding pairs and an identity mapping as the linear component for the given shape and order.
        c                 ó&   — | dkD  xr | | dz
  z  dk(  S r‹   r0   r  s    r   r  z6PaddedSharedLayout.with_identity_for.<locals>.<lambda>d  r  r   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r0   r  s     €r   rk   z7PaddedSharedLayout.with_identity_for.<locals>.<genexpr>e  s   øè ø€ Ò3¨‘= ×#Ñ3ùr  rˆ   r   )	rT   r­   rÎ   rÉ   r.   ÚmathÚlog2r®   rÿ   )r   r   rM   rP   r   rË   r  r~   r�   rÍ   r  s             @r   Úwith_identity_forz$PaddedSharedLayout.with_identity_for^  sÖ   ø€ ô
 �5‹zœS ›ZÒ'Ð'Ð'Ù<ˆÜÓ3¨UÔ3Ô3Ð3Ð3ä�5‹zˆÙAKÔ*¨5°*Ô=ÐQVˆàˆØò 	ZˆCÜœs¤4§9¡9¨]¸3Ñ-?Ó#@ÓAÓBò Z�Ø×#Ñ#ÌEÐRVËKÖ$XÀq°1¸²8 Q¨%¢ZÀÑ%BÒ$XÕYñZð	Zô "Ð"8¸,È
ÐTYÓZÐZùò %Ys   ÂCc           
      ó  — t        t        t        t        | j                  «      «      t        t        t        | j                  «      «      t        t        t        | j
                  «      «      t        | j                  «      f«      S r   )rt   rr   r`   r   r  rP   r   r   s    r   ru   zPaddedSharedLayout.__hash__q  s^   € Ü”Uœ3œu d×&AÑ&AÓBÓCÄUÌ3ÌuÐVZ×VgÑVgÓKhÓEiÜœ3œu d§o¡oÓ6Ó7¼¸t¿z¹zÓ9JðLó Mð 	Mr   )r(   r)   r*   r+   r   r.   ry   rV   r8   r/   r;   r  rï   r	   r!  ru   rz   r{   s   @r   rÿ   rÿ   ø  s…   ø… ñ8ðr !  c¡™OÓ+Ø�t˜C‘y‘/Ó!Ø�T˜#‘Y‘ÓØ�‰9Óôòuð}˜ó }òFð  ØØKMò [ó ó ð[ö"Mr   rÿ   c                   ó˜   ‡ — e Zd ZU dZeee      ed<    ee¬«      Z	eee      ed<   dZ
eed<   ˆ fd„Zd„ Zd	efd
„Zed„ «       Zd„ Zˆ xZS )ÚSharedLinearLayoutzGRepresents a shared memory layout defined via an explicit LinearLayout.r  rN   r”   r×   Ú	alignmentc                 óL  •— t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t         ‰| �  dt        | j                  «      «       t        | j                  «      dk7  sJ d«       ‚t        | j                  d   «      }|dkD  sJ d«       ‚| j                  D ]  }t        |«      |k(  rŒJ ‚ | j                  D ]  }t        |«      |k(  rŒJ ‚ | j                  dkD  r| j                  | j                  dz
  z  dk(  sJ d«       ‚y )Nr  r”   r%  r   z1SharedLinearLayout offset_bases must not be emptyrˆ   z<SharedLinearLayout alignment must be a positive power of two)rR   rS   r   r  r”   r   r%  rT   r–   s      €r   rV   z SharedLinearLayout.__post_init__~  s  ø€ Ü‰Ñ˜N¬M¸$×:KÑ:KÓ,LÔMÜ‰Ñ˜M¬=¸×9IÑ9IÓ+JÔKÜ‰Ñ˜KÔ)=¸d¿n¹nÓ)MÔNä�4×$Ñ$Ó%¨Ò*Ð_Ð,_Ó_Ð*Ü�4×$Ñ$ QÑ'Ó(ˆØ�aŠxÐLÐLÓLˆxØ×&Ñ&ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à×%Ñ%ò 	&ˆEÜ�u“: Ó%Ð%Ð%ð	&à�~‰~ Ò! t§~¡~¸¿¹È!Ñ9KÑ'LÐQRÒ&Rð 	KØJó	KÐRÐ&Rr   c                 ód   — |j                  | j                  | j                  | j                  «      S r   )Úget_shared_linear_layoutr  r”   r%  r6   s     r   r8   zSharedLinearLayout._to_ir�  s*   € Ø×/Ñ/°×0AÑ0AÀ4×CSÑCSÐUY×UcÑUcÓdÐdr   r   c                 óV   — d| j                   › d| j                  › d| j                  › d�S )NÚSharedLinear_r]   Ú_SharedLinear)r  r”   r%  r   s    r   r;   zSharedLinearLayout.mangle�  s1   € Ø˜t×0Ñ0Ð1°°4×3CÑ3CÐ2DÀAÀdÇnÁnÐEUÐUbÐcÐcr   c                 ó  — t        | j                  d   «      }dg|z  }t        j                  | j                  | j                  «      D ]'  }t        |«      D ]  \  }}t        ||   |«      ||<   Œ Œ) |D �cg c]  }d|z  ‘Œ	 c}S c c}w )Nr   rˆ   r«   )rT   r  Ú	itertoolsÚchainr”   Ú	enumeraterÊ   )r   r   Ú
max_strideÚbrÍ   Úbir    s          r   r   zSharedLinearLayout.shape“  s�   € ä�4×$Ñ$ QÑ'Ó(ˆØ�S˜4‘Zˆ
Ü—‘ ×!2Ñ!2°D×4DÑ4DÓEò 	7ˆAÜ" 1›ò 7‘��2Ü # J¨q¡M°2Ó 6�
˜1’ñ7ð	7ð  *Ö*˜!��A“Ò*Ð*ùÒ*s   Á7Bc           	      ó¶   — t        t        t        t        | j                  «      «      t        t        t        | j                  «      «      | j
                  f«      S r   )rt   rr   r`   r  r”   r%  r   s    r   ru   zSharedLinearLayout.__hash__œ  sE   € ÜÜ”#”e˜T×.Ñ.Ó/Ó0Ü”#”e˜T×-Ñ-Ó.Ó/Ø�N‰Nð
ó ð 	r   )r(   r)   r*   r+   r   r.   ry   r   r-   r”   r%  rV   r8   r/   r;   r,   r   ru   rz   r{   s   @r   r$  r$  v  sh   ø… áQà�t˜C‘y‘/Ó!Ù#(¸Ô#>€K��d˜3‘i‘Ó>Ø€IˆsÓôKòeðd˜ó dð ñ+ó ð+ör   r$  c                 ó°   — dg|z  }| s|S d }| D ]D  }t        d„ t        |«      D «       d «      }|�|}||xx   dz  cc<   Œ1|rŒ4|€J ‚||xx   dz  cc<   ŒF |S )Nrˆ   c              3   ó2   K  — | ]  \  }}|d k7  sŒ|–— Œ y­w)r   Nr0   )ri   rÍ   Úvs      r   rk   z bases_per_dim.<locals>.<genexpr>¯  s   è ø€ Ò=™$˜!˜Q°a¸1³f”AÑ=ùs   ‚�r«   )Únextr/  )Úbasesr   Úskip_broadcastÚresultÚnon_zero_idxr�   Úidxs          r   Úbases_per_dimr=  ¥  s~   € ØˆS�4‰Z€FáØˆà€Làò 	&ˆäÑ=¤)¨EÓ"2Ô=¸tÓDˆØˆ?ØˆLØ�3‹K˜1ÑŒKÚàÐ+Ð+Ð+Ø�<Ó  AÑ%Ô ð	&ð €Mr   c                 óÐ   — t        | t        «      rt        | j                  t	        |«      «      S t        | t
        t        f«      rt        | j                  |«      S | j                  S r   )	Ú
isinstancer�   r=  r“   rT   r}   rž   rL   r   )Úlayoutr   s     r   rL   rL   »  sQ   € Ü�&Ô1Ô2Ü˜V×.Ñ.´°E³
Ó;Ð;Ü	�Fœ[Ô*:Ð;Ô	<Ü˜VŸ]™]¨EÓ2Ð2à×#Ñ#Ð#r   )T)Údataclassesr   r   r-  r  Útypingr   Útriton.language.corer   r   r   Útriton.runtime.jitr	   Útriton._C.libtritonr
   r   r3   rB   rI   r}   r�   rž   r´   rÄ   rÎ   rÐ   rñ   rÿ   r$  r=  rL   r0   r   r   ú<module>rF     sÛ  ðß (Û Û Ý ç TÑ TÝ 1Ý (÷^ñ ^ñ( �$Ôô
3Ð"ó 
3ó ð
3ñ �$Ôô
8Ð'ó 
8ó ð
8ñ �$Ôô:Ð%ó :ó ð:ñz �$Ôô'XÐ#ó 'Xó ð'XñT �$Ôô6Ð/ó 6ó ð6ñr �$Ôô0Ð(ó 0ó ð0ñf �$˜4Ô ô''Ð.ó ''ó !ð''÷T^ñ ^ð  ñó ðñ, �$Ôô_a˜ó _aó ð_añD �$˜4Ô ô-y˜<ó -yó !ð-yñ` �$˜4Ô ôzM˜ó zMó !ðzMñz �$Ôô*˜ó *ó ð*ó\ó,$r   