+
    ˜°³ja+  ã                   ó–   € ^ RI t ^ RIt^ RIHtHtHtHtHtHt ^ RI	H
t
 RRR/R lltRR ltRR ltRR ltRRR/R	 lltRRR/R
 lltR# )é    N)Ú_flatten_dense_tensorsÚ_get_device_indexÚ_handle_complexÚ_reorder_tensors_asÚ_take_tensorsÚ_unflatten_dense_tensors)ÚncclÚoutc               ó"  € \        V 4      p VRJ VRJ ,          '       g   \        RV RV 24      hVe:   V Uu. uF  p\        V4      NK  	  pp\        P                  P                  W4      # \        P                  P                  W4      # u upi )a¯  Broadcasts a tensor to specified GPU devices.

Args:
    tensor (Tensor): tensor to broadcast. Can be on CPU or GPU.
    devices (Iterable[torch.device, str or int], optional): an iterable of
      GPU devices, among which to broadcast.
    out (Sequence[Tensor], optional, keyword-only): the GPU tensors to
      store output results.

.. note::
    Exactly one of :attr:`devices` and :attr:`out` must be specified.

Returns:
    - If :attr:`devices` is specified,
        a tuple containing copies of :attr:`tensor`, placed on
        :attr:`devices`.
    - If :attr:`out` is specified,
        a tuple containing :attr:`out` tensors, each containing a copy of
        :attr:`tensor`.
NzFExactly one of 'devices' and 'out' must be specified, but got devices=z	 and out=)r   ÚRuntimeErrorr   ÚtorchÚ_CÚ
_broadcastÚ_broadcast_out)ÚtensorÚdevicesr
   Úds   &&$ ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/nn/parallel/comm.pyÚ	broadcastr      s–   € ô* ˜VÓ$€FØ˜ˆ_ ¨ ×-Ô-ÜØTÐU\ÐT]Ð]fÐgjÐfkÐló
ð 	
ð ÒÙ18Ó9±¨AÔ$ QÖ'±ˆÐ9Ü�x‰x×"Ñ" 6Ó3Ð3ô �x‰x×&Ñ& vÓ3Ð3ùò	 :s   ¸Bc                ó¾   € V Uu. uF  p\        V4      NK  	  ppV  Uu. uF  p\        V4      NK  	  p p\        P                  P	                  WV4      # u upi u upi )a  Broadcast a sequence of tensors to the specified GPUs.

Small tensors are first coalesced into a buffer to reduce the number of synchronizations.

Args:
    tensors (sequence): tensors to broadcast. Must be on the same device,
      either CPU or GPU.
    devices (Iterable[torch.device, str or int]): an iterable of GPU
      devices, among which to broadcast.
    buffer_size (int): maximum size of the buffer used for coalescing

Returns:
    A tuple containing copies of :attr:`tensor`, placed on :attr:`devices`.
)r   r   r   r   Ú_broadcast_coalesced)Útensorsr   Úbuffer_sizer   Úts   &&&  r   Úbroadcast_coalescedr   2   sV   € ñ .5Ó5©W¨Ô  Ö#©W€GÐ5Ù+2Ó3©7 aŒ˜qÖ!©7€GÐ3Ü�8‰8×(Ñ(¨¸;ÓGÐGùò 6ùÚ3s
   …AŸAc           	     ó*  € \        VRR7      pV ^ ,          P                  4       pRp\        V 4       F­  w  rEVP                  P                  R8X  d   \        RV R24      hVP                  4       V8X  d   TpVP                  4       V8w  g   K]  RP                  R VP                  4        4       4      pRP                  R	 V 4       4      p\        R
V RV RV 24      h	  Vf   \        R4      h\        V 4      ^8X  d
   V ^ ,          # \        P                  ! V 4      '       d7   \        P                  ! W,          4      p\        P                  ! WVR7       V# \        P                  ! W,          P                  P                  V4      p	\        V 4       UU
u. uF  w  rJWC8w  g   K  V
NK  	  ppp
W,          V^ ,          P!                  V	RR7      ,           pVR,           F%  pVP#                  VP!                  V	RR7      4       K'  	  V# u up
pi )aÃ  Sum tensors from multiple GPUs.

All inputs should have matching shapes, dtype, and layout. The output tensor
will be of the same shape, dtype, and layout.

Args:
    inputs (Iterable[Tensor]): an iterable of tensors to add.
    destination (int, optional): a device on which the output will be
        placed (default: current device).

Returns:
    A tensor containing an elementwise sum of all inputs, placed on the
    :attr:`destination` device.
