ó
    Eñi†`  ã                   óú  • S SK r S SKrS SKJs  Jr  S SKJr  S SKJ	r	  SSK
JrJr  SSKJr  \ R                  " \5      rS\R$                  S\R&                  S	\4S
 jrS\R$                  S\R&                  SSS	S4S jrS\R$                  S	\R.                  4S jr\	\\\4      " 5       rS\R.                  S	S4S jrS\R.                  S	\4S jrS\R$                  S\SS4S jrS\R$                  4S jr S r!S r"g)é    N)Úis_symbolic)Ú
OrderedSeté   )ÚconfigÚir)ÚVÚxÚcomm_buffer_typeÚreturnc                 óà  • [        U 5      n[        U[        R                  5      (       a  g[        U[        R                  5      (       a  UR                  5       (       d  gUR                  5       n[        U[        R                  5      (       a  g[        U[        R                  5      (       a  g[        U[        R                  5      (       a  [        UR                  5       5      (       d  gg)zY
Check if an input can be realized as a comm buffer of the specified
`comm_buffer_type`.
TF)Ú	_get_dataÚ
isinstancer   ÚLoopsÚBufferÚshould_allocateÚget_output_specÚCommBufferLayoutÚFixedLayoutÚFlexibleLayoutr   Ú	get_numel)r	   r
   ÚdataÚlayouts       ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/comm_lowering.pyÚcan_realize_as_comm_bufferr   7   s§   € ô �Q‹<€Dä�$œŸ™×!Ñ!Øô �$œŸ	™	×"Ñ"¨4×+?Ñ+?×+AÑ+AØà×!Ñ!Ó#€FÜ�&œ"×-Ñ-×.Ñ.Øä�&œ"Ÿ.™.×)Ñ)Øä�&œ"×+Ñ+×,Ñ,´[ÀÇÁÓAQ×5RÑ5RØàó    Ú
group_nameú,torch.distributed.distributed_c10d.GroupNamec                 óè  • U R                  5         [        U 5      n[        U[        R                  5      (       d   eUR                  5       n[        U[        R                  5      (       a  g[        U[        R                  [        R                  45      (       d  [        SU S35      e[        UR                  5       5      (       a  [        SU S35      e[        R                  " UUUS9Ul        g)zÓ
Realize an input as a comm buffer of the specified `comm_buffer_type`.

Specifically, this realizes the underlying buffer if it's still unrealized
and changes the layout of the buffer to `ir.CommBufferLayout`.
Nz`A buffer can only be realized as a comm buffer if it has `FlexibleLayout` or `FixedLayout` (got ú).zGA buffer with symbolic shape cannot be converted to a comm buffer (got )r   r
   r   )Úrealizer   r   r   r   r   r   r   r   ÚAssertionErrorr   r   r   )r	   r
   r   Úbufferr   s        r   Úrealize_as_comm_bufferr#   U   sß   € ð ‡I�I„KÜ�q‹\€FÜ�fœbŸi™i×(Ñ(Ð(Ð(à×#Ñ#Ó%€FÜ�&œ"×-Ñ-×.Ñ.Øô �fœr×0Ñ0´"·.±.ÐA×BÑBÜð:Ø:@¸ÀðEó
ð 	
ô
 �6×#Ñ#Ó%×&Ñ&Üð"Ø"( ¨ð-ó
