
    JThK                     J   S SK r S SKJr  S SKJrJrJrJr  S SKrS SK	J
r
  S SKJr  S SKJr  SS/rS	\\R                   \\   \\S
4   \\\4   4   S\\R                      4S jr  SS\\   S\\   S\\\\\4         S\\\\\\R.                  4            S\\   4
S jjrg)    N)Sequence)AnycastOptionalUnion)ExceptionWrapper)_get_device_index)Module	get_a_varparallel_applyobj.returnc                    [        U [        R                  5      (       a  U $ [        U [        [        45      (       a:  [        [        U 5       H&  n[        U[        R                  5      (       d  M$  Us  $    [        U [        5      (       aH  [        [        U R                  5       5       H&  n[        U[        R                  5      (       d  M$  Us  $    g )N)	
isinstancetorchTensorlisttuplemapr   dictitems)r   results     X/var/www/auris/envauris/lib/python3.13/site-packages/torch/nn/parallel/parallel_apply.pyr   r      s     #u||$$
#e}%%)S)F&%,,// * #t)SYY[1F&%,,// 2     modulesinputs
kwargs_tupdevicesc                   ^^^^ [        U 5      [        U5      :X  d   S[        U 5       S[        U5       35       eUb  [        U 5      [        U5      :X  d   eO*[        [        [        [        4   0 5      4[        U 5      -  nUb  [        U 5      [        U5      :X  d   eOS/[        U 5      -  nU Vs/ s H  n[        US5      PM     nnU Vs/ s H"  n[        R                  R                  U5      PM$     nn[        R                  " 5       m0 m[        R                  " 5       [        R                  " 5       smm  SS[        S[        S[        S[        [        [        4   S	[        [         [        [        R"                  4      S
[        [        R                  R$                     SS4UUUU4S jjjn[        U 5      S:  a  ['        [)        XX#U5      5       VVV	V
VVs/ s H"  u  nu  ppn[        R*                  " XgXXU4S9PM$     nnn
n	nnnU H  nUR-                  5         M     U H  nUR/                  5         M     OU" SU S   US   US   US   US   5        / n[1        [        U5      5       H>  nTU   n[3        U[4        5      (       a  UR7                  5         UR9                  U5        M@     U$ s  snf s  snf s  snnn
n	nnf )a  Apply each `module` in :attr:`modules` in parallel on each of :attr:`devices`.

Args:
    modules (Module): modules to be parallelized
    inputs (tensor): inputs to the modules
    devices (list of int or torch.device): CUDA devices

:attr:`modules`, :attr:`inputs`, :attr:`kwargs_tup` (if given), and
:attr:`devices` (if given) should all have same length. Moreover, each
element of :attr:`inputs` can either be a single object as the only argument
to a module, or a collection of positional arguments.
zThe number of modules z& is not equal to the number of inputs NTimoduleinputkwargsdevicestreamr   c                 t  > [         R                  " T	5        Uc:  [        U5      nUc  T
   [        SU  S3S9TU '   S S S 5        g UR	                  5       nUc  [         R
                  R                  U5      n [         R
                  R                  U5         [         R
                  R                  U5         [         R                  R                  STS9   [        U[        [        45      (       d  U4nU" U0 UD6nS S S 5        S S S 5        S S S 5        T
   WTU '   S S S 5        g ! , (       d  f       g = f! , (       d  f       N@= f! , (       d  f       NI= f! , (       d  f       NR= f! , (       d  f       g = f! [         a2    T
   [        SU  SU 3S9TU '   S S S 5         g ! , (       d  f        g = ff = f)Nzin replica zQ, no device was provided and no tensor input was found; device cannot be resolved)wherecuda)enabledz on device )r   set_grad_enabledr   r   
get_devicer(   current_streamr$   r%   ampautocastr   r   r   	Exception)r    r!   r"   r#   r$   r%   toutputautocast_enabledgrad_enabledlockresultss           r   _workerparallel_apply.<locals>._workerE   sp    	|,>% Ay!1 +A3 /4 4"GAJ 
 \\^F>ZZ..v6F	""6*EJJ,=,=-yy!!&2B!C!%$77"HE1&1	 D-* #
 # T
  DC- -**  	-'s+fX>
 	s   D&8E;  E7E'D7=EE
E; E*E; &
D47
EE
E	E
E'#E; *
E84E; 8E; ;F7F$F7$
F3	.F73F7   )targetargsr   NN)lenr   r   strr   r	   r   r(   r,   	threadingLockis_grad_enabledis_autocast_enabledintr
   r   r   r$   Stream	enumeratezipThreadstartjoinranger   r   reraiseappend)r   r   r   r   xstreamsr6   r    r!   r"   r#   r$   r%   threadsthreadoutputsr1   r2   r3   r4   r5   s                    @@@@r   r   r      s   $ w<3  b	G~-STWX^T_S`ab  7|s:...4S>2.03w<?
7|s7|+++&3w<'3:;7a D)7G;5<=Wuzz((+WG=>>DG!!# #L" 6:.2### # S#X	#
 sELL012# **+# 
# #J 7|a
 ?HGZ'B?	
 
?::F66 %O?	 	 
 FLLN FKKM  	71:vay*Q-WQZPG3v;f.//NNv	  
 NK <=\
s   5J>)K%)Kr;   )r>   collections.abcr   typingr   r   r   r   r   torch._utilsr   torch.cuda._utilsr	   torch.nn.modulesr
   __all__r   r   r   r   r   r=   rB   r$   r    r   r   <module>rX      s     $ - -  ) / # (
)	u||T#Yc3hc3hG	Hell( 6:FJ	bfbSMb $sCx.12b hxc5<<.?(@ABC	b
 
#Ybr   