+
    –°³jÅG  ã                   ó¸  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHtHt RR/R lt	R t
]P                  3R lt^ ]P                  3R lt^ ]P                  3R	 lt]P                  ]P                  3R
 lt]P                  ]P                  3R lt]P                  3R lt]P                  3R lt]P                  3R ltRR]P                  3R lt]P                  ]P                  3R lt ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R ]4      t ! R! R"]4      t ! R# R$]4      t R# )%é    N)ÚFunction)ÚgroupÚReduceOpÚ
suggestionc                óN   € R V  R2pV'       d   VRV R2,          p\        V4      h)ú torch.distributed.nn.functional.z& is not supported under torch.compile.z Use ú	 instead.)ÚRuntimeError)Únamer   Úmsgs   &$ Ú`/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/nn/functional.pyÚ_not_supported_under_compiler      s7   € à
*¨4¨&Ð0VÐWð ÷ Ø��z�l )Ð,Õ,ˆÜ
�sÓ
Ðó    c                 óN   € \         P                  ! R V  RV R2\        ^R7       R# )r   z is deprecated, use r	   )ÚcategoryÚ
stacklevelN)ÚwarningsÚwarnÚFutureWarning)r   r   s   &&r   Ú_deprecatedr      s,   € Ü‡M‚MØ
*¨4¨&ð 1Øˆl˜)ð	%äØ÷	r   c                ó¨   € \         P                  P                  4       '       d   \        RRR7       \	        RR4       \
        P                  WV 4      # )a�  
Broadcasts the tensor to the whole group.

``tensor`` must have the same number of elements in all processes
participating in the collective.

Arguments:
    tensor (Tensor): Data to be sent if ``src`` is the rank of current
        process.
    src (int): Source rank.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    Tensor: Received tensor from the broadcast op.

Ú	broadcastz3torch.distributed._functional_collectives.broadcast©r   )ÚtorchÚcompilerÚis_compilingr   r   Ú
_BroadcastÚapply)ÚtensorÚsrcr   s   &&&r   r   r       sE   € ô" ‡~�~×"Ñ"×$Ò$Ü$ØØLõ	
ô �ÐRÔSÜ×Ñ˜C¨Ó/Ð/r   c                óŒ   € \         P                  P                  4       '       d   \        R4       \        P                  WV 4      # )a4  
Gathers a list of tensors in a single process.

Arguments:
    tensor (Tensor): Input tensor.
    dst (int, optional): Destination rank (default is 0).
    group (ProcessGroup, optional): The process group to work on.

Returns:
    tuple[Tensor]: List of appropriately-sized tensors with the gathered data.
Úgather)r   r   r   r   Ú_Gatherr   )r   Údstr   s   &&&r   r"   r"   :   s0   € ô ‡~�~×"Ñ"×$Ò$Ü$ XÔ.Ü�=‰=˜ VÓ,Ð,r   c                ó�   € \         P                  P                  4       '       d   \        R4       \        P
                  ! W.V O5!  # )aÊ  
Scatters a list of tensors to all processes in a group.

Each process will receive exactly one tensor and store its data in the
``tensor`` argument.

