
    Yhl                        d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlZd dlmZ d dlmZ d dlmZ erd d	lmZ d d
lmZ d dlmZ dgZdeded         fdZdeded         fdZd!dZd"dZd#dedee e                  de!fdZ"	 d$deej#                 dee
e$ej%        f                  de!de&e&ej#                          fdZ' e	de          Z(	 d$de(dee
e$ej%        f                  de!de&e(         fd Z)dS )%    )OrderedDict)IteratorSequence)castOptionalTYPE_CHECKINGTypeVarUnion)TypeIsN_get_device_index)Module)comm)ScriptMethod)ScriptModule)EnabledProxy	replicatemodulereturnr   c                 >    dd l }t          | |j        j                  S Nr   )	torch.jit
isinstancejitr   r   torchs     m/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/nn/parallel/replicate.py_is_script_moduler      s#    fei4555    r   c                 >    dd l }t          | |j        j                  S r   )r   r   _Cr   r   s     r   _is_script_methodr"      s#    feh3444r   c                  <    dd l } | j                                        S r   )r   r   r   r   s    r   _init_script_moduler%   !   s"    9!!###r   r   c                  ,    dd l } | j        j        j        S r   )torch.jit._stater   _state_enabledr$   s    r   _is_jit_enabledr*   '   s    9$$r   memoc                    dt           dt          t                    fd}t                      sdS |t                      }|                    |            t          |           r@|                     ||                      t          d  ||           D                       S |                                 D ]}||v rt          ||          s dS dS )Nr   r   c                 L    |                                  }t          |           |S N)modulesnext)r   gens     r   descendant_modulesz0_replicatable_module.<locals>.descendant_modules6   s!    nnS			
r   Tc              3   4   K   | ]}t          |          V  d S r.   )r   ).0
descendants     r   	<genexpr>z'_replicatable_module.<locals>.<genexpr>D   s<       
 
.8j))
 
 
 
 
 
r   F)
r   r   r*   setaddr   updateallchildren_replicatable_module)r   r+   r2   childs       r   r<   r<   4   s   6 hv.>    
  t|uu 	HHV   
&&v../// 
 
<N<Nv<V<V
 
 
 
 
 	
 ""   D==#E400 	55	 4r   Ftensorsdevicesdetachc                      ddl m} |rt          j         |          S t	                     dk    rF |j        |g R   fdt          dt	                    t	                               D             S g S )Nr   )	Broadcastc                 D    g | ]}||t                    z            S  )len)r4   itensor_copiesr>   s     r   
<listcomp>z0_broadcast_coalesced_reshape.<locals>.<listcomp>`   s>        a!c'll"223  r   )torch.nn.parallel._functionsrB   r   broadcast_coalescedrE   applyrange)r>   r?   r@   rB   rG   s   `   @r   _broadcast_coalesced_reshaperM   S   s    
 766666 '999 w<<!+IOG>g>>>M    q#m"4"4c'llCC   
 Ir   T)boundnetworkc           	         t          |           st          d          |sg S d |D             }t          |          }t          |                                           }d t          |          D             }t          |||          }t          |                                           }g }g }	|D ]6}
|
j        r|s|	                    |
           !|		                    |
           7d t          |          D             }d t          |	          D             }t          |||          }t          |	|d          }t          | 
                                          }d |D             i }t          |          D ]^\  }}|||<   t          |          D ]D}|                                }t                      |_        |         	                    |           E_t          |          D ]\  }}|j                                        D ]w\  }}|+t          |          D ]}|         |         }d |j        |<   2||         }t          |          D ]-}|         |         }t#          |||         |                    .x|j                                        D ]\  }}|+t          |          D ]}|         |         }d |j        |<   2||         }t          |          D ]9}|         |         }||         |         }t#          |||           ||j        |<   :|j                                        D ]\  }}
|
+t          |          D ]}|         |         }d |j        |<   2|
j        r|s|}||
         }n
|}||
         }t          |          D ]-}|         |         }t#          ||||         |                    .݈fd	t          |          D             S )
NzKCannot replicate network where python modules are childrens of ScriptModulec                 .    g | ]}t          |d           S )Tr   )r4   xs     r   rH   zreplicate.<locals>.<listcomp>y   s#    ;;;a D));;;r   c                     i | ]\  }}||	S rD   rD   )r4   idxparams      r   
<dictcomp>zreplicate.<locals>.<dictcomp>}   s    DDDJCUCDDDr   c                     i | ]\  }}||	S rD   rD   r4   rU   bufs      r   rW   zreplicate.<locals>.<dictcomp>   s    HHHhc3cHHHr   c                     i | ]\  }}||	S rD   rD   rY   s      r   rW   zreplicate.<locals>.<dictcomp>   s    PPP(#sS#PPPr   )r@   Tc                     g | ]}g S rD   rD   )r4   _s     r   rH   zreplicate.<locals>.<listcomp>   s    (=(=(=(=(=(=r   c                 R    g | ]#}t          t          |         d                    $S )r   )r   rN   )r4   jmodule_copiess     r   rH   zreplicate.<locals>.<listcomp>   s-    FFFQDM!$Q'((FFFr   )r<   RuntimeErrorrE   list
parameters	enumeraterM   buffersrequires_gradappendr/   rL   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffers)rP   r?   r@   num_replicasparamsparam_indicesparam_copiesre   
buffers_rgbuffers_not_rgrZ   buffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr/   module_indicesrF   r   r_   replicakeyr=   
module_idxrV   	param_idx
param_copybuffer_copies
buffer_idxr`   s                                @r   r   r   k   s   
  (( 
(
 
 	

  	;;7;;;Gw<<L'$$&&''FDD)F2C2CDDDM/HHL7??$$%%G%'J)+N ' ' 	'V 	'c""""!!#&&&&HH)J2G2GHHHPPi6O6OPPP3JPVWWW7   7??$$%%G(=(=W(=(=(=M(*Nw'' - -	6!"v|$$ 		- 		-A99;;G *5G&!##G,,,,		- w'' (H (H	6 ///11 		H 		HJC}|,, 1 1A+A.q1G,0G$S))1 ,E2
|,, H HA+A.q1GGS-*::*FGGGGH !,2244 	A 	AJC}|,, 4 4A+A.q1G/3G',,4 *%0	|,, A AA+A.q1G!-a!;J GS*5556@G.s33A --// 	H 	HHC{|,, 1 1A+A.q1G,0G$S))1 $ <V <$4M!23!7JJ$8M!6s!;J|,, H HA+A.q1GGS-*::*FGGGGH	H  GFFF%2E2EFFFFr   )r   r   )r   r   r.   )F)*collectionsr   collections.abcr   r   typingr   r   r   r	   r
   typing_extensionsr   r   torch._utilsr   torch.nn.modulesr   torch.nn.parallelr   torch._Cr   r   r   r'   r   __all__r   objectr"   r%   r*   r7   boolr<   Tensorintdevicerb   rM   rN   r   rD   r   r   <module>r      s   # # # # # # . . . . . . . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ $ $ $ $  * * * * * * # # # # # # " " " " " "  .%%%%%%&&&&&&------ -6f 6)? 6 6 6 65f 5)? 5 5 5 5$ $ $ $% % % %  xF/D PT    D  el#eC-./  
$u|
	   * GCv aG aGaGeC-./aG aG 
!W	aG aG aG aG aG aGr   