ð 	
ô
 ×'Ò'ØØ)Øñ€F…Mr   c                 ó²  • [        U R                  [        R                  5      (       aW  U R                  R	                  5       n[        U[        R                  [        R
                  45      (       d   eUR                  $ [        U R                  [        R                  5      (       a  U R                  R                  $ [        SU R                   S35      e)Nz\Expect the data attr of a `TensorBox` to be either an `ir.BaseView` or `ir.StorageBox` (got r   )r   r   r   ÚBaseViewÚunwrap_viewÚ
MutableBoxÚ
StorageBoxr!   )r	   Únodes     r   r   r   }   s™   € Ü�!—&‘&œ"Ÿ+™+×&Ñ&à�v‰v×!Ñ!Ó#ˆÜ˜$¤§¡¬b¯m©mÐ <×=Ñ=Ð=Ð=Ø�y‰yÐÜ	�A—F‘FœBŸM™M×	*Ñ	*à�v‰v�{‰{Ðäð8Ø89¿¹°x¸rðCó
ð 	
r   c                 ó|   • [         R                  [        [        R                  5      U R                  5       45        g)z˜
If a non-blocking collective is lowered as a blocking collective, the wait
node in the original graph becomes useless and we can skip the lowering it.
N)Ú_bufs_to_skip_waitÚaddÚidr   ÚgraphÚget_name©r	   s    r   Úmark_as_skip_waitr1   �   s%   € ô
 ×ÑœBœqŸw™w›K¨¯©«Ð6Õ7r   c                 ób   • [        [        R                  5      U R                  5       4[        ;   $ ©N)r-   r   r.   r/   r+   r0   s    r   Úshould_skip_waitr4   ˜   s!   € ÜŒq�w‰w‹K˜Ÿ™›Ð&Ô*<Ñ<Ð<r   ÚinpÚ	reduce_opc                 ól  • SSK Jn  U R                  5       U R                  5       R                  -  n[
        R                  R                  =(       ac    U" U5      =(       aT    [        U [        R                  R                  5      =(       a)    US:H  =(       a    U[
        R                  R                  :*  $ )Nr   )Úis_symm_mem_enabled_for_groupÚsum)Ú#torch.distributed._symmetric_memoryr8   r   Ú	get_dtypeÚitemsizer   Ú_collectiveÚauto_selectr   r   ÚCommBufferTypeÚSYMM_MEMÚ#one_shot_all_reduce_threshold_bytes)r5   r6   r   r8   Úinp_sizes        r   Ú$_should_lower_as_one_shot_all_reducerC   œ   sŽ   € õ
 Rà�}‰}‹ §¡£×!9Ñ!9Ñ9€Hä×Ñ×&Ñ&÷ 	OÙ)¨*Ó5÷	Oä& s¬B×,=Ñ,=×,FÑ,FÓG÷	Oð ˜Ñ÷	Oð œ×*Ñ*×NÑNÑNðr   c           	      óB  • [        U [        R                  R                  U5        [        R
                  " [        R                  R                  [        R                  R                  [        R                  R                  R                  R                  U UU5      5      $ r3   )r#   r   r?   r@   ÚpytreeÚtree_mapÚ	TensorBoxÚcreateÚFallbackKernelÚtorchÚopsÚsymm_memÚone_shot_all_reduceÚdefault)r5   r6   r   s      r   Ú_one_shot_all_reducerO   ­   sn   € Ü˜3¤× 1Ñ 1× :Ñ :¸JÔGÜ�?Š?Ü
�‰×ÑÜ
×Ñ× Ñ Ü�I‰I×Ñ×2Ñ2×:Ñ:ØØØó		
óð r   c            	      ó@  ^^^^^^^•  [         R                  R                  R                    SSKJmJ	mJ
mJmJm  UUU4S jn [         R                  R                  mU " TR                  5      S[        R                  S[        SS	S
[        R                  4UU4S jj5       nU " TR                   5      S[        R                  S[        SS	S
[        R                  4UU4S jj5       nU " TR"                  5      UU4S j5       nU " TR$                  5      U4S j5       nS
[        R&                  4S jmU " TR(                  5      UU4S j5       nU " TR*                  5      U4S j5       nU " TR,                  5      U4S j5       nU " TR.                  5      UU4S j5       nU " TR0                  5      U4S j5       n	U " TR2                  5      U4S j5       n
U " TR4                  5      UU4S j5       nU " TR6                  5      UU4S j5       nU " TR8                  5      U4S j5       nU " [         R                  R:                  R<                  5      U4S j5       nU " TR>                  5      U4S j5       ng! [         a    [
        R                  S5         gf = f)z,
Register lowerings for the comm subsystem.
zRInductor support for distributed collectives depends on building torch.distributedNr   )Úadd_layout_constraintÚcloneÚconstrain_to_fx_stridesÚcopy_Úregister_loweringc                 ó&   >• T" U T5        T" U 5      $ r3   © )ÚfnrQ   rS   rU   s    €€€r   Úregister_comm_loweringÚ7register_comm_lowerings.<locals>.register_comm_loweringÏ   s   ø€ Ù˜bÐ"9Ô:Ù  Ó$Ð$r   r5   r6   r   r   r   c                 ó´  >• [        XU5      (       a  [        XU5      $ T" U 5      n [        R                  (       aG  U R	                  5         [
        R                  R                  R                  U R                  5       5        [        R                  R                  U 5      n [        R                  R                  TR                  R                   U UU5        U $ r3   )rC   rO   r   Ú reorder_for_compute_comm_overlapr    r   r.   Úno_fuse_buffer_namesr,   r/   r   ÚExternKernelÚrequire_contiguousÚ_AllReduce_KernelÚcreate_inplaceÚall_reduce_rN   )r5   r6   r   Úc10drR   s      €€r   Ú_all_reduceÚ,register_comm_lowerings.<locals>._all_reduceÕ   s¥   ø€ ô 0°À
×KÑKÜ'¨¸
ÓCÐCñ �C‹jˆÜ×2×2ð �K‰KŒMÜ�G‰G×(Ñ(×,Ñ,¨S¯\©\«^Ô<ä�o‰o×0Ñ0°Ó5ˆô 	×Ñ×+Ñ+Ø×Ñ×$Ñ$ØØØô		
ð ˆ
r   c                 ó  >• [        XU5      (       a   T" U [        XU5      5      n[        U5        U $ [        R                  R                  U 5      n [        R                  R                  TR                  R                  U UU5        U $ r3   )
rC   rO   r1   r   r^   r_   r`   ra   rb   rN   )r5   r6   r   Úretrc   rT   s       €€r   Ú_all_reduce_Ú-register_comm_lowerings.<locals>._all_reduce_ô   s�   ø€ ô 0°À
×KÑKÙØÜ$ S°ZÓ@óˆCô ˜cÔ"ØˆJô �o‰o×0Ñ0°Ó5ˆÜ
×Ñ×+Ñ+Ø×Ñ×$Ñ$ØØØô		
ð ˆ
r   c                 ó®   >• U  Vs/ s H  nT" U5      PM     n n[         R                  R                  TR                  R                  U UU5        U $ s  snf r3   ©r   Ú_CollectiveKernelra   Úall_reduce_coalesced_rN   )Úinputsr6   r   r5   rc   rR   s       €€r   Ú_all_reduce_coalescedÚ6register_comm_lowerings.<locals>._all_reduce_coalesced  sS   ø€ á(.Ó/ª ‘%˜–*©ˆÐ/Ü
×Ñ×+Ñ+Ø×&Ñ&×.Ñ.ØØØô		
ð ˆùò 0s   †Ac                 ót   >• [         R                  R                  TR                  R                  U UU5        U $ r3   rk   )rn   r6   r   rc   s      €r   Ú_all_reduce_coalesced_Ú7register_comm_lowerings.<locals>._all_reduce_coalesced_  s6   ø€ ä
×Ñ×+Ñ+Ø×&Ñ&×.Ñ.ØØØô		
ð ˆr   c                 óÄ   • [         R                  R                  " X/UQ76 n[        U[         R                  5      (       d   e[         R
                  R                  U5      $ r3   )r   rl   Úcreate_out_of_placer   ÚIRNoderG   rH   )Úkernelrn   Úargsr)   s       r   Ú_create_out_of_placeÚ5register_comm_lowerings.<locals>._create_out_of_place"  sI   € Ü×#Ñ#×7Ò7¸ÐNÈÒNˆÜ˜$¤§	¡	×*Ñ*Ð*Ð*Ü�|‰|×"Ñ" 4Ó(Ð(r   c                 óB   >• T" TR                   R                  U UU5      $ r3   )Úall_gather_into_tensorrN   )r5   Ú
group_sizer   ry   rc   s      €€r   Ú_all_gather_into_tensorÚ8register_comm_lowerings.<locals>._all_gather_into_tensor'  s(   ø€ á#Ø×'Ñ'×/Ñ/ØØØó	
ð 	
r   c           	      óÊ   >• [         R                  " [        R                  R                  [        R
                  R                  TR                  R                  U UU5      5      $ r3   )	rE   rF   r   rG   rH   rl   ru   Ú all_gather_into_tensor_coalescedrN   )rn   r}   r   rc   s      €r   Ú!_all_gather_into_tensor_coalescedÚBregister_comm_lowerings.<locals>._all_gather_into_tensor_coalesced0  sM   ø€ ä�ŠÜ�L‰L×ÑÜ× Ñ ×4Ñ4Ø×5Ñ5×=Ñ=ØØØó	ó
ð 	
r   c                ór   >• [         R                  R                  TR                  R                  U UUUS9  U$ ©N)Úout)r   rl   ra   Úall_gather_into_tensor_outrN   )r5   r}   r   r†   rc   s       €r   Ú_all_gather_into_tensor_outÚ<register_comm_lowerings.<locals>._all_gather_into_tensor_out<  s>   ø€ ä
×Ñ×+Ñ+Ø×+Ñ+×3Ñ3ØØØØð 	,ñ 	
ð ˆ
r   c                 óD   >• T" TR                   R                  U UUU5      $ r3   )Úreduce_scatter_tensorrN   )r5   r6   r}   r   ry   rc   s       €€r   Ú_reduce_scatter_tensorÚ7register_comm_lowerings.<locals>._reduce_scatter_tensorG  s+   ø€ á#Ø×&Ñ&×.Ñ.ØØØØó
ð 	
r   c          	      ót   >• [         R                  R                  TR                  R                  U UUUUS9  U$ r…   )r   rl   ra   Úreduce_scatter_tensor_outrN   )r5   r6   r}   r   r†   rc   s        €r   Ú_reduce_scatter_tensor_outÚ;register_comm_lowerings.<locals>._reduce_scatter_tensor_outQ  sA   ø€ ä
×Ñ×+Ñ+Ø×*Ñ*×2Ñ2ØØØØØð 	,ñ 	
ð ˆ
r   c           
      óÌ   >• [         R                  " [        R                  R                  [        R
                  R                  TR                  R                  U UUU5      5      $ r3   )	rE   rF   r   rG   rH   rl   ru   Úreduce_scatter_tensor_coalescedrN   )rn   r6   r}   r   rc   s       €r   Ú _reduce_scatter_tensor_coalescedÚAregister_comm_lowerings.<locals>._reduce_scatter_tensor_coalesced]  sP   ø€ ä�ŠÜ�L‰L×ÑÜ× Ñ ×4Ñ4Ø×4Ñ4×<Ñ<ØØØØóó	
ð 		
r   c                 óD   >• T" TR                   R                  U UUU5      $ r3   )Úall_to_all_singlerN   )r5   Úoutput_split_sizesÚinput_split_sizesr   ry   rc   s       €€r   Ú_all_to_all_singleÚ3register_comm_lowerings.<locals>._all_to_all_singlej  s+   ø€ á#Ø×"Ñ"×*Ñ*ØØØØó
ð 	
r   c                 ó‚   >• T" U 5      n [         R                  R                  TR                  R                  XU5        U $ r3   ©r   rl   ra   Ú
broadcast_rN   )r5   Úsrcr   rc   rR   s      €€r   Ú
_broadcastÚ+register_comm_lowerings.<locals>._broadcastt  s8   ø€ á�C‹jˆÜ
×Ñ×+Ñ+Ø�O‰O×#Ñ# S¨zô	
ð ˆ
r   c                 ór   >• [         R                  R                  TR                  R                  XU5        U $ r3   r�   )r5   rŸ   r   rc   s      €r   Ú_broadcast_Ú,register_comm_lowerings.<locals>._broadcast_|  s/   ø€ ä
×Ñ×+Ñ+Ø�O‰O×#Ñ# S¨zô	
ð ˆ
r   c                 ót   >• T" [         R                  R                  R                  R                  U UUU5      $ r3   )rJ   rK   Ú_dtensorÚshard_dim_alltoallrN   )r5   Ú
gather_dimÚ	shard_dimr   ry   s       €r   Ú_shard_dim_alltoallÚ4register_comm_lowerings.<locals>._shard_dim_alltoallƒ  s5   ø€ á#Ü�I‰I×Ñ×1Ñ1×9Ñ9ØØØØó
ð 	
r   c                 ó”   >• [        U 5      (       a  U $ [        R                  R                  TR                  R
                  U 5        U $ r3   )r4   r   Ú_WaitKernelÚcreate_waitÚwait_tensorrN   )r5   rc   s    €r   Ú_wait_tensorÚ-register_comm_lowerings.<locals>._wait_tensor�  s8   ø€ ä˜C× Ñ ØˆJä
�‰×"Ñ" 4×#3Ñ#3×#;Ñ#;¸SÔAØˆ
r   ) rJ   rK   Ú_c10d_functionalÚ
all_reduceÚAttributeErrorÚlogÚinfoÚloweringrQ   rR   rS   rT   rU   r   rG   Ústrrb   Úall_reduce_coalescedrm   rv   r|   r�   r‡   r‹   r�   r“   r—   Ú	broadcastrž   r¦   r§   r¯   )rY   rd   rh   ro   rr   r~   r‚   rˆ   rŒ   r�   r”   rš   r    r£   rª   r°   ry   rQ   rc   rR   rS   rT   rU   s                   @@@@@@@r   Úregister_comm_loweringsr»   º   s£  þ€ ðÜ�	‰	×"Ñ"×-Ò-÷õ ÷%ô �9‰9×%Ñ%€Dá˜DŸO™OÓ,ðÜ�\‰\ðäðð Cðô 
�‰÷	ó -ðñ< ˜D×,Ñ,Ó-ðÜ�\‰\ðäðð Cðô 
�‰÷	ó .ðñ0 ˜D×5Ñ5Ó6õó 7ðñ ˜D×6Ñ6Ó7ôó 8ðð)´r·y±yô )ñ
 ˜D×7Ñ7Ó8õ
ó 9ð
ñ ˜D×AÑAÓBô	
ó Cð	
ñ ˜D×;Ñ;Ó<ôó =ðñ ˜D×6Ñ6Ó7õ
ó 8ð
ñ ˜D×:Ñ:Ó;ô	ó <ð	ñ ˜D×@Ñ@ÓAô

ó Bð

ñ ˜D×2Ñ2Ó3õ
ó 4ð
ñ ˜DŸN™NÓ+õó ,ðñ ˜DŸO™OÓ,ôó -ðñ œEŸI™I×.Ñ.×AÑAÓBô
ó Cð
ñ ˜D×,Ñ,Ó-ôó .ñøô] ó Ü�‰ð ô	
ñ 	ðús   ‰$I; É;JÊJc                  óô
  ^^•  [         R                  R                  mTR                    SSKJn   S[        R                  S[        SS4S jmU " TR                  5      S[        R                  S	[        S[        4UU4S
 jj5       nU " TR                  5      S[        R                  S	[        S[        S[        R                  4UU4S jj5       nU " TR                  5      S[        R                  S[        R                  S	[        S[        4UU4S jj5       nU " TR                  5      S[        R                  S[        R                  S	[        S[        S[        R                  4
UU4S jj5       nU " TR                  5      S[        R                  S	[        S[        4UU4S jj5       nU " TR                   5      S[        R                  S	[        S[        S[        R                  4UU4S jj5       nU " TR"                  5      S[        R                  S	[        S[        4UU4S jj5       nU " TR$                  5      S[        R                  S	[        S[        4UU4S jj5       nU " TR&                  5      S[        R                  S	[        S[        S[        R                  4UU4S jj5       n	U " TR(                  5      S[        R                  S	[        S[*        S[        S[        R                  4
UU4S jj5       n
U " TR,                  5      S[        R                  S[        S[        R                  4UU4S jj5       nU " TR.                  5      S[        R                  S[        S[0        S[        R                  4UU4S jj5       nU " TR2                  5      S[        R                  S[        R                  S[        R                  S[        R                  S[        4
UU4S jj5       nU " TR4                  5       S&S[        R                  S[        R                  S[        R                  S[        R                  S[        4
UU4S jjj5       nU " TR6                  5      S[        R                  S[        R                  S [        R                  S[        R                  S[        4
UU4S! jj5       nU " TR8                  5       S'S"[        R                  S#[        R                  S[*        S[        S	[        4
UU4S$ jjj5       nU " TR:                  5       S'S#[        R                  S[        S	[        4UU4S% jjj5       ng! [         a    [
        R                  S5         gf = f)(z@
Register lowerings for symmetric memory (symm_mem) operations.
z7symm_mem ops not available, skipping symm_mem loweringsNr   )rU   r5   r   r   c                 óÌ   • [        U [        R                  R                  5      (       a&  [	        U [        R                  R                  U5        g[
        R                  S5        g)zD
Helper to realize an input as symmetric memory buffer if possible.
zŒFailed to realize the input as a symmetric memory buffer for symm_mem operation; ensure the input is allocated as a symmetric memory buffer.N)r   r   r?   r@   r#   rµ   Úwarning)r5   r   s     r   Ú_maybe_realize_symm_memÚ<register_symm_mem_lowerings.<locals>._maybe_realize_symm_mem§  sG   € ô & c¬2×+<Ñ+<×+EÑ+E×FÑFÜ" 3¬×(9Ñ(9×(BÑ(BÀJÕOä�K‰KðNõr   r6   c           	      óÚ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UU5      5      $ r3   )rE   rF   r   rG   rH   rI   rM   rN   ©r5   r6   r   r¿   rL   s      €€r   Ú_symm_mem_one_shot_all_reduceÚBregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce¶  sW   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×,Ñ,×4Ñ4ØØØó	ó
ð 	
r   r†   c           
      óÜ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_outrN   ©r5   r6   r   r†   r¿   rL   s       €€r   Ú!_symm_mem_one_shot_all_reduce_outÚFregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_outÇ  sZ   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØØóó	
ð 		
r   Úsymm_bufferÚlocal_inputc           
      óÜ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_copyrN   )rÊ   rË   r6   r   r¿   rL   s       €€r   Ú"_symm_mem_one_shot_all_reduce_copyÚGregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_copyÚ  sZ   ø€ ñ 	  Ô8Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×1Ñ1×9Ñ9ØØØØóó	
ð 		
r   c                 óÞ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_copy_outrN   )rÊ   rË   r6   r   r†   r¿   rL   s        €€r   Ú&_symm_mem_one_shot_all_reduce_copy_outÚKregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_copy_outí  s]   ø€ ñ 	  Ô8Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØØØóó

ð 
	
r   c                 ó„   >• T" X5        [         R                  R                  TR                  R                  U UU5        U $ r3   )r   rI   rH   Útwo_shot_all_reduce_rN   rÂ   s      €€r   Ú_symm_mem_two_shot_all_reduce_ÚCregister_symm_mem_lowerings.<locals>._symm_mem_two_shot_all_reduce_  ó@   ø€ ñ 	  Ô0Ü
×Ñ× Ñ Ø×)Ñ)×1Ñ1ØØØô		
ð ˆ
r   Úoutputc           
      óÜ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Útwo_shot_all_reduce_outrN   )r5   r6   r   rÙ   r¿   rL   s       €€r   Ú!_symm_mem_two_shot_all_reduce_outÚFregister_symm_mem_lowerings.<locals>._symm_mem_two_shot_all_reduce_out  sZ   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØØóó	
ð 		
r   c                 ó„   >• T" X5        [         R                  R                  TR                  R                  U UU5        U $ r3   )r   rI   rH   Úmultimem_all_reduce_rN   rÂ   s      €€r   Ú_symm_mem_multimem_all_reduce_ÚCregister_symm_mem_lowerings.<locals>._symm_mem_multimem_all_reduce_$  rØ   r   c           	      óÚ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úmultimem_one_shot_all_reducerN   rÂ   s      €€r   Ú&_symm_mem_multimem_one_shot_all_reduceÚKregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_all_reduce3  sW   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØó	ó
ð 	
r   c           
      óÜ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Ú multimem_one_shot_all_reduce_outrN   rÇ   s       €€r   Ú*_symm_mem_multimem_one_shot_all_reduce_outÚOregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_all_reduce_outD  sZ   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×9Ñ9×AÑAØØØØóó	
ð 		
r   Úrootc                 óÞ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úmultimem_one_shot_reduce_outrN   )r5   r6   rê   r   r†   r¿   rL   s        €€r   Ú&_symm_mem_multimem_one_shot_reduce_outÚKregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_reduce_outW  s]   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØØØóó

ð 
	
r   c           	      óÚ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úmultimem_all_gather_outrN   )r5   r   r†   r¿   rL   s      €€r   Ú!_symm_mem_multimem_all_gather_outÚFregister_symm_mem_lowerings.<locals>._symm_mem_multimem_all_gather_outl  sW   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØó	ó
ð 	
r   Úsplit_last_dimc           
      óÜ   >• T" X5        [         R                  " [        R                  R                  [        R
                  R	                  TR                  R                  U UUU5      5      $ r3   )rE   rF   r   rG   rH   rI   Úreduce_scatter_outrN   )r5   r   ró   rÙ   r¿   rL   s       €€r   Ú_symm_mem_reduce_scatter_outÚAregister_symm_mem_lowerings.<locals>._symm_mem_reduce_scatter_out}  sZ   ø€ ñ 	  Ô0Ü�ŠÜ�L‰L×ÑÜ×Ñ×$Ñ$Ø×+Ñ+×3Ñ3ØØØØóó	
ð 		
r   Ú	in_splitsÚout_splits_offsetsc                 ó–   >• T" X5        T" X5        [         R                  R                  TR                  R                  U UUUU5        g r3   )r   rI   rH   Úall_to_all_vdevrN   )r5   r†   rø   rù   r   r¿   rL   s        €€r   Ú_symm_mem_all_to_all_vdevÚ>register_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdev�  sL   ø€ ñ 	  Ô0Ù Ô0Ü
×Ñ× Ñ Ø×$Ñ$×,Ñ,ØØØØØô	
ð r   c           	      ó˜   >• T" X5        T" X5        [         R                  R                  TR                  R                  U UUUUU5        g r3   )r   rI   rH   Úall_to_all_vdev_2drN   )r5   r†   rø   rù   r   Úmajor_alignr¿   rL   s         €€r   Ú_symm_mem_all_to_all_vdev_2dÚAregister_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdev_2d¤  sO   ø€ ñ 	  Ô0Ù Ô0Ü
×Ñ× Ñ Ø×'Ñ'×/Ñ/ØØØØØØô	
ð r   Úin_splits_offsetsc                 ó–   >• T" X5        T" X5        [         R                  R                  TR                  R                  U UUUU5        g r3   )r   rI   rH   Úall_to_all_vdev_2d_offsetrN   )r5   r†   r  rù   r   r¿   rL   s        €€r   Ú#_symm_mem_all_to_all_vdev_2d_offsetÚHregister_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdev_2d_offsetº  sL   ø€ ñ 	  Ô0Ù Ô0Ü
×Ñ× Ñ Ø×.Ñ.×6Ñ6ØØØØØô	
ð r   Úin_tileÚout_tilec                 ó–   >• T" X5        T" X5        [         R                  R                  TR                  R                  U UUUU5        g r3   )r   rI   rH   Útile_reducerN   )r  r	  rê   r   r6   r¿   rL   s        €€r   Ú_symm_mem_tile_reduceÚ:register_symm_mem_lowerings.<locals>._symm_mem_tile_reduceÎ  sL   ø€ ñ 	  Ô4Ù Ô5Ü
×Ñ× Ñ Ø× Ñ ×(Ñ(ØØØØØô	
ð r   c                 ó¨   >• U  H  nT" XS5        M     T" X5        [         R                  R                  TR                  R                  U UUUU5        g r3   )r   rI   rH   Úmulti_root_tile_reducerN   )Úin_tilesr	  Úrootsr   r6   r  r¿   rL   s         €€r   Ú _symm_mem_multi_root_tile_reduceÚEregister_symm_mem_lowerings.<locals>._symm_mem_multi_root_tile_reduceâ  sV   ø€ ó  ˆGÙ# GÖ8ñ  á Ô5Ü
×Ñ× Ñ Ø×+Ñ+×3Ñ3ØØØØØô	
ð r   r3   )r9   )rJ   rK   rL   rM   r´   rµ   r¶   r·   rU   r   rG   r¸   rÆ   rÍ   rÑ   rÕ   rÛ   rß   rã   rç   rì   Úintrð   rõ   Úboolrû   rÿ   r  r  r  )rU   rÃ   rÈ   rÎ   rÒ   rÖ   rÜ   rà   rä   rè   rí   rñ   rö   rü   r  r  r  r  r¿   rL   s                     @@r   Úregister_symm_mem_loweringsr  –  s�  ù€ ð	Ü—9‘9×%Ñ%ˆð
 	×$Ò$õ
 ,ðÜ�\‰\ðäðð 
ôñ �x×3Ñ3Ó4ð
Ü�\‰\ð
äð
ô ÷
ó 5ð
ñ  �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô ð
ô �\‰\÷	
ó 9ð
ñ$ �x×8Ñ8Ó9ð
Ü—\‘\ð
ä—\‘\ð
ô ð
ô ÷	
ó :ð
ñ$ �x×<Ñ<Ó=ð
Ü—\‘\ð
ä—\‘\ð
ô ð
ô ð	
ô
 �\‰\÷
ó >ð
ñ( �x×4Ñ4Ó5ðÜ�\‰\ðäðô ÷ó 6ðñ �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô ð
ô —‘÷	
ó 9ð
ñ$ �x×4Ñ4Ó5ðÜ�\‰\ðäðô ÷ó 6ðñ �x×<Ñ<Ó=ð
Ü�\‰\ð
äð
ô ÷
ó >ð
ñ  �x×@Ñ@ÓAð
Ü�\‰\ð
äð
ô ð
ô �\‰\÷	
ó Bð
ñ$ �x×<Ñ<Ó=ð
Ü�\‰\ð
äð
ô ð
ô ð	
ô
 �\‰\÷
ó >ð
ñ( �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô �\‰\÷
ó 9ð
ñ  �x×2Ñ2Ó3ð
Ü�\‰\ð
äð
ô ð
ô —‘÷	
ó 4ð
ñ$ �x×/Ñ/Ó0ðÜ�\‰\ðä�\‰\ðô —<‘<ðô ŸL™Lð	ô
 ÷ó 1ðñ& �x×2Ñ2Ó3ð ñÜ�\‰\ðä�\‰\ðô —<‘<ðô ŸL™Lð	ô
 ÷ð ó 4ðñ* �x×9Ñ9Ó:ðÜ�\‰\ðä�\‰\ðô Ÿ<™<ðô ŸL™Lð	ô
 ÷ó ;ðñ& �x×+Ñ+Ó,ð ñÜ—‘ðä—,‘,ðô ðô ð	ô
 ÷ð ó -ðñ& �x×6Ñ6Ó7ð ñä—,‘,ðô ð	ô
 ÷ð ó 8ñøôE
 ó Ü�‰ÐJÔKÙðús   „&U ÕU7Õ6U7)#ÚloggingrJ   Útorch.utils._pytreeÚutilsÚ_pytreerE   Útorch._inductor.utilsr   Útorch.utils._ordered_setr   Ú r   r   Úvirtualizedr   Ú	getLoggerÚ__name__rµ   rG   r?   r  r   r#   rv   r   Útupler  r¸   r+   r1   r4   rC   rO   r»   r  rW   r   r   Ú<module>r"     s,  ðã ã ß $Ð $Ý -Ý /ç Ý ð ×Ò˜Ó!€ðTØ	‡|�|ðØ')×'8Ñ'8ðà	ôð<%Ø	‡|�|ð%à×'Ñ'ð%ð ?ð%ð 
ô	%ðP
�—‘ð 
 "§)¡)ô 
ð     c¨3 h¡Ò0Ó2Ð ð8˜Ÿ™ð 8 tô 8ð=˜Ÿ	™	ð = dô =ðØ	�‰ðàðð ?ôð"
˜bŸl™lô 
òYóx_r   