Arguments:
    tensors (list[Tensor]): List of tensors to scatter on the source rank.
        Receivers must pass ``None`.
    src (int, optional): Source rank (default is 0).
    group (ProcessGroup, optional): The process group to work on.

Returns:
    Tensor: Output tensor from the scatter operation.

Úscatter)r   r   r   r   Ú_Scatterr   )Útensorsr    r   s   &&&r   r&   r&   K   s3   € ô" ‡~�~×"Ñ"×$Ò$Ü$ YÔ/Ü�>Š>˜#Ð/ wÓ/Ð/r   c                óŒ   € \         P                  P                  4       '       d   \        R4       \        P                  WW04      # )aß  
Reduces the tensor data across all machines.

Only the process with rank ``dst`` is going to receive the final result.

Arguments:
    tensor (Tensor): Input of the collective.
    dst (int): Destination rank.
    op (optional): One of the values from
        ``torch.distributed.ReduceOp``
        enum.  Specifies an operation used for element-wise reductions.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    Tensor: Output of the collective.

Úreduce)r   r   r   r   Ú_Reducer   )r   r$   Úopr   s   &&&&r   r*   r*   a   s0   € ô$ ‡~�~×"Ñ"×$Ò$Ü$ XÔ.Ü�=‰=˜ %Ó0Ð0r   c                ó®   € \         P                  P                  4       '       d   \        RRR7       \	        RR4       \
        P                  ! W#V .VO5!  # )aÉ  
Reduces, then scatters a list of tensors to all processes in a group.

Arguments:
    output (Tensor): Output tensor.
    input_list (list[Tensor]): List of tensors to reduce and scatter.
    op (optional): One of the values from
        ``torch.distributed.ReduceOp``
        enum.  Specifies an operation used for element-wise reductions.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    Tensor: Output of the collective.

Úreduce_scatterz?torch.distributed._functional_collectives.reduce_scatter_singler   )r   r   r   r   r   Ú_Reduce_Scatterr   )ÚoutputÚ
input_listr,   r   s   &&&&r   r.   r.   x   sO   € ô  ‡~�~×"Ñ"×$Ò$Ü$ØØXõ	
ô ØØIôô × Ò  ¨FÐ@°ZÓ@Ð@r   c                ó¦   € \         P                  P                  4       '       d   \        RRR7       \	        RR4       \
        P                  W4      # )zû
Gathers tensors from the whole group in a list.

Arguments:
    tensor (Tensor): Tensor to be broadcast from current process.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    tuple([Tensor]): Output of the collective.

Ú
all_gatherz;torch.distributed._functional_collectives.all_gather_singler   )r   r   r   r   r   Ú
_AllGatherr   )r   r   s   &&r   r3   r3   ”   sH   € ô ‡~�~×"Ñ"×$Ò$Ü$ØØTõ	
ô ØÐSôô ×Ñ˜EÓ*Ð*r   c                óŒ   € \         P                  P                  4       '       d   \        R4       \        P                  WV4      # )av  
Single tensor all gather. Gathers a single tensor from all ranks, and puts them in a single output tensor.

Args:
    output_tensor (Tensor): Output tensor. It should contain
        correctly-sized tensors to be used for output of the collective.
    input_tensor (Tensor): Tensor to be broadcast from current process.
    group (ProcessGroup, optional): The process group to work on. If None,
        the default process group will be used.

Examples:
    >>> # All tensors below are of torch.int64 dtype.
    >>> # We have 2 process groups, 2 ranks.
    >>> # xdoctest: +SKIP("incorrect want text")
    >>> output_tensor = torch.zeros(2, dtype=torch.int64)
    >>> output_tensor
    [tensor([0, 0])] # Rank 0 and 1
    >>> tensor = torch.arange(1, dtype=torch.int64) + 1 + rank
    >>> tensor
    tensor([1]) # Rank 0
    tensor([2]) # Rank 1
    >>> dist.all_gather_base(output_tensor, tensor)
    >>> output_tensor
    tensor([1,2]) # Rank 0
    tensor([1,2]) # Rank 1

.. warning::
    `_all_gather_base` is experimental and subject to change.
    It is the caller's responsibility to ensure the output_tensor
    is correctly sized.

Ú_all_gather_base)r   r   r   r   Ú_AllGatherBaser   )Úoutput_tensorÚinput_tensorr   s   &&&r   r6   r6   «   s4   € ôB ‡~�~×"Ñ"×$Ò$Ü$Ð%7Ô8Ü×Ñ ¸UÓCÐCr   c                ó�   € \         P                  P                  4       '       d   \        R4       \        P
                  ! W .VO5!  # )a£  
Each process scatters list of input tensors to all processes in a group and return gathered list of tensors in output list.

Arguments:
    output_tensor_list (list[Tensor]): list of tensors to gather one per rank.
    input_tensor_list (list[Tensor]): List of tensors to scatter one per rank.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    tuple([Tensor]): Output of the collective.

Ú
all_to_all)r   r   r   r   Ú	_AlltoAllr   )Úoutput_tensor_listÚinput_tensor_listr   s   &&&r   r;   r;   Ñ   s4   € ô ‡~�~×"Ñ"×$Ò$Ü$ \Ô2Ü�?Š?˜5ÐIÐ7HÓIÐIr   c                óª   € \         P                  P                  4       '       d   \        RRR7       \	        RR4       \
        P                  W@W#V4      # )aá  
Each process splits input tensor and then scatters the split list to all processes in a group.

Then concatenate the received tensors from all the processes in the group and return single output tensor.

Arguments:
    output (Tensor): Gathered concatenated output tensor.
    input (Tensor): Input tensor to scatter.
    output_split_sizes: (list[Int], optional): Output split sizes for dim 0
        if specified None or empty, dim 0 of ``output`` tensor must divide
        equally by ``world_size``.
    input_split_sizes: (list[Int], optional): Input split sizes for dim 0
        if specified None or empty, dim 0 of ``input`` tensor must divide
        equally by ``world_size``.

Returns:
    Tensor: Output of the collective.

Úall_to_all_singlez;torch.distributed._functional_collectives.all_to_all_singler   )r   r   r   r   r   Ú_AlltoAllSingler   )r0   ÚinputÚoutput_split_sizesÚinput_split_sizesr   s   &&&&&r   r@   r@   ã   sR   € ô4 ‡~�~×"Ñ"×$Ò$Ü$ØØTõ	
ô ØØEôô × Ñ ØÐ)¸eóð r   c                ó¨   € \         P                  P                  4       '       d   \        RRR7       \	        RR4       \
        P                  WV 4      # )aö  
Reduces the tensor data across all machines in such a way that all get the final result.

After the call the returned tensor is going to be bitwise
identical in all processes.

Arguments:
    tensor (Tensor): Input of the collective.
    op (optional): One of the values from
        ``torch.distributed.ReduceOp``
        enum.  Specifies an operation used for element-wise reductions.
    group (ProcessGroup, optional): The process group to work on.

Returns:
    Tensor: Output of the collective

Ú
all_reducez4torch.distributed._functional_collectives.all_reducer   )r   r   r   r   r   Ú
_AllReducer   )r   r,   r   s   &&&r   rF   rF     sE   € ô$ ‡~�~×"Ñ"×$Ò$Ü$ØØMõ	
ô �ÐTÔUÜ×Ñ˜B vÓ.Ð.r   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r   i&  c                ó¢   € Wn         W n        \        P                  ! 4       V n        VP                  4       p\        P                  ! W1VR 7       V# ©©r   )r    r   ÚdistÚget_rankÚglobal_rankÚcloner   )Úctxr    r   r   s   &&&&r   ÚforwardÚ_Broadcast.forward'  s;   € ð ŒØŒ	ÜŸ-š-›/ˆŒð —‘“ˆÜ�Š�v¨%Õ0Øˆr   c                óÖ   € \         P                  V P                  \        P                  V P
                  V4      pV P                  V P                  8w  d   VP                  4        R R V3# ©N)r+   r   r    r   ÚSUMr   rN   Úzero_)rP   Úgrad_outputÚgxs   && r   ÚbackwardÚ_Broadcast.backward3  sJ   € ô �]‰]˜3Ÿ7™7¤H§L¡L°#·)±)¸[ÓIˆØ�7‰7�c—o‘oÔ%Ø�H‰HŒJØ�d˜BÐÐr   © N©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstaticmethodrQ   rY   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   &  s+   ø‡ € Øñó ðð ñ ó ö r   r   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r#   i<  c                ó|  € Wn         W n        \        \        P                  ! VR 7      4       Uu. uF  p\
        P                  ! V4      NK  	  ppVP                  4       p\        P                  ! VR 7      V8X  d   \        P                  ! W5WR 7       M\        P                  ! VRWR 7       \        V4      # u upi )rK   N)r$   r   ÚrangerL   Úget_world_sizer   Ú
zeros_likeÚ
contiguousrM   r"   Útuple)rP   r$   r   r   ÚiÚtensor_lists   &&&&  r   rQ   Ú_Gather.forward=  s—   € ð ŒØŒ	ô /4´D×4GÒ4GÈeÔ4TÔ.Uó
Ù.U¨ŒE×Ò˜VÖ$Ñ.Uð 	ð 
ð ×"Ñ"Ó$ˆÜ�=Š=˜uÔ%¨Ô,Ü�KŠK˜¨SÖ>ä�KŠK˜  cÕ7Ü�[Ó!Ð!ùò
s   ¯B9c                ól   € R\         P                  ! V P                  V P                  .VO5!  3,           # ©N©NN)r'   r   r$   r   )rP   Úgrad_outputss   &*r   rY   Ú_Gather.backwardQ  s(   € àœxŸ~š~¨c¯g©g°s·y±yÐPÀ<ÓPÐRÕRÐRr   r[   Nr\   rd   s   @r   r#   r#   <  s-   ø‡ € Øñ"ó ð"ð$ ñSó öSr   r#   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r'   iV  c                ó˜  a€ Wn         W n        \        ;QJ d    V3R  lS 4       F  '       d   K   RM	  RM! V3R  lS 4       4      '       g   \        h\        P
                  ! S^ ,          4      p\        P                  ! VR7      V8X  d%   \        P                  ! V\        S4      WR7       V# \        P                  ! VRWR7       V# )c              3   ór   <"  € T F,  qP                  4       S^ ,          P                  4       8H  x € K.  	  R# 5i)r   N)Úsize)Ú.0Útr(   s   & €r   Ú	<genexpr>Ú#_Scatter.forward.<locals>.<genexpr>\  s%   øé € ÐB¹'°Q—6‘6“8˜w q�zŸ™Ó0Ö0»'ùs   ƒ47FTrK   N)
r    r   ÚallÚAssertionErrorr   rj   rL   rM   r&   Úlist)rP   r    r   r(   r0   s   &&&j r   rQ   Ú_Scatter.forwardW  s�   ø€ ð ŒØŒ	ß‹sÔB¹'ÓB�s�sŠsÔB¹'ÓB×BÒBÜ Ð Ü×!Ò! '¨!¥*Ó-ˆÜ�=Š=˜uÔ%¨Ô,Ü�LŠL˜¤ g£°ÕAð ˆô �LŠL˜  sÕ8Øˆr   c                óf   € R\         P                  V P                  V P                  V4      ,           # rq   )r#   r   r    r   ©rP   rW   s   &&r   rY   Ú_Scatter.backwarde  s$   € ð œgŸm™m¨C¯G©G°S·Y±YÀÓLÕLÐLr   r[   Nr\   rd   s   @r   r'   r'   V  s-   ø‡ € Øñ
ó ð
ð ñMó öMr   r'   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r+   ik  c                ón   € Wn         W0n        VP                  4       p\        P                  ! WAW#R 7       V# )©r,   r   )r    r   rO   rL   r*   )rP   r    r,   r   r   s   &&&&&r   rQ   Ú_Reduce.forwardl  s,   € ð ŒØŒ	Ø—‘“ˆÜ�Š�F BÕ4Øˆr   c                óh   € R\         P                  V P                  V P                  V4      3,           # ©N)NNN)r   r   r    r   r‚   s   &&r   rY   Ú_Reduce.backwardu  s)   € ð "¤Z×%5Ñ%5°c·g±g¸s¿y¹yÈ+Ó%VÐ$XÕXÐXr   r[   Nr\   rd   s   @r   r+   r+   k  s-   ø‡ € Øñó ðð ñYó öYr   r+   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r/   i{  c                óÎ   € W n         VP                  4       p\        ;QJ d    . R  V 4       F  NK  	  5M! R  V 4       4      p\        P                  ! V\        V4      WR7       V# )c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5irT   ©rk   ©ry   rz   s   & r   r{   Ú*_Reduce_Scatter.forward.<locals>.<genexpr>‚  s   é € Ð!LÑ:K°Q§,¡,§. .Ó:Kùó   ‚r†   )r   rk   rl   rL   r.   r   )rP   r,   r   r   r>   s   &&&&*r   rQ   Ú_Reduce_Scatter.forward|  sU   € ð Œ	à×"Ñ"Ó$ˆß!œEÑ!LÑ:KÓ!LŸE™EÑ!LÑ:KÓ!LÓLÐÜ×Ò˜F¤DÐ):Ó$;ÀÕPØˆr   c                óP   € R\         P                  V P                  V4      ,           # r‰   )r4   r   r   r‚   s   &&r   rY   Ú_Reduce_Scatter.backward†  s    € ð "¤J×$4Ñ$4°S·Y±YÀÓ$LÕLÐLr   r[   Nr\   rd   s   @r   r/   r/   {  s-   ø‡ € Øñó ðð ñMó öMr   r/   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r4   iŒ  c                ó  € VP                  4       pWn        \        \        P                  ! VR 7      4       Uu. uF  p\
        P                  ! V4      NK  	  pp\        P                  ! WBVR 7       \        V4      # u upi rJ   )	rk   r   rh   rL   ri   r   Ú
empty_liker3   rl   )rP   r   r   Ú_Úout_tensor_lists   &&&  r   rQ   Ú_AllGather.forward�  so   € ð ×"Ñ"Ó$ˆàŒ	ä.3´D×4GÒ4GÈeÔ4TÔ.Uó
Ù.U¨ŒE×Ò˜VÖ$Ñ.Uð 	ð 
ô 	�Š˜°uÕ=Ü�_Ó%Ð%ùò
s   ¹A=c                ó’  € \         P                  ! V P                  R 7      \         P                  P                  \         P                  P
                  39   dt   \         P                  ! V P                  R 7      p\        P                  ! W,          4      p\        P                  ! \        P                  V P                  V.VO5!  pRV3# V Uu. uF  p\        P                  ! V4      NK  	  pp\        P                  ! V P                  V.VO5!  p\        P                  ! \        P                  ! V4      ^ R7      pRV3# u upi )rK   )ÚdimN)rL   Úget_backendr   ÚBackendÚNCCLÚXCCLrM   r   r—   r/   r   r   rU   r<   ÚsumÚstack)rP   rs   ÚrankrX   r   rn   Úgxss   &*     r   rY   Ú_AllGather.backward›  sé   € ä×Ò #§)¡)Ô,´·±×1BÑ1BÄDÇLÁL×DUÑDUÐ0VÔVÜ—=’= s§y¡yÔ1ˆDÜ×!Ò! ,Õ"4Ó5ˆBÜ ×&Ò&¤x§|¡|°S·Y±YÀÐRÀ\ÓRˆBð �bˆzÐñ COÓOÁ,¸œ5×+Ò+¨FÖ3Á,ˆKÐOÜ—/’/ #§)¡)¨[ÐH¸<ÓHˆCÜ—’œ5Ÿ;š; sÓ+°Ô3ˆBØ�bˆzÐùò Ps   ÃEr[   Nr\   rd   s   @r   r4   r4   Œ  s+   ø‡ € Øñ
&ó ð
&ð ñó ör   r4   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r7   iª  c                ó^   € W0n         \        P                  ! WP                  4       VR 7       V# rJ   )r   rL   r6   rk   )rP   r8   r9   r   s   &&&&r   rQ   Ú_AllGatherBase.forward«  s(   € ð Œ	Ü×Ò˜m×-DÑ-DÓ-FÈeÕTØÐr   c                ó°  € \         P                  ! V P                  R 7      \         P                  P                  \         P                  P
                  39   dð   \         P                  ! V P                  R 7      p\        VP                  4       4      pV^ ,          V,          ^ 8w  d   \        RV RV 24      hV^ ,          \         P                  ! V P                  R 7      ,          V^ &   \        P                  ! W1P                  VP                  R7      p\         P                  ! WA\        P                   V P                  4       M\        R4      hRVR3# )rK   zTensor with dimensions: z8 does not have first dimension divisible by world_size: ©ÚdeviceÚdtypezBackend not supported!N)rL   r�   r   rž   rŸ   r    ri   r   rx   r
   r   Úemptyr«   r¬   Ú_reduce_scatter_baser   rU   )rP   rW   Ú
world_sizeÚout_sizerX   s   &&   r   rY   Ú_AllGatherBase.backward²  s  € ô ×Ò #§)¡)Ô,´·±×1BÑ1BÄDÇLÁL×DUÑDUÐ0VÔVÜ×,Ò,°3·9±9Ô=ˆJÜ˜K×,Ñ,Ó.Ó/ˆHØ˜�{˜ZÕ'¨1Ô,Ü"Ø.¨x¨jð 9IØISÈðVóð ð # 1�+¬×)<Ò)<À3Ç9Á9Ô)MÕMˆH�Q‰KÜ—’Ø×!3Ñ!3¸;×;LÑ;LôˆBô ×%Ò% b´x·|±|ÀSÇYÁYÕOäÐ7Ó8Ð8Ø�b˜$ÐÐr   r[   Nr\   rd   s   @r   r7   r7   ª  s+   ø‡ € Øñó ðð
 ñ ó ö r   r7   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )r<   iÇ  c                ó¤  € Wn         \        \        P                  ! VR 7      4       Uu. uF  qCV,          P	                  4       NK  	  upV n        \        P                  ! VR 7      p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        P                  ! VR 7      \        P                  P                  J d[   \        \        P                  ! VR 7      4       F5  pRpWE8X  d   \        V4      p\        P                  ! W$,          WdVR 7       K7  	  M"\        P                  ! V\        V4      VR 7       \        V4      # u upi )rK   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5irT   rŽ   r�   s   & r   r{   Ú$_AlltoAll.forward.<locals>.<genexpr>Ð  s   é € Ð8±¨1Ÿ™Ÿ˜³ùr‘   N)r   rh   rL   ri   rx   Úinput_tensor_size_listrM   rl   r�   rž   ÚGLOOr   r&   r;   )rP   r   r™   r(   rm   Úmy_rankÚto_sends   &&&*   r   rQ   Ú_AlltoAll.forwardÈ  s÷   € ð Œ	ä',¬T×-@Ò-@ÀuÔ-MÔ'Nó&
Ù'N !�A�J�O‰OÖÑ'Nñ&
ˆÔ"ô —-’- eÔ,ˆß”%Ñ8±Ó8—%‘%Ñ8±Ó8Ó8ˆä×Ò %Ô(¬D¯L©L×,=Ñ,=Ó=Üœ4×.Ò.°UÔ;Ö<�Ø�Ø”<Ü" 7›m�GÜ—’˜_Õ/°À5×Iò	 =ô �OŠOØÜ�W“Øõô
 �_Ó%Ð%ùò%&
s   ©Ec           	     ó  € V P                    Uu. uF=  p\        P                  ! W!^ ,          P                  V^ ,          P                  R7      NK?  	  ppR\
        P                  ! V P                  V.VO5!  ,           # u upi )r   rª   rr   )r¶   r   r­   r«   r¬   r<   r   r   )rP   rs   rx   rn   s   &*  r   rY   Ú_AlltoAll.backwardà  sv   € ð ×2Ò2ó	
ñ 3�ô �KŠKØ¨!�_×3Ñ3¸<È½?×;PÑ;P÷ñ 3ð	 	ð 
ð œiŸošo¨c¯i©i¸ÐTÀ|ÓTÕTÐTùò
s   �AA>r[   Nr\   rd   s   @r   r<   r<   Ç  s-   ø‡ € Øñ&ó ð&ð, ñUó öUr   r<   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )rA   ië  c                óŠ   € Wn         VP                  4       V n        W@n        W0n        \
        P                  ! VVVVVR 7       V# ))rC   rD   r   )r   rx   Ú
input_sizerC   rD   rL   r@   )rP   r   r0   rC   rD   rB   s   &&&&&&r   rQ   Ú_AlltoAllSingle.forwardì  sF   € ð Œ	ØŸ™›ˆŒØ!2ÔØ 2ÔÜ×ÒØØØ1Ø/Øõ	
ð ˆr   c           	     ó
  € \         P                  ! V P                  VP                  VP                  R 7      pR\
        P                  V P                  VV P                  V P                  VP                  4       4      3,           # )rª   )NNNN)r   r­   r¿   r«   r¬   rA   r   r   rC   rD   rk   )rP   rW   r   s   && r   rY   Ú_AlltoAllSingle.backwardü  ss   € ô —’Ø�N‰N ;×#5Ñ#5¸[×=NÑ=Nô
ˆð (Ü×!Ñ!Ø—	‘	ØØ×&Ñ&Ø×%Ñ%Ø×&Ñ&Ó(óð+
õ 
ð 	
r   r[   Nr\   rd   s   @r   rA   rA   ë  s+   ø‡ € Øñó ðð ñ
ó ö
r   rA   c                   ó@   a € ] tR tRt o ]R 4       t]R 4       tRtV tR# )rG   i  c                óŽ   € W n         Wn        VP                  \        P                  R 7      p\
        P                  ! W1VR7       V# ))Úmemory_formatr†   )r   r,   rO   r   Úcontiguous_formatrL   rF   )rP   r,   r   r   s   &&&&r   rQ   Ú_AllReduce.forward  s7   € ð Œ	ØŒØ—‘¬E×,CÑ,C�ÓDˆÜ�Š˜¨UÕ3Øˆr   c                óh   € R\         P                  V P                  V P                  V4      3,           # rq   )rG   r   r,   r   r‚   s   &&r   rY   Ú_AllReduce.backward  s)   € ð œz×/Ñ/°·±¸¿	¹	À;ÓOÐQÕQÐQr   r[   Nr\   rd   s   @r   rG   rG     s-   ø‡ € Øñó ðð ñRó öRr   rG   )!r   r   Útorch.distributedÚdistributedrL   Útorch.autogradr   r   r   r   r   ÚWORLDr   r"   r&   rU   r*   r.   r3   r6   r;   r@   rF   r   r#   r'   r+   r/   r4   r7   r<   rA   rG   r[   r   r   Ú<module>rÎ      s[  ðã ã Ý  Ý #÷
 .ð°Tô òð "'§¡ô 0ð4  §¡ô -ð"  %§+¡+ô 0ð, $Ÿ<™<¨u¯{©{ô 1ð. +3¯,©,¸e¿k¹kô Að8 #Ÿ[™[ô +ð. 9>¿¹ô #DðL =B¿K¹Kô Jð* ØØ
�+‰+ô%ðP #Ÿ,™,¨e¯k©kô /ô6 �ô  ô,Sˆhô Sô4Mˆxô Mô*Yˆhô Yô M�hô Mô"�ô ô< �Xô  ô:!U�ô !UôH
�hô 
ôDR�ö Rr   