ó
    “~i|_  ã                   óN  • S SK JrJr  S SKJr  S SKJrJrJr  S SK	J
r
  S SKr " S S5      r\" SS	9 " S
 S\5      5       r\" SS	9 " S S\5      5       r\" SS	9 " S S\5      5       r\" SS	9 " S S\5      5       r\" SS	9 " S S\5      5       r\" SS	9 " S S\5      5       r\" SSS9 " S S\5      5       r " S S5      r\
S 5       r\" SS	9 " S S\5      5       r\" SSS9 " S S\5      5       r\" SSS9 " S  S!\5      5       r\" SS	9 " S" S#\5      5       rS&S$ jrS% rg)'é    )Ú	dataclassÚfield)ÚList)Ú_unwrap_if_constexprÚ_unwrap_shapeÚconstexpr_type)Úconstexpr_functionNc                   ó8   • \ rS rSrSr\S 5       r\S 5       rSrg)ÚDistributedLayouté	   z8
Base class for distributed memory layouts in Gluon IR.
c                 ó   • [        U 5      $ ©N©r   ©Úselfs    Úh/home/mande/repo/quber/.venv/lib/python3.13/site-packages/triton/experimental/gluon/language/_layouts.pyÚtypeÚDistributedLayout.type   ó   € ä˜dÓ#Ð#ó    c                 ó   • [        S5      e)Nz-DistributedLayout subclasses must define rank)ÚNotImplementedErrorr   s    r   ÚrankÚDistributedLayout.rank   s   € ä!Ð"QÓRÐRr   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úpropertyr   r   Ú__static_attributes__r   r   r   r   r   	   s1   † ñð ñ$ó ð$ð ñSó óSr   r   T)Úfrozenc                   ó0   • \ rS rSrS rS r\S 5       rSrg)Ú
AutoLayouté   c                 ó"   • UR                  5       $ r   )Úget_auto_layout©r   Úbuilders     r   Ú_to_irÚAutoLayout._to_ir   s   € Ø×&Ñ&Ó(Ð(r   c                 ó   • g)NÚALr   r   s    r   ÚmangleÚAutoLayout.mangle   ó   € Ør   c                 ó   • [        S5      e)NzAutoLayout has no rank©Ú
ValueErrorr   s    r   r   ÚAutoLayout.rank    s   € äÐ1Ó2Ð2r   r   N©	r   r   r   r   r+   r/   r!   r   r"   r   r   r   r%   r%      s    † ò)òð ñ3ó ó3r   r%   c                   ó0   • \ rS rSrS rS r\S 5       rSrg)ÚCoalescedLayouté%   c                 ó"   • UR                  5       $ r   )Úget_coalesced_layoutr)   s     r   r+   ÚCoalescedLayout._to_ir(   s   € Ø×+Ñ+Ó-Ð-r   c                 ó   • g)NÚCLr   r   s    r   r/   ÚCoalescedLayout.mangle+   r1   r   c                 ó   • [        S5      e)NzCoalescedLayout has no rankr3   r   s    r   r   ÚCoalescedLayout.rank.   s   € äÐ6Ó7Ð7r   r   Nr6   r   r   r   r8   r8   %   s    † ò.òð ñ8ó ó8r   r8   c                   óº   ^ • \ rS rSr% Sr\\   \S'   \\   \S'   \\   \S'   \\   \S'   \" \	S9r
\\\      \S'   U 4S	 jrS
 rS\4S jrS r\S 5       rSrU =r$ )ÚBlockedLayouté3   aÛ  
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U ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [         TU ]  S[        U R                  5      5        [        U R                  5      n[        R                  U SU R                  5        [        U R                  5      U:X  d   e[        U R
                  5      U:X  d   e[        U R                  5      U:X  d   eg )NrE   rF   rG   rH   rK   )
ÚsuperÚ__setattr__r   rE   rF   rG   rH   ÚlenÚobjectrK   )r   r   Ú	__class__s     €r   Ú__post_init__ÚBlockedLayout.__post_init__E   sÝ   ø€ Ü‰ÑÐ-Ô/CÀD×DXÑDXÓ/YÔZÜ‰ÑÐ.Ô0DÀT×EZÑEZÓ0[Ô\Ü‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜GÔ%9¸$¿*¹*Ó%EÔFä�4×'Ñ'Ó(ˆÜ×Ñ˜4 ¨t¯©Ô?Ü�4×(Ñ(Ó)¨TÓ1Ð1Ð1Ü�4×%Ñ%Ó&¨$Ó.Ð.Ð.Ü�4—:‘:‹ $Ó&Ð&Ñ&r   c                 ó�   • UR                  U R                  U R                  U R                  U R                  U R
                  5      $ r   )Úget_blocked_layoutrE   rF   rG   rH   rK   r)   s     r   r+   ÚBlockedLayout._to_irQ   s>   € Ø×)Ñ)Ø× Ñ Ø×!Ñ!Ø×ÑØ�J‰JØ�O‰Oó
ð 	
r   Úreturnc                 ó&  • S nU" U R                   5      nU" U R                  5      nU" U R                  5      nU" U R                  5      nU R                  (       a"  SR                  S U R                   5       5      OSnSU SU SU SU SU S3$ )Nc                 óH   • U c  gSR                  [        [        U 5      5      $ ©NÚ Ú_©ÚjoinÚmapÚstr©Úxs    r   Ú	stringifyÚ'BlockedLayout.mangle.<locals>.stringify\   ó   € Ø‰yØØ—8‘8œC¤ Q›KÓ(Ð(r   r\   c              3   ó`   #   • U  H$  nS R                  [        [        U5      5      v •  M&     g7f©Ú~Nr]   ©Ú.0Úvecs     r   Ú	<genexpr>Ú'BlockedLayout.mangle.<locals>.<genexpr>e   ó"   é € ÐQÂ¸#˜cŸh™h¤s¬3°£}×5Ð5Âùó   ‚,.r[   ÚB)rE   rF   rG   rH   rK   r^   )r   rc   rE   rF   rG   rH   rK   s          r   r/   ÚBlockedLayout.mangleZ   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           
      óî   • [        [        U R                  5      [        U R                  5      [        U R                  5      [        U R
                  5      [        S U R                   5       5      45      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   ©Útupleri   s     r   rl   Ú)BlockedLayout.__hash__.<locals>.<genexpr>j   s   é € Ð-TÂO¸S¬e°C¯j¨jÂOùó   ‚)Úhashru   rE   rF   rG   rH   rK   r   s    r   Ú__hash__ÚBlockedLayout.__hash__h   s]   € Ü”U˜4×/Ñ/Ó0´%¸×8MÑ8MÓ2NÔPUÐVZ×VhÑVhÓPiÜ˜4Ÿ:™:Ó&¬Ñ-TÀDÇOÂOÓ-TÓ(TðVó Wð 	Wr   c                 ó,   • [        U R                  5      $ r   )rO   rH   r   s    r   r   ÚBlockedLayout.rankl   ó   € ä�4—:‘:‹Ðr   r   ©r   r   r   r   r    r   ÚintÚ__annotations__r   ÚlistrK   rR   r+   r`   r/   ry   r!   r   r"   Ú__classcell__©rQ   s   @r   rC   rC   3   s{   ø‡ ñ	ð ˜#‘YÓØ˜3‘iÓØ˜‘9ÓØ�‰9ÓÙ"'¸Ñ"=€J��T˜#‘Y‘Ó=õ
'ò
ð^˜ô ^òWð ñó ör   rC   c                   ó|   ^ • \ rS rSr% Sr\\S'   \\S'   U 4S jrS r	S\
4S jrS	 r\S
 5       r\S 5       rSrU =r$ )ÚSliceLayoutéq   zÎ
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U ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        g )Nr‡   rˆ   )rM   rN   r   r‡   rˆ   ©r   rQ   s    €r   rR   ÚSliceLayout.__post_init__}   s5   ø€ Ü‰Ñ˜EÔ#7¸¿¹Ó#AÔBÜ‰Ñ˜HÔ&:¸4¿;¹;Ó&GÕHr   c                 ól   • UR                  U R                  U R                  R                  U5      5      $ r   )Úget_slice_layoutr‡   rˆ   r+   r)   s     r   r+   ÚSliceLayout._to_ir�   s.   € Ø×'Ñ'Ø�H‰HØ�K‰K×Ñ˜wÓ'ó
ð 	
r   rW   c                 óX   • SU R                    SU R                  R                  5        S3$ )NÚSLr\   )r‡   rˆ   r/   r   s    r   r/   ÚSliceLayout.mangle‡   s)   € Ø�D—H‘H�:˜Q˜tŸ{™{×1Ñ1Ó3Ð4°BÐ7Ð7r   c                 óD   • [        U R                  U R                  45      $ r   )rx   r‡   rˆ   r   s    r   ry   ÚSliceLayout.__hash__Š   s   € Ü�T—X‘X˜tŸ{™{Ð+Ó,Ð,r   c                 ó4   • U R                   R                  S-
  $ )Né   ©rˆ   r   r   s    r   r   ÚSliceLayout.rank�   s   € à�{‰{×Ñ !Ñ#Ð#r   c                 ó  • U R                   R                  nU(       d  / $ U R                   R                  nSU R                  s=::  a  U:  d   e   eU Vs/ s H#  o3S U R                   X0R                  S-   S  -   PM%     sn$ s  snf ©Nr   r•   )rˆ   rK   r   r‡   )r   Úparent_cga_layoutr   Úbasiss       r   rK   ÚSliceLayout.cga_layout‘   s{   € à ŸK™K×2Ñ2ÐÞ ØˆIà�{‰{×ÑˆØ�D—H‘HÕ#˜tÓ#Ð#Ñ#Ð#Ð#ÙEVÓWÒEV¸E�i�t—x‘xÐ  5¯©°A©¨Ð#7Ô7ÑEVÑWÐWùÒWs   Á*Br   ©r   r   r   r   r    r   r€   r   rR   r+   r`   r/   ry   r!   r   rK   r"   r‚   rƒ   s   @r   r…   r…   q   s[   ø‡ ñð 
ƒHØÓõIò
ð8˜ô 8ò-ð ñ$ó ð$ð ñXó öXr   r…   c                   ó¸   ^ • \ rS rSr% Sr\\\      \S'   \\\      \S'   \\\      \S'   \\\      \S'   \\   \S'   U 4S jrS	 r	S
 r
S r\S 5       rSrU =r$ )ÚDistributedLinearLayoutéœ   aì  
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_basesÚshapec                 ó®  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [        U R                  5      nU R                   H  n[        U5      U:X  a  M   e   U R                   H  n[        U5      U:X  a  M   e   U R
                   H  n[        U5      U:X  a  M   e   U R                   H  n[        U5      U:X  a  M   e   g )Nr¡   r¢   r£   r¤   r¥   )	rM   rN   r   r¡   r¢   r£   r¤   r¥   rO   ©r   r   r›   rQ   s      €r   rR   Ú%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                 ó�   • UR                  U R                  U R                  U R                  U R                  U R
                  5      $ r   )Úget_distributed_linear_layoutr¡   r¢   r£   r¤   r¥   r)   s     r   r+   ÚDistributedLinearLayout._to_irÁ   s<   € Ø×4Ñ4°T·^±^ÀTÇ_Á_ÐVZ×VeÑVeÐgk×gwÑgwØ59·Z±ZóAð 	Ar   c                 óŠ   • SU R                    SU R                   SU R                   SU R                   SU R                   S3$ )NÚDLLr\   )r¡   r¢   r£   r¤   r¥   r   s    r   r/   ÚDistributedLinearLayout.mangleÅ   sI   € Ø�T—^‘^Ð$ A d§o¡oÐ%6°a¸¿¹Ð7HÈÈ$×JZÑJZÐI[Ð[\Ð]a×]gÑ]gÐ\hÐhkÐlÐlr   c                 óP  • [        [        [        [        U R                  5      5      [        [        [        U R                  5      5      [        [        [        U R
                  5      5      [        [        [        U R                  5      5      [        U R                  5      45      $ r   )rx   ru   r_   r¡   r¢   r£   r¤   r¥   r   s    r   ry   Ú DistributedLinearLayout.__hash__È   sn   € ÜÜ”#”e˜TŸ^™^Ó,Ó-Ü”#”e˜TŸ_™_Ó-Ó.Ü”#”e˜TŸ_™_Ó-Ó.Ü”#”e˜T×-Ñ-Ó.Ó/Ü�$—*‘*Óð
ó ð 	r   c                 ó,   • [        U R                  5      $ r   )rO   r¥   r   s    r   r   ÚDistributedLinearLayout.rankÑ   r}   r   r   )r   r   r   r   r    r   r   r€   rR   r+   r/   ry   r!   r   r"   r‚   rƒ   s   @r   rŸ   rŸ   œ   sv   ø‡ ñ
ð �D˜‘I‰ÓØ�T˜#‘Y‘ÓØ�T˜#‘Y‘ÓØ�d˜3‘i‘Ó Ø�‰9Óõ&ò$Aòmòð ñó ör   rŸ   c                   ó†   ^ • \ rS rSr% Sr\\S'   \\S'   \\S'   U 4S jrS r	S\
4S	 jrS
 r\S 5       r\S 5       rSrU =r$ )ÚDotOperandLayoutéÖ   zò
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U ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        g )Nr¶   rˆ   r·   )rM   rN   r   r¶   rˆ   r·   rŠ   s    €r   rR   ÚDotOperandLayout.__post_init__ä   sP   ø€ Ü‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜HÔ&:¸4¿;¹;Ó&GÔHÜ‰Ñ˜IÔ';¸D¿L¹LÓ'IÕJr   c                 ó‚   • UR                  U R                  U R                  R                  U5      U R                  5      $ r   )Úget_dot_operand_layoutr¶   rˆ   r+   r·   r)   s     r   r+   ÚDotOperandLayout._to_iré   s4   € Ø×-Ñ-¨d×.@Ñ.@À$Ç+Á+×BTÑBTÐU\ÓB]Ð_c×_kÑ_kÓlÐlr   rW   c                 ór   • SU R                    SU R                  R                  5        SU R                   S3$ )NÚDOr\   )r¶   rˆ   r/   r·   r   s    r   r/   ÚDotOperandLayout.mangleì   s6   € Ø�D×&Ñ&Ð' q¨¯©×);Ñ);Ó)=Ð(>¸aÀÇÁ¸~ÈRÐPÐPr   c                 óZ   • [        U R                  U R                  U R                  45      $ r   )rx   r¶   rˆ   r·   r   s    r   ry   ÚDotOperandLayout.__hash__ï   s"   € Ü�T×'Ñ'¨¯©°d·l±lÐCÓDÐDr   c                 ó.   • U R                   R                  $ r   r–   r   s    r   r   ÚDotOperandLayout.rankò   s   € à�{‰{×ÑÐr   c                 ó~  ^• [        [        U R                  S/ 5      5      =(       d    / nU(       d  / $ U R                  R                  m[	        U4S jU 5       5      (       d   eU R
                  S:X  a  TS-
  OTS-
  nSUs=::  a  T:  d   e   e/ nU H#  n[        U5      nSXR'   UR                  U5        M%     U$ )NrK   c              3   ó@   >#   • U  H  n[        U5      T:H  v •  M     g 7fr   ©rO   )rj   r›   r   s     €r   rl   Ú.DotOperandLayout.cga_layout.<locals>.<genexpr>ý   s   øé € ÐEÒ3D¨%”3�u“: Ö%Ò3Dùs   ƒr   r•   é   )r   Úgetattrrˆ   r   Úallr¶   r�   Úappend)r   rš   Úk_dimÚderivedr›   Ú	new_basisr   s         @r   rK   ÚDotOperandLayout.cga_layoutö   s¹   ø€ ä0´¸¿¹ÀlÐTVÓ1WÓX×^Ð\^ÐÞ ØˆIà�{‰{×ÑˆÜÔEÑ3DÓE×EÑEÐEÐEà ×.Ñ.°!Ó3��q’¸À¹ˆØ�EÕ ˜DÓ Ð Ñ Ð Ð àˆÛ&ˆEÜ˜U›ˆIØ ˆIÑØ�N‰N˜9Ö%ñ 'ð ˆr   r   r�   rƒ   s   @r   r´   r´   Ö   sc   ø‡ ñð ÓØÓØƒLõKò
mðQ˜ô QòEð ñ ó ð ð ñó ör   r´   )r#   Úeqc                   óª   ^ • \ rS rSr% Sr\\   \S'   \\   \S'   \\   \S'   \" \	S9r
\\\      \S'   U 4S jrS	 rS
\4S jrS r\S 5       rSrU =r$ )ÚNVMMADistributedLayouti
  aC  
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.
ÚversionrG   Úinstr_shaperI   rK   c                 ó  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [        R                  U SU R                  5        g )NrÓ   rG   rÔ   rK   )rM   rN   r   rÓ   rG   rÔ   rP   rK   rŠ   s    €r   rR   Ú$NVMMADistributedLayout.__post_init__  sh   ø€ Ü‰Ñ˜IÔ';¸D¿L¹LÓ'IÔJÜ‰Ñ˜OÔ-AÀ$×BTÑBTÓ-UÔVÜ‰Ñ˜MÔ+?À×@PÑ@PÓ+QÔRä×Ñ˜4 ¨t¯©Õ?r   c                 óz   • UR                  U R                  U R                  U R                  U R                  5      $ r   )Úget_mma_layoutrÓ   rG   rK   rÔ   r)   s     r   r+   ÚNVMMADistributedLayout._to_ir!  s5   € Ø×%Ñ%Ø�L‰LØ×ÑØ�O‰OØ×Ñó	
ð 	
r   rW   c           	      óÆ   • U R                   (       a"  SR                  S U R                    5       5      OSnSU R                   SU R                   SU R                   SU S3	$ )Nr\   c              3   ó`   #   • U  H$  nS R                  [        [        U5      5      v •  M&     g7frg   r]   ri   s     r   rl   Ú0NVMMADistributedLayout.mangle.<locals>.<genexpr>*  rn   ro   r[   ÚMMA_Ú_MMA)rK   r^   rÓ   rG   rÔ   ©r   rK   s     r   r/   ÚNVMMADistributedLayout.mangle)  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           	      óÆ   • [        [        U R                  5      [        U R                  5      [        U R                  5      [        S U R
                   5       5      45      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   rt   ri   s     r   rl   Ú2NVMMADistributedLayout.__hash__.<locals>.<genexpr>/  ó   é € ÐA²¨#œ5 Ÿ:˜:²ùrw   )rx   ru   rÓ   rG   rÔ   rK   r   s    r   ry   ÚNVMMADistributedLayout.__hash__-  sN   € Ü”U˜4Ÿ<™<Ó(¬%°×0BÑ0BÓ*CÄUÈ4×K[ÑK[ÓE\ÜÑA°·²ÓAÓAðCó Dð 	Dr   c                 ó,   • [        U R                  5      $ r   )rO   rG   r   s    r   r   ÚNVMMADistributedLayout.rank1  s   € ä�4×%Ñ%Ó&Ð&r   r   r~   rƒ   s   @r   rÒ   rÒ   
  sr   ø‡ ñð �#‰YÓØ˜‘9ÓØ�c‘ÓÙ"'¸Ñ"=€J��T˜#‘Y‘Ó=õ@ò
ð^˜ô ^òDð ñ'ó ö'r   rÒ   c                   ó(   • \ rS rSrSr\S 5       rSrg)ÚSharedLayouti6  z3
Base class for shared memory layouts in Gluon IR.
c                 ó   • [        U 5      $ r   r   r   s    r   r   ÚSharedLayout.type;  r   r   r   N)r   r   r   r   r    r!   r   r"   r   r   r   ré   ré   6  s   † ñð ñ$ó ó$r   ré   c                 ó‚  • U(       d  U $ [        U 5      n[        US   5      nS/U-  nU H8  n[        U5      U:X  d   e[        U5       H  n[        XF   XV   5      XF'   M     M:     [        U5       H  nXF==   S-  ss'   M     [        U5       H+  nX'   XG   -  S:X  d   SU  SU 35       eX'==   XG   -  ss'   M-     U$ )Nr   r•   rÈ   zShape z  is not divisible by CGA layout )r�   rO   ÚrangeÚmax)r¥   rK   Úshape_per_ctar   Ú	cga_shaper›   Úir‡   s           r   Ú_get_shape_per_ctarò   @  s×   € æØˆÜ˜“K€MÜˆz˜!‰}Ó€DØ��d‘
€IÛˆÜ�5‹z˜TÓ!Ð!Ð!Ü�t–ˆAÜ˜y™|¨U©XÓ6ˆI‹Ló ñ ô
 �4Ž[ˆØ‹˜Ñ�ñ ä�TŽ{ˆØÑ! I¡NÑ2°aÓ7Ðu¸6À%ÀÐHhÐisÐhtÐ9uÓuÐ7ØÓ˜y™~Ñ-Õñ ð Ðr   c                   óÆ   ^ • \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr\	\S'   Sr
\	\S	'   \" \S
9r\\\      \S'   U 4S jrS r\\SS j5       5       rS\4S jrS rSrU =r$ )ÚNVMMASharedLayoutiT  až  
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_paddedrI   rK   c                 óR  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [         TU ]  S[        U R                  5      5        U R                  =(       d    / nU(       a  [        US   5      U R                  :X  d   e[         TU ]  S[        U R                  5      5        [         TU ]  S[        U5      5        U R                  S;   d   eU R                  S	;   d   eg )
Nrõ   rö   r÷   rø   r   r   rK   )é   é   é    é@   )r   rü   rý   é€   )
rM   rN   r   rõ   rö   r÷   rø   rK   rO   r   )r   rK   rQ   s     €r   rR   ÚNVMMASharedLayout.__post_init__h  sò   ø€ Ü‰ÑÐ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Ø×&Ñ&Ð*:Ó:Ð:Ñ:r   c                 ó¦   • UR                  U R                  U R                  U R                  U R                  U R
                  U R                  5      $ r   )Úget_nvmma_shared_layoutrõ   rö   r÷   rø   rK   r   r)   s     r   r+   ÚNVMMASharedLayout._to_iry  sC   € Ø×.Ñ.Ø×#Ñ#Ø×!Ñ!Ø�O‰OØ�O‰OØ�O‰OØ�I‰Ió
ð 	
r   c           	      ó–  • U(       a  SOSnUc  U O
[        X5      n[        U 5      nU(       a  USS USS -   nUS   U-  nX�R                  -  S-  n	U	S:¼  a  U	S-  S:X  a  Sn
O&U	S:¼  a  U	S-  S:X  a  Sn
OU	S	:¼  a  U	S	-  S:X  a  S	n
OSn
SnUSS  H  nX¼-  nM	     [        U 5      S:  d  US:  a  Sn
[        U
UR                  UUUUS
9$ )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ø   rK   )rò   rO   Úprimitive_bitwidthrô   )Úblock_shapeÚdtyper÷   rø   rK   Úpacking_factorrï   r   Úcontig_dim_sizeÚcontig_dim_bytesrõ   Úflatten_outer_dimÚsizes                r   Úget_default_forÚ!NVMMASharedLayout.get_default_forƒ  s  € ö )™¨aˆØ'1Ñ'9™Ô?QÐR]Ó?jˆÜ�;ÓˆÞØ)¨!¨"Ð-°¸b¸qÐ0AÑAˆMØ'¨Ñ+¨nÑ<ˆØ*×-EÑ-EÑEÈÑJÐØ˜sÓ"Ð'7¸#Ñ'=ÀÓ'BØ!$ÑØ Ó#Ð(8¸2Ñ(=ÀÓ(BØ!#ÑØ Ó#Ð(8¸2Ñ(=ÀÓ(BØ!#Ñà!"ÐàÐØ! # 2Ó&ˆDØÑ%Òñ 'äˆ{Ó˜aÓÐ#4°qÓ#8Ø!"Ðä Ø1Ø"×5Ñ5ØØ!Ø!Ø!ñ
ð 	
r   rW   c                 óà   • U R                   (       a"  SR                  S U R                    5       5      OSnSU R                   SU R                   SU R                   SU R
                   SU S3$ )Nr\   c              3   ó`   #   • U  H$  nS R                  [        [        U5      5      v •  M&     g7frg   r]   ri   s     r   rl   Ú+NVMMASharedLayout.mangle.<locals>.<genexpr>«  rn   ro   r[   ÚNVMMA_Ú_NVMMA)rK   r^   rõ   rö   r÷   rø   rß   s     r   r/   Ú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                 óì   • [        U R                  U R                  U R                  U R                  U R
                  U R                  (       a!  [        S U R                   5       5      45      $ S 45      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   rt   ri   s     r   rl   Ú-NVMMASharedLayout.__hash__.<locals>.<genexpr>°  rä   rw   )rx   rõ   rö   r   r÷   rø   rK   ru   r   s    r   ry   Ú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   r   )FFN)r   r   r   r   r    r   r€   r   r÷   Úboolrø   r   r�   rK   r   rR   r+   Ústaticmethodr	   r  r`   r/   ry   r"   r‚   rƒ   s   @r   rô   rô   T  s‹   ø‡ ñ
ð ÓØÓØ€Dˆ#ƒMØ€J�ÓØ€J�ÓÙ"'¸Ñ"=€J��T˜#‘Y‘Ó=õ;ò"
ð Øó#
ó ó ð#
ðJA˜ô A÷að ar   rô   c                   ó˜   ^ • \ rS rSr% Sr\\S'   \\S'   \\S'   \\   \S'   \" \	S9r
\\\      \S'   U 4S	 jrS
 rS\4S jrS rSrU =r$ )ÚSwizzledSharedLayouti³  aQ  
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.
rk   Ú	per_phaseÚ	max_phaserH   rI   rK   c                 ó`  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [         TU ]  S[        U R                  5      5        [        R                  U SU R                  5        g )Nrk   r  r  rH   rK   )	rM   rN   r   rk   r  r  rH   rP   rK   rŠ   s    €r   rR   Ú"SwizzledSharedLayout.__post_init__Å  s}   ø€ Ü‰Ñ˜EÔ#7¸¿¹Ó#AÔBÜ‰Ñ˜KÔ)=¸d¿n¹nÓ)MÔNÜ‰Ñ˜KÔ)=¸d¿n¹nÓ)MÔNÜ‰Ñ˜GÔ%9¸$¿*¹*Ó%EÔFä×Ñ˜4 ¨t¯©Õ?r   c                 ó�   • UR                  U R                  U R                  U R                  U R                  U R
                  5      $ r   )Úget_swizzled_shared_layoutrk   r  r  rH   rK   r)   s     r   r+   ÚSwizzledSharedLayout._to_irÍ  s8   € Ø×1Ñ1Ø�H‰HØ�N‰NØ�N‰NØ�J‰JØ�O‰Oó
ð 	
r   rW   c                 óò   • S nU R                   (       a"  SR                  S U R                    5       5      OSnSU R                   SU R                   SU R                   SU" U R
                  5       SU S3$ )Nc                 óH   • U c  gSR                  [        [        U 5      5      $ rZ   r]   ra   s    r   rc   Ú.SwizzledSharedLayout.mangle.<locals>.stringifyØ  re   r   r\   c              3   ó`   #   • U  H$  nS R                  [        [        U5      5      v •  M&     g7frg   r]   ri   s     r   rl   Ú.SwizzledSharedLayout.mangle.<locals>.<genexpr>Ý  rn   ro   r[   ÚSSS_Ú_SSS)rK   r^   rk   r  r  rH   )r   rc   rK   s      r   r/   Ú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           
      ó¸   • [        U R                  U R                  U R                  [	        U R
                  5      [	        S U R                   5       5      45      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   rt   ri   s     r   rl   Ú0SwizzledSharedLayout.__hash__.<locals>.<genexpr>â  s   é € ÐOvÒfuÐ_bÔPUÐVY×PZÐPZÒfuùrw   )rx   rk   r  r  ru   rH   rK   r   s    r   ry   Ú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   r    r   r€   r   r   r�   rK   rR   r+   r`   r/   ry   r"   r‚   rƒ   s   @r   r  r  ³  s_   ø‡ ñ	ð 
ƒHØƒNØƒNØ�‰9ÓÙ"'¸Ñ"=€J��T˜#‘Y‘Ó=õ@ò
ðl˜ô l÷yð yr   r  c                   óº   ^ • \ rS rSr% Sr\\\      \S'   \\\      \S'   \\\      \S'   \\   \S'   U 4S jrS r	S	\
4S
 jrS r\\S 5       5       rS rSrU =r$ )ÚPaddedSharedLayoutiå  a6  
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 block_bases = []:
[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 block_bases = []:
[
    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
    block_bases (List[List[int]]): Bases for block-level shared memory offsets.
    shape (List[int]): n-D logical shared memory shape
Úinterval_padding_pairsÚoffset_basesr¤   r¥   c                 óø  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R
                  5      5        [         TU ]  S[        U R                  5      5        [        U R                  5      nU R                   H  n[        U5      U:X  a  M   e   U R
                   H  n[        U5      U:X  a  M   e   U R                  5         g )Nr2  r3  r¤   r¥   )	rM   rN   r   r2  r3  r¤   r¥   rO   Úverifyr§   s      €r   rR   Ú PaddedSharedLayout.__post_init__%  sÆ   ø€ Ü‰ÑÐ4´mÀD×D_ÑD_Ó6`ÔaÜ‰Ñ˜N¬M¸$×:KÑ:KÓ,LÔMÜ‰Ñ˜M¬=¸×9IÑ9IÓ+JÔKÜ‰Ñ˜G¤]°4·:±:Ó%>Ô?ä�4—:‘:‹ˆà×&Ô&ˆEÜ�u“: Õ%Ð%Ð%ñ 'à×%Ô%ˆEÜ�u“: Õ%Ð%Ð%ñ &ð 	�‰�r   c                 óŽ   • [        U R                  6 u  p#UR                  X#U R                  U R                  U R
                  5      $ r   )Úzipr2  Úget_padded_shared_layoutr3  r¤   r¥   )r   r*   Ú	intervalsÚpaddingss       r   r+   ÚPaddedSharedLayout._to_ir4  s@   € Ü! 4×#>Ñ#>Ð?Ñˆ	Ø×/Ñ/°	ÀT×EVÑEVÐX\×XhÑXhÐjn×jtÑjtÓuÐur   rW   c           	      óp   • SU R                    SU R                   SU R                   SU R                   S3	$ )NÚPaddedShared_r\   Ú_PaddedShared)r2  r3  r¤   r¥   r   s    r   r/   ÚPaddedSharedLayout.mangle8  sC   € Ø˜t×:Ñ:Ð;¸1¸T×=NÑ=NÐ<OÈqÐQU×QaÑQaÐPbÐbcÐdh×dnÑdnÐcoÐo|Ð}Ð}r   c                 óº  ^• U R                   n[        U5      S:”  d   S5       e[        S U 5       5      (       d   e[        U6 u  p#[	        [        U5      5      n[        U5      [        U5      :X  d   eS m[        U4S jU 5       5      (       d   S5       e[        U4S jU 5       5      (       d   S5       e[        U R                  5      nUS:”  d   S	5       eg )
Nr   zVPaddedSharedLayout interval_padding_pairs must have at least one interval-padding pairc              3   ó>   #   • U  H  n[        U5      S :H  v •  M     g7f)rÈ   NrÆ   )rj   Úpairs     r   rl   Ú,PaddedSharedLayout.verify.<locals>.<genexpr>>  s   é € Ð4ªe d”3�t“9 –>ªeùs   ‚c                 ó.   • U S:„  =(       a
    X S-
  -  S:H  $ r™   r   ©Úns    r   Ú<lambda>Ú+PaddedSharedLayout.verify.<locals>.<lambda>D  ó   €  ! a¡%×"<¨A°Q±©K¸1Ñ,<Ð"<r   c              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr   r   ©rj   rG  Úis_power_of_2s     €r   rl   rD  E  s   øé € Ð7ªY¨‘= ×#Ð#ªYùó   ƒz;PaddedSharedLayout interval values must all be power of twoc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr   r   rL  s     €r   rl   rD  F  s   øé € Ð6ªX¨‘= ×#Ð#ªXùrN  z:PaddedSharedLayout padding values must all be power of twoz*PaddedSharedLayout order must not be empty)r2  rO   rÊ   r8  r�   Úsetr¥   )r   Úpairsr:  r;  Úunique_intervalsr   rM  s         @r   r5  ÚPaddedSharedLayout.verify;  sÌ   ø€ Ø×+Ñ+ˆÜ�5‹z˜A‹~ÐwÐwÓwˆ~ÜÑ4©eÓ4×4Ñ4Ð4Ð4Ü! 5˜kÑˆ	ä¤ I£Ó/ÐÜÐ#Ó$¬¨I«Ó6Ð6Ð6á<ˆÜÔ7©YÓ7×7Ñ7ÐvÐ9vÓvÐ7ÜÔ6©XÓ6×6Ñ6ÐtÐ8tÓtÐ6ä�4—:‘:‹ˆØ�a‹xÐEÐEÓE‰xr   c           	      ó’  ^• [        U5      [        U5      :X  d   eS m[        U4S jU 5       5      (       d   e[        U5      n/ nU Hi  n[        [        [        R
                  " X   5      5      5       H8  nUR                  [        U5       Vs/ s H  owU:X  a  SU-  OSPM     sn5        M:     Mk     [        X/ U5      $ s  snf )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                 ó.   • U S:„  =(       a
    X S-
  -  S:H  $ r™   r   rF  s    r   rH  Ú6PaddedSharedLayout.with_identity_for.<locals>.<lambda>Q  rJ  r   c              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr   r   rL  s     €r   rl   Ú7PaddedSharedLayout.with_identity_for.<locals>.<genexpr>R  s   øé € Ð3ªU¨‘= ×#Ð#ªUùrN  r•   r   )rO   rÊ   rí   r   ÚmathÚlog2rË   r1  )	r2  r¥   rH   r   r3  r‡   r›   rñ   rM  s	           @r   Úwith_identity_forÚ$PaddedSharedLayout.with_identity_forK  sµ   ø€ ô
 �5‹zœS ›ZÓ'Ð'Ð'Ù<ˆÜÔ3©UÓ3×3Ñ3Ð3Ð3ä�5‹zˆàˆÛˆCÜœs¤4§9¢9¨U©ZÓ#8Ó9Ö:�Ø×#Ñ#ÌEÐRVÌKÓ$XÊKÀq¸³8 Q¨%¢ZÀÒ%BÉKÑ$XÖYó ;ñ ô "Ð"8ÈÈEÓRÐRùò %Ys   ÂCc           
      ó  • [        [        [        [        U R                  5      5      [        [        [        U R                  5      5      [        [        [        U R
                  5      5      [        U R                  5      45      $ r   )rx   ru   r_   r2  r3  r¤   r¥   r   s    r   ry   ÚPaddedSharedLayout.__hash__]  s`   € Ü”Uœ3œu d×&AÑ&AÓBÓCÄUÌ3ÌuÐVZ×VgÑVgÓKhÓEiÜœ3œu d×&6Ñ&6Ó7Ó8¼%ÀÇ
Á
Ó:KðMó Nð 	Nr   r   )r   r   r   r   r    r   r   r€   rR   r+   r`   r/   r5  r  r	   r[  ry   r"   r‚   rƒ   s   @r   r1  r1  å  sˆ   ø‡ ñ8ðr !  c¡™OÓ+Ø�t˜C‘y‘/Ó!Ø�d˜3‘i‘Ó Ø�‰9Óõòvð~˜ô ~òFð  ØñSó ó ðS÷ Nð Nr   r1  c                   óŽ   ^ • \ rS rSr% Sr\\\      \S'   \" \	S9r
\\\      \S'   Sr\\S'   U 4S jrS	 rS
\4S jrS rSrU =r$ )ÚSharedLinearLayoutib  zGRepresents a shared memory layout defined via an explicit LinearLayout.r3  rI   r¤   rû   Ú	alignmentc                 ó`  >• [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [         TU ]  S[        U R                  5      5        [        U R                  5      S:w  d   S5       e[        U R                  S   5      nUS:”  d   S5       eU R                   H  n[        U5      U:X  a  M   e   U R                   H  n[        U5      U:X  a  M   e   U R                  S:”  a   U R                  U R                  S-
  -  S:X  d   S5       eg )Nr3  r¤   ra  r   z1SharedLinearLayout offset_bases must not be emptyr•   z<SharedLinearLayout alignment must be a positive power of two)rM   rN   r   r3  r¤   r   ra  rO   r§   s      €r   rR   Ú SharedLinearLayout.__post_init__j  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   • UR                  U R                  U R                  U R                  5      $ r   )Úget_shared_linear_layoutr3  r¤   ra  r)   s     r   r+   ÚSharedLinearLayout._to_iry  s*   € Ø×/Ñ/°×0AÑ0AÀ4×CSÑCSÐUY×UcÑUcÓdÐdr   rW   c                 óV   • SU R                    SU R                   SU R                   S3$ )NÚSharedLinear_r\   Ú_SharedLinear)r3  r¤   ra  r   s    r   r/   ÚSharedLinearLayout.mangle|  s1   € Ø˜t×0Ñ0Ð1°°4×3CÑ3CÐ2DÀAÀdÇnÁnÐEUÐUbÐcÐcr   c           	      ó¶   • [        [        [        [        U R                  5      5      [        [        [        U R                  5      5      U R
                  45      $ r   )rx   ru   r_   r3  r¤   ra  r   s    r   ry   ÚSharedLinearLayout.__hash__  sE   € ÜÜ”#”e˜T×.Ñ.Ó/Ó0Ü”#”e˜T×-Ñ-Ó.Ó/Ø�N‰Nð
ó ð 	r   r   )r   r   r   r   r    r   r   r€   r   r�   r¤   ra  rR   r+   r`   r/   ry   r"   r‚   rƒ   s   @r   r`  r`  b  sY   ø‡ áQà�t˜C‘y‘/Ó!Ù#(¸Ñ#>€K��d˜3‘i‘Ó>Ø€IˆsÓõKòeðd˜ô d÷ð r   r`  c                 óÌ   • S/U-  nU (       d  U$ S nU  HL  n[        S [        U5       5       S 5      nUb  UnX6==   S-  ss'   M2  U(       a  M;  Uc   eX4==   S-  ss'   MN     U$ )Nr•   c              3   ó:   #   • U  H  u  pUS :w  d  M  Uv •  M     g7f)r   Nr   )rj   rñ   Úvs      r   rl   Ú bases_per_dim.<locals>.<genexpr>’  s   é € Ð=Ò"2™$˜!°a¸1±f—A‘AÒ"2ùs   ‚’	rÈ   )ÚnextÚ	enumerate)Úbasesr   Úskip_broadcastÚresultÚnon_zero_idxr›   Úidxs          r   Úbases_per_dimrx  ˆ  sw   € ØˆS�4‰Z€FæØˆà€LãˆäÑ=¤)¨EÔ"2Ó=¸tÓDˆØ‰?ØˆLØ‹K˜1Ñ�Kß�àÑ+Ð+Ð+ØÓ  AÑ%Õ ñ ð €Mr   c                 óä   • [        U [        5      (       a  [        U R                  [	        U5      5      $ [        U [
        [        45      (       a  [        U R                  U5      $ U R                  $ r   )	Ú
isinstancerŸ   rx  r£   rO   r…   r´   rG   rˆ   )Úlayoutr¥   s     r   rG   rG   ž  sW   € Ü�&Ô1×2Ñ2Ü˜V×.Ñ.´°E³
Ó;Ð;Ü	�Fœ[Ô*:Ð;×	<Ñ	<Ü˜VŸ]™]¨EÓ2Ð2à×#Ñ#Ð#r   )T)Údataclassesr   r   Útypingr   Útriton.language.corer   r   r   Útriton.runtime.jitr	   rY  r   r%   r8   rC   r…   rŸ   r´   rÒ   ré   rò   rô   r  r1  r`  rx  rG   r   r   r   Ú<module>r€     sÓ  ðß (Ý ç TÑ TÝ 1Û ÷Sñ Sñ �$Ñô
3Ð"ó 
3ó ð
3ñ �$Ñô
8Ð'ó 
8ó ð
8ñ �$Ñô:Ð%ó :ó ð:ñz �$Ñô'XÐ#ó 'Xó ð'XñT �$Ñô6Ð/ó 6ó ð6ñr �$Ñô0Ð(ó 0ó ð0ñf �$˜4Ñ ô('Ð.ó ('ó !ð('÷V$ñ $ð ñó ðñ& �$Ñô[a˜ó [aó ð[añ| �$˜4Ñ ô.y˜<ó .yó !ð.yñb �$˜4Ñ ôyN˜ó yNó !ðyNñx �$Ñô!˜ó !ó ð!ôJó,$r   