
    Vh                         d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZ  ej        e          Zdadad Zdd
Zd Zd ZddZde	ddZdS )z Distributed training utilities.
    N)DistributedSampler)
DataLoaderSubset)DistributedDataParallel)distrib   c                      t           j                                        st          j                     t          j                    at          j                    ad S )N)torchdistributedis_initializeddora_distribinitrank
world_size     T/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/distrib.pyr   r      sH    ++-- D(**JJJr         ?c                 `   t          | t                    rXt          t          |                                            \  }}t          ||          }t          t          ||                    S t          dk    r| S t          j        t          |           dgz   dt          j
                  }||z  }t          j                            |t          j        j        j                   |d d         |d         z                                                                                                  S )Nr   cudadevicedtype)op)
isinstancedictzipsorteditemsaverager   r
   tensorlistfloat32r   
all_reduceReduceOpSUMcpunumpytolist)metricscountkeysvaluesr"   s        r   r!   r!       s    '4   'F7==??334f''Cf%%&&&Q\$w--1#-fEMRRRF
eOF	  E,=,F,J KKK3B3K&*$))++1133::<<<r   c                     t           dk    r| S t          | t          j                                        gt          j                                                  S )Nr   )
device_idsoutput_device)r   r   r
   r   current_device)models    r   wrapr4   -   sO    Q&
11334*3355	7 7 7 	7r   c                  \    t           dk    r t          j                                         d S d S )Nr   )r   r
   r   barrierr   r   r   r6   r6   8   s-    A~~!!##### ~r   c                 |   t           dk    r| S t          j        ddt          j                  }t          |k    r&t          j        |           }t          |          |d<   t          j        	                    ||           t          |k    rWt          j
        t          j        |t          j                                                                                            }n9t          j        |d                                         dt          j                  }t          j        	                    ||           t          |k    rJt          j        |                                                                                                          } t*                              dt          |                      | S )Nr   r   r   r   )src)r   zShared object of size )r   r
   emptylongr   pickledumpslenr   	broadcast
from_numpynp
frombufferuint8copyr   itemloadsr(   r)   tobytesloggerdebug)objr8   sizedumpbuffers        r   sharerM   =   sQ   Q
;quz:::Ds{{|C  d))Q	#... s{{!"-BH"E"E"E"J"J"L"LMMRRTTT!W\\^^F%+NNN	C000 s{{l6::<<--//7799::
LL7#f++77888Jr   F)shuffleklassc                   t           dk    r || g|R d|i|S |rt          |           } || g|R i |d|iS t          | t          t	          t
          t          |           t                                         }  || g|R d|i|S )z
    Create a dataloader properly in case of distributed training.
    If a gradient is going to be computed you must set `shuffle=True`.
    r   rN   sampler)r   r   r   r#   ranger   r=   )datasetrN   rO   argskwargsrQ   s         r   loaderrV   T   s    
 QuW?t???W???? @$W--uW?t???v??w???? $uT3w<<'L'L"M"MNNuW?t???W????r   )r   )Nr   )__doc__loggingr;   r)   r@   r
   torch.utils.data.distributedr   torch.utils.datar   r   torch.nn.parallel.distributedr   dorar   r   	getLogger__name__rG   r   r   r   r!   r4   r6   rM   rV   r   r   r   <module>r_      s&           ; ; ; ; ; ; / / / / / / / / A A A A A A ( ( ( ( ( (		8	$	$
+ + +
= 
= 
= 
=7 7 7$ $ $
   . $)
 @ @ @ @ @ @ @r   