T)ÚoptionalNÚcpuz7reduce_add expects all inputs to be on GPUs, but input z
 is on CPUÚxc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i©N©Ústr©Ú.0r   s   & r   Ú	<genexpr>Úreduce_add.<locals>.<genexpr>`   s   é € Ð6©: aœ3˜qŸ6˜6«:ùó   ‚c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir!   r"   r$   s   & r   r&   r'   a   s   é € Ð;±
¨1¤ A§ ³
ùr(   zinput z has invalid size: got z, but expected zLreduce_add expects destination to be on the same GPU with one of the tensors)ÚoutputÚroot)ÚdeviceÚnon_blocking:é   NN)r   ÚsizeÚ	enumerater,   ÚtypeÚAssertionErrorÚ
get_deviceÚjoinÚ
ValueErrorr   Úlenr	   Úis_availabler   Ú
empty_likeÚreduceÚtoÚadd_)ÚinputsÚdestinationÚ
input_sizeÚ
root_indexÚiÚinpÚgotÚexpectedÚresultÚdestination_devicer   ÚnonrootÚothers   &&           r   Ú
reduce_addrH   F   sà  € ô $ K¸$Ô?€KØ˜•—‘Ó!€JØ€JÜ˜FÖ#‰ˆØ�:‰:�?‰?˜eÔ#Ü ØIÈ!ÈÈJÐWóð ð �>‰>Ó˜{Ô*ØˆJØ�8‰8‹:˜Ö#Ø—(‘(Ñ6¨3¯8©8¬:Ó6Ó6ˆCØ—x‘xÑ;±
Ó;Ó;ˆHÜØ˜˜Ð2°3°%°ÀxÀjÐQóð ñ $ð ÒÜØZó
ð 	
ô ˆ6ƒ{�aÔØ�a�yÐä×Ò˜× Ò Ü×!Ò! &Õ"4Ó5ˆÜ�Š�F°
Õ;ð €Mô #Ÿ\š\¨&Õ*<×*CÑ*C×*HÑ*HÈ+ÓVÐÜ!*¨6Ô!2ÔFÑ!2™˜°a±o—1�1Ñ!2ˆÑFàÕ# g¨a¥j§m¡mØ%°Dð '4ó '
õ 
ˆð ˜R—[�[ˆEØ�K‰K˜Ÿ™Ð(:È˜ÓNÖOñ !à€Mùó Gs   Æ
HÆ+Hc                óR  € V  Uu. uF  p. NK  	  pp. p. p\        V RR/  FÛ  p\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d7   \        Wq4      pVP                  V4       VP                  V^ ,          4       Ks  \        WGRR7       F8  w  ršT	P                  V
P                  '       d   V
P                  4       MT
4       K:  	  VP                  V^ ,          R,          4       KÝ  	  V Uu. uF  p\        W²4      NK  	  pp\        VRR/  F]  pV Uu. uF  p\        V4      NK  	  pp\        Wñ4      p\        VV^ ,          4       F  p
VP                  V
P                  4       K   	  K_  	  \        \        WV4      4      # u upi u upi u upi )a,  Sum tensors from multiple GPUs.

Small tensors are first coalesced into a buffer to reduce the number
of synchronizations.

Args:
    inputs (Iterable[Iterable[Tensor]]): iterable of iterables that
        contain tensors from a single device.
    destination (int, optional): a device on which the output will be
        placed (default: current device).
    buffer_size (int): maximum size of the buffer used for coalescing

Returns:
    A tuple of tensors containing an elementwise sum of each group of
    inputs, placed on the ``destination`` device.
ÚstrictTc              3   ó8   "  € T F  qP                   x € K  	  R # 5ir!   )Ú	is_sparse)r%   r   s   & r   r&   Ú'reduce_add_coalesced.<locals>.<genexpr>”   s   é € Ð3¡N˜q�{Ž{£Nùr(   F)rJ   éÿÿÿÿ)ÚzipÚallrH   ÚappendrL   Úto_denser   r   r   ÚdataÚtupler   )r<   r=   r   Ú_Údense_tensorsr*   Ú	ref_orderÚtensor_at_gpusrD   Úcollr   r   ÚitrsÚchunksÚchunkÚflat_tensorsÚflat_results   &&&              r   Úreduce_add_coalescedr_   |   sr  € ñ& .4Ó 4©V¨£©V€MÐ 4Ø€FØ€Iä˜vÐ3¨dÔ3ˆß‹3Ñ3¡NÓ3�3�3Š3Ñ3¡NÓ3×3Ò3Ü Ó<ˆFØ�M‰M˜&Ô!Ø×Ñ˜^¨AÕ.Ö/ä˜}ÀT×J‘�Ø—‘¨A¯K¯K¨K˜AŸJ™JœL¸QÖ?ñ Kà×Ñ˜]¨1Õ-¨bÕ1Ö2ñ 4ñ @MÓM¹}°GŒM˜'Ö/¹}€DÐMä�tÐ) DÔ)ˆá7=ó
Ù7=¨eÔ" 5Ö)±vð 	ð 
ô ! Ó;ˆÜ)¨+°v¸aµyÖAˆAð �M‰M˜!Ÿ&™&Ö!ó	 Bñ *ô Ô$ VÓ7Ó8Ð8ùò3 !5ùò Nùò
s   …FÄFÄ,F$c          	     óL  € \        V 4      p VfE   V Uu. uF  p\        V4      NK  	  pp\        \        P                  P                  WW#V4      4      # Ve   \        RV 24      hVe   \        RV 24      h\        \        P                  P                  WW44      4      # u upi )aÈ  Scatters tensor across multiple GPUs.

Args:
    tensor (Tensor): tensor to scatter. Can be on CPU or GPU.
    devices (Iterable[torch.device, str or int], optional): an iterable of
      GPU devices, among which to scatter.
    chunk_sizes (Iterable[int], optional): sizes of chunks to be placed on
      each device. It should match :attr:`devices` in length and sums to
      ``tensor.size(dim)``. If not specified, :attr:`tensor` will be divided
      into equal chunks.
    dim (int, optional): A dimension along which to chunk :attr:`tensor`.
      Default: ``0``.
    streams (Iterable[torch.cuda.Stream], optional): an iterable of Streams, among
      which to execute the scatter. If not specified, the default stream will
      be utilized.
    out (Sequence[Tensor], optional, keyword-only): the GPU tensors to
      store output results. Sizes of these tensors must match that of
      :attr:`tensor`, except for :attr:`dim`, where the total size must
      sum to ``tensor.size(dim)``.

.. note::
    Exactly one of :attr:`devices` and :attr:`out` must be specified. When
    :attr:`out` is specified, :attr:`chunk_sizes` must not be specified and
    will be inferred from sizes of :attr:`out`.

Returns:
    - If :attr:`devices` is specified,
        a tuple containing chunks of :attr:`tensor`, placed on
        :attr:`devices`.
    - If :attr:`out` is specified,
        a tuple containing :attr:`out` tensors, each containing a chunk of
        :attr:`tensor`.
zI'devices' must not be specified when 'out' is specified, but got devices=zQ'chunk_sizes' must not be specified when 'out' is specified, but got chunk_sizes=)r   r   rT   r   r   Ú_scatterr   Ú_scatter_out)r   r   Úchunk_sizesÚdimÚstreamsr
   r   s   &&&&&$ r   Úscatterrf   «   s¯   € ôD ˜VÓ$€FØ
‚{á18Ó9±¨AÔ$ QÖ'±ˆÐ9Ü”U—X‘X×&Ñ& v¸È'ÓRÓSÐSàÒÜØ[Ð\cÐ[dÐeóð ð Ò"ÜØcÐdoÐcpÐqóð ô ”U—X‘X×*Ñ*¨6¸ÓEÓFÐFùò :s   ”B!c               óP  € V  Uu. uF  p\        V4      NK  	  p pVfS   VR8X  d   \        P                  ! R\        ^R7       \	        VRRR7      p\
        P                  P                  WV4      # Ve   \        RV 24      h\
        P                  P                  WV4      # u upi )a^  Gathers tensors from multiple GPU devices.

Args:
    tensors (Iterable[Tensor]): an iterable of tensors to gather.
      Tensor sizes in all dimensions other than :attr:`dim` have to match.
    dim (int, optional): a dimension along which the tensors will be
      concatenated. Default: ``0``.
    destination (torch.device, str, or int, optional): the output device.
      Can be CPU or CUDA. Default: the current CUDA device.
    out (Tensor, optional, keyword-only): the tensor to store gather result.
      Its sizes must match those of :attr:`tensors`, except for :attr:`dim`,
      where the size must equal ``sum(tensor.size(dim) for tensor in tensors)``.
      Can be on CPU or CUDA.

.. note::
    :attr:`destination` must not be specified when :attr:`out` is specified.

Returns:
    - If :attr:`destination` is specified,
        a tensor located on :attr:`destination` device, that is a result of
        concatenating :attr:`tensors` along :attr:`dim`.
    - If :attr:`out` is specified,
        the :attr:`out` tensor, now containing results of concatenating
        :attr:`tensors` along :attr:`dim`.
zjUsing -1 to represent CPU tensor is deprecated. Please use a device object or string instead, e.g., "cpu".)Ú
stacklevelT)Ú	allow_cpur   zQ'destination' must not be specified when 'out' is specified, but got destination=rN   )
r   ÚwarningsÚwarnÚFutureWarningr   r   r   Ú_gatherr   Ú_gather_out)r   rd   r=   r
   r   s   &&&$ r   Úgatherro   Þ   s¦   € ñ4 ,3Ó3©7 aŒ˜qÖ!©7€GÐ3Ø
‚{Ø˜"ÔÜ�MŠMð@äØõ	ô (¨¸tÈdÔSˆÜ�x‰x×Ñ ¨kÓ:Ð:àÒ"ÜØcÐdoÐcpÐqóð ô �x‰x×#Ñ# G°#Ó6Ð6ùò! 4s   …B#r!   )é    )Nrp   )NNr   N)r   N)rj   r   Útorch._utilsr   r   r   r   r   r   Ú
torch.cudar	   r   r   rH   r_   rf   ro   © ó    r   Ú<module>ru      sU   ðã ã ÷÷ õ ñ4¨4õ 4ôDHô(3ôl,9ñ^0GÐPTõ 0Gñf*7°D÷ *7rt   