Ë
    #täi·  ã                   óR  — d dl Z d dlZd dlmZ d dlZg d¢Zd Zd„ Zd„ Z	d„ Z
d„ Zdej                  eej                     z  d	dfd
„Zdeddfd„Zdd eddfddœdeej                     dej                  eej                     z  dz  dededeej                   j"                     dz  deej                     dz  d	dfd„Z	 ddeej                     ded	dfd„Z	 	 ddeej                     deej                     d	dfd„Zeddfdeej                     deej                     ded	dfd„Zy)é    N)ÚSequence)Ú
all_reduceÚreduceÚ	broadcastÚ
all_gatherÚreduce_scatterc                 ó4  — t        t        j                  d«      st        j                  dd¬«       yt        «       }| D ]W  }|j                  r y|j                  «       s y|j                  s y|j                  «       }||v r y|j                  |«       ŒY y)NÚ_nccl_all_reducez)PyTorch is not compiled with NCCL supporté   ©Ú
stacklevelFT)ÚhasattrÚtorchÚ_CÚwarningsÚwarnÚsetÚ	is_sparseÚis_contiguousÚis_cudaÚ
get_deviceÚadd)ÚtensorsÚdevicesÚtensorÚdevices       ú^/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/torch/cuda/nccl.pyÚis_availabler      sƒ   € Ü”5—8‘8Ð/Ô0Ü�‰ÐAÈaÕPØä‹e€GÛˆØ×ÒÙØ×#Ñ#Ô%ÙØ�~Š~ÙØ×"Ñ"Ó$ˆØ�WÑÙØ�‰�FÕð ð ó    c                  óÜ   — t         j                  j                  «       } | dz	  }| dz	  dz  }| dz  }t         j                  j                  «       j	                  d«      }|dk(  r|||fS ||||fS )a  
    Returns the version of the NCCL.


    This function returns a tuple containing the major, minor, and patch version numbers of the NCCL.
    The suffix is also included in the tuple if a version suffix exists.
    Returns:
        tuple: The version information of the NCCL.
    é    é   iÿÿ  zutf-8Ú )r   r   Ú_nccl_versionÚ_nccl_version_suffixÚdecode)ÚverÚmajorÚminorÚpatchÚsuffixs        r   Úversionr,   #   sv   € ô �(‰(×
 Ñ
 Ó
"€CØ�2‰I€EØ�B‰Y˜%Ñ€EØ�%‰K€EÜ�X‰X×*Ñ*Ó,×3Ñ3°GÓ<€FØ�‚|Ø�u˜eÐ$Ð$à�u˜e VÐ,Ð,r   c                  ó>   — t         j                  j                  «       S ©N)r   r   Ú_nccl_unique_id© r   r   Ú	unique_idr1   8   s   € Ü�8‰8×#Ñ#Ó%Ð%r   c                 óD   — t         j                  j                  | ||«      S r.   )r   r   Ú_nccl_init_rank)Ú	num_ranksÚuidÚranks      r   Ú	init_rankr7   <   s   € Ü�8‰8×#Ñ# I¨s°DÓ9Ð9r   ÚinputsÚreturnc                 ó–   — t        | t        j                  j                  «      rt        | t        j
                  «      rt        d«      ‚y )Nz(Inputs should be a collection of tensors)Ú
isinstanceÚcollectionsÚabcÚ	Containerr   ÚTensorÚ	TypeError)r8   s    r   Ú_check_sequence_typerA   @   s9   € Ü�fœkŸo™o×7Ñ7Ô8¼JØ”—‘ô=ô ÐBÓCÐCð=r   c                 ó~   — t        | «       |€| }t        |«       t        j                  j                  | ||||«       y r.   )rA   r   r   r
   ©r8   ÚoutputsÚopÚstreamsÚcommss        r   r   r   G   s6   € Ü˜Ô Ø€ØˆÜ˜Ô!Ü	‡H�H×Ñ˜f g¨r°7¸EÕBr   )rD   ÚoutputÚrootrE   rF   rD   c                ó–  — t        | «       |�/|�t        d«      ‚t        j                  dt        d¬«       ||   }nit        |t        j                  «      sFt        |t        j                  j                  «      r"t        j                  dt        d¬«       ||   }n	|€| |   n|}t        j                  j                  | |||||«       y )Nzä'output' and 'outputs' can not be both specified. 'outputs' is deprecated in favor of 'output', taking in a single output tensor. The signature of reduce is: reduce(inputs, output=None, root=0, op=SUM, streams=None, comms=None).z…`nccl.reduce` with an output tensor list is deprecated. Please specify a single output tensor with argument 'output' instead instead.r   r   z\nccl.reduce with an output tensor list is deprecated. Please specify a single output tensor.)rA   Ú
ValueErrorr   r   ÚFutureWarningr;   r   r?   r<   r=   r   r   Ú_nccl_reduce)r8   rH   rI   rE   rF   rG   rD   Ú_outputs           r   r   r   Q   sÃ   € ô ˜Ô àÐØÐÜðYóð ô �M‰Mð`äØõ	ð ˜d‘m‰GÜ˜¤§¡Ô-´*Ø”—‘×(Ñ(ô3ô 	�‰ð5äØõ		
ð ˜‘,‰à"( .�&˜’,°fˆÜ	‡H�H×Ñ˜& '¨4°°W¸eÕDr   c                 ó^   — t        | «       t        j                  j                  | |||«       y r.   )rA   r   r   Ú_nccl_broadcast)r8   rI   rF   rG   s       r   r   r   |   s$   € ô ˜Ô Ü	‡H�H×Ñ˜V T¨7°EÕ:r   c                 ót   — t        | «       t        |«       t        j                  j                  | |||«       y r.   )rA   r   r   Ú_nccl_all_gather)r8   rD   rF   rG   s       r   r   r   ƒ   s,   € ô ˜Ô Ü˜Ô!Ü	‡H�H×Ñ˜f g¨w¸Õ>r   c                 óv   — t        | «       t        |«       t        j                  j                  | ||||«       y r.   )rA   r   r   Ú_nccl_reduce_scatterrC   s        r   r   r   Ž   s.   € ô ˜Ô Ü˜Ô!Ü	‡H�H×!Ñ! &¨'°2°wÀÕFr   )r   NN)NN)r<   r   Úcollections.abcr   Ú
torch.cudar   Ú__all__ÚSUMr   r,   r1   r7   r?   rA   r   ÚintÚcudaÚStreamr   r   r   r   r0   r   r   Ú<module>r\      sË  ðã Û Ý $ã ò P€à€òò*-ò*&ò:ðD §¡°¸¿¹Ñ0FÑ!Fð DÈ4ó Dð  $¨°TÀó Cð <@ØØØ26Ø
ð(Eð .2ò(EØ�U—\‘\Ñ"ð(Eà�L‰L˜8 E§L¡LÑ1Ñ1°DÑ8ð(Eð ð(Eð 	ð	(Eð
 �e—j‘j×'Ñ'Ñ(¨4Ñ/ð(Eð �e—l‘lÑ# dÑ*ð(Eð 
ó(EðX HLñ;Ø�U—\‘\Ñ"ð;Ø*-ð;à	ó;ð Ø
ñ	?Ø�U—\‘\Ñ"ð?à�e—l‘lÑ#ð?ð
 
ó?ð ØØ
ñ	GØ�U—\‘\Ñ"ð	Gà�e—l‘lÑ#ð	Gð 	ð	Gð 
ô	Gr   